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.
// [[User:Lupin/popups.js]]

mw.loader.load(
             'https://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
             + '&action=raw&ctype=text/javascript&dontcountme=s');
// [[User:Lupin/popups.js]]

mw.loader.load(
             'https://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
             + '&action=raw&ctype=text/javascript&dontcountme=s');
//Interiot2

mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Interiot/Tool2/code.js&action=raw&ctype=text/javascript');

//Interiot's javascript edit counter
if (document.title.indexOf('User:Interiot/Tool2/code.js') != -1) {
  mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Interiot/Tool2/code.js&action=raw&ctype=text/javascript'); }

//<nowiki> Admin-like RC Patrol tools

document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:VoA/monobook.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

//</nowiki>[[Category:Wikipedians who use RC script ]]

 //<nowiki> Helper tools
mw.loader.load(
             'https://en.wikipedia.org/w/index.php?title=User:Voice_of_All/Addtabs/monobook.js'
             + '&action=raw&ctype=text/javascript&dontcountme=s');
//</nowiki>

 //<nowiki> Replace txt
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:Voice_of_All/replacetxt.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//</nowiki>[[Category:Wikipedians who use VoA script |{{PAGENAME}}]]

 //<nowiki> Replace txt
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:Voice_of_All/Deletion/monobook.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//</nowiki>[[Category:Wikipedians who use VoA script |{{PAGENAME}}]]


 //<nowiki> History tools
mw.loader.load(
             'https://en.wikipedia.org/w/index.php?title=User:Voice_of_All/History/monobook.js'
             + '&action=raw&ctype=text/javascript&dontcountme=s');

//</nowiki>[[Category:Wikipedians who use VoA script |{{PAGENAME}}]]

 //<nowiki> Log tools
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:Voice_of_All/Sleeper/monobook.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

//</nowiki>[[Category:Wikipedians who use VoA script |{{PAGENAME}}]]

 //<nowiki> Google tools && Spelling
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:Voice_of_All/Google/monobook.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//</nowiki>[[Category:Wikipedians who use VoA script |{{PAGENAME}}]]

// <pre><nowiki>

//From http://en.wikipedia.org/w/index.php?title=User:JesseW/monobook.js&oldid=20755510
function addSinceTab() {
    var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
    if (window.location.href.indexOf("&action=history&gotosince=true")!=-1) {
       do_since_I_last_edited()
    }
    else if (!/wiki\/Special:|w\/index.php?title=Special:/.test(window.location.href)) {
       var thetitle=document.title.slice(0, String(document.title).indexOf(" - "));
       var l=addlilink(tabs, "/w/index.php?title="+thetitle+"&action=history&gotosince=true", 'Changes since I last edited', '');
       l.lastChild.title="Changes since I last edited";
    }
}
function do_since_I_last_edited() {
        var csub=document.getElementById("contentSub");
        var msg=document.createElement("p");
        msg.appendChild(document.createTextNode
                        ("Parsing history... please wait..."));
        msg.className="error";
        csub.insertBefore(msg, csub.firstChild)

        var username=document.getElementById("pt-userpage").textContent;
        var hists=document.getElementById("pagehistory").getElementsByTagName('li');
        for (n=0;n<hists.length;n++) {
            if (hists[n].getElementsByTagName("span")[0].getElementsByTagName('a')[0].textContent==username) {
                document.location=hists[n].childNodes[1].href; 
                return;
            }
        }

        msg.replaceChild(document.createTextNode
                         ("You have not edited this page! (recently)"),
                         msg.firstChild);
}

addOnloadHook(addSinceTab);

// </nowiki></pre>


//<pre><nowiki>

document.write(
    '<st' + 'yle type="text/css">            ' +
    ' div.audiolinkbox {                     ' +
    '     border:2px solid rgb(170,170,170); ' +
    '     background-color:rgb(250,250,250); ' +
    '     position:absolute;                 ' +
    '     margin:-1.2em;                     ' +
    '     display:none;                      ' +
    ' }                                      ' +
    '<' + '/style>'
    );

addOnloadHook(function () {
    
    function lightup () {
        this.audioPop.style.display="inline";
    }

    function lightout () {
	var savedThis=this;
	clearInterval(this.lightTimer);
	this.lightTimer=setInterval(function(){hideAudioPop(savedThis);}, 2000);
    }

    function hideAudioPop (caller) {
	clearInterval(caller.lightTimer);
	caller.audioPop.style.display="none";
	caller.audioPop.onmouseout = null;
    }

    function mouseoverAudioPop () {
	var hotspot = this.hotspot;
	if (!hotspot) { return; }
	clearInterval(hotspot.lightTimer);
	this.onmouseout = function () {
	    hotspot.lightTimer=setInterval(function(){hideAudioPop(hotspot);},2000);
	};
    }

    /* Get all the span tags */
    spans = document.getElementsByTagName('span');

    /* go through them all */
    for (i=0;i<spans.length;i++) {
    /* If the span is class audiolinkinfo */
        if (spans[i].className.indexOf("audiolinkinfo") != -1) {
            /* Put it in a box */
            box = document.createElement('div');
            box.className="audiolinkbox";
            spans[i].parentNode.insertBefore(box,spans[i]);
            box.appendChild(spans[i]);
            /* Remove the parentheses */
            insidebox = spans[i].firstChild
            for (j=0;j<insidebox.childNodes.length;j++) {
                if (insidebox.childNodes[j].textContent == "(" || 
		    insidebox.childNodes[j].textContent == ")") {
                    insidebox.removeChild(insidebox.childNodes[j])
                }
            }
            /* Add the hover thing to the audiolink span */
	    var hotspot = spans[i-1];
            hotspot.onmouseout=lightout;
            hotspot.onmouseover=lightup;
	    hotspot.audioPop=box;
	    box.hotspot = hotspot;
	    box.onmouseover = mouseoverAudioPop;
        }
    }

});

function stopRedlinksEditing(){ 
    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','')
                         .replace('Special:Upload&wpDestFile=', 'Image:');
        }
    }
}
addOnloadHook(stopRedlinksEditing);

