From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// wikibits customization

if(window.histrowinit) window.removeEventListener('load',histrowinit,false);

ts_alternate_row_colors = false;



// General library stuff {{{



// Event handler function {{{ 

function mkEvt(elem,evtname,handler) {

	// old-style event handlers have more robust canceling and target

	// finding - here's a trick to let me attach multiple ones

    var oldhandler = elem'on'+evtname];

    elem'on'+evtname = function() {

        if(oldhandler) {

         elem._eventTemp = oldhandler;

         if(elem._eventTemp() == false) return false;

        }

        elem._eventTemp = handler;

        return elem._eventTemp();

    }

}

//}}}*/



// Hack to fix race condition w/ importScript {{{

addOnloadHook = function(hookFunct) {

   // Allows add-on scripts to add onload functions

   if(doneOnloadHook) hookFunct();

   else onloadFunctsonloadFuncts.length = hookFunct;

};

// }}} */



// tricks with getElementById {{{

document._realGEBI = document.getElementById;

document.getElementById = function(id){

   if(id=="p-cactions") {

       if(this._realGEBI("p-cactions2"))

          return this._realGEBI("p-cactions2");

   }

   var x = this._realGEBI(id);

   if(x) return x;

   else {

      switch(id) {

	 case "content": x= this._realGEBI("mw_content");break;

	 case "column-content": x= this._realGEBI("mw_contentwrapper");break;

	 case "bodyContent": x= this._realGEBI("mw_contentholder");break;

	 case "column-one": x= this._realGEBI("mw_portlets");break;

	 case "globalWrapper": x= this._realGEBI("mw_main");break;

	 default: return null;

      }

   }

   return x;

}

// }}} */



/* }}} */



/* check if page is discussion {{{ */

var pageIsDiscussion = false;



addOnloadHook(function pageIsDiscussion_hook() {

  if(wgNamespaceNumber % 2) {

      pageIsDiscussion = true; return;

  }

  if(wgNamespaceNumber == 4) {

        if(wgPageName.indexOf("noticeboard") > 0) {

            pageIsDiscussion = true; return;

        }

        if(wgPageName.indexOf("Village_pump") > 0) {

            pageIsDiscussion = true; return;

        }

        if(wgPageName.indexOf("_for_deletion/") > 0) {

            pageIsDiscussion = true; return;

        }

        if(wgPageName.indexOf("_for_discussion/") > 0) {

            pageIsDiscussion = true; return;

        }

        if(wgPageName.indexOf("Requests_for_comment/User_names") > 0) {

            pageIsDiscussion = true; return;

        }

    }

});

/* }}} */



/* Add a tab for arbitrary actions {{{

// TODO undelete

// event handling here isn't making sense, and the style is somehow 

// broken anyway (needs a skin check maybe?)

addOnloadHook(function blankTab_hook() {

 try {

   var theList = $('p-cactions').getElementsByTagName("UL")[0];

   var myLi = document.createElement("LI");

   var myForm = document.createElement("FORM");

   var myInput = document.createElement("INPUT");

   myForm.appendChild(myInput);

   myLi.appendChild(myForm);

   theList.appendChild(myLi);

// TODO move to .css

   myLi.style.cssText = "float: right; padding-top: 1px;"

   myForm.style.cssText = "display: inline"

   myInput.style.cssText = "width: 4em; background-color:white; font: inherit; border: none; text-align: right"

   myForm.onsubmit = function(e) {

      e.preventDefault();

      switch(myInput.value) {

         case 'move':

           location.href = ('Special:Movepage/'+wgPageName)

                           .replace(/(.*)/,wgArticlePath);

           break;

         case 'contribs':

           location.href = ('Special:Contributions/'+wgPageName.replace(/^[^:]*:/,'').replace(/\/(.*)/,''))

                           .replace(/(.*)/,wgArticlePath);

           break;

         case 'links':

           location.href = ('Special:Whatlinkshere/'+wgPageName)

                           .replace(/(.*)/,wgArticlePath);

           break;

         case 'log': case 'logs':

           location.href = ('Special:Log')

                           .replace(/(.*)/,wgArticlePath)

                           +'?page='+escape(wgPageName);

           break;

         case 'edit lead':

           location.href = wgScriptPath+'/index.php?' +

                              'title='+escape(wgPageName) + "&" +

                              'action=edit&section=0';

           break;

      default: location.href = wgScriptPath+'/index.php?' +

                              'title='+escape(wgPageName) + "&" +

                              'action='+escape(myInput.value)

      }

   }

 } catch(x) { Debug(x,'addBlankTab') }

});

// }}} */



