Difference between revisions of "MediaWiki:Common.js"
Jump to navigation
Jump to search
(Created page with '→Any JavaScript here will be loaded for all users on every page load.: /** Collapsible tables ********************************************************* * * Description: Al...') |
Onderduiker (talk | contribs) (Added countdown timer code, at request of Antitrust) |
||
Line 104: | Line 104: | ||
}; | }; | ||
})(); | })(); | ||
+ | |||
+ | /* This code displays a clock or a countdown timer. Adapted from w3schools.com example. */ | ||
+ | function cdTimer() { | ||
+ | var timerElem = $('#CountdownTimer'); | ||
+ | var cdoffset = document.getElementById('cdoffset').innerHTML; | ||
+ | |||
+ | function checkTime(i) { | ||
+ | if (i < 10) { | ||
+ | i = "0" + i; | ||
+ | } | ||
+ | return i; | ||
+ | } | ||
+ | |||
+ | if (timerElem.length > 0) { | ||
+ | var today = new Date(); | ||
+ | var h = today.getUTCHours(); | ||
+ | var m = today.getUTCMinutes(); | ||
+ | var s = today.getUTCSeconds(); | ||
+ | |||
+ | var s1 = (s !==0) ? 60 - s : s; | ||
+ | var m1 = (m !==0) ? 60 - m : m; | ||
+ | var h1 = (24 - (h - cdoffset)) % 24; | ||
+ | |||
+ | // add a zero in front of numbers<10 | ||
+ | m1 = checkTime(m1); | ||
+ | s1 = checkTime(s1); | ||
+ | timerElem.text(h1 + ":" + m1 + ":" + s1); | ||
+ | t = setTimeout('cdTimer()', 1000); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | addonloadHook(cdTimer); | ||
+ | |||
+ | function sTime() { | ||
+ | var timeElem = $('#ServerTime'); | ||
+ | var soffset = document.getElementById('soffset').innerHTML; | ||
+ | |||
+ | function checkTime(i) { | ||
+ | if (i < 10) { | ||
+ | i = "0" + i; | ||
+ | } | ||
+ | return i; | ||
+ | } | ||
+ | |||
+ | if (timeElem.length > 0) { | ||
+ | var today = new Date(); | ||
+ | var h = today.getUTCHours(); | ||
+ | var m = today.getUTCMinutes(); | ||
+ | var s = today.getUTCSeconds(); | ||
+ | |||
+ | var h2 = (h + soffset) % 24; | ||
+ | |||
+ | // add a zero in front of numbers<10 | ||
+ | h2 = checkTime(h2); | ||
+ | m2 = checkTime(m); | ||
+ | s2 = checkTime(s); | ||
+ | timeElem.text(h2 + ":" + m2 + ":" + s2); | ||
+ | t = setTimeout('sTime()', 1000); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | addonloadHook(sTime); |
Revision as of 17:11, 29 September 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( '[' ) ); 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 ); }; })(); /* This code displays a clock or a countdown timer. Adapted from w3schools.com example. */ function cdTimer() { var timerElem = $('#CountdownTimer'); var cdoffset = document.getElementById('cdoffset').innerHTML; function checkTime(i) { if (i < 10) { i = "0" + i; } return i; } if (timerElem.length > 0) { var today = new Date(); var h = today.getUTCHours(); var m = today.getUTCMinutes(); var s = today.getUTCSeconds(); var s1 = (s !==0) ? 60 - s : s; var m1 = (m !==0) ? 60 - m : m; var h1 = (24 - (h - cdoffset)) % 24; // add a zero in front of numbers<10 m1 = checkTime(m1); s1 = checkTime(s1); timerElem.text(h1 + ":" + m1 + ":" + s1); t = setTimeout('cdTimer()', 1000); } } addonloadHook(cdTimer); function sTime() { var timeElem = $('#ServerTime'); var soffset = document.getElementById('soffset').innerHTML; function checkTime(i) { if (i < 10) { i = "0" + i; } return i; } if (timeElem.length > 0) { var today = new Date(); var h = today.getUTCHours(); var m = today.getUTCMinutes(); var s = today.getUTCSeconds(); var h2 = (h + soffset) % 24; // add a zero in front of numbers<10 h2 = checkTime(h2); m2 = checkTime(m); s2 = checkTime(s); timeElem.text(h2 + ":" + m2 + ":" + s2); t = setTimeout('sTime()', 1000); } } addonloadHook(sTime);