function listRedLinks() {
        var len=document.links.length;
        var output=document.createElement('div');
        output.innerHTML='<h2>Red links</h2>';
        var gotSome=false;
        for (var i=0; i<len; ++i) {
                if (document.links[i].className=='new') {
                        gotSome=true;
                        var l=document.links[i].cloneNode(true);
                        output.appendChild(l);
                        output.appendChild(document.createElement('br'));
                }
        }
        if (gotSome){
                output.appendChild(document.createElement('hr'));
                var h1=document.getElementsByTagName('h1')[0];
                h1.parentNode.insertBefore(output, h1.nextSibling);
        }
}
addOnloadHook(function(){addToolboxLink('javascript:listRedLinks()', 'List red links');});

document.write('<!--[if IE]><link rel="stylesheet" type="text/css" href="' +
               'http://localhost:8080/js/ie.css"><![endif]-->');

window.annoy={ freq: 1000*60*15, duration: 1000*60, 
  target: 'http://en.wikipedia.org/wiki/Wikipedia:Recovering_from_Wikipediholism' };


loadJS('[[User:Lupin/watchlistfilter.js]]');
//loadJS('[[User:Lupin/annoy.js]]');
loadJS('[[User:Lupin/listsince.js]]');

// Filter changes live
loadJS('[[User:Lupin/recent2.js]]');

// Show diffs on recent changes, history pages and so on
loadJS('[[User:Lupin/recentdiffs.js]]');

var isIE=((self.navigator.appName).indexOf("Microsoft")!=-1);
if (!isIE) loadJS('[[User:Zocky/PicturePopups.js]]');

//loadJS('[[User:Zocky/CategoryBrowser.js]]');