// Alt text {{{

$(function() {

   try {

      for(var i=0;i<document.images.length;i++) {

         var img = document.imagesi];

         if(img.alt && !img.title) img.title = 'alt: '+img.alt;

      }

   } catch(x) { Debug(x,'processImages') }

});

// }}} */



// [[User:Random832]] script for finding "resolved" tags. {{{

// semi-experimental, not yet adapted for anything but ANI.

if (wgPageName == "Wikipedia:Administrators\'_noticeboard/Incidents" && wgAction == "view") {

   addOnloadHook(function ANI_toc_hook(){

      var sections = document.getElementById('toc').getElementsByTagName("li");

      for(var i=0;i<sections.length;i++) {

         try {

            var link = sectionsi].firstChild;

            var target=document.getElementsByName(link.hash.slice(1))[0];

            var next = target.parentNode.nextSibling;

            // discard text nodes

            while(next.nodeType != 1) next = next.nextSibling;



            // now we have the header, now skip another

            if(next.tagName != "H2") { continue; }

            next = next.nextSibling;

            while(next.nodeType != 1) next = next.nextSibling;



            if ((/\bresolved\b/.test(next.className))) { 

               //resolved

               sectionsi].className = "ani_resolved"

               sectionsi].style.fontStyle = 'italic'

               //sections[i].appendChild(document.createTextNode("resolved"))

            } else {

               //not resolved

               sectionsi].className = "ani_unresolved"

               sectionsi].style.fontWeight = 'bold'

            }

            // BUG: chokes on sections beginning with a digit

            // (anchor has name instead of id).

         } catch(x) {

            if(window.console) //firebug

               console.log("caught %o",x);

         }//end try

      }//end for

   });//end onloadhook function

}//end if WP:ANI

// }}}



(function submit_validation_hook() { // set up submit validation {{{

  var validators = [];

  var is_preview = false;

  window.addOnSubmitValidator = function(x) {

   validatorsvalidators.length = x;

  }

  addOnloadHook(function() {

    var editform = document.getElementById('editform');

    if(!editform) return;

    mkEvt(editform,'submit',function() {

      if(is_preview) return true;

      for(var i=0;i<validators.length;i++) {

        var result = validatorsi]();

        if(!result) return false;

      }

    });

    if (document.getElementById('wpPreview')) {

      mkEvt(document.getElementById('wpPreview'),'click',function () {

        is_preview = true;

      });

    }

  });

})(); // }}}



// Edit summary check {{{

addOnSubmitValidator(function() {

  var editsummary = document.getElementById('wpSummary').value;

  if( /^\/\*.*\*\/\s*$/.test(editsummary)) editsummary = ''

  if(!editsummary) return confirm("Submit this edit without an edit summary?");

  else return true;

});

// }}} */



// links on CAT:PER {{{ 

if(wgPageName=="Category:Wikipedia_protected_edit_requests")

$(function(){

   var pagediv = document.getElementById("mw-pages");

   var links = pagediv.getElementsByTagName("A");

   for(var i=0;i<links.length;i++) {

      linksi].hash = '#editprotected';

   }

});

// }}} */



$(function() {

   var s = document.createElement('STYLE');

   s.textContent = '#edittools_hide_for_script_test {display:none}';

   document.getElementsByTagName('HEAD')[0].appendChild(s);

});



