Vkontakte - Logo

Заменяет логотип VK. Влияет на [BadComedian], The Nafig, Hell Yeah

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        Vkontakte - Logo
// @namespace   scriptomatika
// @description Заменяет логотип VK. Влияет на [BadComedian], The Nafig, Hell Yeah
// @include     https://vk.com/*
// @include     http://*ozvs4y3pnu.cmle.ru/*
// @include     http://*ozvs4y3pnu.nblz.ru/*
// @noframes
// @icon        http://static.scriptomatika.ru/stylish/134972/vk-icon.png
// @author      mouse-karaganda
// @version     1.39.6
// @grant       none
// ==/UserScript==

var paramWindow = (typeof unsafeWindow == 'object') ? unsafeWindow : window;

(function(unsafeWindow) {
	var console = unsafeWindow.console;

	var page = {
		/**
		 * Определить, принадлежит ли открытая страница человеку
		 */
		isUser: function(id, alias) {
			var result = false;
			result = result || new RegExp('\\/' + alias + '\\b').test(location.href);
			result = result || new RegExp('\\/\\w+' + id).test(location.href);
			result = result || new RegExp('=' + id + '\\b').test(location.href);
			return result;
		},
		/**
		 * Определить, принадлежит ли открытая страница сообществу
		 */
		isCommunity: function(id, alias) {
			var communityId = '-?' + String(id);
			return this.isUser(communityId, alias);
		},
		/**
		 * Сообщество [BadComedian]
		 */
		isBadComedian: function() {
			return this.isCommunity(25557243, 'badcomedian');
		},
		/**
		 * Евгений Баженов
		 */
		isEvgenComedian: function() {
			return this.isUser(3664185, 'evgencomedian');
		},
		/**
		 * Сообщество TheNafig или Игорь Горбань
		 */
		isNafig: function() {
			var result = false;
			result = result || this.isCommunity(70470762, 'nafignefig');
			result = result || this.isUser(3312714, 'thenafig');
			return result;
		},
		/**
		 * Сообщество Hell Yeah! или Сергей Беляков
		 */
		isHellYeah: function() {
			var result = false;
			result = result || this.isCommunity(29927978, 'hell_yeah_covers');
			result = result || this.isCommunity(35559317, 'hellyeahcovers');
			result = result || this.isCommunity(69934966, 'hellyeahplay');
			result = result || this.isUser(142244404, 'hell_yeah_xd');
			return result;
		}
	};

	var doc = {
		/**
		 * Взять элемент по CSS-селектору
		 */
		get: function(selector) {
			return document.querySelector(selector);
		},
		/**
		 * Взять начальную часть URL открытой страницы,
		 * включая протокол и доменное имя
		 */
		getDomain: function() {
			return location.href.match(/^https?:\/\/.+?\//);
		},
		/**
		 * Отрисовать тег style
		 */
		renderStyle: function() {
			var content = Array.prototype.join.call(arguments, '\n');
		
			var style = document.createElement('style');
			style.setAttribute('type', 'text/css');
			style.innerHTML = content;
			document.body.appendChild(style);
		}
	};

	var logo = {
		/**
		 * CSS-селектор для иконки и логотипа
		 */
		favicon: ('link[rel="shortcut icon"]'),
		topHome: ('.top_home_link .top_home_logo'),
		/**
		 * Стандартный логотип VK
		 */
		defaultIcon: ('images/icons/favicons/fav_logo.ico'),
		/**
		 * Логотип на замену стандартному
		 */
		getSource: function(user, ext) {
			if (typeof ext !== 'string') {
				ext = 'png';
			}
			return ('http://static.scriptomatika.ru/stylish/134972/' + user + '.' + ext);
		},
		/**
		 * CSS-класс по имени пользователя
		 */
		getClass: function(user) {
			var source = (' { ' + this.getRule(user) + ' }');
			return ('body[comedian="' + user + '"] ' + this.topHome + source);
		},
		getRule: function(user, ext) {
			return ('background-image: url(' + this.getSource(user, ext) + ');');
		},
		/**
		 * Установить свой логотип и иконку
		 */
		setIcon: function(user) {
			document.body.setAttribute('comedian', user);

			var favicon = doc.get(this.favicon);
			// Проверим, отображается ли стандартная иконка
			var isDefault = true;
			if (favicon.href.indexOf(doc.getDomain()) === 0) {
				isDefault = /\/fav_logo\.ico/.test(favicon.href);
			}
			if (isDefault) {
				favicon.href = this.getSource(user);
			}
		},
		/**
		 * Убрать свой логотип и иконку и вернуть стандартные
		 */
		deleteIcon: function() {
			document.body.removeAttribute('comedian');

			var favicon = doc.get(this.favicon);
			favicon.href = (doc.getDomain() + this.defaultIcon);
		}
	};

	var background = {
		hellyeah: logo.getRule('hellyeah_bg', 'jpg')
	};

	doc.renderStyle(
		'body[comedian] ' + logo.topHome + ' { width: 28px;  height: 28px; margin-top: 7px; background-position: 0 0; background-size: 100%; border-radius: 15%; }',
		'body[comedian] #page_wrap { background-attachment: fixed; background-size: 100%; }',
		'body[comedian] #side_bar_inner { background-color: #EDEEF0; margin-left: -30px !important; padding-left: 15px; padding-right: 15px; margin-top: calc(42px + 15px) !important; }',
		'body[comedian] #side_bar_inner, body[comedian] #side_bar .left_settings { background-color: #EDEEF0; border-radius: 2px; box-shadow: 0 1px 0 0 #d7d8db, 0 0 0 1px #e3e4e8; }',
		'body[comedian="hellyeah"] #page_wrap { ' + background.hellyeah + ' }',
		logo.getClass('badcomedian'),
		logo.getClass('evgencomedian'),
		logo.getClass('nafig'),
		logo.getClass('hellyeah')
	);

	var title = {
		/**
		 * Добавить в заголовок окна название сообщества
		 * или имя владельца, если открыта стена в отдельной вкладке
		 */
		setWall: function() {
			if (!/\/wall-?\d+/.test(location.href))
				return;

			var owner = doc.get('#wall_rmenu .ui_ownblock_label');
			if (!!owner ) {
				document.title = (owner.innerText + ' | Стена');
			}
		},
		/**
		 * Добавить в заголовок окна имя собеседника,
		 * если открыт диалог
		 */
		setMessenger: function() {
			if (!/\/im\b.+\bsel=/.test(location.href))
				return;

			var peerName = doc.get('.im-page .im-page--peer._im_page_peer_name');
			if (!!peerName ) {
				document.title = (peerName.innerText + ' | Диалоги');
			}
		}
	};

	/**
	 * Определить, какая страница открыта, затем
	 * установить или удалить с неё свой логотип и иконку
	 */
	var changeLogo = function() {
		if (page.isBadComedian()) {
			logo.setIcon('badcomedian');
		} else if (page.isEvgenComedian()) {
			logo.setIcon('evgencomedian');
		} else if (page.isNafig()) {
			logo.setIcon('nafig');
		} else if (page.isHellYeah()) {
			logo.setIcon('hellyeah');
		} else {
			logo.deleteIcon();
		}
		title.setWall();
		title.setMessenger();
	};

	changeLogo();
	unsafeWindow.setInterval(changeLogo, 600);
})(paramWindow);