User:Romney yw/Development/DefaultSort.js

/* based on original script User:DStoykov/defaultsort.js updated to include: if no category found, add default ( or if no category pipe parameters found, add default DEFAULTSORT magic word based on article title? if inconsistent pipe parameters found, do what? ? can we automatically update the edit summary too? */

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;

// If DEFAULTSORT already exists, bale out if (txt.match(/\{\{\s*defaultsort/i)) { alert('There\'s already a defaultsort statement!'); return; }

// Create an array of all category links 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!'); // so create a basic DEFAULTSORT statement // and a default category 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], "\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'));  } });

/* */