/* change diff to history in new messages {{{

$(function() {

    var contentSub = document.getElementById("contentSub");

    if(!contentSub) return;

    var elem = contentSub.nextSibling;

    while(elem.nodeType != 1) elem = elem.nextSibling;

    if(elem.className != 'usermessage') return;

    elem.getElementsByTagName('A')[1].href = elem.getElementsByTagName('A')[1].href.replace("diff=cur","action=history")

    elem.getElementsByTagName('A')[1].textContent = "history";

});

// }}}*/



// Section organizer for ANI {{{

if (wgPageName == "Wikipedia:Administrators\'_noticeboard/Incidents" && wgAction == "view") {

   addOnloadHook(function ani_sections() {

       var headers = document.getElementsByTagName('H2');

       for(var i=1;i<headers.length;i++) {

           // starting from 1, to skip the toc header.

           var section = document.createElement("DIV");

           section.className = "sectionContainer";

           var anchor = headersi].previousSibling;

           while(anchor.nodeType != 1) anchor = anchor.previousSibling;

           headersi].parentNode.insertBefore(section,headersi]);

           section.appendChild(anchor);

           section.appendChild(headersi]);

           var innerSection = document.createElement("DIV");

           innerSection.className = "sectionContentHolder";

           section.appendChild(innerSection);

           while(section.nextSibling && section.nextSibling.tagName != 'H2' && section.nextSibling.id != 'catlinks') {

               // look ahead

               var anchorcheck = section.nextSibling.nextSibling;

               while(anchorcheck && anchorcheck.nodeType!=1) anchorcheck = anchorcheck.nextSibling;

               if(anchorcheck && anchorcheck.tagName == 'H2') break;

               innerSection.appendChild(section.nextSibling);

           }



           var ntimestamps = 0;

           // evil evil hack

           var lastTimestamp = new Date(0);

           var lastTimestampText = '(No Timestamp)';

           innerSection.textContent.replace(/[0-9][0-9]:[0-9][0-9], [0-3]?[0-9] [A-Z][a-z]* [0-9][0-9][0-9][0-9]/g,function(match) {

               var thisTimestamp = new Date(match);

               if(thisTimestamp.valueOf() > lastTimestamp.valueOf()) {

                   lastTimestamp = thisTimestamp;

                   lastTimestampText = match;

               }

               ntimestamps++;

           });

           // was done incorrrectly in local time, convert from UTC

           lastTimestamp.setMinutes(

              lastTimestamp.getMinutes()-lastTimestamp.getTimezoneOffset()

           );

           var age = (new Date()).getTime() - lastTimestamp.getTime();

           var hideDefault = false;

           if (age > 21600000) // 6 hours

              hideDefault = true;

           if(innerSection.textContent.length < 600) // bytes

              hideDefault = false; // no reason to hide in this case

           if(ntimestamps < 2) // unanswered

              hideDefault = false;



           // hide if resolved, also, place the resolved header in the visible part.

           var resolved = getElementsByClassName(innerSection,'DIV','resolved');

           if(resolved.length) {

             resolved = resolved0];

             // [1] to skip an annoying whitespace node

             if (resolved != innerSection.firstChild && resolved != innerSection.childNodes1]) resolved = resolved.cloneNode(true);

             section.insertBefore(resolved,innerSection);

             hideDefault = true;

           }



           section.insertBefore(document.createTextNode('Last: ' + lastTimestampText + ".  "),innerSection);

           section.insertBefore(document.createTextNode(innerSection.textContent.length + " text bytes. "),innerSection);

           section.insertBefore(document.createTextNode(ntimestamps + " comments. "),innerSection);



           (function ani_sections_closure(){

               var header = headersi];

               var innerSectionFix = innerSection;

               var button = document.createElement('BUTTON');

               if(hideDefault)

               button.textContent = 'show';

               else

               button.textContent = 'hide';

               button.onclick = function ani_sections_onclick() {

                   if(innerSectionFix.style.display == 'none') {

                     innerSectionFix.style.display = 'block';

                     this.textContent = 'hide'; }

                   else {

                     innerSectionFix.style.display = 'none';

                     this.textContent = 'show'; }

               }

               header.insertBefore(button,header.firstChild);

               button.style.cssText='float: right';

               if(hideDefault) innerSection.style.display='none';

           })();

       }

   });

}

// }}}