window.localCSS=true;
//loadJS('[[User:Lupin/popupsdev.js]]');
tmpJS('popupsdev.js');
popupAdminLinks=true; popupShortcutKeys=true; popupFixDabs=true;
popupPreviewKillTemplates=false; popupPreviewFirstParOnly=false;
popupOnlyArticleLinks=false;
popupEditCounterTool='interiot';
popupExtraUserMenu='<menurow><<monobook|shortcut=M>>|<<editMonobook|edit>></menurow>';
popupFixRedirs=true;
popupRedlinkRemoval=true;
popupStructure='menus';
//removeTitles=false;

extraPopupFilters=[
 function(data) { if (/[{]{2}[Ff]eatured article[}]{2}/.test(data) )
   return '<img src="http://upload.wikimedia.org/wikipedia/en/thumb/c/cf/Cscr-featured.png/7px-Cscr-featured.png">'; 
   else return ''; }
];

//popupLiveOptions=true;

// loadJS('[[User:Lupin/editblind.js]]');

loadJS('[[User:Lupin/sectionkeys.js]]');
addOnloadHook(function(){window.popupShortcutKeys=true;}); // for testing

if (location.href == "http://en.wikipedia.org/wiki/User:Jitse_Niesen/Client-side_preferences") loadJS('[[User:Jitse_Niesen/Client-side_preferences/Main.js]]'); 

/////////////////////////
// messy stuff
/////////////////////////

addOnloadHook(function(){if (/Special(%3[Aa]|:)(Newpages|Recentchanges)/.test("Not Your Business!")) document.getElementsByTagName('h1')[0].innerHTML += ' - <a href="http://www.google.com/search?q=' + document.title.split(' - ')[0].split(' ').join('+') + '">FGI</a>';});


function addRefsLinks(btn) {
  var pageTitle=document.getElementsByTagName('h1')[0].innerHTML;
  var lks=document.links;
  var refReq=refsContent(pageTitle);
  for (var i=0; i<lks.length; ++i) {
    var article=articleFromURL(lks[i].href);
    if(!article) continue;
    var talk=null;
    if (!userName(article)) continue;
    talk=talkPage(article);
    if(!talk) continue;
    var a=document.createElement('a');
    a.href=titlebase + talk +
      '&action=edit&autoedit=s#$#\n' + refReq + ' ~~~~#&autoclick=' +
      btn + 
      '&autosummary=References for [['+
      pageTitle+
      ']]';
    var tt=document.createTextNode(' . . ');
    a.innerHTML='request references';
    lks[i].parentNode.appendChild(tt);
    lks[i].parentNode.appendChild(a);
  }
}
function refsContent(pageTitle) {
  var refRequests=['\\n\\n{{subst:unref-talk|%s}}',
    '\\n\\n==Missing refs==\\n\\nHi! I noticed that [[%s]] doesn\'t seem to have any refs, and you\'ve written a fair bit of it. Please could you add some when you get a chance? Thanks!',
    '\\n\\n==Refs?==\\n\\nHello, any chance of adding refs to [[%s]]? Cheers,',
    '\\n\\n==References for [[%s]]==\\n\\nHowdy. Do you remember the references you used when you wrote [[%s]]? If you could add them in, it\'d improve the article. Thanks in advance,',
    '\\n\\n==References needed==\\n\\nHello, I\'d like to verify [[%s]] but have no references. Please could you add the sources you used to write the article? Cheers,',
    '\\n\\n==References==\\n\\nHello! I noticed that [[%s]] doesn\'t have any references or sources. Although the contents of that article do seem like "common knowledge", it would still be helpful if you could mention your sources. Many thanks,',
    '\\n\\n==[[%s]]==\\n\\n...is unsourced. Please fix. Thanks,',
    '\\n\\n==References for [[%s]]==\\n\\nHi! I realise that it\'s been some time since you edited [[%s]], but it would be great if you could remember the references you used and add them to the page. Thanks!'
  ];
  var promptText='Select reference request:';
  for (var i=0; i<refRequests.length; ++i) { promptText += '\n\n'+i+': '+ refRequests[i];}
  var response=parseInt(prompt(promptText));
  if(!response || isNaN(response) || response >= refRequests.length || response < 0) response=0;
  return refRequests[response].split('%s').join(pageTitle);
}

