MediaWiki:Poty2007.js

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
var wsDomains = {
	'wikibooks.org': ['aa', 'af', 'ak', 'als', 'ang', 'ar', 'as', 'ast', 'ay', 'az', 'ba', 'be', 'bg', 'bi', 'bm', 'bn', 'bo', 'bs', 'ca', 'ch', 'co', 'cs', 'cv', 'cy', 'da', 'de', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fr', 'fy', 'ga', 'gl', 'gn', 'got', 'gu', 'he', 'hi', 'hr', 'hu', 'hy', 'ia', 'id', 'ie', 'is', 'it', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ks', 'ku', 'ky', 'la', 'lb', 'ln', 'lt', 'lv', 'mg', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'my', 'na', 'nah', 'nds', 'ne', 'nl', 'no', 'oc', 'pa', 'pl', 'ps', 'pt', 'qu', 'rm', 'ro', 'ru', 'sa', 'se', 'si', 'simple', 'sk', 'sl', 'sq', 'sr', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'tk', 'tl', 'tr', 'tt', 'ug', 'uk', 'ur', 'uz', 'vi', 'vo', 'wa', 'xh', 'yo', 'za', 'zh', 'zh-min-nan', 'zu'],
	'wikinews.org': ['ar', 'bg', 'bs', 'ca', 'de', 'en', 'es', 'fi', 'fr', 'he', 'it', 'ja', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sd', 'sr', 'sv', 'ta', 'th', 'uk', 'zh'],
	'wikimedia.org': ['commons', 'incubator', 'meta', 'species'],
	'wikipedia.org': ['aa', 'ab', 'af', 'ak', 'als', 'am', 'an', 'ang', 'ar', 'arc', 'as', 'ast', 'av', 'ay', 'az', 'ba', 'bar', 'bat-smg', 'bcl', 'be', 'be-x-old', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'bpy', 'br', 'bs', 'bug', 'bxr', 'ca', 'cbk-zam', 'cdo', 'ce', 'ceb', 'ch', 'cho', 'chr', 'chy', 'co', 'cr', 'cs', 'csb', 'cu', 'cv', 'cy', 'da', 'de', 'diq', 'dv', 'dz', 'ee', 'el', 'eml', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fiu-vro', 'fj', 'fo', 'fr', 'frp', 'fur', 'fy', 'ga', 'gd', 'gl', 'glk', 'gn', 'got', 'gu', 'gv', 'ha', 'haw', 'he', 'hi', 'ho', 'hr', 'hsb', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ilo', 'io', 'is', 'it', 'iu', 'ja', 'jbo', 'jv', 'ka', 'kab', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ksh', 'ku', 'kv', 'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lg', 'li', 'lij', 'lmo', 'ln', 'lo', 'lt', 'lv', 'map-bms', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'mus', 'my', 'mzn', 'na', 'nah', 'nap', 'nds', 'nds-nl', 'ne', 'new', 'ng', 'nl', 'nn', 'no', 'nov', 'nrm', 'nv', 'ny', 'oc', 'om', 'or', 'os', 'pa', 'pag', 'pam', 'pap', 'pdc', 'pi', 'pih', 'pl', 'pms', 'ps', 'pt', 'qu', 'rm', 'rmy', 'rn', 'ro', 'roa-rup', 'roa-tara', 'ru', 'rw', 'sa', 'sc', 'scn', 'sco', 'sd', 'se', 'sg', 'sh', 'si', 'simple', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'test', 'tet', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tpi', 'tr', 'ts', 'tt', 'tum', 'tw', 'ty', 'udm', 'ug', 'uk', 'ur', 'uz', 've', 'vec', 'vi', 'vls', 'vo', 'wa', 'war', 'wo', 'wuu', 'xal', 'xh', 'yi', 'yo', 'za', 'zea', 'zh', 'zh-classical', 'zh-min-nan', 'zh-yue', 'zu'],
	'wikiquote.org': ['af', 'als', 'am', 'ang', 'ar', 'ast', 'az', 'be', 'bg', 'bm', 'br', 'bs', 'ca', 'co', 'cr', 'cs', 'cy', 'da', 'de', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fr', 'ga', 'gl', 'gu', 'he', 'hi', 'hr', 'hu', 'hy', 'id', 'is', 'it', 'ja', 'ka', 'kk', 'kn', 'ko', 'kr', 'ks', 'ku', 'kw', 'ky', 'la', 'lb', 'li', 'lt', 'ml', 'mr', 'na', 'nds', 'nl', 'nn', 'no', 'pl', 'pt', 'qu', 'ro', 'ru', 'simple', 'sk', 'sl', 'sq', 'sr', 'su', 'sv', 'ta', 'te', 'th', 'tk', 'tr', 'tt', 'ug', 'uk', 'ur', 'uz', 'vi', 'vo', 'wo', 'za', 'zh', 'zh-min-nan'],
	'wikisource.org': ['ang', 'ar', 'az', 'bg', 'bs', 'ca', 'cs', 'cy', 'da', 'de', 'el', 'en', 'es', 'et', 'fa', 'fi', 'fo', 'fr', 'gl', 'he', 'hr', 'ht', 'hu', 'hy', 'id', 'is', 'it', 'ja', 'kn', 'ko', 'la', 'lt', 'mk', 'ml', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sr', 'sv', 'te', 'th', 'tr', 'uk', 'vi', 'yi', 'zh', 'zh-min-nan'],
	'wiktionary.org': ['aa', 'ab', 'af', 'ak', 'als', 'am', 'an', 'ang', 'ar', 'as', 'ast', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ch', 'chr', 'co', 'cr', 'cs', 'csb', 'cy', 'da', 'de', 'dv', 'dz', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'hr', 'hu', 'hy', 'ia', 'id', 'ie', 'ik', 'io', 'is', 'it', 'iu', 'ja', 'jbo', 'jv', 'ka', 'kk', 'kl', 'km', 'kn', 'ko', 'ks', 'ku', 'kw', 'ky', 'la', 'lb', 'li', 'ln', 'lo', 'lt', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nah', 'nds', 'ne', 'nl', 'nn', 'no', 'oc', 'om', 'or', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'roa-rup', 'ru', 'rw', 'sa', 'sc', 'scn', 'sd', 'sg', 'sh', 'si', 'simple', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tpi', 'tr', 'ts', 'tt', 'tw', 'ug', 'uk', 'ur', 'uz', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zh-min-nan', 'zu'],
	'wikiversity.org': ['beta', 'de', 'en', 'es', 'fr', 'it'],
	'mediawiki.org': ['www']
};
var wsLangs = {
	'de': 'Deutsch',
	'en': 'English', 
	'es': 'Español',
	'fa': 'فارسی',
	'fi': 'Suomi',
	'fr': 'Français',
	'it': 'Italiano',
	'ja': '日本語',
	'nb': '‪Norsk (bokmål)',
	'nl': 'Nederlands',
	'pl': 'Polski',
	'pt': 'Português',
	'ru': 'Русский',
	'sv': 'Svenska',
	'zh': '‪中文(简体)',
	'zh-hant': '‪中文(繁體)'
};
var wsDefaultSubdomain = 'commons';
var wsDefaultDomain = 'wikimedia.org';
var wsDefaultLang = 'en';

function WikiSelect(subdomainSelect, domainSelect, langSelect)
{
	this.subdomainSelect = subdomainSelect;
	this.domainSelect = domainSelect;
	this.langSelect = langSelect;
	
	this.cleanElement = function (element)
	{
		while (element.firstChild)
			element.removeChild(element.firstChild);
	}

	this.cleanElement(subdomainSelect);
	this.cleanElement(domainSelect);
	this.cleanElement(langSelect);

	this.getDomain = function () 
	{
		return this.domainSelect.options[this.domainSelect.selectedIndex].value;
	};
	this.getSubdomain = function ()
	{
		return this.subdomainSelect.options[this.subdomainSelect.selectedIndex].value;
	};
	this.getLang = function ()
	{
		return this.langSelect.options[this.langSelect.selectedIndex].value;
	};

	// Build domain list
	for (var domain in wsDomains)
	{
		var option = document.createElement('option');
		option.value = domain;
		option.appendChild(document.createTextNode(domain));
		if (domain == wsDefaultDomain)
			option.selected = 'selected';
		this.domainSelect.appendChild(option);
	}
	
	this.buildLangList = function()
	{
		// Build lang list
		for (var lang in wsLangs)
		{
			var option = document.createElement('option');
			option.value = lang;
			option.appendChild(document.createTextNode(lang + ' - ' + wsLangs[lang]));
			if (lang == wsDefaultLang)
				option.selected = 'selected';
			this.langSelect.appendChild(option);
		}
	}
	this.buildLangList();
	
	this.buildSubdomainList = function ()
	{
		var domain = this.getDomain();
		this.cleanElement(this.subdomainSelect);
		for (var i = 0; i < wsDomains[domain].length; i++)
		{
			var subdomain = wsDomains[domain][i];
			var option = document.createElement('option');
			option.value = subdomain;
			option.appendChild(document.createTextNode(subdomain));
			if (subdomain == wsDefaultSubdomain || subdomain == wsDefaultLang)
				option.selected = 'selected';
			this.subdomainSelect.appendChild(option);
		}
	};
	this.buildSubdomainList();
	
	// Not sure whether this is necessary
	var parent = this;
	this.domainSelect.onchange = function () { parent.buildSubdomainList(); };
	this.subdomainSelect.onchange = function ()
	{
		subdomain = parent.getSubdomain();
		if (!wsLangs[subdomain])
			subdomain = 'en';
		wsDefaultLang = subdomain;
		parent.cleanElement(parent.langSelect);
		parent.buildLangList();
	};
}

var poty = {
	'init': function ()
	{
		if (!document.getElementById('poty-vote-nojs')) return;
		
		// Disable the no javascript warning
		document.getElementById('poty-vote-nojs').style.display = 'none';
		var container = document.getElementById('poty-vote-js');
		container.style.display = 'block';

		// Set default language from user interface
		//if (wsLangs[wgUserLanguage])
		//	wsDefaultLang = wgUserLanguage;

                // set default language from code embedded in voting page
                if (document.getElementById('wsLanguage'))
                        wsDefaultLang = document.getElementById('wsLanguage').innerHTML;

		var langSelect = document.createElement('select'); 
		var s_lang = document.getElementById('poty-vote-select-lang');
		s_lang.parentNode.replaceChild(langSelect, s_lang)

		var subdomainSelect = document.createElement('select'); 
		var s_subdomain = document.getElementById('poty-vote-select-subdomain');
		s_subdomain.parentNode.replaceChild(subdomainSelect, s_subdomain);

		var domainSelect = document.createElement('select'); 
		var s_domain = document.getElementById('poty-vote-select-domain');
		s_domain.parentNode.replaceChild(domainSelect, s_domain);

		
		poty['username'] = document.createElement('input');
		poty['username'].setAttribute('value', wgUserName);
		var s_user = document.getElementById('poty-vote-select-user');
		s_user.parentNode.replaceChild(poty['username'], s_user);
		
		var submit = document.createElement('input');
		var s_submit = document.getElementById('poty-vote-select-submit');
		submit.setAttribute('value', s_submit.firstChild.nodeValue);
		submit.setAttribute('type', 'button');
		submit.onclick = poty['submit'];
		s_submit.parentNode.replaceChild(submit, s_submit);
		
		poty['wikiSelect'] = new WikiSelect(subdomainSelect, domainSelect, langSelect);
	},
	
	'submit': function ()
	{
		var form = document.createElement('form');
		form.setAttribute('method', 'post');
		form.setAttribute('action', 'http://stable.ts.wikimedia.org/poty/vote?action=token');
		form.style.display = 'none';
		
		var i = document.createElement('input');
		i.setAttribute('name', 'username');
		i.setAttribute('value', poty['username'].value);
		form.appendChild(i);
		
		i = document.createElement('input');
		i.setAttribute('name', 'wiki');
		i.setAttribute('value', poty.wikiSelect.getSubdomain() + '.' + poty.wikiSelect.getDomain());
		form.appendChild(i);
		
		i = document.createElement('input');
		i.setAttribute('name', 'lang');
		i.setAttribute('value', poty.wikiSelect.getLang());
		form.appendChild(i);
		
		document.body.appendChild(form)
		form.submit();
	}
};
$(poty.init);