User:DStoykov/defaultsort.js

/*

 User:DStoykov/defaultsort.js  */

function defaultsort() {

//var apiurl = mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?action=query&meta=siteinfo&siprop=namespaces&format=xml';

//var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null;

//xmlhttp.open('GET',apiurl, false);

//xmlhttp.send(null);

//alert(xmlhttp.responseXML.getElementById('14').childNodes[0].nodeValue);

var txt = document.editform.wpTextbox1.value;

var sortkey = '';

// Save the position of the editbox scrollbar

var scrollPosition = document.editform.wpTextbox1.scrollTop;

// Create an array of all category links

if (txt.match(/\{\{\s*defaultsort/i)) {

alert('There\'s already a defaultsort statement!');

return;

}

var catlinks = txt.match(/\[\[\s*((C|K)at(e|e)gor(y|i|ie|ia|ia|ija|io)|Кат(е|э)гор(ия|ија|ія|ыя)|Luokka|Flokkur)\s*:.*\]\]/ig);

if (!catlinks) {

alert('There are no category links!');

return;

}

for (i=0; i< catlinks.length; i++) {

// Extract the name of the category

var catname = catlinks[i].replace(/.+\s*:\s*([^|]*[^|\s])\s*(\|.*)?\]\]/,"$1");

// Extract the sort key

var match = /\|[^\]]+/.exec(catlinks[i]);

if (match == null) {

alert('Category '+catname+' doesn\'t include a sort key!');

return;

}

// Strip the '|' and any trailing spaces

var sk = match[0].replace(/\|(.+)/, "$1").replace(/(\S) +$/,"$1");

if (i == 0) {

sortkey = sk;

} else {

if (sortkey != sk) {

alert('Not all sort keys are identical!\nThe sort key for category '+catname+' is different.');

return;

}

}

}

// Now that we know that everything is OK, we can proceed with modifying the content of the editbox

txt = txt.replace(catlinks[0], "{{DEFAULTSORT:"+sortkey+"}}\n"+catlinks[0]);

for (i=0; i< catlinks.length; i++) {

subst = catlinks[i].replace(/\|[^\]]+/,"");

txt = txt.replace(catlinks[i], subst);

}

document.editform.wpTextbox1.value=txt;

// Restore scroll position

document.editform.wpTextbox1.scrollTop = scrollPosition;

}

$(function () {

if(document.forms.editform) {

mw.util.addPortletLink('p-cactions', 'javascript:defaultsort()', 'defaultsort', 'ca-defaultsort', , , document.getElementById('ca-purge'));

}

});

/*

*/