var refs=addRefsLinks;

//ta['search'] = ['/','Search this wiki'];
//addOnloadFunction(function(){document.getElementById('searchInput').accessKey='/';});

function removeAccessKeys(keylist) {
  var t=document.getElementsByTagName('A'), u=document.getElementsByTagName('input');
  for (var i=0; i<t.length+u.length; ++i) {
    var s=((i<t.length) ? t[i] : u[i-t.length]);
    for (var j=0; j<keylist.length; ++j) if (s.accessKey==keylist[j]) s.accessKey='';
  }
};

function removeAnnoyingKeys() {removeAccessKeys(['d','f']);}
addOnloadFunction(removeAnnoyingKeys);


function fixWatchlistLink () {
  for (var i=0; i<document.links.length; ++i) {
    if (document.links[i].href.indexOf('Special:Watchlist')>0) {
      document.links[i].href+='?hideOwn=1';
      break;
    }
  }
};

if (!isIE)
{
  addOnloadFunction(fixWatchlistLink);
}

// summary nag

function perhapsSave(ev)
{
   var sum = document.getElementsByName('wpSummary');
   var submit = true;
   if (sum.length > 0) {
      sum = sum[0];
      if (isBadSummary(sum.value)) {
         if (!document.getElementById('jn-fillIn')) {
            var div = document.createElement('p');
            div.appendChild(document.createTextNode('Fill in the summary!'));
            div.setAttribute('style', 'color: #f00; font-size: 150%;');
            div.id = 'jn-fillIn';
            sum.parentNode.insertBefore(div, sum.nextSibling);
         }
         sum.focus();
         submit = false;
      }
   }
   if (submit) {
      var btn = document.getElementById('wpSave');
      btn.onclick = null;
      btn.setAttribute('type', 'submit');
      btn.click();
   }
}

function isBadSummary(str) {
  var sumRe=RegExp('^ *$|^/[*].*?[*]/ *$');
  return (sumRe.test(str));
}

function modifySaveButton()
{
   // action=edit for edit pages, action=submit for previews
   var loc=window.location.href;
   if ((loc.indexOf('&action=edit') != -1 || 
        loc.indexOf('&action=submit') != -1
       ) && loc.indexOf(':Lupin') == -1 ) {
      var btn = document.getElementById('wpSave');
      if (btn) { 
	      btn.setAttribute('type', 'button');
	      btn.onclick = perhapsSave;
      }
   }
}

if(!isIE) addOnloadFunction(modifySaveButton);



////////////////////////////////////////////////////////////////
// Evaluator
// Source: http://krolik.net/js-eval.shtml

var evaluatorHTML='<FORM ID="Tester" NAME="Tester" onsubmit="return TesterExecute();" >' +
  '<TEXTAREA NAME="MyCommand" COLS=60 ROWS=25 WRAP="off"></TEXTAREA>' +
  '<TEXTAREA NAME="MyResult" COLS=40 ROWS=25 WRAP="off"></TEXTAREA>' + 
  '<BR>' + 
  '<INPUT TYPE=BUTTON value="Show Object" onclick="ObjectDumpClicked();" >' + 
  '<INPUT TYPE=BUTTON value="Execute" onclick="TesterExecute();">' + 
  '</FORM>';

function ObjectDump(strObject) 
{
  var strOutput; 
  var vTemp; 
  var vAnotherTemp; 
  var vElement;
  vElement = eval(strObject); 
  strOutput = "typeof = " + typeof(vElement) + "\n\n";
  AppendOutput(strOutput);
  for (var x in vElement )  
  { 
   vTemp = strObject + "." + x.toString() ; 
   vAnotherTemp = strObject + "[" + x + "]" ; 
   strOutput = strOutput + vTemp + " = " + eval(vTemp) + "\n";
   AppendOutput(vTemp + " = " + eval(vTemp) + "\n");
  } 
  return strOutput ;  
 } 
 function AppendOutput(strText)
 {
  document.Tester.MyResult.value = document.Tester.MyResult.value + strText;
 }
 function Output(strText)
 {
  document.Tester.MyResult.value = strText;
 }
 function ObjectDumpClicked() 
 {
  document.Tester.MyResult.value="";
  ObjectDump(document.Tester.MyCommand.value); 
  return false;
 }
 function TesterExecute() 
 {       
  document.Tester.MyResult.value="";
  document.Tester.MyResult.value=eval(document.Tester.MyCommand.value); 
  return false;
 }

