MediaWiki:Common.js: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 866: Line 866:
addOnloadHook(onloadhookcustom)
addOnloadHook(onloadhookcustom)


// **************************************************
// JavaScript countdown timer
// Version 0.0.3
// **************************************************
//
// Usage example:
//  <span class="countdown" style="display:none;">
//  Only <span class="countdowndate">January 01 2013 00:00:00 PST</span> until New years.
//  </span>
//  <span class="nocountdown">Javascript disabled.</span>


//countdown stuff
function updatetimer(i) {
function updatetimer(i) {
var now = new Date();
  var now = new Date();
var then = timers[i].eventdate;
  var then = timers[i].eventdate;
var diff = Math.floor((then.getTime() - now.getTime()) / 1000);
  var diff = count=Math.floor((then.getTime()-now.getTime())/1000);


// catch bad date strings
  // catch bad date strings
if (isNaN(diff)) {
  if(isNaN(diff)) {  
timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **';
    timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **' ;
return;
    return;
}
  }


// reduce modulo period if necessary
  // determine plus/minus
if (timers[i].period > 0) {
  if(diff<0) {
if (diff < 0) diff = timers[i].period - ((-diff) % timers[i].period);
    diff = -diff;
else diff = diff % timers[i].period;
    var tpm = 'T plus ';
}
  } else {
    var tpm = ' ';
  }


// determine plus/minus
  // calcuate the diff
if (diff < 0) {
  var left = 'and ' + (diff%60) + ' seconds';
diff = -diff;
    diff=Math.floor(diff/60);
var tpm = ' ';
  if(diff > 0) left = (diff%60) + ' minutes, ' + left;
} else {
    diff=Math.floor(diff/60);
var tpm = ' ';
  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;


// calcuate the diff
  // a setInterval() is more efficient, but calling setTimeout()
var left = (diff % 60) + ' seconds';
  // makes errors break the script rather than infinitely recurse
diff = Math.floor(diff / 60);
  timeouts[i] = setTimeout('updatetimer(' + i + ')',1000);
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() {
function checktimers() {
//hide 'nocountdown' and show 'countdown'
  //hide 'nocountdown' and show 'countdown'
var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
  var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
for (var i in nocountdowns) nocountdowns[i].style.display = 'none'
  for(var i in nocountdowns) nocountdowns[i].style.display = 'none'
var countdowns = getElementsByClassName(document, 'span', 'countdown');
  var countdowns = getElementsByClassName(document, 'span', 'countdown');
for (var i in countdowns) countdowns[i].style.display = 'inline'
  for(var i in countdowns) countdowns[i].style.display = 'inline'


//set up global objects timers and timeouts.
  //set up global objects timers and timeouts.
timers = getElementsByClassName(document, 'span', 'countdowndate');
  timers = getElementsByClassName(document, 'span', 'countdowndate'); //global
timeouts = new Array(); // generic holder for the timeouts, global
  timeouts = new Array(); // generic holder for the timeouts, global
if (timers.length == 0) return;
  if(timers.length == 0) return;
for (var i in timers) {
  for(var i in timers) {
var str = timers[i].firstChild.nodeValue;
    timers[i].eventdate = new Date(timers[i].firstChild.nodeValue);
var j = str.indexOf('|');
    updatetimer(i); //start it up
if (j == -1) timers[i].period = 0;
  }
else {
timers[i].period = parseInt(str.substr(0, j));
if (isNaN(timers[i].period) || timers[i].period < 0) timers[i].period = 0;
str = str.substr(j + 1);
}
timers[i].eventdate = new Date(str);
updatetimer(i); //start it up
}
}
}
addOnloadHook(checktimers);
addOnloadHook(checktimers);
// **************************************************
//  - end -  JavaScript countdown timer
// **************************************************