auctions-1.0.x-dev/modules/auctions_core/js/drupal.behaviors.auctionCountdown.js
modules/auctions_core/js/drupal.behaviors.auctionCountdown.js
(function($, Drupal) { 'use strict'; /** * Attaches the JS countdown behavior */ Drupal.behaviors.auctionCountdown = { attach: function(context) { $(once('auction-countdown-active', '.auction-countdown:not(.countdown-over)', context)).each(function() { var countdown = this; $(countdown) .find('.countdown') .attr({ 'aria-live': 'polite', 'aria-atomic': 'true' }) .auctionCountdown({ timestamp: $(this).data('unix') * 1000, font_size: $(this).data('font-size'), callback: function(weeks, days, hours, minutes, seconds, left) { var dateStrings = { 'weeks': Drupal.formatPlural(weeks, '1 week', '@count weeks'), 'days': Drupal.formatPlural(days, '1 day', '@count days'), 'hours': Drupal.formatPlural(hours, '1 hour', '@count hours'), 'minutes': Drupal.formatPlural(minutes, '1 minute', '@count minutes'), 'seconds': Drupal.formatPlural(seconds, '1 second', '@count seconds') }; // Countdown: if unit is zero and fade it, keep visual blocking. if (weeks === 0) { $(countdown).find('.countWeeks, .countDiv[data-dot=countWeeks]').attr({'aria-hidden':true}).removeAttr('aria-label').animate({ opacity: .1 }, 1000); } else { $(countdown).find('.countWeeks').attr({ 'aria-label': dateStrings['weeks'] }); } if (days === 0 && weeks === 0) { $(countdown).find('.countDays, .countDiv[data-dot=countDays]').attr({'aria-hidden':true}).removeAttr('aria-label').animate({ opacity: .1 }, 1000); } else { $(countdown).find('.countDays').attr({ 'aria-label': dateStrings['days'] }); } if (hours === 0 && days === 0 && weeks === 0) { $(countdown).find('.countHrs, .countDiv[data-dot=countHrs]').attr({'aria-hidden':true}).removeAttr('aria-label').animate({ opacity: .1 }, 1000); } else { $(countdown).find('.countHrs').attr({ 'aria-label': dateStrings['hours'] }); } if (minutes === 0 && hours === 0 && days === 0 && weeks === 0) { $(countdown).find('.countMins, .countDiv[data-dot=countMins]').attr({'aria-hidden':true}).removeAttr('aria-label').animate({ opacity: .1 }, 1000); } else { $(countdown).find('.countMins').attr({ 'aria-label': dateStrings['minutes'] }); } if (seconds === 0 && minutes === 0 && hours === 0 && days === 0 && weeks === 0) { $(countdown).find('.countSecs').attr({'aria-hidden':true}).removeAttr('aria-label').animate({ opacity: .1 }, 1000); } else { $(countdown).find('.countSecs').attr({ 'aria-label': dateStrings['seconds'] }); } // Handle interval phrasing. var messageParts = []; var message = ''; if (weeks > 0) messageParts.push(dateStrings['weeks']); if (days > 0) messageParts.push(dateStrings['days']); if (hours > 0) messageParts.push(dateStrings['hours']); if (minutes > 0) messageParts.push(dateStrings['minutes']); if (seconds > 0) messageParts.push(dateStrings['seconds']); if (messageParts.length > 0) { message = messageParts.join(', '); if (messageParts.length > 1) { var lastCommaIndex = message.lastIndexOf(', '); message = message.substring(0, lastCommaIndex) + ' ' + Drupal.t('and') + ' ' + message.substring(lastCommaIndex + 2); } message += ' ' + Drupal.t('left'); } $(countdown) .find('.auction-item-interval') .attr({ 'aria-live': 'polite', }) .html(message); } }); }); } }; })(jQuery, Drupal);