מדיה ויקי:Gadget-InterwikiOrder.js

גרסה מ־06:44, 24 ביוני 2015 מאת wikipedia:he>Amire80 (שכתוב עם API מודרני)

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
var interwikiOrder = [];

function containsInterwiki(kids, interWikiID) {
	var i;

	for (i = 0; i < kids.length; i++) {
		if ($(kids[i]).hasClass('interwiki-' + interWikiID) ) {
			return i;
		}
	}

	return -1;
}

function fixInterwikiOrder() {
	var i, interWikiIndex, kids, father, end, removeAllOthers;

	kids = document.getElementById('p-lang').getElementsByTagName('LI');
	end = 'זהו'; // the Hebrew string says "end"
	removeAllOthers = (interwikiOrder[interwikiOrder.length - 1] == end) ? 2 : 1;

	for (i = interwikiOrder.length - removeAllOthers; i > -1; i--) {
		interWikiIndex = containsInterwiki(kids, interwikiOrder[i]);

		if (interWikiIndex != -1) {
			father = document.getElementById('p-lang').getElementsByTagName('UL')[0];
			father.insertBefore(kids[interWikiIndex], father.firstChild);
		}
	}

	if (removeAllOthers == 2) {
		while (kids.length != interwikiOrder.length - 1) {
			father.removeChild(father.lastChild);
		}
	}
}

function initInterwikiOrder() {
	var api = new mw.Api();

	if (!document.getElementById('p-lang')) {
		return;
	}

	api.get( {
		action: 'query',
		prop: 'revisions',
		format: 'json',
		rvprop: 'content',
		rvlimit: 1,
		titles: 'User:' + mw.config.get( 'wgUserName' ) + '/בינוויקי'
	} ).done( function ( result ) {
		var text, lines, rx, i, m;

		$.each( result.query.pages, function ( id, data ) {
			text = data.revisions[0]['*'];

			return false;
		} );

		lines = text.split('\n');
		rx = new RegExp('\\*\\s?([^$]*)');

		for (i = 0; i < lines.length; i++) {
			m = rx.exec(lines[i]);

			if (m) {
				interwikiOrder.push(m[1]);
			} else {
				break;
			}
		}

		if (interwikiOrder[0]) {
			fixInterwikiOrder();
		}
	} );
}

$(initInterwikiOrder);