User:Adrian~enwiki/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 can be added at User:Adrian~enwiki/monobook.css. |
<!--
// -->[[User:Quarl/monobook.js]] is '''[[User:Quarl]]'s Wikipedia user script toolkit.'''
<!--
// See [[User:Quarl/monobook]] for a marked-up version of this page.
// -->
<!--
function winc(s) {
s = s.replace(/^\[\[/, '').replace(/\]\]$/, '');
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=' + s
+ '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
function cssinc(s) {
s = s.replace(/^\[\[/, '').replace(/\]\]$/, '');
document.write('<sty'+'le type="text/css">' +
'@import "/w/index.php?title=' + s + '&action=raw&ctype=text/css&dontcountme=s";</style>');
}
// -->
<!--
// -->== Utility library ==
<!--
// -->[[User:Quarl/monobook.js]] is '''[[User:Quarl]]'s Wikipedia user script toolkit.'''
<!--
// See [[User:Quarl/monobook]] for a marked-up version of this page.
// -->
<!--
function winc(s) {
s = s.replace(/^\[\[/, '').replace(/\]\]$/, '');
document.write('<scr'+'ipt type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=' + s
+ '&action=raw&ctype=text/javascript&dontcountme=s"></scr'+'ipt>');
}
// -->
<!--
// -->== Utility library ==
winc('[[User:Quarl/wistk.js]]'); // Dependencies
winc('[[User:Quarl/util.js]]'); // Utility functions
winc('[[User:Quarl/md5.js]]'); // md5 functions
winc('[[User:Quarl/wikitabs.js]]'); // functions for adding tabs, etc. (by Quarl)
cssinc('[[User:Quarl/wikitabs.css]]'); // styles required by wikitabs.js
winc('[[User:Quarl/wikipage.js]]'); // WikiPage class (by Quarl)
winc('[[User:Quarl/datetime.js]]'); // defines ISO timestamp functions (by Quarl)
winc('[[User:Quarl/wikipageAfd.js]]'); // AFD stuff for WikiPage (by Quarl)
winc('[[User:Quarl/wikiedit.js]]'); // WikiEditor (by Quarl)
winc('[[User:Quarl/wikistate.js]]'); // Persist state throughout session (by Quarl)
winc('[[User:Quarl/autoreplace.js]]'); // allows automatically replacing strings on 'submit' (by Quarl)
winc('[[User:Quarl/automod.js]]'); // defines functions for automatically modifying page (originally by Jnothman, version by Quarl)
winc('[[User:Quarl/diff.js]]'); // diff functions (by Quarl, diff() by John Resig)
winc('[[User:Quarl/cookie.js]]'); // cookie helpers
winc('[[User:Quarl/shortcuts.js]]'); // Shortcuts class (by Quarl)
winc('[[User:Quarl/diffsince.js]]'); // utilities for doing "diff since" (by Quarl)
winc('[[User:Quarl/wikiwatch.js]]'); // utilities for watching/unwatching (by Quarl)
winc('[[User:Quarl/autoedit.js]]'); // auto-editing class (by Quarl)
<!--
// -->== Modules ==
// winc('[[User:Adrian/sig.js]]'); // advanced custom signatures (by Quarl)
winc('[[User:Quarl/popups.js]]'); // Popups (by Lupin, small modifications)
winc('[[User:Quarl/rollback.js]]'); // rollback button (based on Sam Hocavar's Godmode-Light, version by Quarl)
winc('[[User:Quarl/autoafd.js]]'); // autoafd (version by Quarl)
winc('[[User:Quarl/afd_vote.js]]'); // AFD voting helpers (originally by Jnothman, version by Quarl)
winc('[[User:Quarl/autotag.js]]'); // tab button for auto tagging (by Quarl)
winc('[[User:Quarl/copyvio.js]]'); // mark as copyvio and list on log page (by Quarl)
winc('[[User:Quarl/edit_top_link.js]]'); // add 'edit top' (section 0) link (version by Quarl)
winc('[[User:Quarl/show_diff_last.js]]'); // show last diff; 'last' tab button (version by Quarl)
winc('[[User:Quarl/show_diff_since.js]]');// show changes since last edited (async version); 'since' tab button (by Quarl)
winc('[[User:Quarl/auto_testn.js]]'); // tabs for test/test-n templates (version by Quarl)
winc('[[User:Quarl/hide_own.js]]'); // change Watchlist link to default to 'hide own' (by ...)
winc('[[User:Quarl/watchlist.js]]'); // add 'unwatch' and 'diff since' buttons to watchlist (by Quarl)
winc('[[User:Quarl/watchbutton.js]]'); // asynchronous watch/unwatch tabs (by Quarl)
winc('[[User:Quarl/autofocus.js]]'); // automatically focus edit boxes (by Quarl)
winc('[[User:Quarl/autocloseafd.js]]'); // tab button for closing AFD (by Quarl)
winc('[[User:Quarl/toolbox_edit_count.js]]') // toolbox links to Interiot's edit count tool (by Quarl)
winc('[[User:Quarl/toolbox_logs.js]]'); // toolbox links to Logs (version by Quarl)
winc('[[User:Quarl/nav_afd.js]]'); // nav links to AFD log pages (by Quarl)
winc('[[User:Quarl/directredirect.js]]'); // buttons for automatically fixing double redirects (by Quarl)
winc('[[User:Quarl/location_canonicalize.js]]'); // locz button for canonicalizing locations (by Quarl)
winc('[[User:Quarl/date_canonicalize.js]]'); // datez button for canonicalizing dates (by Quarl)
winc('[[User:Quarl/coor_canonicalize.js]]'); // coorZ button for canonicalizing coordinates (by Quarl)
winc('[[User:Quarl/imdb_canonicalize.js]]'); // imdbZ button for canonicalizing IMDB links (by Quarl)
winc('[[User:Quarl/alexafy.js]]'); // toolbox button to Alexafy external links (version by Quarl)
winc('[[User:Quarl/userscript.js]]'); // user script helpers ('raw' tab, 'refresh' tab, autorefresh) by Quarl
winc('[[User:Quarl/auto_summary.js]]'); // auto summary based on diff; shortcuts (by Quarl)
winc('[[User:Quarl/smartsubmit.js]]'); // asynchronous preview/diff buttons (by Quarl)
winc('[[User:Quarl/purge.js]]'); // 'purge' tab button
winc('[[User:Quarl/newmessages.js]]'); // add history and diffsince links to new-messages box (by Quarl)
//winc('[[User:Quarl/external_editor.js]]'); // add tab for "ext edit" (by Quarl)
<!--
// -->== Quarl specific ==
winc('[[User:Quarl/nav_custom.js]]'); // navigation box customizations (by Quarl for Quarl)
// winc('[[User:Quarl/sandbox.js]]'); // testing stuff
wistk.depend('sandbox.js');
//qwrite_flush();
<!--
// -->== Settings ==
popupDelay=1.0;
popupActionsMenu=false;
//qwrite_flush();
<!--
// -->== Settings ==
simplePopups = false;
popupAdminLinks = true;
popupStructure='original';
popupDragging='true';
popupFixRedirs='true';
popupFixDabs='true';
popupEditCounterTool='interiot';
popupRevertSummary='rv to revision ID %s'
popupExtraUserMenu='true'
popupLiveOptions=true
/*
This tool hits the RSS feed for recent changes every 30 seconds or so
and checks for common vandalism. It does not make a separate server request
for every edit.
Currently, the RSS feed is full of holes and so this may miss many edits.
http://bugzilla.wikimedia.org/show_bug.cgi?id=3942
*/
// <pre><nowiki>
//DOWNLOADER
window.recent2_download=function(bundle) {
// mandatory: bundle.url
// bundle.onSuccess
// bundle.onFailure
// bundle.otherStuff OK too
var x = window.XMLHttpRequest ? new XMLHttpRequest()
: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")
: false;
if (x) {
x.onreadystatechange=function() {
x.readyState==4 && recent2_downloadComplete(x,bundle);
};
x.open("GET",bundle.url,true);
// x.setRequestHeader('Accept','text/*');
x.send(null);
}
}
window.recent2_downloadComplete=function(x,bundle) {
x.status==200 && ( bundle.onSuccess && bundle.onSuccess(x,bundle) || true )
|| ( bundle.onFailure && bundle.onFailure(x,bundle) || alert(x.statusText));
}
window.gettingBadWords=false;
window.badWords=null;
window.recent2_getBadWords=function() {
window.gettingBadWords=true;
recent2_download( { url: 'http://en.wikipedia.org/w/index.php?title=User:Lupin/badwords&action=raw&ctype=text/css',
onSuccess: recent2_processBadWords, onFailure: function () { recent2_runOnce(recent2_getBadWords, 15000); return true;}});
}
window.recent2_processBadWords=function(d) {
var data=d.responseText.split('\n');
var ret=[];
for (var i=0; i<data.length; ++i) {
var s=data[i];
if (s.length==0) continue;
if (s.charAt(0)=='<') continue;
ret.push(s.replace(RegExp('([-|.()\\+:!,?*^${}\\[\\]])', 'g'), '\\$1'));
}
// (( repeatedchar ) | ( ... | ... | ... ))( bdy )
window.badWords=RegExp("<td>[+]</td><td .*?>.*?(([^-{}.\\s'=wI:*#0-9A-F])\\2{2,}|\\b(" + ret.join('|') + "))(\\b|[|]).*</td>", 'im');
}
window.gettingWatchlist=false;
window.watchlist=null;
window.getWatchlist=function() {
window.gettingWatchlist=true;
recent2_download({url: 'http://en.wikipedia.org/wiki/Special:Watchlist/edit',
onSuccess: processWatchlist, onFailure: function () { recent2_runOnce(getWatchlist, 15000); return true; }});
}
window.processWatchlist=function(req, bundle) {
var watchlist={};
var lines=req.responseText.split('\n');
for (var i=0; i<lines.length; ++i) {
if (lines[i].indexOf('<li><input type="checkbox" name="id[]" value=') > -1) {
var article=lines[i].replace(/.*title="(.*?)">.*/, '$1');
watchlist[article]=true;
}
}
window.watchlist=watchlist;
}
window.recent2_runOnce=function(f, time) {
var i=recent2_runOnce.timers.length;
var ff = function () { clearInterval(recent2_runOnce.timers[i]); f() };
var timer=setInterval(ff, time);
recent2_runOnce.timers.push(timer);
}
recent2_runOnce.timers=[];
var feed='http://en.wikipedia.org/w/index.php?title=Special:Recentchanges&feed=rss';
window.newOutputDiv=function(klass, position) {
var h1=document.getElementsByTagName('h1')[0];
var ret=document.createElement('div');
if (klass) ret.className=klass;
if (!position) position='bottom';
switch(position) {
case 'top':
h1.parentNode.insertBefore(ret, h1.nextSibling);
break;
case 'bottom':
h1.parentNode.appendChild(ret);
break;
default:
if (!newOutputDiv.alerted) {
alert('Unknown position '+position+' in recent2.js, newOutputDiv');
window.newOutputDiv.alerted=true;
}
return newOutputDiv(klass, 'bottom');
}
ret.id=newOutputDiv.uid++;
window.outputDivs.push(ret);
return ret;
}
window.newOutputDiv.alerted=false;
window.newOutputDiv.uid=0;
window.outputDivs=[];
window.grabRecentChanges=function(feed) {
if (! window.badWords && window.recent2_filter_badwords ) {
if ( ! window.gettingBadWords ) recent2_getBadWords();
return recent2_runOnce(function(){grabRecentChanges(feed);}, 500);
}
if (! window.watchlist && window.recent2_filter_watchlist) {
if (! window.gettingWatchlist ) getWatchlist();
return recent2_runOnce(function(){grabRecentChanges(feed);}, 500);
}
var pos=window.recent2_outputPosition;
if (window.recent2_outputPosition=='top') {
var output=newOutputDiv('recent2_lines', pos);
var status=newOutputDiv('recent2_status', pos);
} else {
var status=newOutputDiv('recent2_status', pos);
var output=newOutputDiv('recent2_lines', pos);
}
status.style.borderStyle='solid';
status.style.borderColor='orange';
status.innerHTML=greyFont+'(' + count + ') updating...</font>';
recent2_download({url: feed, onSuccess: processRecentChanges, output: output, status: status, onFailure: feedFailed});
}
var greyFont='<font color="#777">';
window.feedFailed=function(x,bundle) {
try { bundle.status.innerHTML+=greyFont+'failed: '+x.statusText + '</font>'; }
catch (err) { bundle.status.innerHTML+=greyFont+'failed badly: '+err+'</font>'; }
return true;
}
window.recent2_newWindows=true;
window.linkmaker=function(url, text) {
var s='<a href="' + url + '"';
window.recent2_newWindows && (s += ' target="_blank"');
s += '>' + text + '</a>';
return s;
}
window.recent2_ipUserRegex=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])');
window.processRecentChanges=function(req, bundle){
var initialId=processRecentChanges.id;
var doc=req.responseXML.documentElement;
var items=doc.getElementsByTagName('item');
var latest=processRecentChanges.lastDate;
var output=[]; // <ul class="special">';
for (var i=0; i< items.length; ++i) {
var timestamp = Date.parse(getFirstTagContent(items[i],'pubDate'));
if (timestamp <= processRecentChanges.lastDate) continue;
latest = (timestamp > latest) ? timestamp : latest;
var diffText=getFirstTagContent(items[i],'description').split('</tr>').join('</tr>\n');
var editSummary=diffText.replace(RegExp('^<p>(.*?)</p>[\\s\\S]*'), '$1');
var editor=getFirstTagContent(items[i], 'creator') || getFirstTagContent(items[i], 'dc:creator');
var articleTitle;
if (window.recent2_filter_anonsOnly && !window.recent2_ipUserRegex.test(editor)) continue;
if (window.recent2_filter_watchlist && (articleTitle=getFirstTagContent(items[i], 'title')) &&
! window.watchlist[articleTitle.replace(/^Talk:/, '').replace(/[ _]talk:/, ':')]) continue;
if (window.recent2_filter_badwords) {
var badMatch=null;
if (window.vandals[editor] > 0) badMatch=['', '[previously rolled back this editor]'];
else badMatch=badWords.test(diffText); // .test() is meant to be faster than a full match
if (badMatch) {
badMatch=diffText.match(badWords);
var article=getFirstTagContent(items[i], 'link');
articleTitle=getFirstTagContent(items[i], 'title');
var id=processRecentChanges.id;
// highlighting
badMatch[0]=badMatch[0].split(badMatch[1]).join('<span style="background-color: #FF6">'+badMatch[1]+'</span>');
output.push(recent2_doLine({timestamp: timestamp, article:article, articleTitle:articleTitle,
editor:editor, id:id, badWord:badMatch[1], badDiffFragment:badMatch[0], diff:diffText,
summary:editSummary}));
processRecentChanges.id++;
}
}
else {
var article=getFirstTagContent(items[i], 'link');
var articleTitle=getFirstTagContent(items[i], 'title');
if (window.recent2_CustomFilter &&
! window.recent2_CustomFilter({timestamp:timestamp, article:article, articleTitle:articleTitle,
editor:editor, diff:diffText, summary:editSummary})) continue;
var id=processRecentChanges.id;
output.push(recent2_doLine({timestamp: timestamp, article:article, articleTitle:articleTitle,
editor:editor, id:id, diff:diffText, summary:editSummary}));
processRecentChanges.id++;
}
} /* end for loop */
//output+='</ul>';
var outputString='';
if (window.recent2_outputPosition=='top') {
outputString=output.join('');
}
else {
for (var i=output.length-1; i>=0; --i) {
outputString+=output[i];
}
}
bundle.output.innerHTML+=outputString;
recent2_runOnce(function() {recent2_doPopups(bundle.output)}, 300);
processRecentChanges.lastDate=latest; // - 1; // overlap better than missing some out, i think; FIXME do this properly
var statusTail=greyFont+'done up to ' + formatTime(latest) + '</font>';
if (processRecentChanges.id > initialId) {
statusTail+=' <a href="javascript:showHideDetailRange(' + initialId + ',' + processRecentChanges.id + ')">toggle these details</a> |';
}
statusTail += ' <a href="javascript:deleteEarlierOutputDivs(' + bundle.status.id + ')">remove earlier output</a>';
statusTail+='<br>';
bundle.status.innerHTML+=statusTail;
}
processRecentChanges.lastDate=0;
processRecentChanges.id=0;
window.deleteEarlierOutputDivs=function(cur) {
for(var i=0; i<outputDivs.length; ++i) {
if (!outputDivs[i] || !outputDivs[i].id) continue;
if (outputDivs[i].id >= 0 && outputDivs[i].id < cur) {
// FIXME BUG: if we go from the bottom up, then we'll delete one too many or too few, or something :-)
outputDivs[i].parentNode.removeChild(outputDivs[i]);
outputDivs[i]=null;
}
}
// scroll to the top if we're appending output to the bottom, to keep the div we've clicked visible after the deletions
if (window.recent2_outputPosition!='top') document.location='#';
}
window.showHideDetailRange=function(start,end) {
// use the first div to see if we should show or hide
var div=document.getElementById('diff_div_' + start);
if (!div) return;
var state=false; // hide
if (div.style.display=='none') state=true; // show
for (var i=start; i<end; ++i) {
showHideDetail(i, true, state);
}
}
window.toggleSysopEdits=function() {
var divs=document.getElementsByTagName('div');
for (var i=0; i<divs.length; ++i) {
if (divs[i].className=='sysop_edit_line') divs[i].style.display= ( toggleSysopEdits.hidden ? 'none' : 'inline' );
}
toggleSysopEdits.hidden = ! toggleSysopEdits.hidden;
}
window.bundles={};
window.vandalColour = function(vandal) {
var num=window.vandals[vandal];
if (!num) return '';
switch (num) {
case 1: return '#DDFFDD';
case 2: return '#BBFFBB';
}
var i= 9-(num - 3) *2;
if (i < 0) i=0;
return '#' + i + i + 'FF' + i + i;
}
window.clickDetails=function(action, max) {
if(!action) action='show';
if (!max) max = document.links.length;
var count=0;
for (var i=0; i<document.links.length && count < max; ++i) {
if(document.links[i].innerHTML==action + ' details' && document.links[i].href.indexOf('javascript:') == 0) {
++count;
eval(document.links[i].href.replace('javascript:', ''));
}
}
}
window.recent2_pendingLines=[];
window.recent2_togglePausedOutput=function() {
if (!window.recent2_pausedOutput) { window.recent2_pausedOutput = true; return true; }
else window.recent2_pausedOutput=false;
var outputBuffer='';
while (window.recent2_pendingLines.length) {
outputBuffer+=recent2_doLine(window.recent2_pendingLines.pop());
}
var pos=window.recent2_outputPosition;
var output=newOutputDiv('recent2_lines', pos);
output.innerHTML=outputBuffer;
return false;
}
window.recent2_togglePaused=function() {
if(!window.recent2_paused) { window.recent2_paused=true; return true; }
window.recent2_paused=false;
loopRecentChanges(loopRecentChanges.url, loopRecentChanges.iterations);
return false;
}
window.recent2_doLine=function(bundle) {
if (window.recent2_pausedOutput) {
window.recent2_pendingLines.push(bundle);
return '';
}
var wikiBase='http://en.wikipedia.org/wiki/';
var sysop = null;
if (typeof sysops != 'undefined') sysop=sysops.test(bundle.editor);
var lastDiffPage=bundle.article + '?diff=cur&oldid=prev';
bundle.url=lastDiffPage;
saveBundle(bundle);
var div='';
if (window.vandals[bundle.editor] > 0) { div='<div style="background-color:' + vandalColour(bundle.editor) + '">'}
else if (sysop) {div='<div class="sysop_edit_line">'};
return div +
'<li>' +
formatTime(bundle.timestamp) + ' ' +
//latest + ' ' + processRecentChanges.lastDate + ' ' +
linkmaker(lastDiffPage, bundle.articleTitle) +
( bundle.badWord ? ' matched <b>' + bundle.badWord + '</b> . . ' : ' . . ') +
linkmaker(wikiBase + 'User:' + bundle.editor, bundle.editor) + ' (' +
linkmaker(wikiBase + 'User_talk:' + bundle.editor, 'talk') + ' | ' +
linkmaker(wikiBase + 'User_talk:' + bundle.editor + '?action=edit' +
'&autoedit=s#$#\\n[[Image:Stop_hand.png|left|30px]] Welcome to Wikipedia. We invite everyone to contribute constructively to our encyclopedia. Take a look at the [[Wikipedia:Welcome, newcomers|welcome page]] if you would like to learn more about contributing. However, unconstructive edits, such as those you made to [[' + bundle.articleTitle + ']], are considered [[Wikipedia:Vandalism|vandalism]]. If you continue in this manner you may be '''blocked from editing without further warning'''. Please stop, and consider improving rather than damaging the hard work of others. Thanks. <!-- {{blatantvandal-n}} -->%20{{User:Adrian/zap2.js}} 22:43, 12 February 2006 (UTC)#&autosummary=Your%20recent%20edits',
'warn') + ' | ' +
linkmaker(wikiBase + 'Special:Contributions/' + bundle.editor, 'contribs') + ' | ' +
linkmaker(wikiBase + 'Special:Blockip/' + bundle.editor, 'block') + ') . . ' +
( bundle.summary ? '<i>('+bundle.summary+')</i> . . ' : '') +
'<a href="javascript:showHideDetail(' + bundle.id + ')" id="showdiff_link_' + bundle.id + '">show details</a>' +
' [<a href="javascript:tryRollback(' + bundle.id + ')">rollback</a>]' +
'<p><div id="diff_div_' + bundle.id + '" style="display: none">' +
'</div></li>' +
( div ? '</div>' : '') ;
}
window.saveBundle= function(bundle) {
var z={};
for (var prop in bundle) { z[prop]=bundle[prop]; }
window.bundles[bundle.id]=z;
}
window.vandals={}
window.tryRollback=function(id) {
var b=window.bundles[id];
var vandal=b.editor;
if (window.vandals[vandal]==null) window.vandals[vandal]=1;
else window.vandals[vandal]++;
if (!b) { alert('No bundle! Please tell Lupin how to reproduce this error - it should not really happen.'); return; }
var onSuccess=function (x, bundle) {
var rollRe=RegExp('<a href="(/w/index.php[^"]*?action=rollback[^"]*?from=([^&]*)[^"]*?)".*?<br />(<span[^>]*>)?(.*?)(</span>)?<br /></td>');
// match[0]: useless
// match[1]: url (escaped)
// match[2]: last editor (escaped)
// match[4]: last edit summary (wikiText - FIXME strip this to plain text)
var match=rollRe.exec(x.responseText);
if (!match) {
alert('No rollback link found.\nSadly rollback is only available to admins. Alternatively, this may be a bug.');
return;
}
var lastEditor=match[2].split('+').join(' ');
var lastSummary=match[4];
// var vandal=b.editor; // from the closure
if (lastEditor != vandal) {
var summary=lastSummary.replace(RegExp('<[^>]*?>','g'),'');
if (!summary) summary=lastSummary;
alert( 'Could not rollback - someone else has edited since the vandal.\n\nPage: '+ b.articleTitle +
'\nVandal: '+vandal+'\nLast editor: '+lastEditor+'\nEdit summary: '+summary);
return;
}
var rollbackUrl=match[1].split('&').join('&');
// confirm('Rollback edits by '+vandal + ' to '+b.articleTitle+'?') &&
window.open(rollbackUrl, '_blank');
}
var onFailure = function(x,bundle) {
alert('HTTP failed when trying to get rollback link in url\n' + bundle.url +
'\n\nHTTP status text: ' + x.statusText);
return true;
}
recent2_download({ url:b.url, onSuccess: onSuccess, id: b.id, onFailure:onFailure});
}
window.recent2_doPopups=function(div) {
if (typeof(mouseOverWikiLink)!='undefined' &&
typeof(mouseOutWikiLink) !='undefined' &&
typeof(killPopup) !='undefined') {
var anchors=div.getElementsByTagName('A');
for (var i=0; i<anchors.length; ++i) {
var a=anchors[i];
if (a.href.indexOf('javascript')==0) continue;
a.onmouseover=mouseOverWikiLink;
a.onmouseout= mouseOutWikiLink;
a.onclick= killPopup;
}
}
}
window.formatTime=function(timestamp) {
var date=new Date(timestamp);
nums=[date.getHours(), date.getMinutes(), date.getSeconds()];
for (var i=0; i<nums.length; ++i) if (nums[i]<10) nums[i]='0'+nums[i];
return nums.join(':');
}
window.showHideDetail = function(id, force, state) {
var div=document.getElementById('diff_div_' + id);
var lk=document.getElementById('showdiff_link_' + id);
if (!div) return;
var bundle=window.bundles[id];
if (!div.innerHTML) div.innerHTML= ( bundle.badDiffFragment ? bundle.badDiffFragment:'') + bundle.diff;
if ((force && state==true) || (!force && div.style.display=='none')) { div.style.display='inline'; lk.innerHTML='hide details'; }
else { div.style.display='none'; lk.innerHTML='show details'; }
}
window.getFirstTagContent=function(parent, tag) {
var e=parent.getElementsByTagName(tag);
if (e && (e=e[0]) ) {
var ret = e.firstChild.nodeValue || e.nodeValue;
if (typeof ret != typeof '') return '';
return ret;
}
}
var count=0;
window.loopRecentChanges=function(url, iterations) {
if (!iterations) iterations=20;
loopRecentChanges.iterations=iterations;
loopRecentChanges.url=url;
grabRecentChanges(url);
recent2_runOnce(function () {
if (window.recent2_paused) {++count; return; }
if (++count >= iterations && ! confirm('Continue monitoring recent changes?') ) return;
count %= iterations; loopRecentChanges(url, iterations);
}, 30000);
}
window.marvin=function() {
window.sysops=RegExp("^(\\-\\- April|23skidoo|A Man In Black|ABCD|ALoan|Academic Challenger|Acetic Acid|Adam Bishop|Ahoerstemeier|Alabamaboy|Alai|AlainV|Alex S|Alex756|AlistairMcMillan|Alkivar|Allen3|AllyUnion|Alteripse|Ambi|Ams80|Andres|Andrevan|Andrew Yong|Andrewa|Andris|Android79|Angela|Angr|Antandrus|Anthere|AntonioMartin|Aranel|Arcadian|Aris Katsaris|Arminius|Arvindn|Arwel Parry|Asbestos|AstroNomer|Ausir|AxelBoldt|BanyanTree|BaronLarf|Bcorr|Bdesham|Bearcat|Beland|Benc|Bhadani|Biekko|BillyH|Bishonen|Bkonrad|Blankfaze|Bluemoose|Bmicomp|Bovlb|Bratsche|Brian Kendig|Brian0918|BrianSmithson|Briangotts|Brighterorange|Brion VIBBER|Brockert|BrokenSegue|Brookie|Bryan Derksen|Bumm13|Burgundavia|CJCurrie|COGDEN|CSTAR|CYD|Cacycle|Caltrop|CambridgeBayWeather|Camembert|Canderson7|Capitalistroadster|Carbonite|Carnildo|Catbar|CatherineMunro|Cburnett|Cdc|Cecropia|Cedar\\-Guardian|Celestianpower|CesarB|Cgs|Chadloder|Chancemill|Changlc|Charles Matthews|Chmod007|Chris 73|Chris Roy|ChrisO|Christopher Mahan|Chuck SMITH|Chuq|Cimon avaro|Clarkk|Clifford Adams|ClockworkSoul|Commander Keane|ContiE|Cool Hand Luke|Cprompt|Craigy144|Cryptic|CryptoDerk|Curps|Cutler|Cyan|Cyberjunkie|CyborgTosser|Cyp|Cyrius|DESiegel|DF08|DJ Clayworth|Dale Arnett|Dan100|DanKeshet|Daniel Quinlan|DanielCD|Danny|Dante Alighieri|Darwinek|Dave souza|David Gerard|David Newton|David\\.Monniaux|DavidLevinson|DavidWBrooks|Davidcannon|Davodd|Dbachmann|Dbenbenn|Dbiv|Dcoetzee|Deb|Decumanus|Delirium|Denelson83|Denni|Derek Ross|Dgrant|Diberri|Dieter Simon|Dino|Dmcdevit|Dmn|Doc glasgow|Docu|Dori|Dpbsmith|DrBob|DragonflySixtyseven|Dragons flight|Drini|DropDeadGorgias|Duk|Duncharris|Durin|Dvyost|Dwheeler|Dysprosia|Earl Andrew|Ed Poor|Ed g2s|Edcolins|Edward|Efghij|Egil|El C|Elf|Ellsworth|Eloquence|Enchanter|Essjay|Eugene van der Pijll|Evercat|Everyking|Evil Monkey|Evil saltine|Evilphoenix|Exploding Boy|Ezhiki|FCYTravis|Fabiform|Fantasy|Fastfission|Fawcett5|Feco|FeloniousMonk|Fennec|Ferkelparade|Fernando Rizo|Ffirehorse|Filiocht|Finlay McWalter|Fire Star|FireFox|Flcelloguy|Flockmeal|Francs2000|Frazzydee|Fred Bauder|Fredrik|Freestylefrappe|FreplySpang|Friday|Func|Furrykef|Fuzheado|Fvw|G\\-Man|Gabbe|Gadfium|Gamaliel|Garzo|Gaz|Gdr|GeneralPatton|Geni|Gentgeen|Geogre|Gerald Farinas|Goatasaur|Golbez|Graft|GregAsche|GregRobson|Grenavitar|Grm wnr|Ground Zero|Grue|Grunt|Grutness|Gtrmp|Guettarda|Gwalla|Gyrofrog|Hadal|Hajor|Hall Monitor|HappyCamper|Hashar|Hawstom|Hcheney|Hedley|Hemanshu|Henrygb|Hephaestos|Hermione1980|Heron|Homeontherange|Humblefool|Hyacinth|Icairns|IceKarma|Ihcoyc|Ike9898|Ilyanep|Improv|Imran|Infrogmation|Ingoolemo|Inter|Isomorphic|Ixfd64|J\\.J\\.|JCarriker|JHK|JIP|JRM|JYolkowski|Jake Nelson|Jallan|JamesTeterenko|Jamesday|Jasonr|Jaxl|Jay|Jayjg|Jcw69|Jdavidb|Jdforrester|JeLuF|Jeffrey O\\. Gustafson|Jengod|JeremyA|Jeronimo|Jerzy|JesseW|Jfdwolff|Jiang|Jimbo Wales|Jimfbleak|Jimregan|Jinian|Jitse Niesen|Jmabel|Jnc|Jni|JoJan|John Kenney|JohnOwens|Johnleemk|Johntex|JonMoore|Jondel|Joolz|Josh Grosse|Jossifresco|Journalist|Joy|Joy Stovall|Jpgordon|Jrdioko|Jredmond|Jtdirl|Jtkiefer|Justinc|Jwrosenzweig|K1Bond007|KF|Kaihsu|Kaldari|Karada|Karen Johnson|Karmafist|Katefan0|Kbdank71|Kelly Martin|Khaosworks|Khendon|Khym Chanur|Kingturtle|Kirill Lokshin|Kmccoy|Knowledge Seeker|Kosebamse|Ktsquare|Kwamikagami|Kzollman|LC|Lachatdelarue|Lacrimosus|Lectonar|Lee Daniel Crocker|Lexor|Linuxbeak|LittleDan|Llywrch|Lommer|Longhair|Lord Emsworth|LordAmeth|LouI|Lowellian|Lucky 6\\.9|Ludraman|Lupin|Lupo|MC MasterChef|MacGyverMagic|Mackensen|Mackeriv|Madchester|Magnus Manske|Mailer diablo|Mairi|Malcolm Farmer|Manning Bartlett|Marianocecowski|Marine 69\\-71|Mark|Mark Christensen|Mark Dingemanse|Mark Richards|MarkSweep|Markalexander100|Marshman|Marudubshinki|Marumari|Master Thief Garrett|Matt Crypto|Maury Markowitz|Maveric149|Maximus Rex|Mbecker|Meelar|Mel Etitis|Menchi|Merovingian|Merphant|Mic|Michael Hardy|Michael Snow|Mike Halterman|Mikkalai|Mindspillage|Minesweeper|Mintguy|Mirv|Mirwin|Mkmcconn|Mkweise|Modemac|Moink|Moncrief|Montrealais|Moriori|Morven|Morwen|Mulad|Mustafaa|MyRedDice|MykReeve|Mysekurity|Mzajac|Nabla|Nandesuka|Nanobug|Necrothesp|Neutrality|Ngb|Nichalp|NicholasTurnbull|Nickptar|Nickshanks|Niteowlneils|Nohat|Noldoaran|Notheruser|Nufy8|Nunh\\-huh|Nv8200p|Oberiko|OldakQuill|Oleg Alexandrov|Oliver Pereira|Olivier|Omegatron|Optim|Ortolan88|Oven Fresh|OwenX|PFHLai|PMA|PRueda29|PZFUN|Pakaran|Pamri|Patrick|Paul A|Paul August|Pcb21|PedanticallySpeaking|Petaholmes|Peter Winnberg|Pfortuny|Pharos|Phil Bordelon|Phil Boswell|Phils|Philwelch|Phroziac|Physchim62|PierreAbbat|Piotrus|Pjacobi|Pollinator|Poor Yorick|Postdlf|Pratyeka|Premeditated Chaos|Proteus|Psy guy|Qaz|Quadell|Quercusrobur|R\\. fiend|R3m0t|RHaworth|RJFJR|RN|Radiant\\!|RadicalBender|Ragib|Ral315|Ram\\-Man|Rama|Ramallite|Ran|Raul654|Rbrwr|Rd232|Rdsmith4|RedWolf|RedWordSmith|Redux|Redwolf24|Refdoc|Reflex Reaction|Rfl|Rhobite|Rholton|Rhymeless|Rich Farmbrough|Rick Block|RickK|Rje|Rlandmann|Rlquall|Rmhermen|Roadrunner|RobLa|Robchurch|Robert Merkel|RobertG|Robin Patterson|RobyWayne|Roozbeh|RoseParks|Rossami|RoyBoy|RoySmith|Rx StrangeLove|Ryan Delaney|SD6\\-Agent|SWAdair|Salsa Shark|Sam Hocevar|Sam Korn|Sango123|Sannse|Sarge Baldy|Sasquatch|Schissel|Schneelocke|Scimitar|Scipius|Scott Burley|ScottDavis|Seabhcan|Sebastiankessel|Secretlondon|Seglea|Sesel|Seth Ilys|Sfoskett|Shanes|Shauri|Sheldon Rampton|Shimgray|SimonP|Siroxo|Sj|Sjakkalle|Sjc|Slambo|SlimVirgin|Slowking Man|Slrubenstein|Smith03|Sn0wflake|Snowspinner|Snoyes|Solipsist|Someone else|Sortior|Spangineer|Spencer195|Splash|Ssd|Stan Shebs|Starblind|Stevenj|Stevertigo|Stewartadcock|Stormie|Sugarfish|Sundar|Sverdrup|TPK|TUF\\-KAT|Ta bu shi da yu|Talrias|Tannin|Tarquin|Taw|Taxman|TenOfAllTrades|Texture|Thames|The Anome|The Cunctator|The Epopt|The Singing Badger|The wub|TheCoffee|TheoClarke|Theresa knott|Thryduulf|Thue|Thunderbrand|Tillwe|Tim Ivorson|Tim Starling|Timc|Timrollpickering|Timshell|Timwi|Titoxd|Tkinias|Toby Bartels|Tom\\-|Tomf688|Tompagenet|Tony Sidaway|Topbanana|Tregoweth|Trevor macinnis|Triddle|Trilobite|Tristanb|Ugen64|Ulayiti|Uncle G|UninvitedCompany|Urhixidur|Utcursch|UtherSRG|Vague Rant|VampWillow|Vancouverguy|Vaoverland|Viajero|Vicki Rosenzweig|Violetriga|Visorstuff|Voice of All\\(MTG\\)|Vsmith|Waltpohl|Wapcaplet|Warofdreams|Wayward|Wernher|Wesley|WhisperToMe|Who|Wiglaf|Wikiacc|Wikibofh|Wile E\\. Heresiarch|Wilfried Derksen|Willmcw|Woggly|WojPob|Woohookitty|Worldtraveller|Ww|Wwoods|XJamRastafire|Xezbeth|Y0u|Yacht|Zanimum|Zero0000|Zippy|Zocky|Zoe|Zoicon5|Zoney|Zscout370|Zzyzx11)$");
loopRecentChanges(feed, 200);
}
// **************************************************
// Installation
// **************************************************
window.recent2_addlilink=function(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;
}
window.recent2_addToolboxLink=function(url, name, id){
var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
recent2_addlilink(tb, url, name, id);
}
window.addMarvin=function() {
recent2_addToolboxLink('http://en.wikipedia.org/wiki/User:Lupin/Filter_recent_changes', 'Filter recent changes', 'toolbox_filter_changes');
recent2_addToolboxLink('http://en.wikipedia.org/wiki/User:Lupin/All_recent_changes', 'All recent changes', 'toolbox_all_changes');
recent2_addToolboxLink('http://en.wikipedia.org/wiki/User:Lupin/Recent_IP_edits', 'Recent IP edits', 'toolbox_IP_edits');
recent2_addToolboxLink('http://en.wikipedia.org/wiki/User:Lupin/Monitor_my_watchlist', 'Monitor my watchlist', 'toolbox_watchlist_edits');
//document.getElementById('toolbox_filter_changes').onclick=marvin;
}
window.maybeStart=function() {
var loc=document.location.href;
if (RegExp('User:Lupin/Filter[_ ]recent[_ ]changes','i').test(loc)) {
window.recent2_filter_badwords=true;
recent2_runOnce(marvin, 1000);
}
else if (RegExp('User:Lupin/All[_ ]recent[_ ]changes','i').test(loc)) {
window.recent2_filter_badwords=false;
recent2_runOnce(marvin, 1000);
}
else if (RegExp('User:Lupin/Recent[_ ]IP[_ ]edits','i').test(loc)) {
window.recent2_filter_anonsOnly=true;
recent2_runOnce(marvin, 1000);
}
else if (RegExp('User:Lupin/Monitor[_ ]my[_ ]watchlist', 'i').test(loc)) {
window.recent2_filter_watchlist=true;
recent2_runOnce(marvin, 1000);
}
}
// onload
addOnloadHook(maybeStart);
addOnloadHook(addMarvin);
// </nowiki></pre>
/// Local Variables: ///
/// mode:c ///
/// fill-prefix:"// " ///
/// End: ///