134 lines
3.8 KiB
JavaScript
134 lines
3.8 KiB
JavaScript
// Generated by CoffeeScript 1.4.0
|
|
|
|
/*
|
|
countdown is a simple jquery plugin for countdowns
|
|
|
|
Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
|
and GPL-3.0 (http://opensource.org/licenses/GPL-3.0) licenses.
|
|
|
|
@source: http://github.com/rendro/countdown/
|
|
@autor: Robert Fleischmann
|
|
@version: 1.0.1
|
|
*/
|
|
|
|
|
|
(function() {
|
|
|
|
(function($) {
|
|
$.countdown = function(el, options) {
|
|
var getDateData,
|
|
_this = this;
|
|
this.el = el;
|
|
this.$el = $(el);
|
|
this.$el.data("countdown", this);
|
|
this.init = function() {
|
|
_this.options = $.extend({}, $.countdown.defaultOptions, options);
|
|
if (_this.options.refresh) {
|
|
_this.interval = setInterval(function() {
|
|
return _this.render();
|
|
}, _this.options.refresh);
|
|
}
|
|
_this.render();
|
|
return _this;
|
|
};
|
|
getDateData = function(endDate) {
|
|
var dateData, diff;
|
|
endDate = Date.parse($.isPlainObject(_this.options.date) ? _this.options.date : new Date(_this.options.date));
|
|
diff = (endDate - Date.parse(new Date)) / 1000;
|
|
if (diff <= 0) {
|
|
diff = 0;
|
|
if (_this.interval) {
|
|
_this.stop();
|
|
}
|
|
_this.options.onEnd.apply(_this);
|
|
}
|
|
dateData = {
|
|
years: 0,
|
|
days: 0,
|
|
hours: 0,
|
|
min: 0,
|
|
sec: 0,
|
|
millisec: 0
|
|
};
|
|
if (diff >= (365.25 * 86400)) {
|
|
dateData.years = Math.floor(diff / (365.25 * 86400));
|
|
diff -= dateData.years * 365.25 * 86400;
|
|
}
|
|
if (diff >= 86400) {
|
|
dateData.days = Math.floor(diff / 86400);
|
|
diff -= dateData.days * 86400;
|
|
}
|
|
if (diff >= 3600) {
|
|
dateData.hours = Math.floor(diff / 3600);
|
|
diff -= dateData.hours * 3600;
|
|
}
|
|
if (diff >= 60) {
|
|
dateData.min = Math.floor(diff / 60);
|
|
diff -= dateData.min * 60;
|
|
}
|
|
dateData.sec = diff;
|
|
return dateData;
|
|
};
|
|
this.leadingZeros = function(num, length) {
|
|
if (length == null) {
|
|
length = 2;
|
|
}
|
|
num = String(num);
|
|
while (num.length < length) {
|
|
num = "0" + num;
|
|
}
|
|
return num;
|
|
};
|
|
this.update = function(newDate) {
|
|
_this.options.date = newDate;
|
|
return _this;
|
|
};
|
|
this.render = function() {
|
|
_this.options.render.apply(_this, [getDateData(_this.options.date)]);
|
|
return _this;
|
|
};
|
|
this.stop = function() {
|
|
if (_this.interval) {
|
|
clearInterval(_this.interval);
|
|
}
|
|
_this.interval = null;
|
|
return _this;
|
|
};
|
|
this.start = function(refresh) {
|
|
if (refresh == null) {
|
|
refresh = _this.options.refresh || $.countdown.defaultOptions.refresh;
|
|
}
|
|
if (_this.interval) {
|
|
clearInterval(_this.interval);
|
|
}
|
|
_this.render();
|
|
_this.options.refresh = refresh;
|
|
_this.interval = setInterval(function() {
|
|
return _this.render();
|
|
}, _this.options.refresh);
|
|
return _this;
|
|
};
|
|
return this.init();
|
|
};
|
|
$.countdown.defaultOptions = {
|
|
date: "June 7, 2087 15:03:25",
|
|
refresh: 1000,
|
|
onEnd: $.noop,
|
|
render: function(date) {
|
|
return $(this.el).html("" + date.years + " years, " + date.days + " days, " + (this.leadingZeros(date.hours)) + " hours, " + (this.leadingZeros(date.min)) + " min and " + (this.leadingZeros(date.sec)) + " sec");
|
|
}
|
|
};
|
|
$.fn.countdown = function(options) {
|
|
return $.each(this, function(i, el) {
|
|
var $el;
|
|
$el = $(el);
|
|
if (!$el.data('countdown')) {
|
|
return $el.data('countdown', new $.countdown(el, options));
|
|
}
|
|
});
|
|
};
|
|
return void 0;
|
|
})(jQuery);
|
|
|
|
}).call(this);
|