User:Poke/tools.js

/* */ /**** function clearRecentChanges.js * (c) 2009 by Patrick Westerhoff [poke] * * Customize rNames and rWords to filter out entries from Special:RecentChanges. */ function clearRecentChanges { if ( wgPageName !== 'Special:RecentChanges' ) return false; var rNames, rWords, xpath, snaps, snap; rNames = [ 'username' ]; rWords = [ 'Word', 'word' ]; xpath = '//div[@id="bodyContent"]//li/.. | //div[@id="bodyContent"]//li['; xpath += rNames.length > 0 ? './a[contains(@class,"mw-userlink")][contains(@title,"' + rNames.join( '") or contains(@title,"' ) + '")] or ' : ''; xpath += rWords.length > 0 ? 'contains(a[1]/@title,"' + rWords.join( '") or contains(a[1]/@title,"' ) + '") or ' : ''; xpath += rWords.length > 0 ? 'contains(span[@class="comment"],"' + rWords.join( '") or contains(span[@class="comment"],"' ) + '") or ' : ''; xpath += ' 0 ]'; snaps = document.evaluate( xpath, document, null, 6, null ); parent = snaps.snapshotItem( 0 ); for ( var i = 1; i < snaps.snapshotLength; i++ ) parent.removeChild( snaps.snapshotItem( i ) ); }

/**** bookmarklet clearRecentChanges.js * (c) 2009 by Patrick Westerhoff [poke] * * Customize the username and copy the bookmarklet code into your browser's location bar, or save as a bookmark. */ javascript:var user = 'People of Antioch'; var snaps = document.evaluate( '//div[@id="bodyContent"]//li/.. | //div[@id="bodyContent"]//li[./a[contains(@class,"mw-userlink")][@title="User:' + user + '"]]', document, null, 6, null ); for ( var i = 1; i < snaps.snapshotLength; i++ ) { snaps.snapshotItem( 0 ).removeChild( snaps.snapshotItem( i ) ) }; void(0);

/**** function highlightRecentChanges.js * (c) 2009 by Patrick Westerhoff [poke] * * Highlighs the given users or titles that contain the given text with the specified background color */ function highlightRecentChanges ( users, pages ) { if ( wgPageName != 'Special:RecentChanges' ) return; for ( var user in users ) {   var snaps = document.evaluate( '//div[@id="bodyContent"]//li[./a[contains(@class,"mw-userlink")][contains(@title,"' + user + '")]]', document, null, 6, null ); for ( var i = 0; i < snaps.snapshotLength; i++ ) snaps.snapshotItem( i ).style.background = users[user]; } for ( var page in pages ) {   var snaps = document.evaluate( '//div[@id="bodyContent"]//li[contains(a[1]/@title,"' + page + '")]', document, null, 6, null ); for ( var i = 0; i < snaps.snapshotLength; i++ ) snaps.snapshotItem( i ).style.background = pages[page]; } } // example call highlightRecentChanges( { 'Poke' : '#CEEFFF' }, { '.js' : '#FDFFCE', '.css' : '#EAFFCE' });

/**** Different more or less useful tools * (c) 2007-2009 by Patrick Westerhoff [poke] * Feel free to use */

/** Gem Stalker **/ hookEvent( 'load', function { if ( wgPageName != 'Special:Recentchanges' )    return;  var links = document.getElementById( 'bodyContent' ).getElementsByTagName( 'a' );  for ( var i = 0; i < links.length; i++ )  {    if ( links[i].title.indexOf( 'User:Gem' ) > -1 )      links[i].style.background = '#FCC';  } } );

/** Favicon changer **/ function changeFavicon( url ) { var head  = document.getElementsByTagName( 'head' )[0]; var link = document.createElement( 'link' ); link.rel = 'shortcut icon'; link.type = "image/x-icon"; link.href = url; var links = head.getElementsByTagName( 'link' ); for ( var i = 0; i < links.length; i++ ) {   if ( links[i].rel == 'shortcut icon' ) {      head.removeChild( links[i] ); break; } }  head.appendChild( link ); } // to run, call changeFavicon onload; for example with gwwt gwwtLoadAfter = function { changeFavicon( 'http://borntolaugh.de/files/GuildWarsWiki.ico' ); }

/** Custom timezone compatible javascript clock **/ function showTime ( displayObj, timezoneOffset ) { var aMonths = new Array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ); var aDays  = new Array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ); var oDays  = { 1 : 'st', 2 : 'nd', 3 : 'rd', 21 : 'st', 22 : 'nd', 23 : 'rd', 31 : 'st' }; var date, str; function actualize {   date = new Date; date.setMinutes( date.getMinutes + date.getTimezoneOffset + timezoneOffset * 60 ); str = aDays[ date.getDay ] + ', ' + date.getDate + ' ' + ( oDays[ date.getDate ] == undefined ? 'th' : oDays[ date.getDate ] ) + ' ' + aMonths[ date.getMonth ] + ' ' + date.getFullYear + ' ' + ( date.getHours % 12 < 10 ? '0' : '' ) + date.getHours % 12 + ':' + ( date.getMinutes < 10 ? '0' : '' ) + date.getMinutes + ':' + ( date.getSeconds < 10 ? '0' : '' ) + date.getSeconds + ' ' + ( date.getHours < 12 ? 'am' : 'pm' ); displayObj.innerHTML = str; } setInterval( actualize, 1000 ); actualize; } showTime( document.getElementById( 'timerPDT' ), -7 );

/* */