User:DStoykov/defaultsort.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.
/* <pre> [[User:DStoykov/defaultsort.js]] <nowiki> */ function defaultsort() { //var apiurl = wgServer+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')); var txt = document.editform.wpTextbox1.value; var sortkey = ''; // 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; } addOnloadHook(function () { if(document.forms.editform) { addPortletLink('p-cactions', 'javascript:defaultsort()', 'defaultsort', 'ca-defaultsort', '', '', document.getElementById('ca-purge')); } }); /* </nowiki></pre> */