User:John Broughton/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 is at User:John Broughton/monobook.css. |
// Checks edits to talk pages; warns if no signature:
importScript("User:John Broughton/sign.js");
// Creates multiple edit boxes, including separate ones for references and templates:
importScript("User:Magnus Manske/less edit clutter.js"); [Interesting experiment]
// [[User:Lupin/Anti-vandal tool]]
// importScript("User:Lupin/recent2.js"); (commented out, September 27, 2008)
// [[User:Lupin/popups.js]]
// importScript('User:Lupin/popups.js');
// Note, August 26, 2008: Now using Navigation Popups from the Gadgets tab of "My preferences"
importScript('User:Anomie/ajaxpreview.js'); // Linkback: [[User:Anomie/ajaxpreview.js]]
// Adds replace option to editing window - from [[Wikipedia:WikiProject User scripts/Scripts/Replace]]
function wpTextboxReplace()
{
var s = prompt("Search regexp:");
if(s){
var r = prompt("Replace /"+s+"/ with:");
if(!r && r != '') return;
var txt = document.editform.wpTextbox1;
txt.value = txt.value.replace(new RegExp(s, "mg"), r);
}
}
addOnloadHook(function () {
if (document.forms.editform) {
mw.util.addPortletLink('p-cactions', 'javascript:wpTextboxReplace()', 'Replace', 'ca-replace',
'Regexp replace for the edit window', 'R', document.getElementById('ca-history'));
}
});
//From [[User:Dschwen/highlightredirects.js]]; highlights (in green) redirects on a page, after (added) tab is clicked
var highlightRedirects = {
tab_redirects : null,
status: null,
xhr : null,
todo : null,
num : { total:0, done:0, redir:0 },
//
// Try to create an XMLHTTP request object for each tile
// with maximum browser compat.
// code adapted from http://jibbering.com/2002/4/httprequest.html
//
createXMLHTTP : function()
{
var i, xhr;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// Internet Explorer (uses Conditional compilation)
// traps security blocked creation of the objects.
wmaDebug('Microsoft section');
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xhr = false;
}
}
@end @*/
// Firefox, Konqueror, Safari, Mozilla
if (!xhr && typeof(XMLHttpRequest) != 'undefined') {
try {
xhr = new XMLHttpRequest();
} catch (e) {
xhr = false;
}
}
// ICE browser
if (!xhr && window.createRequest) {
try {
xhr = new window.createRequest();
} catch (e) {
xhr = false;
}
}
return xhr;
},
updateStatus : function()
{
with( highlightRedirects )
{
status.nodeValue = ' (' + num.redir + '/' + num.done + '/' + num.total + ')';
}
},
// cross-browser event attachment (John Resig)
// http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
addEvent : function ( obj, type, fn )
{
if (obj.addEventListener)
obj.addEventListener( type, fn, false );
else if (obj.attachEvent)
{
obj["e"+type+fn] = fn;
obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
obj.attachEvent( "on"+type, obj[type+fn] );
}
},
run : function()
{
var links = document.getElementById('bodyContent').getElementsByTagName('a');
var len = links.length;
var local = window.location.href + '#'
if( highlightRedirects.todo != null ) return;
highlightRedirects.todo = new Array();
for( var key = 0; key < len; key++ )
{
if( links[key].href &&
links[key].pathname &&
links[key].pathname.substr(0,6) == '/wiki/' &&
!( links[key].href.substr(0,local.length) == local ) &&
!( links[key].pathname.substr(6,8) == 'Special:' ) )
{
highlightRedirects.todo[highlightRedirects.num.total] =
{
link : links[key],
xhr : highlightRedirects.createXMLHTTP(),
func : new Function(
'var me = highlightRedirects.todo['+highlightRedirects.num.total+'];' +
'if(me.xhr.readyState==4) {' +
'var ro=eval("("+me.xhr.responseText+")");' +
'var redir=false;' +
'for( var k in ro.query.pages ) {' +
'if( typeof(ro.query.pages[k].redirect) != "undefined" ) redir=true;' +
'}' +
'if(redir) {' +
'me.link.style.color="green";' +
'highlightRedirects.num.redir++;' +
'}' +
'else me.link.style.color="blue";' +
'highlightRedirects.num.done++; highlightRedirects.updateStatus();' +
'}'
)
}
links[key].style.color = 'gray';
with(highlightRedirects.todo[highlightRedirects.num.total])
{
xhr.open("GET",
"/w/api.php?action=query&prop=info&format=json&titles=" +
links[key].pathname.substr(6), true);
xhr.onreadystatechange = func;
xhr.send( null );
}
highlightRedirects.num.total++;
}
}
},
install : function()
{
with(highlightRedirects)
{
tab_redirects = document.createElement('li');
tab_redirects.style.cursor = 'pointer';
tab_redirects.style.padding = '0pt 0.8em 0pt 0.8em';
tab_redirects.style.color = 'blue';
status = document.createTextNode('');
tab_redirects.appendChild( document.createTextNode('redirects') );
tab_redirects.appendChild( status );
if( document.getElementById('ca-history') )
document.getElementById('ca-history').parentNode.appendChild( tab_redirects );
addEvent( tab_redirects, 'click', run );
}
}
};
//
// Hook up installation function
//
addOnloadHook(highlightRedirects.install);
// End