User:Gracenotes/fixStuff.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Gracenotes/fixStuff. |
//<pre>This .js is meant for all sorts of general category maintenance.
//Note: the variable names will be coalesced soon into something orderly
var subCatXML; //the xml page on which the categories are listed
var subCats; //the array containing the category names
var subCatsInDoc; //boolean array
var meow; //the category in which the inquiry is to be made
var meowCat; //the category currently being looked into
var meowDir = 'down'; //the direction in which the searching is going
var meowNav = true; // whether navigating or not
var meowQuery; //query string using query.php
if (wgNamespaceNumber == 14) {
addOnloadHook( function() {
var liCat = document.getElementById('t-whatlinkshere').cloneNode(true);
aCat = liCat.firstChild;
liCat.setAttribute('id', 't-catclear')
aCat.setAttribute('href', 'javascript:catPageSet()')
aCat.setAttribute('title', 'Get this category ready for clearing to lower levels')
aCat.setAttribute('accesskey', '');
aCat.firstChild.nodeValue = 'Put pages in subcategory';
getElementsByClassName(document.getElementById('p-tb'), 'div', "pBody")[0].getElementsByTagName('ul')[0].appendChild(liCat);
});
}
if ((query_get('action') == 'edit' || query_get('action') == 'submit') && query_get('kitten')) {
addOnloadHook( function() {
var liCat = document.getElementById('t-whatlinkshere').cloneNode(true);
aCat = liCat.firstChild;
liCat.setAttribute('id', 't-catsub');
aCat.setAttribute('href', 'javascript:catInitialize();')
aCat.setAttribute('title', 'Get this category ready for clearing to lower levels [\\]')
aCat.setAttribute('accesskey', '\\');
aCat.firstChild.nodeValue = 'Put page in subcategory';
getElementsByClassName(document.getElementById('p-tb'), 'div', "pBody")[0].getElementsByTagName('ul')[0].appendChild(liCat);
});
}
function catPageSet() {
if (document.getElementById('mw-pages')) {
var startCat = prompt('From which category do you wish to start navigation? "' + wgPageName.replace(/_/g, ' ') + '" will be the default value.') || '';
var catPages = document.getElementById('mw-pages').getElementsByTagName('a');
var catSuffix = '&action=edit&kitten=' + encodeURIComponent(mw.config.get('wgPageName')) + (startCat ? '&start=' + encodeURIComponent(startCat.replace(/\\s/g, '_')) : '');
for (i = 1; i < catPages.length; i++) {
kittenPage = catPages[i];
if (kittenPage.getAttribute('title')) {
kittenPage.href = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title='+encodeURIComponent( kittenPage.getAttribute('title'))+catSuffix;
kittenPage.style.color = '#633';
kittenPage.onmouseup = function() { this.style.color = '#393' }
}
}
}
else {
alert('No pages in category.');
}
}
function catInitialize() {
meow = query_get('kitten').replace(/_/g, ' ');
meowCat = query_get('start').replace(/_/g, ' ') || meow;
getSubCats()
}
function getSubCats() {
meowQuery = wgServer + wgScriptPath
switch (meowDir) {
case 'down': meowQuery += '/query.php?what=category&cptitle=' + encodeURI(meowCat) + '&cpnamespace=14&format=xml&cplimit=100';
break;
case 'up': meowQuery += '/query.php?what=categories&titles=' + encodeURI(meowCat) + '&clextended&format=xml';
break;
}
subCats = [];
subCatsInDoc = [];
try {
subCatsXML = sajax_init_object();
if (subCatsXML.overrideMimeType) subCatsXML.overrideMimeType('text/xml');
subCatsXML.onreadystatechange = getSubCatContent;
subCatsXML.open('GET', meowQuery, true );
subCatsXML.send(null);
} catch(ohNoesHayUnError) {}
}
//parses results of ajax query and sorts subcategory names, A-Z
function getSubCatContent() {
if (subCatsXML.readyState != 4) {
return;
}
if(subCatsXML.status != 200) {
alert ('There was an error.');
return;
}
var XMLdoc = subCatsXML.responseXML.documentElement;
if(!XMLdoc) {
return;
}
if(!XMLdoc.getElementsByTagName('pages')) {
alert('Category not found.')
return;
}
//make an array of all of the categories
var subCatXMLarray = XMLdoc.getElementsByTagName(meowDir == 'down' ? 'title' : 'cl');
var SCXAlength = subCatXMLarray.length;
for (i = 0; i < SCXAlength; i++) {
subCats[subCats.length] = subCatXMLarray[i].firstChild.nodeValue; //.substring('9');
//the following involves the document rather than the XML, so meh, but it works
subCatsInDoc[subCatsInDoc.length] = new RegExp(subCats[i], 'i').test(document.getElementById('wpTextbox1').value)
}
subCats.sort();
navigation();
}
function navigation() {
var catString;
if (meowDir == 'down') {
if (subCats[0] != '' && subCats[0]) {
catString = 'This is a list of categories below ' + meowCat + '. Please type the identification number of a category in order to view more information about it, or select it for replacement.\n\n-1. Select a category above ' + meowCat + ' to which you want to navigate.\n0. Replace ' + meow + ' with ' + meowCat + ' in this document.\n';
}
else {
catString = meowCat + ' has no subcategories. You can:\n\n-1. View the categories above ' + meowCat + '\n0. Replace ' + meow + ' with ' + meowCat;
}
}
else {
if (subCats[0] != '' && subCats[0]) {
catString = meowCat + ' is a subcategory of the following categories. Select the identification number of a category.\n\n0. Replace ' + meow + ' with ' + meowCat + '\n';
}
else {
catString = meowCat + ' is an uncategorized category. Whatever.';
}
}
for (i = 0; i < subCats.length; i++) {
catString += (i+1) + '. ' + subCats[i] + (subCatsInDoc[i] ? ' (already in document)' : '') + '\n';
}
var replaceCat = prompt(catString);
if (replaceCat == -1) {
meowDir = 'up';
getSubCats();
}
else if (replaceCat == 0) {
textReplaceCat(meow.substring('9'), meowCat.substring('9'));
}
else if (replaceCat != NaN) {
if (subCats[0] == '' || !subCats[0]) {
navigation();
return;
}
meowCat = subCats[replaceCat - 1];
meowDir = 'down'
if (meowCat) {
getSubCats();
} else {
return;
}
}
else {
return;
}
}
function textReplaceCat(oldCat, newCat) {
var catValue = document.getElementById( 'wpTextbox1' ).value.replace(new RegExp('[[Category:[\\s]*'+oldCat+'(]]|\\|)', 'gi'), '\n[[Category:'+newCat+'$1');
document.getElementById('wpTextbox1').value = catValue;
document.getElementById('wpSummary').value = 'Replacing [[Category:' + oldCat + ']] with [[Category:' + newCat + ']]';
document.getElementById('wpDiff').click();
}
//regex written by Lupin; capturing parentheses capture parameter name of query
function query_get(paramName) {
var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)');
var h=document.location;
var m;
if (m=cmdRe.exec(h)) {
try {
return decodeURIComponent(m[1]);
} catch (someError) {}
}
return null;
}
//</pre>