User:Perfecto/monobook.js

//////////////////////////////////////////////////////////////////////////// // User:Celestianpower's monobook. // Most of it copied from some place or other and where it is, I've tried to give a source. // If you want to copy any of it, I'd be flattered. //////////////////////////////////////////////////////////////////////////// // Filter changes live // User:Lupin/recent2.js - please include this line document.write(' '); // User:Lupin/popups.js - please include this line document.write(' '); popupFixRedits = true; popupFixDabs = true; popupAdminLinks=true; // //From ABCD function hideafd{ var divs = document.getElementsByTagName("div"); for(var x = 0; x < divs.length; ++x) if(divs[x].className.indexOf("vfd") != -1 || divs[x].className.indexOf("afd") != -1) divs[x].style.display = "none"; document.getElementById('footer').style.display = 'none'; } function showafd{ var divs = document.getElementsByTagName("div"); for(var x = 0; x < divs.length; ++x) if(divs[x].className.indexOf("vfd") != -1 || divs[x].className.indexOf("afd") != -1) divs[x].style.display = ""; document.getElementById('footer').style.display = ''; } 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.appendChild(na); tabs.appendChild(li); return li; } function addToolboxLink(url, name, id){ var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0]; addlilink(tb, url, name, id); } //Hybirdization of ABCD afd closer function closeafd(bold, notbold){ var form = document.editform; var txt = form.wpTextbox1; txt.value = " " + bold + "" + notbold + ". ~\n" + txt.value + "\n\n"; form.wpSummary.value = "close discussion: " + bold + notbold; form.wpWatchthis.checked = false; } function afdresult{ var res = prompt("Result?"); if(!res) return; var form = document.editform; form.wpSummary.value = 'AFD result'; var txt = form.wpTextbox1; txt.value += ''; txt.focus; } function afddelete{ document.forms.deleteconfirm.wpReason.value = 'Wikipedia( talk)?):/, ) + ; } function fairusedelete{ document.forms.deleteconfirm.wpReason.value = 'Orphanned fair use image (' +  + 'WP:CSD' +  + ' I5)'; } 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); } } function afdresult{ var res = prompt("Result?"); var day = prompt("On which day was it nominated?"); if(!res) return; var form = document.editform; form.wpSummary.value = 'AFD result'; var txt = form.wpTextbox1; txt.value += ''; txt.focus; } // appends msg to the currently-editted page, appends summ to the summary, // and marks or unmarks the Watch this page checkbox according to watch. function edit_summary_watch(msg, summ, watch) {  var f = document.editform, t = f.wpTextbox1; if (t.value.length > 0) t.value += '\n'; t.value += msg; f.wpSummary.value += summ; f.wpSummary.value += " "; } function inoutaround(msg) {  var f = document.editform, t = f.wpTextbox1; t.value = ""; f.wpSummary.value = "I'm " + msg + "!"; } function testn(number) {  var page = prompt("Vandalism to which article?") var f = document.editform, t = f.wpTextbox1; if (t.value.length > 0) t.value += '\n'; t.value += "" + page + " ~" + "~" + "~" + "~"; f.wpSummary.value = "Vandalism to " + page + " - warning " + number; } function test5 {  var howlong = prompt("How long have they been blocked for?") var f = document.editform, t = f.wpTextbox1; if (t.value.length > 0) t.value += '\n'; t.value += "" + howlong + " hours " + ""; f.wpSummary.value = "Blocked for " + howlong + " hours for vandalising!"; } function interwiki(wiki) {  var f = document.editform, t = f.wpTextbox1; t.value += '\n'; t.value += "";  t.value += wiki;   t.value += ":"; f.wpSummary.value = "Adding interwiki to " + wiki + "-wiki"; } // adds various tabs to call the above function add_tabs {  var c1 = document.getElementById('column-one'); var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0]; // Only add for pages with "Editing User talk:" at the start of the title if (document.title.indexOf("Editing User talk:") == 0) {      addlilink(tabs, 'javascript:tag_spam',"spam"); addlilink(tabs, 'javascript:edit_summary_watch(" ~", "", false, 0)',"Welcome!"); addlilink(tabs, 'javascript:tag_nothanks_vanity',"nt-v"); addlilink(tabs, 'javascript:edit_summary_watch("==Edit summary==\\n ~", "", false, 0)',"EditSum"); addlilink(tabs, 'javascript:edit_summary_watch("==Citing sources==\\n ~", "", false, 0)',"Cite"); addlilink(tabs, 'javascript:testn(1)',"t1"); addlilink(tabs, 'javascript:testn(2)',"t2"); }  if (document.title.indexOf("Editing Wikipedia:Articles for deletion") == 0) {        addlilink(tabs, 'javascript:closeafd("keep", "")', 'Keep'); addlilink(tabs, 'javascript:closeafd("delete", "")', 'Delete'); addlilink(tabs, 'javascript:closeafd(prompt("Result?"), "")', 'Other'); }  if (document.title.indexOf("Wikipedia:Articles for deletion/Log/") != -1) {        addlilink(tabs, 'javascript:hideafd', 'Hide', 'ca-hide'); addlilink(tabs, 'javascript:showafd', 'Show', 'ca-show'); }  if (document.title.indexOf("Editing User:" + userName + "/status") == 0) {        addlilink(tabs, 'javascript:inoutaround("in")', "In"); addlilink(tabs, 'javascript:inoutaround("out")', "Out"); addlilink(tabs, 'javascript:inoutaround("around")', "Around"); }  if(document.title.indexOf("Confirm delete - Delete") == 0) {        addlilink(tabs, 'javascript:afddelete', 'AFD'); addlilink(tabs, 'javascript:fairusedelete', 'Fair use'); }  if(document.title.indexOf("Editing ") == 0){ addlilink(tabs, 'javascript:edit_summary_watch("", "rm external link spam (you can help!)", false, 0)',"rm spam"); addlilink(tabs, 'javascript:edit_summary_watch("", "", false, 0)',"prod-i"); addlilink(tabs, 'javascript:replace', 'Replace'); addlilink(tabs, 'javascript:interwiki("tl")', 'tl'); addlilink(tabs, 'javascript:interwiki(prompt("Which other Wikipedia has an article on this subject?"))', 'i-wiki'); }  if(document.title.indexOf("Editing Talk:") == 0){ addlilink(tabs, 'javascript:afdresult', 'AFDr'); addlilink(tabs, 'javascript:interwiki(tl)', 'tl'); addlilink(tabs, 'javascript:interwiki(prompt("Which Wikipedia has an article on the same subject?"))', 'i-wiki'); } } if (window.addEventListener) window.addEventListener("load", add_tabs, false); else if (window.attachEvent) window.attachEvent("onload", add_tabs); function addtab(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.appendChild(na); tabs.appendChild(li); return li; } /////////////////////////////////////////////////////////////////// // AutoAFD by Korath // This needs to change depending on skin used. ////////////////////////////////////////////////////////////////// function add_link2(url, name) {  var na = document.createElement('a'); na.setAttribute('href', url); na.appendChild(document.createTextNode(name)); var li = document.createElement('li'); li.appendChild(na); var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0]; tabs.appendChild(li); } function strip_namespace(target) {  var colon = target.indexOf(':'); if (colon != -1) {      var spaces = new Array('User', 'Wikipedia', 'Image', 'MediaWiki', 'Template', 'Help', 'Category'); var ns = target.substring(0, colon); if (ns == '' || ns == 'Talk') return target.substring(colon + 1); else for (var i = 0; i < spaces.length; ++i) {            if (ns == spaces[i]                 || ns == spaces[i] + '_talk') return target.substring(colon + 1); }    }   return target; } function afd {  document.editform.wpTextbox1.value = '{' + '{' + 'subst:afd}}\n' + document.editform.wpTextbox1.value; document.editform.wpSummary.value = 'afd'; var target = document.editform.action; target = target.substring(target.indexOf('title=') + 6,                            target.lastIndexOf('&action=submit')); var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); var date = new Date; date = date.getUTCFullYear + '_' + months[date.getUTCMonth] + '_' + date.getUTCDate; var pagename = strip_namespace(target); window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/' + pagename + '&action=edit&fakeaction=afdsub&faketarget=' + target,              'Afd ' + unescape(target),               'status,toolbar,location,menubar,directories,resizeable,scrollbars'); window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/Log/' + date + '&action=edit&fakeaction=afdlist&faketarget=' + pagename,              'AfdLog ' + unescape(target),               'status,toolbar,location,menubar,directories,resizeable,scrollbars'); } function autoafd {  if (document.title.indexOf('Editing ') == 0) {      var action = ''; var target = ''; if (location.search) {          var l = location.search.substring(1).split('&'); for (var i = 0; i < l.length; ++i) {              var eq = l[i].indexOf('='); var name = l[i].substring(0, eq); if (name == 'fakeaction') action = l[i].substring(eq + 1); else if (name == 'faketarget') target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' '); }        }       if (action == 'afdlist') {          document.editform.wpTextbox1.value += '\n'; document.editform.wpSummary.value = 'Articles for deletion/' + target + ''; }      else if (action == 'afdsub') {          if (document.editform.wpTextbox1.value.length > 0) {              target = document.editform.action; target = unescape(target.substring(target.indexOf('title=') + 6, target.lastIndexOf('&action=submit'))).replace(/_/g, ' '); window.alert("There's an old afd at the default location already.\n\n" +                           'Please either move it out of the way (and update existing links to it), or file the Afd by hand in another location (such as ' + target + ' (2)).'); }          else document.editform.wpTextbox1.value += '{' + '{' + 'subst:afd2|pg=' + target + '|text=' + '}' + '}' + '-- ~' + '~' + '~' + '~\n' + '\n*\'\'\' \'\'\'\n*\'\'\' \'\'\'\n*\'\'\' \'\'\'\n'; }      else add_link2('javascript:afd', 'Afd'); } } if (window.addEventListener) window.addEventListener('load', autoafd, false); else if (window.attachEvent) window.attachEvent('onload', autoafd); // Adds a "blocklog" tab and fills in the username field on Special:Blockip, if a "&faketarget=username" is present. function do_blockip_stuff {  // focus on Reason field document.getElementsByName('wpBlockReason')[0].focus; // Look for a &faketarget= for the username/ip var l = location.search.substring(1).split('&'); var target = ''; for (var i = 0; i < l.length; ++i) {      var n = l[i].indexOf('='); if (l[i].substring(0, n) == 'faketarget') { 	 target = l[i].substring(n + 1); break; }    }   if (target == '') return; // put account name in "IP Address/username" field var addr = document.getElementsByName('wpBlockAddress')[0]; addr.value = unescape(target); // add "blocklog" tab var c1 = document.getElementById('column-one'); var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0]; addlilink(tabs, '/wiki/Special:Log/block?page=User:' + target, 'blocklog'); } // Opens the block log in the current window, and Special:Blockip in a popup. // Width, height, top, and left are chosen for a 1600x1200 display. //function blockpage_and_log(target) //{ // window.open('Special_Blockip.html?foo=blarg&faketarget=' + target, 'Block', 'width=1600,height=600,top=600,left=0'); // document.location.href = 'http://en.wikipedia.org/w/index.php?title=Special%3ALog&type=block&user=&page=User%3A' + target; //} // Adds "block" and "blocklog" tabs to User: and User talk: pages. function add_block_tab {  var c1 = document.getElementById('column-one'); var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0]; // use the "edit this page" tab to get already-tidied url var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href; // cut everything up to "title=" from the start and everything past "&action=edit" from the end editlk = editlk.substring(editlk.indexOf('title=') + 6, editlk.lastIndexOf('&action=edit')); editlk = editlk.substring(editlk.indexOf(':') + 1); var slloc = editlk.indexOf('/'); if (slloc > 0) editlk = editlk.substring(0, slloc); // add "block" tab addlilink(tabs, '/wiki/Special:Blockip/' + editlk, 'block'); // To open the block page and block log simultaneously, replace the above line with: // addlilink(tabs, 'javascript:blockpage_and_log("' + editlk + '")', 'Block'); // and uncomment the blockpage_and_log function above. // add "blocklog" tab addlilink(tabs, '/w/index.php?title=Special%3ALog&type=block&user=&page=User%3A' + editlk, 'blocklog'); } function do_onload {  if (document.title.indexOf('User:') == 0       || document.title.indexOf('User talk:') == 0) add_block_tab; else if (document.title.indexOf('Block user') == 0) // could stand to be more robust do_blockip_stuff; } //From User:Func if (window.addEventListener) window.addEventListener("load", do_onload, false); else if (window.attachEvent) window.attachEvent("onload", do_onload); if ( document.createElement && window.addEventListener ) { 	function SoFixItInit // pre-load, (don't want to slow down loading of article's content, though) { 	} 	function SoFixItLoad // post-load { 		UserMenu = new PortletMenu( 'p-personal'  ); PageMenu = new PortletMenu( 'p-cactions'  ); NavMenu = new PortletMenu( 'p-navigation' ); //ToolMenu = new PortletMenu( 'p-tb'        ); //	This is inefficient and not particularly robust. //	This comes first, I want this link to come up as //	fast as possible. // 		function GetByClass( sElem, sClass ) {	var i, a2 = [], a = document.getElementsByTagName( sElem ); for ( i = 0; i < a.length; i++ ) if ( a[ i ].className == sClass ) a2.push( a[ i ] ); return a2; } 		var a, td = GetByClass( 'td', 'diff-otitle' ); if ( ( td = td[ 0 ] ) && ( a = td.getElementsByTagName( 'a' )[ 0 ] ) ) a.href = a.href + '&action=edit'; // need to change text, later var userName = UserMenu.getText( 'pt-userpage' ); // personal (top-most) menu // 			//		userName Háblame  Prefs  Watchlist  Contribs  Kate  VAN  ESP  Log out   // 		UserMenu.setText( 'pt-mytalk'   , 'Háblame'  ); UserMenu.setText( 'pt-preferences', 'Prefs' ); UserMenu.setText( 'pt-watchlist', 'Watchlist' ); UserMenu.setText( 'pt-mycontris', 'Contribs' ); UserMenu.setText( 'pt-logout'   , 'Log out'   ); // 		UserMenu.setHref( 'pt-mycontris', 			'http://en.wikipedia.org/w/index.php?title=Special:Contributions&target=' + 			userName + '&offset=0&limit=500' ); // 			// 			//	it seems there is a stylesheet that makes them lowercase // 			//		ok, the lowercased menu items are starting to really bug me: // 		document.getElementById( 'p-personal' ).getElementsByTagName( 'ul' )[0].style.textTransform = 'none'; // 		UserMenu.insertBefore( 'pt-logout', 'pt-stat', 'Status', 'http://en.wikipedia.org/w/index.php?title=User:' + userName + '/status&action=edit' ); UserMenu.insertBefore( 'pt-esp', 'pt-vandal', 'VAN', 'irc://irc.freenode.net/wikipedia-en-vandalism' ); UserMenu.insertBefore( 'pt-utc', 'pt-kate', 'Kate', 			'javascript:void InlineKate( "' + userName + '" )' ); if(document.getElementById('ca-edit')) document.getElementById('ca-edit').firstChild.innerHTML = 'Edit'; //	so I always know what time it is in UTC land: // 		UserMenu.append( 'pt-utc', UTCTime, 'javascript:void UserMenu.setText("pt-utc",UTCTime)' ); //	article-actions menu, (the "tabs") // 		if ( PageMenu[ 'ca-history' ] ) // theory: if it has a history tab, then it's purgable { 			PageMenu.insertBefore( 'ca-history', 'ca-lastdiff', 'Last diff', 			PageMenu.getHref( 'ca-history' ).replace( /action=history/, 'diff=0' ) ); PageMenu.append( 'ca-purge', 'Purge', 			PageMenu.getHref( 'ca-history' ).replace( /action=history/, 'action=purge' ) ); PageMenu.setText( 'ca-edit'   , 'Edit'   ); PageMenu.setText( 'ca-history'   , 'History'   ); PageMenu.setText( 'ca-delete'   , 'Delete'   ); } 		var x = 1; NavMenu.append( 'n-' + x++, 'monobook.js', 'http://en.wikipedia.org/w/index.php?title=User:' + userName + '/monobook.js&action=edit' ); NavMenu.append( 'n-' + x++, 'Vandalism Fighter', 'http://www.csclub.uwaterloo.ca/~dawill03/cdvf/vf.jar' ); NavMenu.append( 'n-' + x++, 'Deletion log', 'http://en.wikipedia.org/wiki/Special:Log/delete' ); NavMenu.append( 'n-' + x++, 'Newusers log', 'http://en.wikipedia.org/wiki/Special:Log/newusers' ); NavMenu.append( 'n-' + x++, 'Newpages log', 'http://en.wikipedia.org/wiki/Special:Newpages' ); NavMenu.append( 'n-' + x++, 'AfDs to be closed', 'http://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion/Old' ); } 	function PortletMenu( id ) // constructor { 		this.menu = document.getElementById( id ); this.list = this.menu.getElementsByTagName( 'ul' )[ 0 ]; // bypass " Views ", etc. 			//	sigh...as far as I can figure, there is empty whitespace being treated //	as TextNodes.... // 		var LIs = this.list.getElementsByTagName( 'li' ); for ( var i = 0; i < LIs.length; i++ ) { 			this[ LIs[ i ].id ] = LIs[ i ]; } 		this.newItem = function( id, txt, url ) {	var li = document.createElement( 'li' ); li.id  = id; var a = document.createElement( 'a'  );  a.href = url; a.appendChild( document.createTextNode( txt ) ); li.appendChild( a ); this[ id ] = li; // watch this!!! return li; } 		this.append = function( id, txt, url ) {	this.list.appendChild( this.newItem( id, txt, url ) ); } 		this.insertBefore = function( old, id, txt, url ) {	this.list.insertBefore( this.newItem( id, txt, url ), this[ old ] ); } 			//	the ByTagName here is a bit annoying, but in Safari, I was picking //	up TextNodes by using this[ id ].firstChild.firstChild // 		this.getText = function( id     ) { return this[ id ].getElementsByTagName( 'a' )[ 0 ].firstChild.data } this.setText = function( id, txt ) {       this[ id ].getElementsByTagName( 'a' )[ 0 ].firstChild.data = txt } this.getHref = function( id     ) { return this[ id ].getElementsByTagName( 'a' )[ 0 ].href       } this.setHref = function( id, url ) {       this[ id ].getElementsByTagName( 'a' )[ 0 ].href = url } //	I add em as I need em.... } 	function InlineKate( user ) { 		var kate = 'http://tools.wikimedia.de/~kate/cgi-bin/count_edits?user=' + user + '&dbname=enwiki'; var div = document.createElement( 'div' ); div.id = 'inlineKateDiv'; div.style.position = 'absolute'; div.style.zIndex  = 1000; div.style.left    =  '20px'; div.style.top     =  '20px'; div.style.backgroundColor = '#FFFFFF'; div.style.borderStyle    = 'solid'; div.style.borderWidth    = ' medium'; div.style.borderColor    = '#000000'; var top = document.createElement( 'div' ); top.id = 'inlineKateTop'; top.style.textAlign = 'right'; top.style.margin = '8px'; top.style.backgroundColor = '#DDDDDD'; var a = document.createElement( 'a' ); a.appendChild( document.createTextNode( "Go to Kate's" ) ); a.href   = kate; a.target = '_parent'; a.style.margin = '8px'; top.appendChild( a ); a = document.createElement( 'a' ); a.appendChild( document.createTextNode( 'Close' ) ); a.href   = "javascript:void RemoveNode('inlineKateDiv')"; a.style.margin = '8px'; top.appendChild( a ); div.appendChild( top ); var iframe = document.createElement( 'iframe' ); iframe.id  = 'inlineKateBot'; iframe.style.width = '300px'; iframe.style.height = '400px'; iframe.style.margin =  '8px'; iframe.style.borderStyle = 'solid'; iframe.style.borderWidth = 'thin'; iframe.style.borderColor = '#000000'; iframe.src = kate; div.appendChild( iframe ); document.body.appendChild( div ); } 	function RemoveNode( id ) {	var node = document.getElementById( id ) node.parentNode.removeChild( node ); } 	function UTCTime { 			//	Get a date stamp for the time in UTC-land. // 			//	for the future: a format arg // 		var s = '', d = new Date, a = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '); return	d.getUTCDate + ' ' + a[ d.getUTCMonth ] + ' ' + d.getUTCFullYear + ' ' + ( '0' + d.getUTCHours  ).substr( -2 ) + ':' + ( '0' + d.getUTCMinutes ).substr( -2 ) + ' ' + 'UTC'; } 	SoFixItInit; window.addEventListener( 'load', SoFixItLoad, false ); } function NUPatrol { 	if (	( window.location.href.indexOf( 'Special%3ALog&type=newusers' ) == -1 ) && 			( window.location.href.indexOf( 'Special:Log/newusers'       ) == -1 )  ) return; // make more robust??? var items, item, i, links, user, name, talk, contribs, insertLoc, link; items = document.getElementById( 'bodyContent' ).getElementsByTagName( 'ul' )[ 0 ].getElementsByTagName( 'li' ); function NewLink( txt, url, plainlinks, linkColor ) {	var a = document.createElement( 'a' ); a.appendChild( document.createTextNode( txt ) ); a.href = url; if ( plainlinks ) a.className = 'plainlinks'; if ( linkColor ) {	if ( typeof linkColor == "string" ) a.style.color = linkColor; else	a.style.color = '#FF0000'; // old default behavior } 		return a; 	} for ( i = 0; i < items.length; i++ ) { 		item = items[ i ]; links = item.getElementsByTagName( 'a' ); user = links[ 0 ]; name = user.firstChild.nodeValue; talk = links[ 2 ]; talk.firstChild.nodeValue = 'talk'; // lowercase 'Talk' for consistency contribs = links[ 3 ]; insertLoc = user.nextSibling; // ' newusers ' item.insertBefore( document.createTextNode( ' ( ' ), insertLoc ); 		item.insertBefore( talk, insertLoc ); 		item.insertBefore( document.createTextNode( ', ' ), insertLoc ); 		item.insertBefore( contribs, insertLoc ); 		item.insertBefore( document.createTextNode( ', ' ), insertLoc ); 		item.insertBefore( NewLink( 'actions', '/w/index.php?title=Special%3ALog&user=' + name, true, '#000088' ), insertLoc ); 		item.insertBefore( document.createTextNode( ', ' ), insertLoc ); 		item.insertBefore( NewLink( 'blocks', '/w/index.php?title=Special%3ALog&type=block&page=User%3A' + name, true, '#008800' ), insertLoc ); 		item.insertBefore( document.createTextNode( ', ' ), insertLoc ); 		item.insertBefore( NewLink( 'is blocked?', '/wiki/Special:Ipblocklist?action=search&ip=' + name, true, '#888800' ), insertLoc ); 		item.insertBefore( document.createTextNode( ', ' ), insertLoc ); 		item.insertBefore( NewLink( 'do block!', '/w/index.php?title=Special:Blockip&ip=' + name, true, '#880000' ), insertLoc ); item.insertBefore( document.createTextNode( ' )' ), insertLoc ); 		item.removeChild( insertLoc.nextSibling ); // should remove the span 		item.removeChild( insertLoc ); // should remove ' newusers ' text 	} } if ( window.addEventListener ) window.addEventListener( 'load', NUPatrol, false ); else if ( window.attachEvent ) window.attachEvent( 'onload', NUPatrol );

