לדלג לתוכן

מדיה ויקי:Gadget-InterwikiOrder.js: הבדלים בין גרסאות בדף

מתוך צפונות ויקי
מניעת לולאה
שכתוב ב־jQuery
שורה 1: שורה 1:
var interwikiOrder = [];
function fixInterwikiOrder(selectedInterwikiOrder) {
 
var i, end, $item,
function containsInterwiki(kids, interWikiID) {
$list = $( '#p-lang ul' ),
var i;
$items = $list.find( 'li' );
end = 'זהו'; // the Hebrew string says "end"


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


return -1;
$item = $list.find('.interwiki-' + selectedInterwikiOrder[i]);
}


function fixInterwikiOrder() {
if ($item.length) {
var i, interWikiIndex, kids, father, end, removeAllOthers;
$item
.detach()
kids = document.getElementById('p-lang').getElementsByTagName('LI');
.prependTo($list);
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) {
if (selectedInterwikiOrder[selectedInterwikiOrder.length - 1] === end) {
while (kids.length && kids.length != interwikiOrder.length - 1) {
$items.each(function(index, element) {
if (father.lastChild) {
var $element = $( element ),
father.removeChild(father.lastChild);
$link = $element.find('a');
 
if ($.inArray($link.prop('lang'), selectedInterwikiOrder) === -1) {
$element.remove();
}
}
}
});
}
}
}
}


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


if (!document.getElementById('p-lang')) {
if (!$('#p-lang').length) {
return;
// return; // XXX
}
}


שורה 53: שורה 47:
titles: 'User:' + mw.config.get( 'wgUserName' ) + '/בינוויקי'
titles: 'User:' + mw.config.get( 'wgUserName' ) + '/בינוויקי'
} ).done( function ( result ) {
} ).done( function ( result ) {
var text, lines, rx, i, m;
var text, lines, rx, i, m,
selectedInterwikiOrder = [];


$.each( result.query.pages, function ( id, data ) {
$.each( result.query.pages, function ( id, data ) {
שורה 68: שורה 63:


if (m) {
if (m) {
interwikiOrder.push(m[1]);
selectedInterwikiOrder.push(m[1]);
} else {
} else {
break;
break;
שורה 74: שורה 69:
}
}


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

גרסה מ־10:39, 24 ביוני 2015

function fixInterwikiOrder(selectedInterwikiOrder) {
	var i, end, $item,
		$list = $( '#p-lang ul' ),
		$items = $list.find( 'li' );
	
	end = 'זהו'; // the Hebrew string says "end"

	for (i = selectedInterwikiOrder.length - 1; i >= 0; i--) {
		if (selectedInterwikiOrder[i] === end) {
			continue;
		}

		$item = $list.find('.interwiki-' + selectedInterwikiOrder[i]);

		if ($item.length) {
			$item
				.detach()
				.prependTo($list);
		}
	}

	if (selectedInterwikiOrder[selectedInterwikiOrder.length - 1] === end) {
		$items.each(function(index, element) {
			var $element = $( element ),
				$link = $element.find('a');

			if ($.inArray($link.prop('lang'), selectedInterwikiOrder) === -1) {
				$element.remove();
			}
		});
	}
}

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

	if (!$('#p-lang').length) {
		// return; // XXX
	}

	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,
			selectedInterwikiOrder = [];

		$.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) {
				selectedInterwikiOrder.push(m[1]);
			} else {
				break;
			}
		}

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

$(initInterwikiOrder);