/* proof of concept for edit summary length. Not yet converted to wikipedia

<script>

window.onload = function() {

	var box = document.getElementById("editsummary")

	var len = document.getElementById("length_value")

	function utfslop(s) {

		var count = 3;

		for(var i=0;i<s.length;i++) {

			if(s[i] > '\u007f') count++;

			if(s[i] > '\u07ff') count++;

		}

		return count;

	}

	box.onkeypress = function(evt) {

		this.maxLength = 255 - utfslop(this.value);

		if(this.value.length > this.maxLength)

			this.value = this.value.substr(0,this.maxLength);

	}

}

</scr\ipt>

<input id="editsummary">

<input id="length_value">

*/



/* addOnloadHook(function() {

   var item = mw.util.addPortletLink('p-cactions','','ßsocks','ca-betasocks','Check socks with Betacommand\'s tool','',null);

   var link=item.firstChild;

   link.onclick = function() {

       jsMsg('<form action="http://tools.wikimedia.de/~betacommand/cgi-bin/compare">'+

'<table>' +

'<tr><th>Master<\/th><td><input name="master"><\/td><\/tr>' +

'<tr><th>Socks<\/th><td><input name="socks"><\/td><\/tr>' +

'<tr><th>Key<\/th><td><input name="key"><\/td><\/tr>' +

'<tr><td colspan="2"><input type="submit"><\/td><\/tr><\/table>'+'<\/form>','betasocks');

       return false;

   }

}); */



$(function() {

   var p = document.getElementById("p-logo");

   if(!p) return;

   var a = p.firstChild;

   while(a.nodeType != 1) a = a.nextSibling;

   var done = false;

   a.onclick = function() {

       if(!done) this.style.backgroundImage = 'none';

       var ret = done; done = true; return ret;

   }

});



/* convert this bookmarklet later on. javascript:(function(){if(!window['$ssZapClosedXFD']){var x=document.createElement('STYLE');x.textContent='.xfd-closed{display:none} .boilerplate.metadata.vfd{display:none}';

document.getElementsByTagName('HEAD')[0].appendChild(x);

window['$ssZapClosedXFD']=x.sheet}else{

window['$ssZapClosedXFD'].disabled=!window['$ssZapClosedXFD'].disabled}})(); */



/* snippet for WP:AN semi-protection, look at later

if (wgEditRestriction.length > 0) {

  addOnloadHook(function() {

    var msg_cantedit = document.getElementById("cantedit-msg");

    var msg_isprotected = document.getElementById("isprotected-msg");

    if(!msg_cantedit && !msg_isprotected) 

    var canEdit = false;

    for(var i=0;i<wgUserGroups.length;i++) {

        for(var ii=0;ii<wgEditRestriction.length;ii++) {

            if(wgUserGroups[i] == wgEditRestriction[ii]) canEdit = true;

        }

    }

    if(canEdit) { if(msg_isprotected) msg_isprotected.style.display='block'; }

    else { if(msg_cantedit) msg_cantedit.style.display='block'; }

  });

}

*/



if(wgPageName == 'Special:Watchlist') {

  addOnloadHook(function() {

    document.forms0].method = 'get'; // TODO make more robust

  });

}



function addEditWarnings(warntext) {

  if(!warntext) warntext = "Are you sure you want to edit this page?";

  function do_warn() {

    return confirm(warntext);

  }

  var spans = document.getElementsByTagName('SPAN');

  for(var i=0;i<spans.length;i++) {

    if(/\beditsection\b/.test(spansi].className)) mkEvt(spansi],'click',do_warn);

  }

  mkEvt(document.getElementById('ca-edit'),'click',do_warn);

}



function logCalls(obj,prop) {

    var oldfn = objprop];

    objprop = (function(ofn,nm) {

    return (function() 

    {

        var ret = ofn.apply(this,arguments);

        console.debug("called %s on %o with arguments %o, returned %o",nm,this,arguments,ret);

    });

    })(oldfn,prop);

}



logCalls(window,'hookEvent');

logCalls(window,'addHandler');

logCalls(window,'addClickHandler');







