User:WKPQ/common.js

// __NOWYSIWYG__ /** * Countdown * (Modification of original version 2.1 for Asphalt Wiki) * * @version 0.1 * * @author Guy Bukzi Montag  * * Original version 2.1 authors: * - Pecoes  * - Asaba  * * Original version 1 authors: * - Splarka  * - Eladkse  * * documentation and examples for original version at: *  */ /*jshint jquery:true, browser:true, devel:true, camelcase:true, curly:false, undef:true, bitwise:true, eqeqeq:true, forin:true, immed:true, latedef:true, newcap:true, noarg:true, unused:true, regexp:true, strict:true, trailing:false */ /*global mediaWiki:true*/ 'use strict'; var translations = $.extend(true, {		// Language list - start		// English (English)		en: {			and: 'and',			second: 'second',			seconds: 'seconds',			minute: 'minute',			minutes: 'minutes',			hour: 'hour',			hours: 'hours',			day: 'day',			days: 'days'		}		// Language list - stop	}, module.translations || {}), i18n = translations[ mw.config.get('wgContentLanguage') ] || translations.en; var countdowns = []; var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var NO_LEADING_ZEROS = 1, SHORT_FORMAT = 2, NO_ZEROS = 4, ASPHALT = 8; function leadingZero (number) { number = (number < 10 ? '0' : '' ) + number; return number; }   function dayGlobalBonus (now) { var start = new Date("2018-10-01").getTime; var diff = Math.floor((now - start) / 1000 / 60 / 60 / 24); return diff % 7; }   function globalBonus (day) { switch (day) { case 0: case 1: return 50; case 2: case 3: case 6: return 25; default: return 0; }   }	function output (i, diff) { /*jshint bitwise:false*/ var delta, result, parts = []; delta = diff % 60; result = ' ' + i18n[delta === 1 ? 'second' : 'seconds']; if (countdowns[i].opts & (SHORT_FORMAT | ASPHALT)) result = result.charAt(1); parts.unshift(delta + result); diff = Math.floor(diff / 60); delta = diff % 60; result = ' ' + i18n[delta === 1 ? 'minute' : 'minutes']; if (countdowns[i].opts & (SHORT_FORMAT | ASPHALT)) result = result.charAt(1); parts.unshift(delta + result); diff = Math.floor(diff / 60); delta = diff % 24; result = ' ' + i18n[delta === 1 ? 'hour'  : 'hours'  ]; if (countdowns[i].opts & (SHORT_FORMAT | ASPHALT)) result = result.charAt(1); parts.unshift(delta + result); diff = Math.floor(diff / 24); result = ' ' + i18n[diff === 1 ? 'day'   : 'days'   ]; if (countdowns[i].opts & (SHORT_FORMAT | ASPHALT)) result = result.charAt(1); parts.unshift(diff + result); if (!(countdowns[i].opts & ASPHALT)) result = parts.pop; // Keep the seconds for Asphalt format if (countdowns[i].opts & (NO_LEADING_ZEROS | ASPHALT)) { while (parts.length && parts[0][0] === '0') { parts.shift; }		}		if (countdowns[i].opts & NO_ZEROS) { parts = parts.filter(function(part) {				return part[0] !== '0';			}); }		if (countdowns[i].opts & ASPHALT) { // only show at most two elements while (parts.length > 2) { parts.pop; }		}		if (parts.length) { if (countdowns[i].opts & ASPHALT) { result = parts.join(' '); } else if (countdowns[i].opts & SHORT_FORMAT) { result = parts.join(' ') + ' ' + result; } else { result = parts.join(', ') + ' ' + i18n.and + ' ' + result; }		}		countdowns[i].node.text(result); }	function end(i) { var c = countdowns[i].node.parent; switch (c.attr('data-end')) { case 'remove': c.remove; return true; case 'stop': output(i, 0); return true; case 'toggle': var toggle = c.attr('data-toggle'); if (toggle && toggle == 'next') { c.next.css('display', 'inline'); c.css('display', 'none'); return true; }			if (toggle && $(toggle).length) { $(toggle).css('display', 'inline'); c.css('display', 'none'); return true; }			break; case 'callback': var callback = c.attr('data-callback'); if (callback && $.isFunction(module[callback])) { output(i, 0); module[callback].call(c); return true; }			break; }		countdowns[i].countup = true; output(i, 0); return false; }	function update { var date = new Date; var now = Date.now; var countdownsToRemove = []; $.each(countdowns.slice(0), function (i, countdown) {           switch(countdown.date) {            case 'month':                countdowns[i].node.text(months[date.getUTCMonth]);                break;            case 'day':                countdowns[i].node.text(date.getUTCDate);                break;            case 'time':                var h = date.getUTCHours;                var m = date.getUTCMinutes;                countdowns[i].node.text(leadingZero(h) + ":" + leadingZero(m));                break;            case 'multiplayer global bonus':                var bonusDay = dayGlobalBonus(now);                var lastBonusDay = (bonusDay === 0 ? 6 : bonusDay - 1);               var bonus = globalBonus(bonusDay);                var lastBonus = globalBonus(lastBonusDay);                countdowns[i].node.text(bonus);                // Change colours center box                if (!(countdowns[i].node.parent.hasClass('globalbonus-season-' + bonus))) {                    countdowns[i].node.parent.addClass('globalbonus-season-' + bonus);                    if (bonus !== lastBonus) {                        countdowns[i].node.parent.removeClass('globalbonus-season-' + lastBonus);                    }                }                // Change colours bottom bar                if (!($('.awtimerbonus-' + bonusDay).hasClass('globalbonus-small-' + bonusDay))) {                    $('.awtimerbonus-' + lastBonusDay).removeClass('globalbonus-small-' + lastBonusDay);                    $('.awtimerbonus-' + bonusDay).addClass('globalbonus-small-' + bonusDay); }               break; case 'next global bonus': if (globalBonus(dayGlobalBonus(now)) === 50) { $('.awtimerbonus50').css('display', 'inline'); $('.awtimerbonusnot50').css('display', 'none'); } else { var nextDate = new Date(now + ((7 - dayGlobalBonus(now)) * 24 * 60 * 60 * 1000)); var mmm = months[nextDate.getUTCMonth].substr(0,3); var d = nextDate.getUTCDate; var y = nextDate.getUTCFullYear; countdowns[i].node.html(mmm + ' ' + d + ', ' + y); $('.awtimerbonusnot50').css('display', 'inline'); $('.awtimerbonus50').css('display', 'none'); }               break; default: var diff = Math.floor((countdown.date - now) / 1000); if (diff <= 0 && !countdown.countup) { if (end(i)) countdownsToRemove.push(i); } else { output(i, Math.abs(diff)); }           }		});		var x;		while((x = countdownsToRemove.pop) !== undefined) {			countdowns.splice(x, 1);		}		if (countdowns.length) {			window.setTimeout(function  { update; }, 1000);		}	}	function getOptions (node) {		/*jshint bitwise:false*/		var text = node.parent.attr('data-options'),			opts = 0;		if (text) {			if (/no-leading-zeros/.test(text)) {				opts |= NO_LEADING_ZEROS;			}			if (/short-format/.test(text)) {				opts |= SHORT_FORMAT;			}			if (/no-zeros/.test(text)) {				opts |= NO_ZEROS;			}			if (/asphalt/.test(text)) {				opts |= ASPHALT;			}		}		return opts;	}	function init {		var countdown = $('.awtimer:not(.handled)');		if (!countdown.length) return;		$('.awnotimer').css('display', 'none');		countdown		.css('display', 'inline')		.find('.awtimertype')		.each(function { var $this = $(this), date = (new Date($this.text)).valueOf; if (isNaN(date)) { switch ($this.text) { case 'seconds': case 'month' : case 'day': case 'time': case 'multiplayer global bonus': case 'next global bonus': date = $this.text; break; default: $this.text('BAD DATE'); return; }			}			countdowns.push({				node: $this,				opts: getOptions($this),				date: date,			}); });		countdown.addClass('handled');		if (countdowns.length) {			update;		}	}	mw.hook('wikipage.content').add(init); }(window.countdownTimer = window.countdownTimer || {}, mediaWiki, jQuery));
 * (function (module, mw, $, undefined) {