IP.Chat-Specific Theme

Adds the ability to use a specific theme for IP.Chat separate from the forum theme. The theme can be changed while in IP.Chat via a separate menu next to the default theme changer.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name	IP.Chat-Specific Theme
// @namespace	Makaze
// @include	*
// @version	1.1.3
// @description Adds the ability to use a specific theme for IP.Chat separate from the forum theme. The theme can be changed while in IP.Chat via a separate menu next to the default theme changer.
// ==/UserScript==

function updateSkin(skinID) {
	var logo,
	i = 0;

	for (i = 0; i < document.getElementsByTagName('link').length; i++) {
		if (document.getElementsByTagName('link')[i].getAttribute('rel') === 'stylesheet' && document.getElementsByTagName('link')[i].href.match(/css_\d+/gi)) {
			document.getElementsByTagName('link')[i].href = document.getElementsByTagName('link')[i].href.replace(/css_\d+/gi, 'css_' + skinID);
		}
	}
	switch (skinID) {
		case 29:
			logo = 'http://serenesforest.net/forums/public/style_images/29_sflogoblue.png';
		break;
		case 27:
			logo = 'http://serenesforest.net/forums/public/style_images/27_serenes_forest_forums_banner.jpg';
		break;
		case 28:
			logo = 'http://serenesforest.net/forums/public/style_images/28_sflogopurp.png';
	}
	document.getElementById('logo').getElementsByTagName('img')[0].src = logo;
}

