User:WAvegetarian/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:WAvegetarian/monobook.css. |
// <nowiki>
importScript('User:Lupin/recent2.js');
/**** afd helper ****/
document.write('<script type="text/javascript"' +
'src="http://en.wikipedia.org/w/index.php?title=User:Jnothman/afd_helper/' +
'script.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
/* This is to keep track of who is using this extension: [[User:Jnothman/afd_helper/script.js]] */
afdh_summaryprompt = false;
/*
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>
recent2={
// Edit these to your liking.
// Make sure there's a comma at the end of each line.
badwordsUrl: 'User:Lupin/badwords',
filterPage: 'User:Lupin/Filter_recent_changes',
allRecentPage: 'User:Lupin/All_recent_changes',
recentIPPage: 'User:Lupin/Recent_IP_edits',
monitorWatchlistPage: 'User:Lupin/Monitor_my_watchlist',
spelldictUrl: 'Wikipedia:Lists_of_common_misspellings/For_machines',
spelldictPage: 'User:Lupin/Live_spellcheck',
// leave this alone
dummy: null
};
recent2.download=function(bundle) {
// mandatory: bundle.url
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
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.send(null);
}
return x;
}
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;
recent2.getBadWords=function() {
window.gettingBadWords=true;
recent2.download({ url: 'http://' + document.location.hostname +
'/w/index.php?title=' + recent2.badwordsUrl + '&action=raw&ctype=text/css',
onSuccess: recent2.processBadWords, onFailure: function () { recent2.runOnce(recent2.getBadWords, 15000); return true;}});
}
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 (RegExp('^/.*/\\s*$').test(s)) {
s=s.replace(RegExp('^/'), '').replace(RegExp('/\\s*$'), '');
s=s.replace(RegExp('[(]([^?])', 'g'), '(?:$1');
try { var r=new RegExp(s); }
catch (err) {
var errDiv=newOutputDiv('recent2_error', recent2.outputPosition);
errDiv.innerHTML='Warning: ignoring odd-looking regexp on line '+i
+' of <a href="/wiki/' + recent2.badwordsUrl + '">badwords</a>:<pre>' + s + '</pre>';
continue;
}
ret.push(s);
continue;
}
if (s.charAt(0)=='<') continue;
ret.push(s.replace(RegExp('([-|.()\\+:!,?*^${}\\[\\]])', 'g'), '\\$1'));
}
// 123 3 2| 4 415 5
// ((( repeatedchar ) )| ( ... | ... | ... ))( bdy )
window.badWords=RegExp("<td>[+]</td>\\s*<td .*?>\\s*.*?((([^-{}.\\s'=wI:*#0-9A-F])\\3{2,})|[^/]\\b(" + ret.join('|') + "))(\\b[^/]|[|]).*\\s*</td>", 'im');
}
window.gettingWatchlist=false;
recent2.watchlist=null;
recent2.getWatchlist=function() {
window.gettingWatchlist=true;
recent2.download({url: 'http://' + document.location.hostname + '/wiki/Special:Watchlist/edit',
onSuccess: recent2.processWatchlist, onFailure: function () { recent2.runOnce(getWatchlist, 15000); return true; }});
}
recent2.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.gettingSpelldict=false;
window.spelldict=null;
recent2.getSpelldict=function() {
window.gettingSpelldict=true;
recent2.download({url: 'http://' + document.location.hostname + '/w/index.php?title=' + recent2.spelldictUrl + '&action=raw&ctype=text/css',
onSuccess: recent2.processSpelldict, onFailure: function () { recent2.runOnce(getSpelldict, 15000); return true; }});
}
recent2.processSpelldict=function(req, bundle) {
var spelldict={};
var lines=req.responseText.split('\n');
var a=[];
for (var i=0; i<lines.length; ++i) {
var split=lines[i].split('->');
if (split.length<2) { continue; }
split[1]=split.slice(1).join('->').split(/, */);
split[0]=split[0].toLowerCase().replace(/^\s*/, '');
spelldict[split[0]]=split[1];
a.push(split[0]);
}
window.spelldict=spelldict;
window.spellRe=RegExp('<td>[+]</td>\\s*<td .*?>\\s*.*?\\b(' + a.join('|') + ')\\b', 'i');
}
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://' + document.location.hostname + '/w/index.php?title=Special:Recentchanges&feed=rss';
window.newOutputDiv=function(klass, position, immortal) {
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');
}
if (!immortal) { 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 && recent2.filter_badwords ) {
if ( ! window.gettingBadWords ) recent2.getBadWords();
return recent2.runOnce(function(){grabRecentChanges(feed);}, 500);
}
if (! window.watchlist && recent2.filter_watchlist) {
if (! window.gettingWatchlist ) recent2.getWatchlist();
return recent2.runOnce(function(){grabRecentChanges(feed);}, 500);
}
if (! window.spelldict && recent2.filter_spelling) {
if (! window.gettingSpelldict) recent2.getSpelldict();
return recent2.runOnce(function(){grabRecentChanges(feed);}, 500);
}
var pos=recent2.outputPosition;
if (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+'(' + recent2.count + ') updating...</font>';
// this abort stuff doesn't work properly for some reason...
//recent2.lastFeedDownload && recent2.lastFeedDownload.abort(); // } catch (summatNasty) { /* do nothing */ }
recent2.lastFeedDownload=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;
}
recent2.newWindows=true;
window.linkmaker=function(url, text) {
var s='<a href="' + url + '"';
recent2.newWindows && (s += ' target="_blank"');
s += '>' + text + '</a>';
return s;
}
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])');
recent2.outputSeparator='<hr>';
recent2.delayedLines={};
recent2.delay=0;
recent2.namespaces={'Media':1, "Special":1, "User":1, "User talk":1, "Wikipedia":1,
"Wikipedia talk":1, "Image":1, "Image talk":1, "MediaWiki":1,
"MediaWiki talk":1, "Template":1, "Template talk":1, "Help":1,
"Help talk":1, "Category":1, "Category talk":1, "Portal":1, "Portal talk":1};
window.processRecentChanges=function(req, bundle){
var initialId=processRecentChanges.id;
var doc=req.responseXML.documentElement;
var items=doc.getElementsByTagName('item');
var latest=processRecentChanges.lastDate;
for (var i=items.length - 1; i>=0; --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 article=getFirstTagContent(items[i], 'link');
if (recent2.delayedLines[article] && recent2.delayedLines[article].editor != editor) {
delete recent2.delayedLines[article];
}
if (recent2.filter_anonsOnly && !recent2.ipUserRegex.test(editor)) continue;
var articleTitle=getFirstTagContent(items[i], 'title');
if (recent2.hideNonArticles) {
var namespace=articleTitle.replace(/:.*/, '');
if (recent2.namespaces[namespace]) continue;
}
if (! recent2.show_talkpages && articleTitle && /^Talk:|^[^:]*?[_ ]talk:/.test(articleTitle)) continue;
if (recent2.filter_watchlist && articleTitle &&
! window.watchlist[articleTitle.replace(/^Talk:/, '').replace(/[ _]talk:/, ':')]) continue;
if (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) {
if (badMatch===true) { badMatch=diffText.match(badWords); }
articleTitle=getFirstTagContent(items[i], 'title');
var badWord=badMatch[2] || badMatch[4];
// highlighting
badMatch[0]=badMatch[0].split(badWord).join('<span style="background-color: #FF6">'+badWord+'</span>');
recent2.delayedLines[article]={timestamp: timestamp, article:article, count:recent2.count, articleTitle:articleTitle,
editor:editor, badWord:badWord, badDiffFragment:badMatch[0], diff:diffText,
summary:editSummary};
}
} else if (recent2.filter_spelling) {
var splMatch=spellRe.test(diffText);
if (splMatch) {
splMatch = diffText.match(spellRe);
var misspelling = splMatch[1]; //.replace(/^\s*/, '');
var badWord = '<a href=\'javascript:recent2.correctSpelling("' + articleTitle.split("'").join("%27") +
'","'+misspelling.split("'").join("%27")+'")\'>'+ misspelling + '</a>';
diffText = diffText.replace(RegExp('('+misspelling+')', 'gi'), '<span style="background-color: #FF6">$1</span>');
recent2.delayedLines[article] = {timestamp: timestamp, article:article, count:recent2.count, articleTitle:articleTitle,
editor:editor, badWord:badWord, badDiffFragment:'', diff:diffText, summary: editSummary};
}
} else {
var article=getFirstTagContent(items[i], 'link');
var articleTitle=getFirstTagContent(items[i], 'title');
if (recent2.CustomFilter &&
! recent2.CustomFilter({timestamp:timestamp, article:article, articleTitle:articleTitle,
editor:editor, diff:diffText, summary:editSummary})) continue;
recent2.delayedLines[article]={timestamp: timestamp, article:article, count:recent2.count, articleTitle:articleTitle,
editor:editor, diff:diffText, summary:editSummary};
}
} /* end for loop */
var output=recent2.getDelayedLineOutput();
var outputString='';
if (recent2.outputPosition=='top') {
outputString=output.join(recent2.outputSeparator);
}
else {
for (var i=output.length-1; i>=0; --i) {
outputString+=output[i] + (i>0 ? recent2.outputSeparator : '') ;
}
}
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> |';
if (recent2.autoexpand) {
recent2.runOnce( function() {
/* document.title=initialId+' '+processRecentChanges.id; */
showHideDetailRange(initialId, processRecentChanges.id); }, 250 );
}
}
statusTail += ' <a href="javascript:deleteEarlierOutputDivs(' + bundle.status.id + ')">remove earlier output</a>';
statusTail+='<br>';
bundle.status.innerHTML+=statusTail;
}
processRecentChanges.lastDate=0;
processRecentChanges.id=0;
recent2.getDelayedLineOutput=function() {
var ret=[];
var id=processRecentChanges.id;
for (var a in recent2.delayedLines) {
if (recent2.delayedLines[a] && typeof recent2.delayedLines[a].count == typeof 1 &&
recent2.count - recent2.delayedLines[a].count >= recent2.delay) {
recent2.delayedLines[a].id=id++;
ret.push(recent2.doLine(recent2.delayedLines[a]));
delete recent2.delayedLines[a];
}
}
processRecentChanges.id=id;
return ret;
}
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 (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) {alert('no such div: diff_div_' + start); 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:', ''));
}
}
}
recent2.pendingLines=[];
recent2.togglePausedOutput=function() {
if (!recent2.pausedOutput) { recent2.pausedOutput = true; return true; }
else recent2.pausedOutput=false;
var outputBuffer='';
while (recent2.pendingLines.length) {
outputBuffer+=recent2.doLine(recent2.pendingLines.pop());
}
var pos=recent2.outputPosition;
var output=newOutputDiv('recent2.lines', pos);
output.innerHTML=outputBuffer;
return false;
}
recent2.togglePaused=function() {
if(!recent2.paused) { recent2.paused=true; return true; }
recent2.paused=false;
loopRecentChanges(loopRecentChanges.url, loopRecentChanges.iterations);
return false;
}
recent2.doLine=function(bundle) {
if (recent2.pausedOutput) {
recent2.pendingLines.push(bundle);
return '';
}
//if (recent2.filter_spelling) { return recent2.doSpellLine(bundle); }
var wikiBase='http://' + document.location.hostname + '/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, 'last') + ')' +
' (' + linkmaker(bundle.article+'?action=history', 'hist') + ')' +
' ' + linkmaker(bundle.article, 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{{sub'+'st:test1-n|' + bundle.articleTitle +
'}}%20~~' + '~~#&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 + ')" class="recent2_rollback">rollback</a>]' +
'<p><div id="diff_div_' + bundle.id + '" style="display: none">' +
'</div></li>' +
( div ? '</div>' : '') ;
};
recent2.correctSpelling=function (article, badword) {
var url= 'http://' + document.location.hostname + '/wiki/';
url += article + '?action=edit&autoclick=wpDiff&autominor=true';
var wl=badword.toLowerCase();
var cor=spelldict[wl];
if (!cor|| !cor.length) { alert('Could not find an entry for ' + wl); return; }
if (cor.length > 1) {
var q='Which correction should I use?\nPlease either type a number or another correction.\n';
for (var i=0; i<cor.length; ++i) { q += '\n' + i + ': ' + cor[i]; }
var ans=prompt(q);
if (!ans) {return;}
var num=parseInt(ans, 10);
if (num > -1 && num < cor.length) { cor = cor[num]; }
else { cor = ans; }
} else {
cor = cor[0];
}
cor=cor.replace(/^ *| *$/g, '');
url += '&autosummary=Correcting%20spelling:%20' + wl + '->' + cor;
url += '&autoedit=';
c0=cor.charAt(0);
wl0 = wl.charAt(0);
b='\\b';
url += ['s', b + wl + b, cor, 'g;'].join('#');
wl=wl0.toUpperCase() + wl.substring(1);
cor=c0.toUpperCase() + cor.substring(1);
url += ['s', b + wl + b, cor, 'g;'].join('#');
wl=wl.toUpperCase();
cor=cor.toUpperCase();
url += ['s', b + wl + b, cor, 'g;'].join('#');
window.open(url);
};
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) {
if (recent2.non_admin_rollback) { recent2.tryNonAdminRollback(id); }
else { recent2.tryAdminRollback(id); }
};
recent2.getBundleVandal=function(id) {
var b=window.bundles[id];
if (!b) {
alert('No bundle! Please tell Lupin how to reproduce this error - it should not really happen.');
return null;
}
var vandal=b.editor;
if (window.vandals[vandal]==null) { window.vandals[vandal]=1; }
else { window.vandals[vandal]++; }
return b;
}
recent2.tryAdminRollback=function(id){
var b=recent2.getBundleVandal(id);
if (!b) { return; }
var vandal=b.editor;
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.' +
'\nMaybe you should try the non-admin rollback by checking the checkbox above?\n' +
'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});
};
recent2.tryNonAdminRollback=function(id) {
if (!autoEdit) { alert('You need to have autoedit functionality for non-admin rollback.\n\n' +
'This is included in Navigation popups - see [[WP:POP]].\n\n'+
'Alternatively, you can try adding '+
'{{sub'+'st:js|User:Lupin/autoedit.js}} ' +
'to your user javascript file.'); return; }
var b=recent2.getBundleVandal(id);
if (!b) { return; }
var vandal=b.editor;
var url='http://' + document.location.hostname + '/w/query.php?format=json&titles=' + b.articleTitle;
url += '&what=revisions&rvlimit=100&rvcomments';
var onSuccess=function(x,y){ recent2.processHistoryQuery(x,y,b); }
recent2.download({ url: url, onSuccess: onSuccess, id: b.id}); // fixme: onFailure
};
recent2.processHistoryQuery=function(x,downloadBundle, bundle) {
var json=x.responseText;
try {
eval('var o='+json);
var p=o['pages'];
var edits=recent2.anyChild(p)['revisions'];
}
catch ( someError ) { alert('JSON business failed.\n\n' + json.substring(0,100)
+ '\n\nCannot rollback.'); return; }
var i;
for (i=0; i<edits.length; ++i) {
if (edits[i]['user']!=bundle.editor) { break; }
}
if (i===0) {
alert( 'Could not rollback - someone else has edited since the vandal.\n\nPage: '+ bundle.articleTitle +
'\nVandal: '+bundle.editor+'\nLast editor: '+edits[0]['user']+'\nEdit summary: '+edits[0]['*']);
return;
}
if (i==edits.length) { alert(bundle.editor + ' seems to be the only editor to ' + bundle.articleTitle +
'.\n\nRollback aborted.'); return; }
var prevEditor=edits[i]['user'];
var prevRev=edits[i]['revid'];
var summary='Reverted edits by [[Special:Contributions/' + escape(bundle.editor) + '|' +
escape(bundle.editor) + ']] to last version by ' + escape(prevEditor);
summary=summary.split(' ').join('%20');
var url=bundle.article + '?action=edit&autosummary=' + summary + '&oldid=' + prevRev +
'&autoclick=wpSave&autominor=true';
window.open(url, '_blank');
};
//recent2.non_admin_rollback=true;
recent2.anyChild=function(obj) {
for (var p in obj) {
return obj[p];
}
return null;
}
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;
}
}
recent2.newCheckbox=function(label, state, onclick, internalName) {
// checkbox
var ret=document.createElement('input');
ret.type='checkbox';
ret.checked = state;
ret.onclick = onclick;
recent2.controls.appendChild(ret);
if (internalName) { recent2.controls[internalName]=ret; }
// label
var l=document.createElement('label');
l.innerHTML=label;
recent2.controls.appendChild(l);
return ret;
}
recent2.controlUI=function() {
recent2.controls=newOutputDiv('recent2.controls', 'top', true);
recent2.controls.newline = function(){ recent2.controls.appendChild(document.createElement('br')); };
recent2.newCheckbox('Ignore talk pages', !recent2.show_talkpages,
function() { recent2.show_talkpages=!this.checked; },
'talk');
recent2.controls.newline();
recent2.newCheckbox('Ignore pages outside the article namespace', false,
function() { recent2.hideNonArticles = this.checked; },
'hidenonarticles');
recent2.controls.newline();
recent2.newCheckbox('Automatically expand new content', recent2.autoexpand,
function() { recent2.autoexpand = this.checked; },
'autoexpand');
recent2.controls.newline();
recent2.newCheckbox('Only show edits unchanged after four updates', false,
function() { recent2.delay = (this.checked) ? 4 : 0; },
'delayby4');
recent2.controls.newline();
recent2.newCheckbox('Use non-admin rollback', false,
function() { recent2.non_admin_rollback = this.checked; },
'nonadminrollback');
}
recent2.count=0;
window.loopRecentChanges=function(url, iterations) {
if (!iterations) iterations=20;
loopRecentChanges.iterations=iterations;
loopRecentChanges.url=url;
grabRecentChanges(url);
recent2.runOnce(function () {
if (recent2.paused) {++recent2.count; return; }
if (++recent2.count >= iterations && ! confirm('Continue monitoring recent changes?') ) return;
recent2.count %= iterations; loopRecentChanges(url, iterations);
}, 30000);
}
window.marvin=function() {
// this isn't really used (not accessible from the UI), so don't worry about it
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)$");
recent2.show_talkpages=true;
recent2.controlUI();
loopRecentChanges(feed, 200);
}
// **************************************************
// Installation
// **************************************************
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;
}
recent2.addToolboxLink=function(url, name, id){
var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
recent2.addlilink(tb, url, name, id);
}
window.addMarvin=function() {
var prefix = 'http://' + document.location.hostname + '/wiki/';
recent2.addToolboxLink(prefix + recent2.filterPage, 'Filter recent changes', 'toolbox_filter_changes');
recent2.addToolboxLink(prefix + recent2.allRecentPage, 'All recent changes', 'toolbox_all_changes');
recent2.addToolboxLink(prefix + recent2.recentIPPage, 'Recent IP edits', 'toolbox_IP_edits');
recent2.addToolboxLink(prefix + recent2.monitorWatchlistPage, 'Monitor my watchlist', 'toolbox_watchlist_edits');
recent2.addToolboxLink(prefix + recent2.spelldictPage, 'Live spellcheck', 'toolbox_spelling');
//document.getElementById('toolbox_filter_changes').onclick=marvin;
}
recent2.testPage = function (str) {
return RegExp(str.split(/[_ ]/).join('[_ ]'), 'i').test(document.location.href);
};
window.maybeStart=function() {
var loc=document.location.href;
if (recent2.testPage(recent2.filterPage)) {
recent2.filter_badwords=true;
recent2.runOnce(marvin, 1000);
}
else if (recent2.testPage(recent2.allRecentPage)) {
recent2.filter_badwords=false;
recent2.runOnce(marvin, 1000);
}
else if (recent2.testPage(recent2.recentIPPage)) {
recent2.filter_anonsOnly=true;
recent2.runOnce(marvin, 1000);
}
else if (recent2.testPage(recent2.monitorWatchlistPage)) {
recent2.filter_watchlist=true;
recent2.runOnce(marvin, 1000);
}
else if (recent2.testPage(recent2.spelldictPage)) {
recent2.filter_spelling=true;
recent2.runOnce(marvin, 1000);
}
}
// onload
$(maybeStart);
$(addMarvin);
//// testing code
//recent2.filter_badwords=true;
//recent2.filter_spelling=true;
//recent2.runOnce(marvin,1000);
// </nowiki></pre>
/************************ popups **************************/
// [[User:Lupin/popups.js]]
// more options at http://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups
mw.loader.load(
'https://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s');
popupDelay=.5
popupRedlinkRemoval=true
popupHistoricalLinks=true
imagePopupsForImages=false
popupStructure='original'
popupRevertSummaryPrompt=true
popupExtendedRevertSummary=true
// Live Preview customization (from User:Pilaf/Live_Preview),
// edit this to your own liking.
wpUserName = 'WAvegetarian'; // User name to display in signatures
wpShowImages = true; // Enable downloading and displaying of images
// Include Live Preview...
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Pilaf/livepreview.js&action=raw&ctype=text/javascript');
/* This is to keep track of who is using the Live Preview: [[User:Pilaf/livepreview.js]] */
//************************************ Purge cache tab *****************************
//From http://en.wikipedia.org/w/index.php?title=User:Trilobite/Tools&oldid=17855224
function addPurgeTab() {
ta['ca-purge'] = ['g', 'Purge the internal cache for this page'];
if(!document.getElementById) return;
var x = document.getElementById('ca-history');
var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
if(!x) return;
if(x.children) x = x.children[0];
else x = x.childNodes[0];
addlilink(tabs, x.href.replace(/=history/, "=purge"), 'purge', 'ca-purge');
}
//********************************* Show Last Diff *********************************
//From User:JesseW/monobook.js
function doLastDiff() {
z=document.getElementById("content").childNodes;
for (var n=0;n<z.length;n++) {
if (z[n].className=="firstHeading") {
var pname=textContent(z[n]);
};
};
var nurl="http://en.wikipedia.org/w/index.php?title=" + pname + "&diff=cur&oldid=prev";
document.location=nurl
}
//************************************ Changes since I last edited ****************************
//From User:JesseW/monobook.js
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", 'since', '');
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=textContent(document.getElementById("pt-userpage"));
var hists=document.getElementById("pagehistory").childNodes;
for (n=0;n<hists.length;n++) {
if (hists[n].getElementsByTagName && textContent(hists[n].getElementsByTagName("span")[0])==username) {
document.location=hists[n].childNodes[1].href;
return;
}
}
msg.replaceChild(document.createTextNode
("You have not edited this page! (recently)"),
msg.firstChild);
}
//****************** Are you sure you don't want a Summary? *******************************
//From http://en.wikipedia.org/w/index.php?title=User:ABCD/monobook.js&oldid=19452182
function addForceSummary(){
if(!/&action=edit/.test(window.location.href)) return;
if(/§ion=new/.test(window.location.href)) return;
if(!document.forms.editform) return;
document.forms.editform.wpSave.onclick = forceSummary;
}
function forceSummary(){
var form = document.forms.editform;
if(!form.wpSummary.value.replace(/^(\/\*.*\*\/)? *(.*) *$/,'$2')){
var r = prompt('Are you sure you want to submit without adding a summary?\nTo add a summary, type it in the box below:',form.wpSummary.value);
if(r == null) return false;
form.wpSummary.value = r;
}
return true;
}
//************************************ Edit lead section *****************************
//From http://en.wikipedia.org/w/index.php?title=User:ABCD/monobook.js&oldid=19452182
function addEditSection0(){
ta['ca-edit-0'] = ['', 'Edit the zeroth section of this page'];
if(!document.getElementById) return;
var x = document.getElementById('ca-edit');
if(!x) return;
var y = document.createElement('LI');
y.id = 'ca-edit-0';
if(x.className == 'selected'){
if(/&action=edit§ion=0$/.test(window.location.href)){
x.className = 'istalk';
y.className = 'selected';
} else {
x.className = 'selected istalk';
}
} else if(x.className == 'selected istalk'){
if(/&action=edit§ion=0$/.test(window.location.href)){
x.className = 'istalk';
y.className = 'selected istalk';
} else {
y.className = 'istalk';
}
} else {
y.className = x.className;
x.className = 'istalk';
}
var z = document.createElement('A');
if(x.children){
z.href = x.children[0].href + '§ion=0';
z.appendChild(document.createTextNode('0'));
y.appendChild(z);
document.getElementById('p-cactions').children[1].insertBefore(y,x.nextSibling);
}else{
z.href = x.childNodes[0].href + '§ion=0';
z.appendChild(document.createTextNode('0'));
y.appendChild(z);
document.getElementById('p-cactions').childNodes[3].insertBefore(y,x.nextSibling);
}
}
//************************************ Regexp replace tab ************************************
//From http://en.wikipedia.org/w/index.php?title=User:Trilobite/Tools&oldid=17855224
//Renamed by JesseW.
function regexpReplaceTab() {
var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
if(document.title.indexOf("Editing ") == 0) addlilink(tabs, 'javascript:replace()', 'replace', '');
}
function replace() {
var s = prompt("Search regexp?");
if(s) {
var r = prompt("Replace regexp?");
if(!r && r != '') return;
var txt = document.editform.wpTextbox1;
txt.value = txt.value.replace(new RegExp(s, "g"), r);
}
}
//************************************ Tabs at bottom ************************************
function tabsAtBottom() {
var tabs = document.getElementById('p-cactions').cloneNode(true);
tabs.id = 'mytabs';
var listitems = tabs.getElementsByTagName('LI');
for (var i=0;i<listitems.length;i++) {
if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id;
}
document.getElementById('column-content').appendChild(tabs);
}
//************************************ Utility functions ************************************
function addlilink(tabs, url, name, id) {
var na = document.createElement('a');
na.href = url;
na.id = id;
na.appendChild(document.createTextNode(name));
var li = document.createElement('li');
li.id = id;
li.appendChild(na);
tabs.appendChild(li);
return li;
}
function addlilink2(tabs, url, name, id, title) {
var l=addlilink(tabs,url,name,id);
l.lastChild.title=title;
return l;
}
/**** Add tab as menu ****/
function addlimenu(tabs, name, id)
{
var na = document.createElement('a');
na.href = '#';
var mn = document.createElement('ul');
na.appendChild(document.createTextNode(name));
var li = document.createElement('li');
li.id = id;
li.className = 'tabmenu';
li.appendChild(na);
li.appendChild(mn);
tabs.appendChild(li);
return li;
}
// ******* Cross browser textcontent
function textContent(el) {
if (el.textContent)
return el.textContent;
return el.innerText;
}
/************ add unwatch to watchlist ***********/
// from [[User:Matthewmayer/monobook.js]]
function addUnwatch() {
if (window.location.href.indexOf("Special:Watchlist")!=-1) {
//correct page, so retrieve watchlist items
var items=document.getElementById('bodyContent').getElementsByTagName('li');
for (var i=0;i<items.length;i++) {
//what is the title of this page?
pagename=items[i].getElementsByTagName('a')[0].title;
//create 'unwatch' element
unwatchelt=document.createElement('a');
unwatchelt.setAttribute('href','/w/index.php?title='+pagename+'&action=unwatch');
unwatchelt.setAttribute('title','Unwatch '+pagename);
unwatchelt.appendChild(document.createTextNode('(unwatch)'));
//add the 'unwatch' element
items[i].appendChild(unwatchelt);
}
}
}
function talkpageplus()
{
var talkpagelink = document.getElementById('ca-talk');
if (talkpagelink.className == 'new')
{
talkpagelink.firstChild.href += '§ion=new';
}
}
$(talkpageplus);
//*****************************************************************************************
window.onload = Main;
function Main()
{
// autoWikiWatchlist();
if (LivePreviewInstall) LivePreviewInstall();
addForceSummary()
var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
// addlimenu(tabs, 'Watchlists', 'watchlists-menu');
// addWikiWatchlist("Interests");
// addWikiWatchlist("Wikipedia");
// addWikiWatchlist("Conversations");
// addWikiWatchlist("News");
addlilink2(tabs, "javascript:doLastDiff()", 'last', '',"Show most recent diff");
// addlilink2(tabs, "javascript:doPUI()", 'PUI', '', "Tag images as unverifiedimage");
addSinceTab(); /*Complicated if statements; need to find a neat way to do this...*/
// doNextItem();
regexpReplaceTab();
addEditSection0();
addPurgeTab();
// tabsAtBottom();
//automate();
//cesarb_fixDiffOverflowLoadListener();
addUnwatch();
}
//</pre>
//this helps automate AfD closing by adding a 'close' tab to AfD debates
//written by [[User:Johnleemk]] based on [[Wikipedia:WikiProject User scripts/Scripts/test-n.js]] by [[User:Celestianpower]]
function afdaddlilink(url, name)
{
var na = document.createElement('a');
na.setAttribute('href', url);
var txt = document.createTextNode(name);
na.appendChild(txt);
var li = document.createElement('li');
li.appendChild(na);
return li;
}
function result()
{
var close = prompt("Result of debate?")
var f = document.editform, t = f.wpTextbox1;
t.value = "{{subst:" + "at" + "}} '''" + close + "'''. " + "~" + "~" + "~" + "~" + '\n' + '\n' + t.value;
if (t.value.length > 0)
t.value += '\n';
t.value += "{{subst:" + "ab" + "}}";
f.wpSummary.value = "Closing debate; result was " + close;
}
function relist()
{
var f = document.editform, t = f.wpTextbox1;
if (t.value.length > 0)
t.value += '\n';
t.value += "{{subst:" + "relist" + "|~" + "~" + "~" + "~}}";
f.wpSummary.value = "Relisting debate";
}
function keep()
{
var date = prompt("Nomination was made when?")
var votepage = prompt("Vote page is? (Enter 'd' for default.)")
var f = document.editform, t = f.wpTextbox1;
// If default votepage...
if (votepage=="d")
{
var temp = document.editform.action.split("/w/index.php?title=");
var temp = temp[1].split("&action=submit");
var temp = temp[0].substring(5);
var votepage = temp;
}
t.value = "{{subst:" + "oldafdfull" + "|date=" + date + "|votepage=" + votepage + "}}" + '\n' + '\n' + t.value;
f.wpSummary.value = "Article survived AfD";
}
function no_consensus()
{
var date = prompt("Nomination was made when?")
var votepage = prompt("Vote page is? (Enter 'd' for default.)")
var f = document.editform, t = f.wpTextbox1;
// If default votepage...
if (votepage=="d")
{
var temp = document.editform.action.split("/w/index.php?title=");
var temp = temp[1].split("&action=submit");
var temp = temp[0].substring(5);
var votepage = temp;
}
t.value = "{{subst:" + "oldafdfull" + "|date=" + date + "|result='''no consensus'''|votepage=" + votepage + "}}" + '\n' + '\n' + t.value;
f.wpSummary.value = "Article survived AfD with no consensus";
}
function redirect()
{
var date = prompt("Nomination was made when?")
var redirect = prompt("Redirect to?")
var votepage = prompt("Vote page is? (Enter 'd' for default.)")
var f = document.editform, t = f.wpTextbox1;
// If default votepage...
if (votepage=="d")
{
var temp = document.editform.action.split("/w/index.php?title=");
var temp = temp[1].split("&action=submit");
var temp = temp[0].substring(5);
var votepage = temp;
}
t.value = "{{subst:" + "oldafdfull" + "|date=" + date + "|result='''redirect to [[" + redirect + "]]'''|votepage=" + votepage + "}}" + '\n' + '\n' + t.value;
f.wpSummary.value = "Article redirected to [[" + redirect + "]] as per AfD";
}
function merge()
{
var date = prompt("Nomination was made when?")
var redirect = prompt("Merge and redirect to?")
var votepage = prompt("Vote page is? (Enter 'd' for default.)")
var f = document.editform, t = f.wpTextbox1;
// If default votepage...
if (votepage=="d")
{
var temp = document.editform.action.split("/w/index.php?title=");
var temp = temp[1].split("&action=submit");
var temp = temp[0].substring(5);
var votepage = temp;
}
t.value = "{{subst:" + "oldafdfull" + "|date=" + date + "|result='''merge and redirect to [[" + redirect + "]]'''|votepage=" + votepage + "}}" + '\n' + '\n' + t.value;
f.wpSummary.value = "Article merged and redirected to [[" + redirect + "]] as per AfD";
}
function other()
{
var date = prompt("Nomination was made when?")
var result = prompt("Result was?")
var votepage = prompt("Vote page is? (Enter 'd' for default.)")
var f = document.editform, t = f.wpTextbox1;
// If default votepage...
if (votepage=="d")
{
var temp = document.editform.action.split("/w/index.php?title=");
var temp = temp[1].split("&action=submit");
var temp = temp[0].substring(5);
var votepage = temp;
}
t.value = "{{subst:" + "oldafdfull" + "|date=" + date + "|result='''" + result + "'''|votepage=" + votepage + "}}" + '\n' + '\n' + t.value;
f.wpSummary.value = "AfDed; result was " + result;
}
function add_afd_tabs()
{
var c1 = document.getElementById('column-one');
var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
// Only add for pages with the right string somewhere in the title
if (document.title.indexOf("Editing Wikipedia:Articles for deletion/") != -1)
{
tabs.appendChild(afdaddlilink('javascript:result()',"close"));
tabs.appendChild(afdaddlilink('javascript:relist()',"relist"));
}
if (document.title.indexOf("Editing Talk:") != -1)
{
tabs.appendChild(afdaddlilink('javascript:keep()',"keep"));
tabs.appendChild(afdaddlilink('javascript:no_consensus()',"no consensus"));
tabs.appendChild(afdaddlilink('javascript:redirect()',"redirect"));
tabs.appendChild(afdaddlilink('javascript:merge()',"merge"));
tabs.appendChild(afdaddlilink('javascript:other()',"other"));
}
}
$(add_afd_tabs);
//end AfD closing script
//*****ISBN link*****
function externISBN() {
for (var i = 0; i < document.links.length; i++)
{
var ln = document.links[i].href.match(/isbn=(.*)/);
if (ln) {
document.links[i].href='http://www.amazon.com/exec/obidos/ASIN/'+RegExp.$1;
}
}
}
$(externISBN);
//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'); }
// ==UserScript==
// @name Wikiwyg.Wikipedia
// @namespace http://www.wikiwyg.net
// @description Wikiwyg for Wikipedia
// @include http://*.wikipedia.org/wiki*
// ==/UserScript==
use = function(urls) {
var url = urls.shift();
if (!url) return;
var fetch_eval = function(response) {
var javascript = response.responseText;
try {
eval(javascript);
} catch(e) {
alert('Javascript use failed:\n' + url + '\n' + e);
}
use(urls);
}
GM_xmlhttpRequest({
method: 'GET',
'url': url,
onload: fetch_eval,
});
}
use([
'http://www.wikiwyg.net/download/bleed/lib/Wikiwyg.js',
'http://www.wikiwyg.net/download/bleed/lib/Wikiwyg/Toolbar.js',
'http://www.wikiwyg.net/download/bleed/lib/Wikiwyg/Wysiwyg.js',
'http://www.wikiwyg.net/download/bleed/lib/Wikiwyg/Wikitext.js',
'http://www.wikiwyg.net/download/bleed/lib/Wikiwyg/Preview.js',
'http://www.wikiwyg.net/download/bleed/lib/Wikiwyg/GreaseMonkey.js',
'http://www.wikiwyg.net/download/bleed/demo/wikipedia/wikipedia.js'
]);
// [[User:Dschwen/wikiminiatlas2.js]] - please include this line
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Dschwen/wikiminiatlas2.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
importScript('User:Lupin/editcount.js'); //[[User:Lupin/editcount.js]]
popupEditCounterTool='custom';
popupEditCounterUrl='http://en.wikipedia.org/wiki/User:$1?ectarget=$1';
// </nowiki>