User:Gracenotes/fixStuff.js

//

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;

}

//