User:Bornhj/monobook.js

/*
 * My monobook.js
 * Based loosly upon User:Essjay's monobook
 * Creates its own "WP" psuedo-namespace to avoid conflicts
 * Props to everyone whose code is in here somewhere

// Declare our namespace - everyone loves namespaces var WP = { // Function: addOnload // Add an onload function addOnload: function(eventLoad) { if (window.addEventListener) window.addEventListener("load", eventLoad, false); else if (window.attachEvent) window.attachEvent("onload", eventLoad); },	// Function: addlilink // Preps a monobook tab link addlilink: function(tabs, url, name, id){ var na = document.createElement('a'); na.href = url; na.appendChild(document.createTextNode(name)); var li = document.createElement('li'); li.id = id; li.appendChild(na); tabs.appendChild(li); return li; },	// Function: showtime // Displays UTC Time showtime: function { var timerID; var now = new Date; var timeValue = now.toUTCString.replace(/GMT/, "UTC"); document.getElementById('utcdate').firstChild.innerHTML = timeValue; timerID = setTimeout('WP.showtime', 100); },	// Function: addTab // Wrapper for addlilink to add to the monobook top tabs bar addTab: function(url, name, id, title, key){ var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0]; WP.addlilink(tabs, url, name, id, title, key); },	// Function: inc // Includes a javascript file inc : function(file) { var lt = String.fromCharCode(60); var gt = String.fromCharCode(62); document.writeln(lt+'script type="text/javascript" src="/w/index.php?title='+file+'&amp;action=raw&amp;ctype=text/javascript&amp;dontcountme=s"'+gt+lt+'/script'+gt); },	// Function: stopRedlinksEditing // Removes &action=edit from redlinks stopRedlinksEditing: function{ var len=document.links.length; for(var i=0; i<len; ++i) { var l=document.links[i]; if (l.className=='new') { l.href=l.href.replace('&action=edit', ''); }	   }	},	// Function: addForceSummary // Adds the onclick event to force an edit summary addForceSummary: function { if(!/&action=edit/.test(window.location.href) && !/&action=submit/.test(window.location.href)) return; if(/&section=new/.test(window.location.href)) return; if(!document.forms.editform) return; document.forms.editform.wpSave.onclick = WP.forceSummary; },	// Function: forceSummary // Checks the summary and prompts if needed forceSummary: function { if(!document.forms.editform.wpSummary.value.replace(/^(?:\/\\*.*\\*\/)? *(.*) *$/,'$1'))	   {	        var r = prompt('Are you sure you want to submit without adding a summary?\nTo add a summary, type it in the box below:',document.forms.editform.wpSummary.value); if(r == null) { return false; } document.forms.editform.wpSummary.value = r;	   } return true; },	// Function: warningTemplate // Inserts a specified test template warningTemplate: function(template, needsPage, alternate, prePage) { if ( !prePage ) { if ( needsPage ) { var page = prompt("Vandalism to which article?"); if ( page == null || page == "" ) { var edit = " " + ""; var summary = alternate; }				else { var edit = "" + page + " " + ""; var summary = template + " - " + page + ""; }			}			else { var edit = " " + ""; var summary = template; }		}		else { var edit = "" + unescape(prePage).replace(/_/g, ' ') + " " + ""; var summary = template + " - " + unescape(prePage).replace(/_/g, ' ') + " (using GML)"; }	 var f = document.editform, t = f.wpTextbox1; if (t.value.length > 0) t.value += '\n'; t.value += edit; f.wpSummary.value = summary; f.wpMinoredit.checked = ""; },	// Function: init // Initiates all the other JS	initJS: function { // Grab our tabs var thething = document.getElementById("column-one"); var tabs = thething.getElementsByTagName('div')[0].getElementsByTagName('ul')[0]; // Grab our username var userName = document.getElementById('pt-userpage').getElementsByTagName('a')[0].innerHTML; // Add tabs for editing user talk pages if ( wgNamespaceNumber == 3 && document.getElementById('wpTextbox1') ) { var queryParams = WP.getQueryParams(document.location.href); if ( queryParams['fakeaction'] == 'rbwarn' ) { // GML warnings var page = escape(queryParams['page']); }			else { var page = null; }			WP.addTab('javascript:WP.warningTemplate("test1-n", true, "test1", ' + (!page?'null':'"'+page+'"') + ')',"t1", 'ca-tmpl-t1'); WP.addTab('javascript:WP.warningTemplate("test1a-n", true, "test1a", ' + (!page?'null':'"'+page+'"') + ')',"t1a", 'ca-tmpl-t1a'); WP.addTab('javascript:WP.warningTemplate("test2-n", true, "test2", ' + (!page?'null':'"'+page+'"') + ')',"t2", 'ca-tmpl-t2'); WP.addTab('javascript:WP.warningTemplate("test2a-n", true, "test2a", ' + (!page?'null':'"'+page+'"') + ')',"t2a", 'ca-tmpl-t2a'); WP.addTab('javascript:WP.warningTemplate("test3-n", true, "test3", ' + (!page?'null':'"'+page+'"') + ')',"t3", 'ca-tmpl-t3'); WP.addTab('javascript:WP.warningTemplate("test3a-n", true, "test3a", ' + (!page?'null':'"'+page+'"') + ')',"t3a", 'ca-tmpl-t3a'); WP.addTab('javascript:WP.warningTemplate("test4-n", true, "test4", ' + (!page?'null':'"'+page+'"') + ')',"t4", 'ca-tmpl-t4'); WP.addTab('javascript:WP.warningTemplate("bv-n", true, "bv", ' + (!page?'null':'"'+page+'"') + ')',"bv", 'ca-tmpl-bv'); WP.addTab('javascript:WP.warningTemplate("spam1", true, "null", ' + (!page?'null':'"'+page+'"') + ')',"spam", 'ca-tmpl-spam'); WP.addTab('javascript:WP.warningTemplate(prompt("Which template?"), true, "null", ' + (!page?'null':'"'+page+'"') + ')',"cus", 'ca-tmpl-cus'); }		// Add tabs for a User page FIXME: wgNamespace 2/3 if ( document.title.indexOf("User") == 0 ) { // Work out their username if ( document.getElementById('ca-viewsource') ) { var editlk = document.getElementById('ca-viewsource').getElementsByTagName('a')[0].href; }			else { var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href; }			editlk = editlk.substring(editlk.indexOf('title=') + 6, editlk.lastIndexOf('&action=edit')); editlk = editlk.substring(editlk.indexOf(':') + 1); var slloc = editlk.indexOf('/'); if(slloc > 0) editlk = editlk.substring(0, slloc); // Add "listusers" tab WP.addTab('/w/index.php?title=Special:Listusers&group=&username=' + editlk, 'list', ''); // Add "contributions" tab WP.addTab('/wiki/Special:Contributions/' + editlk, 'contribs', ''); // Add "userspace" tab WP.addTab('/w/index.php?title=Special:Prefixindex&namespace=2&from=' + editlk, 'userspace', ''); // Add "edit count" tabs WP.addTab('http://en.wikipedia.org/wiki/User:Interiot/Tool2/code.js?username=' + editlk, 'count (js)', ''); WP.addTab('http://tools.wikimedia.de/~essjay/edit_count/Count.php?username=' + editlk + '&submit=Count', 'count (ts)', ''); // Add "whois" tab WP.addTab('http://tools.wikimedia.de/~essjay/nqt.php?queryType=arin&target=' + editlk, 'whois'); // Add "blocklog" tab WP.addTab('/wiki/Special:Log/block?page=User:' + editlk, 'blocklog', 'ca-blocklog'); // Rename the user tab document.getElementById('ca-nstab-user').getElementsByTagName('a')[0].innerHTML='user'; }		// Add the purge and last diff tabs if ( document.getElementById('ca-history') ) { // FIXME: use wgIsArticle + wgArticleId (non-existant articles set wgIsArticle to true but have an ID of 0			var thething = document.getElementById("column-one");			var tabs = thething.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];			WP.addTab(document.getElementById('ca-history').getElementsByTagName('a')[0].href.replace( /action=history/, 'diff=0' ), 'last diff', 'ca-diff');			WP.addTab(document.getElementById('ca-history').getElementsByTagName('a')[0].href.replace( /action=history/, 'action=purge'), 'purge', 'ca-purge');		}		// Rename interface parts		if ( document.getElementById('pt-mytalk') ) {			document.getElementById('pt-mytalk').getElementsByTagName('a')[0].innerHTML='talk';		}		if ( document.getElementById('pt-preferences') ) {			document.getElementById('pt-preferences').getElementsByTagName('a')[0].innerHTML='prefs'; }		if ( document.getElementById('pt-watchlist') ) { document.getElementById('pt-watchlist').getElementsByTagName('a')[0].innerHTML='w/list'; }		if ( document.getElementById('pt-mycontris') ) { document.getElementById('pt-mycontris').getElementsByTagName('a')[0].innerHTML='c/tribs'; }		if ( document.getElementById('pt-logout') ) { document.getElementById('pt-logout').getElementsByTagName('a')[0].innerHTML='logout'; }		if ( document.getElementById('pt-mycontris') ) { document.getElementById('pt-mycontris').getElementsByTagName('a')[0].href='http://en.wikipedia.org/w/index.php?title=Special:Contributions&target=' +userName + '&offset=0&limit=500'; }		if ( document.getElementById('ca-talk') ) { document.getElementById('ca-talk').getElementsByTagName('a')[0].innerHTML='talk'; }		if ( document.getElementById('ca-edit') ) { document.getElementById('ca-edit').getElementsByTagName('a')[0].innerHTML=' edit '; }		if ( document.getElementById('ca-viewsource') ) { document.getElementById('ca-viewsource').getElementsByTagName('a')[0].innerHTML=' protected '; }		//Show the UTC clock var toplinks = document.getElementById('p-personal').getElementsByTagName('ul')[0]; WP.addlilink(toplinks, '#', '', 'utcdate'); WP.showtime; },	// Function: loadJS // Loads all the other JS and includes needed files loadJS: function { if ( navigator.appVersion.indexOf("MSIE") == -1 ) { //addOnload(rearrangeNodes); //WP.addOnload(WP.statusChanger); WP.addOnload(WP.stopRedlinksEditing); WP.addOnload(WP.initJS); //WP.addOnload(WP.addForceSummary); popupRevertSummaryPrompt=true; popupEditCounterTool='custom'; popupEditCounterUrl='http://en.wikipedia.org/wiki/Special:Watchlist?ectarget=$1'; WP.inc('User:Lupin/popupsdev.js'); WP.inc('User:Cacycle/wikEd.js'); //WP.inc('User:Lupin/recent2.js'); //WP.inc('User:Lupin/editcount.js'); //WP.inc('User:Interiot/Tool2/code.js'); //WP.inc('User:Bornhj/gm.js'); //WP.inc('User:Zocky/SearchBox.js'); //WP.inc('User:Lightdarkness/aiv.js'); }	},	// Function: rearrangeNodes // Experimental, adds an empty bar to the bottom of the page rearrangeNodes: function { var newNode = document.createElement('div'); newNode.style.position = "fixed"; newNode.style.bottom = "0"; newNode.style.left = "0"; newNode.style.width = "100%"; newNode.style.height = "20px"; newNode.style.backgroundColor = "white"; newNode.style.border = "1px solid #aaa"; newNode.style.zIndex = "1000"; var attachTo = document.getElementById('globalWrapper'); attachTo.appendChild(newNode); },	// Function: addlilinklcon(tabs, url, text, image, id) // Adds an li link to the tabs, with an icon addlilinkicon: function(tabs, linkURL, linkText, linkImage, linkId) { var na = document.createElement('a'); na.href = linkURL; na.appendChild(document.createTextNode(linkText)); var li = document.createElement('li'); li.id = linkId; li.style.background = "url('" + linkImage + "') top left no-repeat"; li.style.paddingLeft = "14px"; li.style.textTransform = "none"; li.appendChild(na); tabs.appendChild(li); return li; },	// Function: createAJAX // Creates an XMLHTTPRequest! createAJAX: function { var http = false; if (window.XMLHttpRequest) { // gecko, webkit, opera http = new XMLHttpRequest; } else if (window.ActiveXObject) { // ie			try { http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} }		}		return http; },	// Function: statusChanger // Loads up the status changer (obviously....) statusChanger: function { var userName = document.getElementById('pt-userpage').getElementsByTagName('a')[0].innerHTML; var theTabs = document.getElementById('p-personal').getElementsByTagName('ul')[0]; WP.addlilinkicon(theTabs, "javascript:WP.changeStatus('online', this)", "on", "http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/12px-Symbol_support_vote.svg.png", "p-status-online"); WP.addlilinkicon(theTabs, "javascript:WP.changeStatus('busy', this)", "busy", "http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_delete_vote.svg/12px-Symbol_delete_vote.svg.png", "p-status-busy"); WP.addlilinkicon(theTabs, "javascript:WP.changeStatus('offline', this)", "off", "http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/12px-Symbol_oppose_vote.svg.png", "p-status-offline"); },	// Function: parseXML(XMLString) // Parses me some XML parseXML: function(XMLString) { if (document.implementation.createDocument) { var XMLParser = new DOMParser; return XMLParser.parseFromString(XMLString, "text/xml"); }		else if (window.ActiveXObject) { var XMLParser = new ActiveXObject("Microsoft.XMLDOM"); XMLParser.async = "false"; ret = XMLParser.loadXML(XMLString); if (!ret) return null; return XMLParser.documentElement; }		return null; },	// Function: changeStatus(newStatus) // Does some AJAX voodoo to change status changeStatus: function(newStatus, newStatusLink) { var httpr = WP.createAJAX; httpr.open('GET', 'http://en.wikipedia.org/w/index.php?title=User:Bornhj/Status&action=edit', true); httpr.send(null); httpr.onreadystatechange = function { if ( httpr.readyState == 4 ) { var POSTData = ''; // Make an XML parser // Stolen from godmode-lite var editPage = WP.parseXML(httpr.responseText); var formElems = editPage.getElementById('editform').getElementsByTagName('input'); for ( i=0; i<formElems.length; i++ ) { if ( formElems[i].name == 'wpSummary' ) { formElems[i].value = "Updating status: " + newStatus; }					else if ( formElems[i].name == 'wpMinoredit' ) { formElems[i].value = '1'; }					else if ( formElems[i].name == 'wpWatchthis' ) { formElems[i].value = "on"; }					else if ( formElems[i].name == 'wpPreview' ) { continue; }					else if ( formElems[i].name == 'wpDiff' ) { continue; }					POSTData += escape(formElems[i].name) + '=' + escape(formElems[i].value) + '&'; }				POSTData += 'wpTextbox1=' + escape(''); // POST it back! var httpr2 = WP.createAJAX; httpr2.open('POST', 'http://en.wikipedia.org/w/index.php?title=User:Bornhj/Status&action=submit', true); httpr2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); httpr2.send(POSTData); httpr2.onreadystatechange = function { if ( httpr2.readyState == 4 ) { var responsePage = WP.parseXML(httpr2.responseText); if ( !responsePage.getElementById('editform') ) { // Hackish, I know, but it's an easy way to see whether it succeeded :)							// FIXME: use wgIsArticle?							alert('Status updated successfully.');						}					}				}			}		}	},	// Function: getQueryParams	// Returns a hash map of the query params in the specified url	getQueryParams: function(theUrl) {		var UrlS = theUrl.split('?')[1];		var UrlPairs = UrlS.split('&');		var urlParams = new Object;		for ( pairId in UrlPairs ) {			var thisPair = UrlPairs[pairId].split('=');			urlParams[thisPair[0]] = thisPair[1];		}		return urlParams;	} }

// Start 'er up! WP.loadJS;

/*
 * End of monobook.js