function getElementsByClass(searchClass,node,tag) { /* This script and many more are available free online at   The JavaScript Source :: http://javascript.internet.com Created by: Dustin Diaz :: http://www.dustindiaz.com/ */ var classElements = new Array; if (node == null) node = document; if (tag == null) tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"); for (i = 0, j = 0; i < elsLen; i++) { if (pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } 	} 	return classElements; } function tag_nothanks_vanity { // nothanks-vanity stamper var pg = prompt("Article?"); edit_summary_watch("==" + pg + "==\n" + pg + " ~", "", false, 0); } function tag_spam { // spam stamper var pg = prompt("Domain?"); var heading = ""; var edit_summary = ""; if ( pg != "" ) { edit_summary += ": " + pg; heading = "==" + pg + "==\n"; } 	edit_summary_watch(heading + "" + pg + " ~", edit_summary, false, 0); } function alexafy {	// converts external links to alexa links // courtesy of User:Lupin for (var i=0; ialexa]'; if(l.nextSibling) l.parentNode.insertBefore(sp, l.nextSibling); else l.parentNode.appendChild(sp); } }

function addAlexaToolboxLink { addToolboxLink('javascript:alexafy','Alexa-fy links','addalexa'); } if ( window.addEventListener ) window.addEventListener( 'load', alexafy, false ); else if ( window.attachEvent ) window.attachEvent( 'onload', alexafy ); //if ( window.addEventListener ) window.addEventListener( 'load', addAlexaToolboxLink, false ); //else if ( window.attachEvent ) window.attachEvent( 'onload', addAlexaToolboxLink ); //