$(function() {

  var uploadtab = document.getElementById('t-upload');

  if(!uploadtab) return

  var uploadtablink = uploadtab.getElementsByTagName('a')[0];

  if(!uploadtablink) return;

  uploadtablink.href = wgArticlePath.replace('\$1','Special:Upload');

});



function shortenTabs() {

    function st(id, text) {

     try {

      document.getElementById(id).getElementsByTagName('A')[0].textContent = text;

      } catch(x) {}

    }

    function img(src,alt) {

        var x=document.createElement('IMG');

        x.src=src;

        x.alt=alt;

        return x;

    }

    st('ca-edit','Edit');

    st('ca-talk','Talk');

    st('ca-delete','Delete');

    st('ca-protect','Prot.');

    var unprotect = document.getElementById('ca-unprotect');

    if(unprotect) {

       unprotect = unprotect.getElementsByTagName('A')[0];

       unprotect.textContent = '';

       if(wgRestrictionEdit0 && wgRestrictionEdit0 == "autoconfirmed")

            unprotect.appendChild(img('http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Padlock-silver-medium.svg/16px-Padlock-silver-medium.svg.png','SP'));

       if(wgRestrictionEdit0 && wgRestrictionEdit0 == "sysop")

            unprotect.appendChild(img('http://upload.wikimedia.org/wikipedia/en/thumb/5/59/Padlock.svg/16px-Padlock.svg.png','FP'));

       else if(wgRestrictionMove0 && wgRestrictionMove0 == "sysop")

            unprotect.appendChild(img('http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Padlock-olive.svg/16px-Padlock-olive.svg.png','MP'))

    }

}



$(shortenTabs);



// Twinkle Lite

importScript('User:AzaToth/morebits.js');

importScript('User:AzaToth/twinklefluff.js');

//importScript('User:AzaToth/twinklewarn.js');

//importScript('User:AzaToth/twinklearv.js');

//importScript('User:AzaToth/twinklespeedy.js');

importScript('User:AzaToth/twinklediff.js');

//importScript('User:AzaToth/twinkleprotect.js');

//importScript('User:AzaToth/twinkleprod.js');

//importScript('User:AzaToth/twinklexfd.js');

//importScript('User:AzaToth/twinkleimage.js');

//importScript('User:AzaToth/twinkleunlink.js');

//importScript('User:AzaToth/twinkledelimages.js');

//importScript('User:AzaToth/twinkledeprod.js');

//importScript('User:AzaToth/twinklebatchdelete.js');

//importScript('User:AzaToth/twinklebatchprotect.js');

//importScript('User:AzaToth/twinkleimagetraverse.js');



// install [[User:Cacycle/wikEdDiff]] enhanced diff view using ajax

document.write('<script type="text/javascript" src="'

+ 'http://en.wikipedia.org/?title=User:Cacycle/wikEdDiff.js'

+ '&action=raw&ctype=text/javascript&dontcountme=s"><\/script>');



/*

var fractions = {

2:{1:'½'},3:{1:'⅓',2:'⅔'},4:{1:'¼',3:'¾'},8:{1:'⅛',3:'⅜',5:'⅝',7:'⅞'}

/*,5:{1:'⅕',2:'⅖',3:'⅗',4:'⅘'},6:{1:'⅙',5:'⅚'}*//*

};



function fixfracs() {

 var spans = document.getElementsByTagName('SPAN');

 for(var i=0;i<spans.length;i++) { var span=spans[i];

   if(span.className != 'template-frac') continue;

   var den = span.lastChild.textContent;

   var num = span.firstChild.textContent;

   if(fractions[den] && fractions[den][num]) {

   span.textContent = fractions[den][num];

   span.className = 'template-frac-vulgarized';

  }

 }

}



$(fixfracs);

*/



function toolsbreak() {

function del(x) {

var y = document.getElementById(x);

if(!y) return;

document.removeElement(y)

}

del("ca-delete");

del("ca-undelete");

del("ca-protect");

// not removing ca-unprotect since i've configured it to show

// accurate information about the current protection status

del("t-blockip");

}



$(toolsbreak);