function addEvaluator() {
  try { 
    var evalNode=document.createElement('div');
    evalNode.id='evalNode';
    evalNode.innerHTML=evaluatorHTML;
    document.body.appendChild(evalNode);
    document.Tester=document.getElementById('Tester'); 
  }
  catch(err){};
}

if(!isIE || true) addOnloadFunction(addEvaluator);

//
// end evaluator
////////////////////////////////////////////////////////////////


// testing 
// Useful stuff from [[Wikipedia:WikiProject_User_scripts]]

function addToolboxLink(url, name, id){
  var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
  addlilink(tb, url, name, id);
}

function addlilink(tabs, url, name, id, title, key){
  var na = document.createElement('a');
  na.href = url;
  na.appendChild(document.createTextNode(name));
  var li = document.createElement('li');
  if(id) li.id = id;
  li.appendChild(na);
  tabs.appendChild(li);
  if(id) {
    if(key && title) ta[id] = [key, title];
    else if(key)     ta[id] = [key, ''];
    else if(title)   ta[id] = ['', title];
  }
  // re-render the title and accesskeys from existing code in wikibits.js
  akeytt();
  return li;
}

function addTab(url, name, id, title, key){
    var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
    addlilink(tabs, url, name, id, title, key);
}

function addPurge(){
    ta['ca-purge'] = ['g', 'Purge the internal cache for this page'];
    var x = document.getElementById('ca-history');
    if(!x) return;
    if(x.children) x = x.children[0].href;
    else x = x.childNodes[0].href;
    addTab(x.replace(/=history/, "=purge"), 'purge', 'ca-purge');
    akeytt();
}

// culled from [[User:Lupin/popups.js]]

function nichalp_articleFromURL(h) {
  if (typeof h != 'String') h=String(h);
  h=decodeURI(h);
  var m=RegExp('[^:]*://en\\.wikipedia\\.org/(wiki/|w/index\\.php\\?title=)([^&?]*)').exec(h);
  if(m===null) return null;
  return m[2];
}

function nichalp_isIpUser(user) {
  return RegExp('(User:)?' + 
                '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}' + 
                '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])')
    .test(user);
}

function nichalp_removeAnchor(article) {
  // is there a #? if not, we're done
  var i=article.indexOf('#');
  if (i == -1) return article;
  return article.substring(0,i);
}

function nichalp_userName(article) {
  var i=article.indexOf('User');
  var j=article.indexOf(':');
  if  (i != 0 || j == -1) return null;
  var k=article.indexOf('/');
  if (k==-1) return article.substring(j+1);
  else return article.substring(j+1,k);
}

// do it

function nichalp_customLinks() {
  addPurge();
  var article=nichalp_articleFromURL(document.location.href);
  if (!article) return;
  var user=nichalp_userName(article);
  if(!user) return;
  user=nichalp_removeAnchor(user);
  if (!nichalp_isIpUser(user)) {
    addToolboxLink('http://kohl.wikimedia.org/~kate/cgi-bin/count_edits?dbname=enwiki&user='+user, user+"'s edit count", 'toolbox_katestool');
  }
  var special='http://en.wikipedia.org/w/index.php?title=Special:';
  addToolboxLink(special + 'Log&user='+user, user+"'s log", 'toolbox_userlog');
  addToolboxLink(special + 'Blockip&ip='+user, 'Block '+user, 'toolbox_blockuser'); 
  addToolboxLink(special + 'Special:Ipblocklist&action=unblock&ip='+user, 'Unblock '+user, 'toolbox_unblockuser'); 
}
/*
</nowiki></pre>
*/