function insertAfter(referenceNode, newNode) {
	referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

function fade(elem, type, speed) {
	var defaultOpacity,
	currentDisplay = elem.style.display || window.getComputedStyle(elem).display;

	elem.style.opacity = '';
	defaultOpacity = window.getComputedStyle(elem).opacity;
	elem.style.opacity = 0;

	// Default values:

	switch (arguments.length) {
		case 1:
			type = 'toggle';
		case 2:
			speed = 300;
		break;
	}

	switch (type) {
		case 'in':
			elem.style.display = '';
			setTimeout(function() {
				elem.style.transition = 'all ' + speed + 'ms ease-in-out';
				elem.style.opacity = defaultOpacity;
				setTimeout(function() {
					elem.style.transition = '';
					elem.style.opacity = '';
				}, speed + 10);
			}, 1);
		break;
		case 'out':
			elem.style.transition = '';
			elem.style.opacity = defaultOpacity;
			elem.style.transition = 'all ' + speed + 'ms ease-in-out';
			elem.style.opacity = 0;
			setTimeout(function() {
				elem.style.display = 'none';
				elem.style.transition = '';
				elem.style.opacity = '';
			}, speed + 10);
		break;
		case 'toggle':
		default:
			if (currentDisplay === 'none') {
				elem.style.display = '';
				setTimeout(function() {
					elem.style.transition = 'all ' + speed + 'ms ease-in-out';
					elem.style.opacity = defaultOpacity;
					setTimeout(function() {
						elem.style.transition = '';
						elem.style.opacity = '';
					}, speed + 10);
				}, 1);
			} else {
				elem.style.transition = '';
				elem.style.opacity = defaultOpacity;
				elem.style.transition = 'all ' + speed + 'ms ease-in-out';
				elem.style.opacity = 0;
				setTimeout(function() {
					elem.style.display = 'none';
					elem.style.transition = '';
					elem.style.opacity = '';
				}, speed + 10);
			}
	}
}

function clonedThemeChanger() {
	var buttonToClone = document.getElementById('new_skin'),
	menuToClone = document.getElementById('new_skin_menucontent'),
	clonedButton = buttonToClone.clone(true),
	clonedMenu = menuToClone.clone(true),
	container = document.createElement('li'),
	opts,
	i = 0;

	clonedButton.id = 'new_ipc_skin';
	clonedButton.innerHTML = 'Change IP.Chat Theme';
	clonedButton.href = 'javascript:void(0)';

	clonedMenu.id = 'new_ipc_skin_menucontent';

	container.id = 'ipc_themechanger';
	insertAfter(buttonToClone.parentNode, container);

	document.getElementById('ipc_themechanger').appendChild(clonedButton);
	document.getElementById('ipc_themechanger').appendChild(clonedMenu);
	document.getElementById('rss_feed').onload = function() {
		buttonToClone.click();
		setTimeout(function() {
			buttonToClone.click();
		}, 300);
	};

	document.getElementById('new_ipc_skin').onclick = function() {
		var menu = document.getElementById('new_ipc_skin_menucontent'),
		widthOff = document.getElementById('new_skin').offsetWidth,
		top = document.getElementById('new_skin_menucontent').style.top.split('px')[0],
		left = document.getElementById('new_skin_menucontent').style.left.split('px')[0];
		if (menu.style.display === 'none') {
			this.className = 'menu_active';
			fade(menu, 'in');
			menu.style.top = parseFloat(top) + 'px';
			menu.style.left = parseFloat(left) + widthOff + 6 + 'px';
		} else {
			this.className = '';
			fade(menu, 'out');
		}
	};

	var ipcThemeChangerHandler = function() {
		var nameToLoad = this.textContent,
		idToLoad = parseFloat(this.getAttribute('data-skinid')),
		menu = this.parentNode.parentNode,
		newOpt,
		oldOpts;

		menu.getElementsByClassName('selected')[0].className = '';
		this.parentNode.className = 'selected';

		updateSkin(idToLoad);

		if (localStorage.getItem('MakazeScriptOptions')) {
			oldOpts = JSON.parse(localStorage.getItem('MakazeScriptOptions'));
			oldOpts.ipc_theme_name = nameToLoad;
			oldOpts.ipc_theme_id = idToLoad;
			localStorage.setItem('MakazeScriptOptions', JSON.stringify(oldOpts));
		} else {
			newOpt = {'ipc_theme_name': nameToLoad, 'ipc_theme_id': idToLoad};
			localStorage.setItem('MakazeScriptOptions', JSON.stringify(newOpt));
		}

		menu.style.opacity = 0;
		setTimeout(function() {
			menu.style.display = 'none';
		}, 350);

		document.getElementById('new_ipc_skin').className = '';
	};

	for (i = 0; i < document.getElementById('new_ipc_skin_menucontent').getElementsByTagName('a').length; i++) {
		var menu = document.getElementById('new_ipc_skin_menucontent');
		document.getElementById('new_ipc_skin_menucontent').getElementsByTagName('a')[i].href = 'javascript:void(0)';
		if (localStorage.getItem('MakazeScriptOptions') && JSON.parse(localStorage.getItem('MakazeScriptOptions')).hasOwnProperty('ipc_theme_id')) {
			opts = JSON.parse(localStorage.getItem('MakazeScriptOptions'));
			if (opts.ipc_theme_id === document.getElementById('new_ipc_skin_menucontent').getElementsByTagName('a')[i].getAttribute('data-skinid')) {
				menu.getElementsByClassName('selected')[0].className = '';
				document.getElementById('new_ipc_skin_menucontent').getElementsByTagName('a')[i].parentNode.className = 'selected';
			}
		}
		document.getElementById('new_ipc_skin_menucontent').getElementsByTagName('a')[i].onclick = ipcThemeChangerHandler;
	}
}

if (document.body.id == 'ipboard_body' && document.getElementById('chat-form') != null) {
	var opts,
	detectedTheme,
	forumTheme = document.getElementById('new_skin_menucontent').getElementsByClassName('selected')[0].getAttribute('data-skinid'),
	clonedScript;

	if (localStorage.getItem('MakazeScriptOptions') && JSON.parse(localStorage.getItem('MakazeScriptOptions')).hasOwnProperty('ipc_theme_id')) {
		opts = JSON.parse(localStorage.getItem('MakazeScriptOptions'));
		detectedTheme = opts.ipc_theme_id;
		if (detectedTheme !== forumTheme) {
			updateSkin(detectedTheme);
		}
	}

	clonedScript = document.createElement('script');
	clonedScript.setAttribute('type', 'text/javascript');
	clonedScript.innerHTML = updateSkin.toString() + insertAfter.toString() + fade.toString() + clonedThemeChanger.toString() + 'clonedThemeChanger();';
	document.body.appendChild(clonedScript);
}