User:Bornhj/monobook.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. |
The accompanying .css page for this skin is at User:Bornhj/monobook.css. |
/* <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>
*/