User:Bornhj/monobook.js
From Wikipedia, the free encyclopedia
If a message on your talk page led you here, please be wary of who left it. The code below could contain malicious content capable of compromising your account; if your account appears to be compromised, it will be blocked. If you are unsure whether the code is safe, you can ask at the appropriate village pump.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
/* <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> */