Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Gadget-countdown.js: Difference between revisions

MediaWiki interface page
Content added Content deleted
(Created page with "(function ($) { function format(n, suffixes) { const pr = new Intl.PluralRules('en-US'); return `${n} ${suffixes.get(pr.select(n))}`; } function calcDiff(d1, d2) {...")
 
mNo edit summary
Line 55: Line 55:
var intervals = [];
var intervals = [];
$('.js-countdown-wrapper').each(function(idx) {
$('.js-countdown-wrapper2').each(function(idx) {
var countdown = $(this).children('.js-countdown');
var countdown = $(this).children('.js-countdown');

Revision as of 22:02, 10 November 2021

(function ($) {
	function format(n, suffixes) {
		const pr = new Intl.PluralRules('en-US');
		return `${n} ${suffixes.get(pr.select(n))}`;
	}
	
	function calcDiff(d1, d2) {
		let remDiff = d2 - d1;
		const days = Math.floor(remDiff / (1000*60*60*24));
		remDiff = remDiff % (1000*60*60*24);
		const hours = Math.floor(remDiff / (1000*60*60));
		remDiff = remDiff % (1000*60*60);
		const minutes = Math.floor(remDiff / (1000*60));
		
		return {
			days: days,
			hours: hours,
			minutes: minutes
		};
	}
	
	const daySuffixes = new Map([
		['one',   'day'],
		['other', 'days'],
	]);
	const hourSuffixes = new Map([
		['one', 'hour'],
		['other', 'hours']
	]);
	const minuteSuffixes = new Map([
		['one', 'minute'],
		['other', 'minutes']
	]);
	
	function updateHTML(targetDate, countdownNode, finishedText) {
		let finished = false;
		let diff = calcDiff(new Date(), targetDate);
		
		countdownNode.html(
			`
			${format(diff.days, daySuffixes)}, 
			${format(diff.hours, hourSuffixes)}, 
			${format(diff.minutes, minuteSuffixes)}
			`
		);
		
		if (diff.days <= 0 && diff.hours <= 0 && diff.minutes <= 0) {
			countdownNode.html(finishedText || 'Countdown has ended');
		}
		
		return finished;
	}
	
	function init() {
		var intervals = [];
		
		$('.js-countdown-wrapper2').each(function(idx) {
			
			var countdown = $(this).children('.js-countdown');
			var d1 = new Date(countdown.data('countdown-end'));
			
			const finished = updateHTML(d1, countdown, countdown.data('end-text'));
			if (finished) {
				clearInterval(interval);
			}
			$(this).css({ 'display': 'block'});
			
			var interval = setInterval(function() {
				const finished = updateHTML(d1, countdown, countdown.data('end-text'));
				if (finished) {
					clearInterval(interval);
				}
			}, 30000);
			intervals.push(interval);
		});
	}
	
	$(document).ready(init);
}(jQuery));
Cookies help us deliver our services. By using our services, you agree to our use of cookies.