No edit summary |
No edit summary |
||
Line 343: | Line 343: | ||
}); |
}); |
||
}); |
}); |
||
+ | hookEvent( 'load', displayTimer ); |
||
+ | |||
+ | function displayTimer () |
||
+ | { |
||
+ | if ( typeof( timerDisplay ) !== 'undefined' && timerDisplay === false ) |
||
+ | return; |
||
+ | |||
+ | var date; |
||
+ | |||
+ | if (skin == 'oasis') |
||
+ | { |
||
+ | var timerParent = document.getElementById( 'WikiHeader' ).getElementsByTagName( 'div' )[0]; |
||
+ | } |
||
+ | |||
+ | if (skin == 'monobook') |
||
+ | { |
||
+ | var timerParent = document.getElementById( 'p-personal' ).getElementsByTagName( 'ul' )[0]; |
||
+ | } |
||
+ | |||
+ | var timerLink = document.createElement( 'a' ); |
||
+ | var timerObj = document.createElement( 'li' ); |
||
+ | timerLink.href = '/wiki/' + wgPageName + '?action=purge'; |
||
+ | timerLink.title = 'Purge the server cache and update the contents of this page.' |
||
+ | timerObj.id = 'displayTimer'; |
||
+ | timerObj.style.textTransform = 'none'; |
||
+ | timerObj.style.fontWeight = 'bold'; |
||
+ | timerObj.style.fontSize = '100%'; |
||
+ | timerObj.appendChild( timerLink ); |
||
+ | timerParent.insertBefore( timerObj, timerParent.firstChild ); |
||
+ | |||
+ | if (skin == 'oasis') |
||
+ | { |
||
+ | $('#displayTimer').css({'position': "inherit", 'right': "0px", 'top': "-28px"}); |
||
+ | } |
||
+ | |||
+ | var month = new Array(12); |
||
+ | month[0] = "Jan"; |
||
+ | month[1] = "Feb"; |
||
+ | month[2] = "Mar"; |
||
+ | month[3] = "Apr"; |
||
+ | month[4] = "May"; |
||
+ | month[5] = "Jun"; |
||
+ | month[6] = "Jul"; |
||
+ | month[7] = "Aug"; |
||
+ | month[8] = "Sep"; |
||
+ | month[9] = "Oct"; |
||
+ | month[10] = "Nov"; |
||
+ | month[11] = "Dec"; |
||
+ | |||
+ | function actualizeUTC () |
||
+ | { |
||
+ | timerDate = new Date(); |
||
+ | timerLink.innerHTML = ( timerDate.getUTCDate() < 10 ? '0' : '' ) + timerDate.getUTCDate() + ' ' |
||
+ | + ( timerDate.getUTCMonth() < 10 ? '' : '' ) + month[timerDate.getUTCMonth()] + ' ' |
||
+ | + ( timerDate.getUTCFullYear() < 10 ? '0' : '' ) + timerDate.getUTCFullYear() + ' ' |
||
+ | + ( timerDate.getUTCHours() < 10 ? '0' : '' ) + timerDate.getUTCHours() + ':' |
||
+ | + ( timerDate.getUTCMinutes() < 10 ? '0' : '' ) + timerDate.getUTCMinutes() + ':' |
||
+ | + ( timerDate.getUTCSeconds() < 10 ? '0' : '' ) + timerDate.getUTCSeconds() + ' (UTC)'; |
||
+ | } |
||
+ | |||
+ | function actualizeCustom () |
||
+ | { |
||
+ | timerDate = new Date(); |
||
+ | timerDate.setMinutes ( timerDate.getMinutes() + timerDate.getTimezoneOffset() + timerTimezone * 60 ); |
||
+ | timerLink.innerHTML = ( timerDate.getDate() < 10 ? '0' : '' ) + timerDate.getDate() + ' ' |
||
+ | + ( timerDate.getMonth() < 10 ? '' : '' ) + month[timerDate.getMonth()] + ' ' |
||
+ | + ( timerDate.getFullYear() < 10 ? '0' : '' ) + timerDate.getFullYear() + ' ' |
||
+ | + ( timerDate.getHours() < 10 ? '0' : '' ) + timerDate.getHours() + ':' |
||
+ | + ( timerDate.getMinutes() < 10 ? '0' : '' ) + timerDate.getMinutes() + ':' |
||
+ | + ( timerDate.getSeconds() < 10 ? '0' : '' ) + timerDate.getSeconds() |
||
+ | + ' (UTC' + ( timerTimezone < 0 ? '' : '+' ) + timerTimezone + ')'; |
||
+ | } |
||
+ | |||
+ | // start |
||
+ | if ( typeof( timerTimezone ) !== 'number' ) |
||
+ | { |
||
+ | actualizeUTC(); |
||
+ | setInterval( actualizeUTC, 1000 ); |
||
+ | } |
||
+ | else |
||
+ | { |
||
+ | actualizeCustom(); |
||
+ | setInterval( actualizeCustom, 1000 ); |
||
+ | } |
||
+ | } |
Revision as of 23:11, 24 September 2011
/* Any JavaScript here will be loaded for all users on every page load. */
AjaxRCRefreshText = 'Auto-refresh';
AjaxRCRefreshHoverText = 'Automatically refresh the page';
importScriptPage('AjaxRC/code.js', 'dev');
// **************************************************
// Experimental javascript countdown timer (Splarka)
// Version 0.0.3
// **************************************************
//
// Usage example:
// <span class="countdown" style="display:none;">
// Only <span class="countdowndate">January 01 2007 00:00:00 PST</span> until New years.
// </span>
// <span class="nocountdown">Javascript disabled.</span>
function updatetimer(i) {
var now = new Date();
var then = timers[i].eventdate;
var diff = count=Math.floor((then.getTime()-now.getTime())/1000);
// catch bad date strings
if(isNaN(diff)) {
timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **' ;
return;
}
// determine plus/minus
if(diff<0) {
diff = -diff;
var tpm = 'T plus ';
} else {
var tpm = 'T minus ';
}
// calcuate the diff
var left = (diff%60) + ' seconds';
diff=Math.floor(diff/60);
if(diff > 0) left = (diff%60) + ' minutes ' + left;
diff=Math.floor(diff/60);
if(diff > 0) left = (diff%24) + ' hours ' + left;
diff=Math.floor(diff/24);
if(diff > 0) left = diff + ' days ' + left
timers[i].firstChild.nodeValue = tpm + left;
// a setInterval() is more efficient, but calling setTimeout()
// makes errors break the script rather than infinitely recurse
timeouts[i] = setTimeout('updatetimer(' + i + ')',1000);
}
function checktimers() {
//hide 'nocountdown' and show 'countdown'
var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
for(var i in nocountdowns) nocountdowns[i].style.display = 'none'
var countdowns = getElementsByClassName(document, 'span', 'countdown');
for(var i in countdowns) countdowns[i].style.display = 'inline'
//set up global objects timers and timeouts.
timers = getElementsByClassName(document, 'span', 'countdowndate'); //global
timeouts = new Array(); // generic holder for the timeouts, global
if(timers.length == 0) return;
for(var i in timers) {
timers[i].eventdate = new Date(timers[i].firstChild.nodeValue);
updatetimer(i); //start it up
}
}
addOnloadHook(checktimers);
// **************************************************
// - end - Experimental javascript countdown timer
// **************************************************
/* Test if an element has a certain class **************************************
*
* Description: Uses regular expressions and caching for better performance.
* Taken from Wikipedia's Common.js.
*/
var hasClass = (function () {
var reCache = {};
return function (element, className) {
return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
};
})();
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* [[Wikipedia:NavFrame]].
* Taken from Wikipedia's Common.js.
*/
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.style.styleFloat = "right";
Button.style.cssFloat = "right";
Button.style.fontWeight = "normal";
Button.style.textAlign = "right";
Button.style.width = "6em";
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
ButtonLink.appendChild( ButtonText );
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 );
}
}
}
addOnloadHook( createCollapseButtons );
/** Dynamic Navigation Bars (experimental) *************************************
*
* Description: See [[Wikipedia:NavFrame]].
* Taken from Wikipedia's Common.js.
*/
// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar)
{
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) {
return false;
}
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if ( hasClass( NavChild, 'NavPic' ) ) {
NavChild.style.display = 'none';
}
if ( hasClass( NavChild, 'NavContent') ) {
NavChild.style.display = 'none';
}
}
NavToggle.firstChild.data = NavigationBarShow;
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if (hasClass(NavChild, 'NavPic')) {
NavChild.style.display = 'block';
}
if (hasClass(NavChild, 'NavContent')) {
NavChild.style.display = 'block';
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
var indexNavigationBar = 0;
// iterate over all < div >-elements
var divs = document.getElementsByTagName("div");
for(
var i=0;
NavFrame = divs[i];
i++
) {
// if found a navigation bar
if (hasClass(NavFrame, "NavFrame")) {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var NavToggleText = document.createTextNode(NavigationBarHide);
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
if (NavChild.style.display == 'none') {
NavToggleText = document.createTextNode(NavigationBarShow);
break;
}
}
}
NavToggle.appendChild(NavToggleText);
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
for(
var j=0;
j < NavFrame.childNodes.length;
j++
) {
if (hasClass(NavFrame.childNodes[j], "NavHead")) {
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
}
addOnloadHook( createNavigationBarToggleButton );
// Fix search result links
function fixSearchResultLinks() {
$('ul.mw-search-results').find('a').each(function() {
var a = $(this);
a.attr('href', wgArticlePath.replace('$1', encodeURIComponent(a.text().replace(new RegExp(' ', 'g'), '_')).replace(new RegExp('%3A','g'),':')));
});
}
if (window.wgNamespaceNumber == -1 && window.wgCanonicalSpecialPageName == 'Search') {
$(fixSearchResultLinks);
}
// IRC code originally from Sactage
if (wgPageName=='Pokémon_Wiki:IRC') {
$(function() {
var nick = (wgUserName == null) ? ('Wikian' + Math.floor(Math.random() * 10)) : wgUserName.replace(/ /g, '_');
$('#IRClogin').append('<iframe src="http://webchat.freenode.net/?nick=' + encodeURIComponent( nick ) + '&channels=wikia-pokemon&prompt=true&uio=OT10cnVlJjExPTE3NCYxMj10cnVld1" width="950" height="400" style="border:0;"></iframe>');
});
}
/* ############################################# */
/* ## CUSTOM EDIT BUTTONS ## */
/* ############################################# */
if ((wgAction == "edit" || wgAction == "submit") && mwCustomEditButtons) {
mwCustomEditButtons[mwCustomEditButtons.length] = {
"imageFile": "http://images1.wikia.nocookie.net/pokemon/images/4/42/Accent_Button.png",
"speedTip": "Insert Pokémon",
"tagOpen": "Pokémon",
"tagClose": "",
"sampleText": ""};
}
if (mwCustomEditButtons) {
mwCustomEditButtons[mwCustomEditButtons.length] = {
"imageFile": "http://images2.wikia.nocookie.net/central/images/c/c8/Button_redirect.png",
"speedTip": "Redirect",
"tagOpen": "#REDIRECT [[",
"tagClose": "]]",
"sampleText": "Insert text"};
}
/* Fill the block expiry time with a default value */
var wgDefaultExpiryBlock = '3 days';
if ( wgNamespaceNumber == -1 && wgCanonicalSpecialPageName == 'Blockip' ) {
$(function() {
if ( ($('#wpBlockExpiry').val() == '' || $('#wpBlockExpiry').val() == 'other') && $('#mw-bi-other').val() == '' ) {
$('#wpBlockExpiry').val('3 days').trigger('change');
}
});
}
function fBox() {
$('#fbox').append('<iframe marginheight="0" marginwidth="0" src="http://www.facebook.com/connect/connect.php?id=202448143133369&connections=10" align="top" frameborder="0" width="275" height="250" scrolling="no" />');
}
$(fBox);
/* track incontent share fb button */
$(function(){
$("#incontent_share").click(function(){
WET.byStr("articleAction/incontent_share/" + wgPageName);
});
});
hookEvent( 'load', displayTimer );
function displayTimer ()
{
if ( typeof( timerDisplay ) !== 'undefined' && timerDisplay === false )
return;
var date;
if (skin == 'oasis')
{
var timerParent = document.getElementById( 'WikiHeader' ).getElementsByTagName( 'div' )[0];
}
if (skin == 'monobook')
{
var timerParent = document.getElementById( 'p-personal' ).getElementsByTagName( 'ul' )[0];
}
var timerLink = document.createElement( 'a' );
var timerObj = document.createElement( 'li' );
timerLink.href = '/wiki/' + wgPageName + '?action=purge';
timerLink.title = 'Purge the server cache and update the contents of this page.'
timerObj.id = 'displayTimer';
timerObj.style.textTransform = 'none';
timerObj.style.fontWeight = 'bold';
timerObj.style.fontSize = '100%';
timerObj.appendChild( timerLink );
timerParent.insertBefore( timerObj, timerParent.firstChild );
if (skin == 'oasis')
{
$('#displayTimer').css({'position': "inherit", 'right': "0px", 'top': "-28px"});
}
var month = new Array(12);
month[0] = "Jan";
month[1] = "Feb";
month[2] = "Mar";
month[3] = "Apr";
month[4] = "May";
month[5] = "Jun";
month[6] = "Jul";
month[7] = "Aug";
month[8] = "Sep";
month[9] = "Oct";
month[10] = "Nov";
month[11] = "Dec";
function actualizeUTC ()
{
timerDate = new Date();
timerLink.innerHTML = ( timerDate.getUTCDate() < 10 ? '0' : '' ) + timerDate.getUTCDate() + ' '
+ ( timerDate.getUTCMonth() < 10 ? '' : '' ) + month[timerDate.getUTCMonth()] + ' '
+ ( timerDate.getUTCFullYear() < 10 ? '0' : '' ) + timerDate.getUTCFullYear() + ' '
+ ( timerDate.getUTCHours() < 10 ? '0' : '' ) + timerDate.getUTCHours() + ':'
+ ( timerDate.getUTCMinutes() < 10 ? '0' : '' ) + timerDate.getUTCMinutes() + ':'
+ ( timerDate.getUTCSeconds() < 10 ? '0' : '' ) + timerDate.getUTCSeconds() + ' (UTC)';
}
function actualizeCustom ()
{
timerDate = new Date();
timerDate.setMinutes ( timerDate.getMinutes() + timerDate.getTimezoneOffset() + timerTimezone * 60 );
timerLink.innerHTML = ( timerDate.getDate() < 10 ? '0' : '' ) + timerDate.getDate() + ' '
+ ( timerDate.getMonth() < 10 ? '' : '' ) + month[timerDate.getMonth()] + ' '
+ ( timerDate.getFullYear() < 10 ? '0' : '' ) + timerDate.getFullYear() + ' '
+ ( timerDate.getHours() < 10 ? '0' : '' ) + timerDate.getHours() + ':'
+ ( timerDate.getMinutes() < 10 ? '0' : '' ) + timerDate.getMinutes() + ':'
+ ( timerDate.getSeconds() < 10 ? '0' : '' ) + timerDate.getSeconds()
+ ' (UTC' + ( timerTimezone < 0 ? '' : '+' ) + timerTimezone + ')';
}
// start
if ( typeof( timerTimezone ) !== 'number' )
{
actualizeUTC();
setInterval( actualizeUTC, 1000 );
}
else
{
actualizeCustom();
setInterval( actualizeCustom, 1000 );
}
}