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('|\\|)', 'gi'), '\n[[Category:'+newCat+'$1'); document.getElementById('wpTextbox1').value = catValue;  document.getElementById('wpSummary').value = 'Replacing  with ';  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; }

//