/* <pre><nowiki>
|| 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+'&action=raw&ctype=text/javascript&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(/§ion=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 = "{{subst:" + alternate + "}} ~~" + "~~";
var summary = alternate;
}
else {
var edit = "{{subst:" + template + "|" + page + "}} ~~" + "~~";
var summary = template + " - [[" + page + "]]";
}
}
else {
var edit = "{{subst:" + template + "}} ~~" + "~~";
var summary = template;
}
}
else {
var edit = "{{subst:" + template + "|" + unescape(prePage).replace(/_/g, ' ') + "}} ~~" + "~~";
var summary = template + " - [[" + unescape(prePage).replace(/_/g, ' ') + "]] (using [[User:Bornhj/gm.js|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='<span style="padding-left: 50px; padding-right: 50px;">edit</span>';
}
if ( document.getElementById('ca-viewsource') ) {
document.getElementById('ca-viewsource').getElementsByTagName('a')[0].innerHTML='<strike>protected</strike>';
}
//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('{{' + 'User:Bornhj/StatusBar|' + newStatus + '|~~' + '~~' + '~}}');
// 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
|| </nowiki></pre>
*/