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);
