+ language.hours + '' + dot2
: '')
+ '$1' + language.min
+ '' + dot2
+ '$1' + language.sec
+ ''
: (data.displayHours ? '$1' + dot2 : '') + '$1' + dot2 + '$1'
).replace(/\$1/g, dhtml1 + dhtml2);
if (data.displayDays > 0) {
marginRight = Math.round(data.fontSize * 0.4 || defaults.gap);
dhtml = dhtml1;
for (i = data.displayDays - 1; i > 0; i -= 1) {
dhtml += i === 1
? dhtml2.replace('">', 'margin-right:' + marginRight + 'px">')
: dhtml2;
}
if (data.displayDays === 1) {
dhtml = dhtml.replace('">', 'margin-right:' + marginRight + 'px">');
}
thtml = (data.displayCaptions
? '$1'
+ ''
+ language.days + ''
: '$1')
.replace(/\$1/, dhtml) + thtml;
}
$this.html(thtml);
} else if (method !== 'reset') {
// exists clock
$.extend(data, options);
}
$digits = $this.find('div');
if ($digits.length < data.vals.length) {
dif = data.vals.length - $digits.length;
vals = data.vals;
limits = data.limits;
data.vals = [];
data.limits = [];
for (i = 0; i < $digits.length; i += 1) {
data.vals[i] = vals[dif + i];
data.limits[i] = limits[dif + i];
}
data.iSec = data.vals.length - 1;
data.iHour = data.vals.length - 5;
}
data.sec = data.seconds;
$this.data(data);
if (method && methods[method]) {
methods[method].call($this, data.seconds);
} else if (data.start) {
methods.start.call($this, data.seconds);
} else {
init.call($this, data.seconds);
}
});
};
function init(sec, force) {
var data = this.data();
var $digits = this.find('ul');
var isInterval = false;
var days, rest, hours, minutes, secs, str, i, j, val;
if (!data.vals || $digits.length === 0) {
return;
}
if (!sec) {
sec = data.seconds;
}
if (data.intervalId) {
isInterval = true;
clearTimeout(data.intervalId);
}
days = Math.floor(sec / SECONDS_PER_DAY);
rest = days * SECONDS_PER_DAY;
hours = Math.floor((sec - rest) / SECONDS_PER_HOUR);
rest += hours * SECONDS_PER_HOUR;
minutes = Math.floor((sec - rest) / 60);
rest += minutes * 60;
secs = sec - rest;
str = (days < 100 ? '0' + (days < 10 ? '0' : '') : '')
+ days + (hours < 10 ? '0' : '') + hours + (minutes < 10 ? '0' : '')
+ minutes + (secs < 10 ? '0' : '') + secs;
for (i = data.vals.length - 1, j = str.length - 1; i >= 0; i -= 1, j -= 1) {
val = parseInt(str.substr(j, 1), 10);
data.vals[i] = val;
$digits.eq(i).children().html(val);
}
if (isInterval || force) {
data.ttStartTime = Date.now();
data.intervalId = setTimeout(tick.bind(this), 1000);
this.data('intervalId', data.intervalId);
}
}
/**
* Switch specified digit by digit index
* @param {number} - digit index
*/
function tick(digit) {
var me = this;
var $digits = this.find('ul');
var data = this.data();
var n, $ul, $li, step, tickTimeout, timeDiff;
if (!data.vals || $digits.length === 0) {
if (data.intervalId) {
clearTimeout(data.intervalId);
this.data('intervalId', null);
}
if (data.callback) {
data.callback();
}
return;
}
if (typeof digit === 'undefined') {
digit = data.iSec;
}
this.data('tickCount', data.tickCount + 1);
n = data.vals[digit];
$ul = $digits.eq(digit);
$li = $ul.children();
step = data.countdown ? -1 : 1;
$li.eq(1).html(n);
n += step;
if (typeof data.step === 'function' && data.tickCount % data.stepCount === 0) { // simplified if-block
this.data('tickCount', 0); // prevent number overload
data.step();
}
if (digit === data.iSec) {
tickTimeout = data.tickTimeout;
timeDiff = Date.now() - data.ttStartTime;
data.sec += step;
tickTimeout += (Math.abs(data.seconds - data.sec) * tickTimeout) - timeDiff;
data.intervalId = setTimeout(tick.bind(this), tickTimeout);
}
if (n < 0 || n > data.limits[digit]) {
if (n < 0) {
n = data.limits[digit];
// fix for hours when day changing
if (digit === data.iHour
&& data.displayDays > 0
&& data.vals[digit - 1] === 0) {
n = 3;
}
} else {
n = 0;
}
if (digit > 0) {
tick.call(this, digit - 1);
}
} else if (!data.countdown // fix for hours when day changing in clock mode
&& digit === data.iHour
&& data.displayDays > 0
&& data.vals[digit - 1] === 2 && data.vals[digit] === 3) {
n = 0;
tick.call(this, digit - 1);
}
$li.eq(0).html(n);
if ($.support.transition) {
$ul.addClass('transition');
$ul.css({ top: 0 });
setTimeout(function () {
$ul.removeClass('transition');
$li.eq(1).html(n);
$ul.css({ top: '-' + data.height + 'px' });
if (step > 0 || digit !== data.iSec) {
return;
}
if (data.sec === data.countdownAlertLimit) {
$digits.parent().addClass('timeTo-alert');
}
if (data.sec === 0) {
$digits.parent().removeClass('timeTo-alert');
if (data.intervalId) {
clearTimeout(data.intervalId);
me.data('intervalId', null);
}
if (typeof data.callback === 'function') {
data.callback();
}
}
}, 410);
} else {
$ul.stop().animate({ top: 0 }, 400, digit !== data.iSec ? null : function () {
$li.eq(1).html(n);
$ul.css({ top: '-' + data.height + 'px' });
if (step > 0 || digit !== data.iSec) {
return;
}
if (data.sec === data.countdownAlertLimit) {
$digits.parent().addClass('timeTo-alert');
} else if (data.sec === 0) {
$digits.parent().removeClass('timeTo-alert');
if (data.intervalId) {
clearTimeout(data.intervalId);
me.data('intervalId', null);
}
if (typeof data.callback === 'function') {
data.callback();
}
}
});
}
data.vals[digit] = n;
}
return $;
}));
Ә