User:Howabout1/monobook.js

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, e, td = GetByClass( 'td', 'diff-otitle' ); if ( ( td = td[ 0 ] ) && ( a = td.getElementsByTagName( 'a' )[ 0 ] ) ) {			e = a.cloneNode(true); e.firstChild.nodeValue = '[Edit]'; e.href = a.href + '&action=edit'; a.parentNode.insertBefore( document.createTextNode( '\u00A0\u00A0' ), a.nextSibling ); a.parentNode.insertBefore( e, a.nextSibling.nextSibling ); }

//	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' ) ); }

var x = 1; NavMenu.append( 'n-' + x++, 'monobook.js', '/wiki/User:' + userName + '/monobook.js' ); NavMenu.append( 'n-' + x++, 'Cat:Wikipedia', '/wiki/Category:Wikipedia' ); NavMenu.append( 'n-' + x++, 'Cat:Policies', '/wiki/Category:Wikipedia_policies_and_guidelines' ); NavMenu.append( 'n-' + x++, 'Cat:Official', '/wiki/Category:Wikipedia_official_policy' ); NavMenu.append( 'n-' + x++, 'WP:Templates', '/wiki/Wikipedia:Template' ); NavMenu.append( 'n-' + x++, 'WP:Temp Tags', '/wiki/Wikipedia:Template_messages/Cleanup' );

var userName = UserMenu.getText( 'pt-userpage' ); //			// personal (top-most) menu //			//		Func Talk  Prefs  Watch  List  Edits  Logs  #IRC  Out  d Mmm yyyy HH:MM UTC //		UserMenu.setText( 'pt-mytalk'   , 'Talk'  ); UserMenu.setText( 'pt-preferences', 'Prefs' ); UserMenu.setText( 'pt-watchlist', 'Watch' ); UserMenu.setText( 'pt-mycontris', 'Edits' ); UserMenu.setText( 'pt-logout'   , '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-mycontris', 'pt-list', 'List', '/wiki/Special:Watchlist/edit' ); UserMenu.insertBefore( 'pt-logout' , 'pt-logs', 'Logs',			'/w/index.php?title=Special%3ALog&user=' + userName ); UserMenu.insertBefore( 'pt-logout' , 'pt-irc' , '#IRC', 'irc://irc.freenode.net/wikipedia' ); //			//	so I always know what time it is in UTC land: //		UserMenu.append( 'pt-utc', UTCTime, 'javascript:void UserMenu.setText("pt-utc",UTCTime)' ); }

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 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 ); }