Difference between revisions of "MediaWiki:Common.js"

From Hobowars Wiki
Jump to: navigation, search
m (Finally got the item template to work :D)
m
Line 175: Line 175:
 
     "sampleText": ""};
 
     "sampleText": ""};
 
   }
 
   }
 +
 +
/* This should display a nifty clock in the upper right-hand corner of the page. */
 +
( function( $, undefined ) {
 +
 +
var $target;
 +
 +
function showTime( $target ) {
 +
var dateNode = UTCLiveClockConfig.node;
 +
if( !dateNode ) {
 +
return;
 +
}
 +
 +
var now = new Date();
 +
var hh = now.getUTCHours();
 +
var mm = now.getUTCMinutes();
 +
var ss = now.getUTCSeconds();
 +
if ( $target === undefined ) {
 +
$target = $( dateNode ).find( 'a:first' );
 +
}
 +
var time = ( hh < 10 ? '0' + hh : hh ) + ':' + ( mm < 10 ? '0' + mm : mm ) + ':' + ( ss < 10 ? '0' + ss : ss );
 +
$target.text( time );
 +
 +
setTimeout( function(){
 +
showTime( $target );
 +
}, 1000 );
 +
}
 +
 +
function liveClock() {
 +
appendCSS( '#utcdate a { font-weight:bolder; font-size:120%; }' );
 +
 +
if ( window.UTCLiveClockConfig === undefined ) {
 +
window.UTCLiveClockConfig = {};
 +
}
 +
var portletId = UTCLiveClockConfig.portletId || 'p-personal';
 +
var nextNode = UTCLiveClockConfig.nextNodeId ? document.getElementById( UTCLiveClockConfig.nextNodeId ) : undefined;
 +
UTCLiveClockConfig.node = addPortletLink(
 +
portletId,
 +
mw.config.get( 'wgScript' ) + '?title=' + encodeURIComponent( wgPageName ) + '&action=purge',
 +
'',
 +
'utcdate',
 +
undefined,
 +
undefined,
 +
nextNode
 +
);
 +
if( !UTCLiveClockConfig.node ) {
 +
return;
 +
}
 +
 +
showTime();
 +
}
 +
$( document ).ready( liveClock );
 +
 +
} )( jQuery );

Revision as of 10:15, 2 June 2012

/* Any JavaScript here will be loaded for all users on every page load. */
/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
var autoCollapse = 2;
var collapseCaption = 'Hide';
var expandCaption = 'Show';
 
function collapseTable( tableIndex ) {
        var Button = document.getElementById( 'collapseButton' + tableIndex );
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
        if ( !Table || !Button ) {
                return false;
        }
 
        var Rows = Table.rows;
 
        if ( Button.firstChild.data == collapseCaption ) {
                for ( var i = 1; i < Rows.length; i++ ) {
                        Rows[i].style.display = 'none';
                }
                Button.firstChild.data = expandCaption;
        } else {
                for ( var i = 1; i < Rows.length; i++ ) {
                        Rows[i].style.display = Rows[0].style.display;
                }
                Button.firstChild.data = collapseCaption;
        }
}
 
function createCollapseButtons() {
        var tableIndex = 0;
        var NavigationBoxes = new Object();
        var Tables = document.getElementsByTagName( 'table' );
 
        for ( var i = 0; i < Tables.length; i++ ) {
                if ( hasClass( Tables[i], 'collapsible' ) ) {
 
                        /* only add button and increment count if there is a header row to work with */
                        var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
                        if ( !HeaderRow ) {
                                continue;
                        }
                        var Header = HeaderRow.getElementsByTagName( 'th' )[0];
                        if ( !Header ) {
                                continue;
                        }
 
                        NavigationBoxes[tableIndex] = Tables[i];
                        Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 
                        var Button = document.createElement( 'span' );
                        var ButtonLink = document.createElement( 'a' );
                        var ButtonText = document.createTextNode( collapseCaption );
 
                        Button.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]
 
                        ButtonLink.style.color = Header.style.color;
                        ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
                        ButtonLink.setAttribute( 'href', "javascript:collapseTable(" + tableIndex + ");" );
                        ButtonLink.appendChild( ButtonText );
 
                        Button.appendChild( document.createTextNode( '\u00a0' ) );
                        Button.appendChild( document.createTextNode( '[' ) );
                        Button.appendChild( ButtonLink );
                        Button.appendChild( document.createTextNode( ']' ) );
 
                        Header.insertBefore( Button, Header.childNodes[0] );
                        tableIndex++;
                }
        }
 
        for ( var i = 0;  i < tableIndex; i++ ) {
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
                        collapseTable( i );
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {
                        var element = NavigationBoxes[i];
                        while ( element = element.parentNode ) {
                                if ( hasClass( element, 'outercollapse' ) ) {
                                        collapseTable( i );
                                        break;
                                }
                        }
                }
        }
}
 
