MediaWiki:Gadget-TxikipediaTab.js

Wikipedia, Entziklopedia askea

Oharra: Gorde ondoren zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko. Mozilla / Firefox / Safari: Shift tekla sakatu birkargatzeko momentuan, edo Ctrl-Shift-R sakatu (Cmd-Shift-R Apple Mac baten); IE: Ctrl tekla sakatu birkargatzeko momentuan, edo Ctrl-F5 sakatu; Konqueror:: Birkargatzeko klik egin, edo F5 sakatu, besterik ez; Opera erabiltzaileek Tresnak-Hobespenak atalera jo eta katxea garbitzeko aukera hautatu.

( function() {
	"use strict";
	/*globals mw, jQuery */
	// {{documentation}}
	var conf = mw.config.get([
		'wgPageName',
		'wgUserLanguage',
		'wgNamespaceNumber',
		'wgNamespaceIds',
		'wgTitle',
		'wgCanonicalNamespace'
	]);
	var tabs = {};
	var titlesQueue = [];
	var msgQueue = (conf.wgUserLanguage !== 'eu') ? {} : null;
	
	var msgs = {
		'nstab-main': "Artikulua",
		'nstab-talk': "Eztabaida",
		'nstab-txikipedia': "Txikipedia",
		'tooltip-ca-nstab-main': "Eduki orrialdea ikusi",
		'tooltip-ca-nstab-txikipedia': "Txikipediako bertsioa ikusi",
		'tooltip-ca-talk': "Artikuluri buruzko eztabaida",
	};
	
	var api = new mw.Api();
	
	if (conf.wgUserLanguage !== 'en') {
	
	try {
		var msgsCache = JSON.parse(window.sessionStorage.getItem('DocTabs-messages-' + conf.wgUserLanguage));
		if (msgsCache)
			msgs = msgsCache;
		else
			throw void('tantrum');
	} catch (e) {
		api.get({
			action: 'query',
			meta: 'allmessages',
			amlang: conf.wgUserLanguage,
			ammessages: Object.keys(msgs).join('|')
		}).done(function (result) {
			for (var i = 0; i < result.query.allmessages.length; ++i) {
				var mesg = result.query.allmessages[i];
				if ('missing' in mesg)
					continue;
				msgs[mesg.name] = mesg['*'];
				if (msgQueue && msgQueue[mesg.name])
					msgQueue[mesg.name].elem[msgQueue[mesg.name].prop] = mesg['*'];
			}
			msgQueue = null;
	
			try {
				window.sessionStorage.setItem('DocTabs-messages-' + conf.wgUserLanguage, JSON.stringify(msgs));
			} catch (e) {
				/* swallow */
			}
		});
	}
	
	}
	
	function makeThird(page1, page2, msgroot, msgtalk, msgmine) {
		msgtalk = msgtalk || (msgroot + '_eztabaida');
	
		var portlet = document.getElementById('p-associated-pages') || document.getElementById('p-namespaces') || document.getElementById('p-cactions');
		// Menu not supported on this page.
		if ( !portlet ) {
			return;
		}
		var ul = portlet.getElementsByTagName('ul')[0];
		var first = ul.firstElementChild;
		if ( first && first.nextElementSibling ) {
			ul.removeChild(first.nextElementSibling);
		}
		
		var pl1 = tabs[page1] = mw.util.addPortletLink(portlet.id, mw.util.getUrl(page1), msgs['nstab-' + msgroot], 'ca-nstab-' + msgroot, msgs['tooltip-ca-nstab-' + msgroot], 'c', first);
		var pl2 = tabs[page2] = mw.util.addPortletLink(portlet.id, mw.util.getUrl(page2), msgs['nstab-' + msgtalk], 'ca-talk', msgs['tooltip-ca-talk'], 't', first);
		titlesQueue.push(page1, page2);
		
		var links = first ? first.getElementsByTagName('a') : [];
		var firstLink = links[0];
		if (!firstLink) {
			return;
		}
		if (msgmine) {
			firstLink.textContent = msgs['nstab-' + msgmine];
			firstLink.title = msgs['tooltip-ca-nstab-' + msgmine];
		}
		firstLink.accessKey = '3';
		
		if (!msgQueue)
			return;
		msgQueue['nstab-' + msgroot] = {
			elem: pl1.getElementsByTagName('a')[0],
			prop: 'textContent'
		};
		msgQueue['nstab-' + msgtalk] = {
			elem: pl2.getElementsByTagName('a')[0],
			prop: 'textContent'
		};
		msgQueue['tooltip-ca-nstab-' + msgroot] = {
			elem: pl1.getElementsByTagName('a')[0],
			prop: 'title'
		};
		msgQueue['tooltip-ca-talk'] = {
			elem: pl2.getElementsByTagName('a')[0],
			prop: 'title'
		};
	}
	
	function addThird(page, msgroot) {
		var portlet = document.getElementById('p-associated-pages') ? 'p-associated-pages' : 'p-namespaces';
		var pl = tabs[page] = mw.util.addPortletLink(portlet,
			mw.util.getUrl(page),
			msgs['nstab-' + msgroot],
			'ca-nstab-' + msgroot,
			msgs['tooltip-ca-nstab-' + msgroot],
			'3',
			portlet === 'p-cactions' ?
				(document.getElementById('ca-edit') || document.getElementById('ca-viewsource')) :
				null
		);
		if ( pl ) pl.isThird = true;
		titlesQueue.push(page);
	
		if (!msgQueue)
			return;
		msgQueue['nstab-' + msgroot] = {
			elem: pl.getElementsByTagName('a')[0],
			prop: 'textContent'
		};
		msgQueue['tooltip-ca-nstab-' + msgroot] = {
			elem: pl.getElementsByTagName('a')[0],
			prop: 'title'
		};
	}
	
	jQuery(document).ready(function () {
	
	if (conf.wgNamespaceNumber === conf.wgNamespaceIds.txikipedia) {
		makeThird(conf.wgTitle, 'Eztabaida:' + conf.wgTitle, 'main', 'talk');
	} else if ((conf.wgNamespaceNumber === 0) || (conf.wgNamespaceNumber === conf.wgNamespaceIds.talk)) {
		addThird('Txikipedia:' + conf.wgTitle, 'txikipedia');
	} else
		return;
	
	if (titlesQueue.length) {
		api.get({
			action: 'query',
			titles: titlesQueue.join('|')
		}).done(function (result) {
			if (!result.query) {
				return;
			}
	
			for (var pageid in result.query.pages) {
				var page = result.query.pages[pageid];
				var tab = tabs[page.title];
				if (tab && parseInt(pageid, 10) < 0) {
					var link = tab.getElementsByTagName('a')[0];
					var query = { action: 'edit', redlink: '1' };
					link.href = mw.util.getUrl(page.title, query);
					jQuery(tabs[page.title]).addClass('new');
				}
			}
		});
	}
	
	});
})();