addOnloadHook( createCollapseButtons );
 
/** Test if an element has a certain class **************************************
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
 
var hasClass = ( function() {
        var reCache = {};
        return function( element, className ) {
                return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className );
        };
})();

/* JavaScript for alternating-color table rows in sortable tables. */

var ts_alternate_row_colors = true;

/* JavasSript for hiding the ToC by default. Source: http://ryanalberts.com/418/hiding-table-of-contents-on-mediawiki/ */

function hideToc() {
        var toc = document.getElementById('toc').getElementsByTagName('ul')[0];
        var toggleLink = document.getElementById('togglelink');
        changeText(toggleLink, tocShowText);
        toc.style.display = 'none';
        document.cookie = "hidetoc=1";
}

addOnloadHook( hideToc );



/* Section for custom edit buttons */

/* Double Line Right Arrow Button */ 
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://www.hobowars.com/wiki/images/Button_arrow.png",
     "speedTip": "DBLArrow",
     "tagOpen": "⇒",
     "tagClose": " ",
     "sampleText": ""};
  }

/* Text Color Button */
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://www.hobowars.com/wiki/images/Button_TextColor.png",
     "speedTip": "TextColor",
     "tagOpen": "<span style='color: #000000'>",
     "tagClose": "</span>",
     "sampleText": ""};
  }

/* Line Break Button */
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://www.hobowars.com/wiki/images/Button_enter.png",
     "speedTip": "LineBreak",
     "tagOpen": "<br>",
     "tagClose": "",
     "sampleText": ""};
  }

/* StrikeThrough Text Button */
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://www.hobowars.com/wiki/images/Button_strike.png",
     "speedTip": "StrikeThrough",
     "tagOpen": "<s>",
     "tagClose": "</s>",
     "sampleText": ""};
  }

/* Food Item Template Button */
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://www.hobowars.com/wiki/images/Button_food.png",
     "speedTip": "FoodItemTemplate",
     "tagOpen": "{{Info Table" + "\n|name= FOOD_NAME" + "\n|image= IMAGE_URL" + "\n|id= ITEM_ID" + "\n|cat= CATEGORY" + "\n|subcat= SUBCATEGORY" + "\n}}" + "\nA \'\'\'FOOD_NAME\'\'\' is a [[Food|food item]] that gives you \'\'\'0T\'\'\' and the \'\'\'\'\'[[Insert Effect]]\'\'\'\'\' [[Status Effects|status effect]] upon consumption." + "\n__NOTOC__" + "\n==List of Locations and Costs==" + "\n===HoboWars and HoboWars2===" + "\n====Hoburbia====" + "\n* [[LOCATION]] ⇒ SECONDARY_LOCATION" + "\n" + "\n==Cookbook==" + "\n*Created by combining [[INGREDIENT_ONE]] and [[INGREDIENT_TWO]]" + "\n*Separates into [[INGREDIENT_ONE]] and [[INGREDIENT_TWO]]" + "\n*Not an ingredient" + "\n" + "\n[[Category:Incomplete]]",
     "tagClose": "",
     "sampleText": ""};
  }

/* This should display a nifty clock in the upper right-hand corner of the page. */
( function( $, undefined ) {
 
var $target;
 
function showTime( $target ) {
	var dateNode = UTCLiveClockConfig.node;
	if( !dateNode ) {
		return;
	}
 
	var now = new Date();
	var hh = now.getUTCHours();
	var mm = now.getUTCMinutes();
	var ss = now.getUTCSeconds();
	if ( $target === undefined ) {
		$target = $( dateNode ).find( 'a:first' );
	}
	var time = ( hh < 10 ? '0' + hh : hh ) + ':' + ( mm < 10 ? '0' + mm : mm ) + ':' + ( ss < 10 ? '0' + ss : ss );
	$target.text( time );
 
	setTimeout( function(){
		showTime( $target );	
	}, 1000 );
}
 
function liveClock() {
	appendCSS( '#utcdate a { font-weight:bolder; font-size:120%; }' );
 
	if ( window.UTCLiveClockConfig === undefined ) {
		window.UTCLiveClockConfig = {};
	}
	var portletId = UTCLiveClockConfig.portletId || 'p-personal';
	var nextNode = UTCLiveClockConfig.nextNodeId ? document.getElementById( UTCLiveClockConfig.nextNodeId ) : undefined;
	UTCLiveClockConfig.node = addPortletLink(
		portletId,
		mw.config.get( 'wgScript' ) + '?title=' + encodeURIComponent( wgPageName ) + '&action=purge',
		'',
		'utcdate',
		undefined,
		undefined,
		nextNode
	);
	if( !UTCLiveClockConfig.node ) {
		return;
	}
 
	showTime();
}
$( document ).ready( liveClock );
 
} )( jQuery );