1954 lines
154 KiB
JavaScript
1954 lines
154 KiB
JavaScript
|
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
|
||
|
!function (e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function (C, e) { "use strict"; var t = [], r = Object.getPrototypeOf, s = t.slice, g = t.flat ? function (e) { return t.flat.call(e) } : function (e) { return t.concat.apply([], e) }, u = t.push, i = t.indexOf, n = {}, o = n.toString, v = n.hasOwnProperty, a = v.toString, l = a.call(Object), y = {}, m = function (e) { return "function" == typeof e && "number" != typeof e.nodeType && "function" != typeof e.item }, x = function (e) { return null != e && e === e.window }, E = C.document, c = { type: !0, src: !0, nonce: !0, noModule: !0 }; function b(e, t, n) { var r, i, o = (n = n || E).createElement("script"); if (o.text = e, t) for (r in c) (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i); n.head.appendChild(o).parentNode.removeChild(o) } function w(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e } var f = "3.6.0", S = function (e, t) { return new S.fn.init(e, t) }; function p(e) { var t = !!e && "length" in e && e.length, n = w(e); return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) } S.fn = S.prototype = { jquery: f, constructor: S, length: 0, toArray: function () { return s.call(this) }, get: function (e) { return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e] }, pushStack: function (e) { var t = S.merge(this.constructor(), e); return t.prevObject = this, t }, each: function (e) { return S.each(this, e) }, map: function (n) { return this.pushStack(S.map(this, function (e, t) { return n.call(e, t, e) })) }, slice: function () { return this.pushStack(s.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, even: function () { return this.pushStack(S.grep(this, function (e, t) { return (t + 1) % 2 })) }, odd: function () { return this.pushStack(S.grep(this, function (e, t) { return t % 2 })) }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(0 <= n && n < t ? [this[n]] : []) }, end: function () { return this.prevObject || this.constructor() }, push: u, sort: t.sort, splice: t.splice }, S.extend = S.fn.extend = function () { var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1; for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++)if (null != (e = arguments[s])) for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r)); return a }, S.extend({ expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e) }, noop: function () { }, isPlainObject: function (e) { var t, n; return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof (n = v.call(t, "constructor") && t.constructor) && a.call(n) === l) }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, globalEval: function (e, t, n) { b(e, { nonce: t && t.nonce }, n) }, each: function (e, t) { var n, r = 0; if (p(e)) { for (n = e.length; r < n; r++)if (!1 === t.call(e[r], r, e[r])) break } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e }, makeArray: function (e, t) { var n = t || []; return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : i.call(t, e, n) }, merge: function (e, t) { for (var n = +t.length, r = 0, i = e.length; r < n; r++)e[i++] = t[r]; return e.length = i, e }, grep: function
|
||
|
/*
|
||
|
Base.js, version 1.1a
|
||
|
Copyright 2006-2010, Dean Edwards
|
||
|
License: http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
var Base = function () {
|
||
|
// dummy
|
||
|
};
|
||
|
|
||
|
Base.extend = function (_instance, _static) { // subclass
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
var extend = Base.prototype.extend;
|
||
|
|
||
|
// build the prototype
|
||
|
Base._prototyping = true;
|
||
|
|
||
|
var proto = new this();
|
||
|
|
||
|
extend.call(proto, _instance);
|
||
|
|
||
|
proto.base = function () {
|
||
|
// call this method from any other method to invoke that method's ancestor
|
||
|
};
|
||
|
|
||
|
delete Base._prototyping;
|
||
|
|
||
|
// create the wrapper for the constructor function
|
||
|
//var constructor = proto.constructor.valueOf(); //-dean
|
||
|
var constructor = proto.constructor;
|
||
|
var klass = proto.constructor = function () {
|
||
|
if (!Base._prototyping) {
|
||
|
if (this._constructing || this.constructor == klass) { // instantiation
|
||
|
this._constructing = true;
|
||
|
constructor.apply(this, arguments);
|
||
|
delete this._constructing;
|
||
|
} else if (arguments[0] !== null) { // casting
|
||
|
return (arguments[0].extend || extend).call(arguments[0], proto);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// build the class interface
|
||
|
klass.ancestor = this;
|
||
|
klass.extend = this.extend;
|
||
|
klass.forEach = this.forEach;
|
||
|
klass.implement = this.implement;
|
||
|
klass.prototype = proto;
|
||
|
klass.toString = this.toString;
|
||
|
klass.valueOf = function (type) {
|
||
|
//return (type == "object") ? klass : constructor; //-dean
|
||
|
return (type == "object") ? klass : constructor.valueOf();
|
||
|
};
|
||
|
extend.call(klass, _static);
|
||
|
// class initialisation
|
||
|
if (typeof klass.init == "function") klass.init();
|
||
|
return klass;
|
||
|
};
|
||
|
|
||
|
Base.prototype = {
|
||
|
extend: function (source, value) {
|
||
|
if (arguments.length > 1) { // extending with a name/value pair
|
||
|
var ancestor = this[source];
|
||
|
if (ancestor && (typeof value == "function") && // overriding a method?
|
||
|
// the valueOf() comparison is to avoid circular references
|
||
|
(!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&
|
||
|
/\bbase\b/.test(value)) {
|
||
|
// get the underlying method
|
||
|
var method = value.valueOf();
|
||
|
// override
|
||
|
value = function () {
|
||
|
var previous = this.base || Base.prototype.base;
|
||
|
this.base = ancestor;
|
||
|
var returnValue = method.apply(this, arguments);
|
||
|
this.base = previous;
|
||
|
return returnValue;
|
||
|
};
|
||
|
// point to the underlying method
|
||
|
value.valueOf = function (type) {
|
||
|
return (type == "object") ? value : method;
|
||
|
};
|
||
|
value.toString = Base.toString;
|
||
|
}
|
||
|
this[source] = value;
|
||
|
} else if (source) { // extending with an object literal
|
||
|
var extend = Base.prototype.extend;
|
||
|
// if this object has a customised extend method then use it
|
||
|
if (!Base._prototyping && typeof this != "function") {
|
||
|
extend = this.extend || extend;
|
||
|
}
|
||
|
var proto = { toSource: null };
|
||
|
// do the "toString" and other methods manually
|
||
|
var hidden = ["constructor", "toString", "valueOf"];
|
||
|
// if we are prototyping then include the constructor
|
||
|
var i = Base._prototyping ? 0 : 1;
|
||
|
while (key = hidden[i++]) {
|
||
|
if (source[key] != proto[key]) {
|
||
|
extend.call(this, key, source[key]);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
// copy each of the source object's properties to this object
|
||
|
for (var key in source) {
|
||
|
if (!proto[key]) extend.call(this, key, source[key]);
|
||
|
}
|
||
|
}
|
||
|
return this;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// initialise
|
||
|
Base = Base.extend({
|
||
|
constructor: function () {
|
||
|
this.extend(arguments[0]);
|
||
|
}
|
||
|
}, {
|
||
|
ancestor: Object,
|
||
|
version: "1.1",
|
||
|
|
||
|
forEach: function (object, block, context) {
|
||
|
for (var key in object) {
|
||
|
if (this.prototype[key] === undefined) {
|
||
|
block.call(context, object[key], key, object);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
implement: function () {
|
||
|
for (var i = 0; i < arguments.length; i++) {
|
||
|
if (typeof arguments[i] == "function") {
|
||
|
// if it's a function, call it
|
||
|
arguments[i](this.prototype);
|
||
|
} else {
|
||
|
// add the interface using the extend method
|
||
|
this.prototype.extend(arguments[i]);
|
||
|
}
|
||
|
}
|
||
|
return this;
|
||
|
},
|
||
|
|
||
|
toString: function () {
|
||
|
return String(this.valueOf());
|
||
|
}
|
||
|
});
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
var FlipClock;
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* FlipFlock Helper
|
||
|
*
|
||
|
* @param object A jQuery object or CSS select
|
||
|
* @param int An integer used to start the clock (no. seconds)
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock = function (obj, digit, options) {
|
||
|
if (digit instanceof Object && digit instanceof Date === false) {
|
||
|
options = digit;
|
||
|
digit = 0;
|
||
|
}
|
||
|
|
||
|
return new FlipClock.Factory(obj, digit, options);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* The global FlipClock.Lang object
|
||
|
*/
|
||
|
|
||
|
FlipClock.Lang = {};
|
||
|
|
||
|
/**
|
||
|
* The Base FlipClock class is used to extend all other FlipFlock
|
||
|
* classes. It handles the callbacks and the basic setters/getters
|
||
|
*
|
||
|
* @param object An object of the default properties
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock.Base = Base.extend({
|
||
|
|
||
|
/**
|
||
|
* Build Date
|
||
|
*/
|
||
|
|
||
|
buildDate: '2014-12-12',
|
||
|
|
||
|
/**
|
||
|
* Version
|
||
|
*/
|
||
|
|
||
|
version: '0.7.7',
|
||
|
|
||
|
/**
|
||
|
* Sets the default options
|
||
|
*
|
||
|
* @param object The default options
|
||
|
* @param object The override options
|
||
|
*/
|
||
|
|
||
|
constructor: function (_default, options) {
|
||
|
if (typeof _default !== "object") {
|
||
|
_default = {};
|
||
|
}
|
||
|
if (typeof options !== "object") {
|
||
|
options = {};
|
||
|
}
|
||
|
this.setOptions($.extend(true, {}, _default, options));
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Delegates the callback to the defined method
|
||
|
*
|
||
|
* @param object The default options
|
||
|
* @param object The override options
|
||
|
*/
|
||
|
|
||
|
callback: function (method) {
|
||
|
if (typeof method === "function") {
|
||
|
var args = [];
|
||
|
|
||
|
for (var x = 1; x <= arguments.length; x++) {
|
||
|
if (arguments[x]) {
|
||
|
args.push(arguments[x]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
method.apply(this, args);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Log a string into the console if it exists
|
||
|
*
|
||
|
* @param string The name of the option
|
||
|
* @return mixed
|
||
|
*/
|
||
|
|
||
|
log: function (str) {
|
||
|
if (window.console && console.log) {
|
||
|
console.log(str);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get an single option value. Returns false if option does not exist
|
||
|
*
|
||
|
* @param string The name of the option
|
||
|
* @return mixed
|
||
|
*/
|
||
|
|
||
|
getOption: function (index) {
|
||
|
if (this[index]) {
|
||
|
return this[index];
|
||
|
}
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get all options
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
|
||
|
getOptions: function () {
|
||
|
return this;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Set a single option value
|
||
|
*
|
||
|
* @param string The name of the option
|
||
|
* @param mixed The value of the option
|
||
|
*/
|
||
|
|
||
|
setOption: function (index, value) {
|
||
|
this[index] = value;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Set a multiple options by passing a JSON object
|
||
|
*
|
||
|
* @param object The object with the options
|
||
|
* @param mixed The value of the option
|
||
|
*/
|
||
|
|
||
|
setOptions: function (options) {
|
||
|
for (var key in options) {
|
||
|
if (typeof options[key] !== "undefined") {
|
||
|
this.setOption(key, options[key]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* The FlipClock Face class is the base class in which to extend
|
||
|
* all other FlockClock.Face classes.
|
||
|
*
|
||
|
* @param object The parent FlipClock.Factory object
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock.Face = FlipClock.Base.extend({
|
||
|
|
||
|
/**
|
||
|
* Sets whether or not the clock should start upon instantiation
|
||
|
*/
|
||
|
|
||
|
autoStart: true,
|
||
|
|
||
|
/**
|
||
|
* An array of jQuery objects used for the dividers (the colons)
|
||
|
*/
|
||
|
|
||
|
dividers: [],
|
||
|
|
||
|
/**
|
||
|
* An array of FlipClock.List objects
|
||
|
*/
|
||
|
|
||
|
factory: false,
|
||
|
|
||
|
/**
|
||
|
* An array of FlipClock.List objects
|
||
|
*/
|
||
|
|
||
|
lists: [],
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param object The parent FlipClock.Factory object
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
constructor: function (factory, options) {
|
||
|
this.dividers = [];
|
||
|
this.lists = [];
|
||
|
this.base(options);
|
||
|
this.factory = factory;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Build the clock face
|
||
|
*/
|
||
|
|
||
|
build: function () {
|
||
|
if (this.autoStart) {
|
||
|
this.start();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Creates a jQuery object used for the digit divider
|
||
|
*
|
||
|
* @param mixed The divider label text
|
||
|
* @param mixed Set true to exclude the dots in the divider.
|
||
|
* If not set, is false.
|
||
|
*/
|
||
|
|
||
|
createDivider: function (label, css, excludeDots) {
|
||
|
if (typeof css == "boolean" || !css) {
|
||
|
excludeDots = css;
|
||
|
css = label;
|
||
|
}
|
||
|
|
||
|
var dots = [
|
||
|
'<span class="' + this.factory.classes.dot + ' top"></span>',
|
||
|
'<span class="' + this.factory.classes.dot + ' bottom"></span>'
|
||
|
].join('');
|
||
|
|
||
|
if (excludeDots) {
|
||
|
dots = '';
|
||
|
}
|
||
|
|
||
|
label = this.factory.localize(label);
|
||
|
|
||
|
var html = [
|
||
|
'<span class="' + this.factory.classes.divider + ' ' + (css ? css : '').toLowerCase() + '">',
|
||
|
'<span class="' + this.factory.classes.label + '">' + (label ? label : '') + '</span>',
|
||
|
dots,
|
||
|
'</span>'
|
||
|
];
|
||
|
|
||
|
var $html = $(html.join(''));
|
||
|
|
||
|
this.dividers.push($html);
|
||
|
|
||
|
return $html;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Creates a FlipClock.List object and appends it to the DOM
|
||
|
*
|
||
|
* @param mixed The digit to select in the list
|
||
|
* @param object An object to override the default properties
|
||
|
*/
|
||
|
|
||
|
createList: function (digit, options) {
|
||
|
if (typeof digit === "object") {
|
||
|
options = digit;
|
||
|
digit = 0;
|
||
|
}
|
||
|
|
||
|
var obj = new FlipClock.List(this.factory, digit, options);
|
||
|
|
||
|
this.lists.push(obj);
|
||
|
|
||
|
return obj;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Triggers when the clock is reset
|
||
|
*/
|
||
|
|
||
|
reset: function () {
|
||
|
this.factory.time = new FlipClock.Time(
|
||
|
this.factory,
|
||
|
this.factory.original ? Math.round(this.factory.original) : 0,
|
||
|
{
|
||
|
minimumDigits: this.factory.minimumDigits
|
||
|
}
|
||
|
);
|
||
|
|
||
|
this.flip(this.factory.original, false);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Append a newly created list to the clock
|
||
|
*/
|
||
|
|
||
|
appendDigitToClock: function (obj) {
|
||
|
obj.$el.append(false);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Add a digit to the clock face
|
||
|
*/
|
||
|
|
||
|
addDigit: function (digit) {
|
||
|
var obj = this.createList(digit, {
|
||
|
classes: {
|
||
|
active: this.factory.classes.active,
|
||
|
before: this.factory.classes.before,
|
||
|
flip: this.factory.classes.flip
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this.appendDigitToClock(obj);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Triggers when the clock is started
|
||
|
*/
|
||
|
|
||
|
start: function () { },
|
||
|
|
||
|
/**
|
||
|
* Triggers when the time on the clock stops
|
||
|
*/
|
||
|
|
||
|
stop: function () { },
|
||
|
|
||
|
/**
|
||
|
* Auto increments/decrements the value of the clock face
|
||
|
*/
|
||
|
|
||
|
autoIncrement: function () {
|
||
|
if (!this.factory.countdown) {
|
||
|
this.increment();
|
||
|
}
|
||
|
else {
|
||
|
this.decrement();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Increments the value of the clock face
|
||
|
*/
|
||
|
|
||
|
increment: function () {
|
||
|
this.factory.time.addSecond();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Decrements the value of the clock face
|
||
|
*/
|
||
|
|
||
|
decrement: function () {
|
||
|
if (this.factory.time.getTimeSeconds() == 0) {
|
||
|
this.factory.stop()
|
||
|
}
|
||
|
else {
|
||
|
this.factory.time.subSecond();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Triggers when the numbers on the clock flip
|
||
|
*/
|
||
|
|
||
|
flip: function (time, doNotAddPlayClass) {
|
||
|
var t = this;
|
||
|
|
||
|
$.each(time, function (i, digit) {
|
||
|
var list = t.lists[i];
|
||
|
|
||
|
if (list) {
|
||
|
if (!doNotAddPlayClass && digit != list.digit) {
|
||
|
list.play();
|
||
|
}
|
||
|
|
||
|
list.select(digit);
|
||
|
}
|
||
|
else {
|
||
|
t.addDigit(digit);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* The FlipClock Factory class is used to build the clock and manage
|
||
|
* all the public methods.
|
||
|
*
|
||
|
* @param object A jQuery object or CSS selector used to fetch
|
||
|
the wrapping DOM nodes
|
||
|
* @param mixed This is the digit used to set the clock. If an
|
||
|
object is passed, 0 will be used.
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock.Factory = FlipClock.Base.extend({
|
||
|
|
||
|
/**
|
||
|
* The clock's animation rate.
|
||
|
*
|
||
|
* Note, currently this property doesn't do anything.
|
||
|
* This property is here to be used in the future to
|
||
|
* programmaticaly set the clock's animation speed
|
||
|
*/
|
||
|
|
||
|
animationRate: 1000,
|
||
|
|
||
|
/**
|
||
|
* Auto start the clock on page load (True|False)
|
||
|
*/
|
||
|
|
||
|
autoStart: true,
|
||
|
|
||
|
/**
|
||
|
* The callback methods
|
||
|
*/
|
||
|
|
||
|
callbacks: {
|
||
|
destroy: false,
|
||
|
create: false,
|
||
|
init: false,
|
||
|
interval: false,
|
||
|
start: false,
|
||
|
stop: false,
|
||
|
reset: false
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* The CSS classes
|
||
|
*/
|
||
|
|
||
|
classes: {
|
||
|
active: 'flip-clock-active',
|
||
|
before: 'flip-clock-before',
|
||
|
divider: 'flip-clock-divider',
|
||
|
dot: 'flip-clock-dot',
|
||
|
label: 'flip-clock-label',
|
||
|
flip: 'flip',
|
||
|
play: 'play',
|
||
|
wrapper: 'flip-clock-wrapper'
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* The name of the clock face class in use
|
||
|
*/
|
||
|
|
||
|
clockFace: 'HourlyCounter',
|
||
|
|
||
|
/**
|
||
|
* The name of the clock face class in use
|
||
|
*/
|
||
|
|
||
|
countdown: false,
|
||
|
|
||
|
/**
|
||
|
* The name of the default clock face class to use if the defined
|
||
|
* clockFace variable is not a valid FlipClock.Face object
|
||
|
*/
|
||
|
|
||
|
defaultClockFace: 'HourlyCounter',
|
||
|
|
||
|
/**
|
||
|
* The default language
|
||
|
*/
|
||
|
|
||
|
defaultLanguage: 'english',
|
||
|
|
||
|
/**
|
||
|
* The jQuery object
|
||
|
*/
|
||
|
|
||
|
$el: false,
|
||
|
|
||
|
/**
|
||
|
* The FlipClock.Face object
|
||
|
*/
|
||
|
|
||
|
face: true,
|
||
|
|
||
|
/**
|
||
|
* The language object after it has been loaded
|
||
|
*/
|
||
|
|
||
|
lang: false,
|
||
|
|
||
|
/**
|
||
|
* The language being used to display labels (string)
|
||
|
*/
|
||
|
|
||
|
language: 'english',
|
||
|
|
||
|
/**
|
||
|
* The minimum digits the clock must have
|
||
|
*/
|
||
|
|
||
|
minimumDigits: 0,
|
||
|
|
||
|
/**
|
||
|
* The original starting value of the clock. Used for the reset method.
|
||
|
*/
|
||
|
|
||
|
original: false,
|
||
|
|
||
|
/**
|
||
|
* Is the clock running? (True|False)
|
||
|
*/
|
||
|
|
||
|
running: false,
|
||
|
|
||
|
/**
|
||
|
* The FlipClock.Time object
|
||
|
*/
|
||
|
|
||
|
time: false,
|
||
|
|
||
|
/**
|
||
|
* The FlipClock.Timer object
|
||
|
*/
|
||
|
|
||
|
timer: false,
|
||
|
|
||
|
/**
|
||
|
* The jQuery object (depcrecated)
|
||
|
*/
|
||
|
|
||
|
$wrapper: false,
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param object The wrapping jQuery object
|
||
|
* @param object Number of seconds used to start the clock
|
||
|
* @param object An object override options
|
||
|
*/
|
||
|
|
||
|
constructor: function (obj, digit, options) {
|
||
|
|
||
|
if (!options) {
|
||
|
options = {};
|
||
|
}
|
||
|
|
||
|
this.lists = [];
|
||
|
this.running = false;
|
||
|
this.base(options);
|
||
|
|
||
|
this.$el = $(obj).addClass(this.classes.wrapper);
|
||
|
|
||
|
// Depcrated support of the $wrapper property.
|
||
|
this.$wrapper = this.$el;
|
||
|
|
||
|
this.original = (digit instanceof Date) ? digit : (digit ? Math.round(digit) : 0);
|
||
|
|
||
|
this.time = new FlipClock.Time(this, this.original, {
|
||
|
minimumDigits: this.minimumDigits,
|
||
|
animationRate: this.animationRate
|
||
|
});
|
||
|
|
||
|
this.timer = new FlipClock.Timer(this, options);
|
||
|
|
||
|
this.loadLanguage(this.language);
|
||
|
|
||
|
this.loadClockFace(this.clockFace, options);
|
||
|
|
||
|
if (this.autoStart) {
|
||
|
this.start();
|
||
|
}
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Load the FlipClock.Face object
|
||
|
*
|
||
|
* @param object The name of the FlickClock.Face class
|
||
|
* @param object An object override options
|
||
|
*/
|
||
|
|
||
|
loadClockFace: function (name, options) {
|
||
|
var face, suffix = 'Face', hasStopped = false;
|
||
|
|
||
|
name = name.ucfirst() + suffix;
|
||
|
|
||
|
if (this.face.stop) {
|
||
|
this.stop();
|
||
|
hasStopped = true;
|
||
|
}
|
||
|
|
||
|
this.$el.html('');
|
||
|
|
||
|
this.time.minimumDigits = this.minimumDigits;
|
||
|
|
||
|
if (FlipClock[name]) {
|
||
|
face = new FlipClock[name](this, options);
|
||
|
}
|
||
|
else {
|
||
|
face = new FlipClock[this.defaultClockFace + suffix](this, options);
|
||
|
}
|
||
|
|
||
|
face.build();
|
||
|
|
||
|
this.face = face
|
||
|
|
||
|
if (hasStopped) {
|
||
|
this.start();
|
||
|
}
|
||
|
|
||
|
return this.face;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Load the FlipClock.Lang object
|
||
|
*
|
||
|
* @param object The name of the language to load
|
||
|
*/
|
||
|
|
||
|
loadLanguage: function (name) {
|
||
|
var lang;
|
||
|
|
||
|
if (FlipClock.Lang[name.ucfirst()]) {
|
||
|
lang = FlipClock.Lang[name.ucfirst()];
|
||
|
}
|
||
|
else if (FlipClock.Lang[name]) {
|
||
|
lang = FlipClock.Lang[name];
|
||
|
}
|
||
|
else {
|
||
|
lang = FlipClock.Lang[this.defaultLanguage];
|
||
|
}
|
||
|
|
||
|
return this.lang = lang;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Localize strings into various languages
|
||
|
*
|
||
|
* @param string The index of the localized string
|
||
|
* @param object Optionally pass a lang object
|
||
|
*/
|
||
|
|
||
|
localize: function (index, obj) {
|
||
|
var lang = this.lang;
|
||
|
|
||
|
if (!index) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
var lindex = index.toLowerCase();
|
||
|
|
||
|
if (typeof obj == "object") {
|
||
|
lang = obj;
|
||
|
}
|
||
|
|
||
|
if (lang && lang[lindex]) {
|
||
|
return lang[lindex];
|
||
|
}
|
||
|
|
||
|
return index;
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Starts the clock
|
||
|
*/
|
||
|
|
||
|
start: function (callback) {
|
||
|
var t = this;
|
||
|
|
||
|
if (!t.running && (!t.countdown || t.countdown && t.time.time > 0)) {
|
||
|
t.face.start(t.time);
|
||
|
t.timer.start(function () {
|
||
|
t.flip();
|
||
|
|
||
|
if (typeof callback === "function") {
|
||
|
callback();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
t.log('Trying to start timer when countdown already at 0');
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Stops the clock
|
||
|
*/
|
||
|
|
||
|
stop: function (callback) {
|
||
|
this.face.stop();
|
||
|
this.timer.stop(callback);
|
||
|
|
||
|
for (var x in this.lists) {
|
||
|
if (this.lists.hasOwnProperty(x)) {
|
||
|
this.lists[x].stop();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Reset the clock
|
||
|
*/
|
||
|
|
||
|
reset: function (callback) {
|
||
|
this.timer.reset(callback);
|
||
|
this.face.reset();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Sets the clock time
|
||
|
*/
|
||
|
|
||
|
setTime: function (time) {
|
||
|
this.time.time = time;
|
||
|
this.flip(true);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get the clock time
|
||
|
*
|
||
|
* @return object Returns a FlipClock.Time object
|
||
|
*/
|
||
|
|
||
|
getTime: function (time) {
|
||
|
return this.time;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Changes the increment of time to up or down (add/sub)
|
||
|
*/
|
||
|
|
||
|
setCountdown: function (value) {
|
||
|
var running = this.running;
|
||
|
|
||
|
this.countdown = value ? true : false;
|
||
|
|
||
|
if (running) {
|
||
|
this.stop();
|
||
|
this.start();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Flip the digits on the clock
|
||
|
*
|
||
|
* @param array An array of digits
|
||
|
*/
|
||
|
flip: function (doNotAddPlayClass) {
|
||
|
this.face.flip(false, doNotAddPlayClass);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* The FlipClock List class is used to build the list used to create
|
||
|
* the card flip effect. This object fascilates selecting the correct
|
||
|
* node by passing a specific digit.
|
||
|
*
|
||
|
* @param object A FlipClock.Factory object
|
||
|
* @param mixed This is the digit used to set the clock. If an
|
||
|
* object is passed, 0 will be used.
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock.List = FlipClock.Base.extend({
|
||
|
|
||
|
/**
|
||
|
* The digit (0-9)
|
||
|
*/
|
||
|
|
||
|
digit: 0,
|
||
|
|
||
|
/**
|
||
|
* The CSS classes
|
||
|
*/
|
||
|
|
||
|
classes: {
|
||
|
active: 'flip-clock-active',
|
||
|
before: 'flip-clock-before',
|
||
|
flip: 'flip'
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* The parent FlipClock.Factory object
|
||
|
*/
|
||
|
|
||
|
factory: false,
|
||
|
|
||
|
/**
|
||
|
* The jQuery object
|
||
|
*/
|
||
|
|
||
|
$el: false,
|
||
|
|
||
|
/**
|
||
|
* The jQuery object (deprecated)
|
||
|
*/
|
||
|
|
||
|
$obj: false,
|
||
|
|
||
|
/**
|
||
|
* The items in the list
|
||
|
*/
|
||
|
|
||
|
items: [],
|
||
|
|
||
|
/**
|
||
|
* The last digit
|
||
|
*/
|
||
|
|
||
|
lastDigit: 0,
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param object A FlipClock.Factory object
|
||
|
* @param int An integer use to select the correct digit
|
||
|
* @param object An object to override the default properties
|
||
|
*/
|
||
|
|
||
|
constructor: function (factory, digit, options) {
|
||
|
this.factory = factory;
|
||
|
this.digit = digit;
|
||
|
this.lastDigit = digit;
|
||
|
this.$el = this.createList();
|
||
|
|
||
|
// Depcrated support of the $obj property.
|
||
|
this.$obj = this.$el;
|
||
|
|
||
|
if (digit > 0) {
|
||
|
this.select(digit);
|
||
|
}
|
||
|
|
||
|
this.factory.$el.append(this.$el);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Select the digit in the list
|
||
|
*
|
||
|
* @param int A digit 0-9
|
||
|
*/
|
||
|
|
||
|
select: function (digit) {
|
||
|
if (typeof digit === "undefined") {
|
||
|
digit = this.digit;
|
||
|
}
|
||
|
else {
|
||
|
this.digit = digit;
|
||
|
}
|
||
|
|
||
|
if (this.digit != this.lastDigit) {
|
||
|
var $delete = this.$el.find('.' + this.classes.before).removeClass(this.classes.before);
|
||
|
|
||
|
this.$el.find('.' + this.classes.active).removeClass(this.classes.active)
|
||
|
.addClass(this.classes.before);
|
||
|
|
||
|
this.appendListItem(this.classes.active, this.digit);
|
||
|
|
||
|
$delete.remove();
|
||
|
|
||
|
this.lastDigit = this.digit;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the play class to the DOM object
|
||
|
*/
|
||
|
|
||
|
play: function () {
|
||
|
this.$el.addClass(this.factory.classes.play);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Removes the play class to the DOM object
|
||
|
*/
|
||
|
|
||
|
stop: function () {
|
||
|
var t = this;
|
||
|
|
||
|
setTimeout(function () {
|
||
|
t.$el.removeClass(t.factory.classes.play);
|
||
|
}, this.factory.timer.interval);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Creates the list item HTML and returns as a string
|
||
|
*/
|
||
|
|
||
|
createListItem: function (css, value) {
|
||
|
return [
|
||
|
'<li class="' + (css ? css : '') + '">',
|
||
|
'<a href="#">',
|
||
|
'<div class="up">',
|
||
|
'<div class="shadow"></div>',
|
||
|
'<div class="inn">' + (value ? value : '') + '</div>',
|
||
|
'</div>',
|
||
|
'<div class="down">',
|
||
|
'<div class="shadow"></div>',
|
||
|
'<div class="inn">' + (value ? value : '') + '</div>',
|
||
|
'</div>',
|
||
|
'</a>',
|
||
|
'</li>'
|
||
|
].join('');
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Append the list item to the parent DOM node
|
||
|
*/
|
||
|
|
||
|
appendListItem: function (css, value) {
|
||
|
var html = this.createListItem(css, value);
|
||
|
|
||
|
this.$el.append(html);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Create the list of digits and appends it to the DOM object
|
||
|
*/
|
||
|
|
||
|
createList: function () {
|
||
|
|
||
|
var lastDigit = this.getPrevDigit() ? this.getPrevDigit() : this.digit;
|
||
|
|
||
|
var html = $([
|
||
|
'<ul class="' + this.classes.flip + ' ' + (this.factory.running ? this.factory.classes.play : '') + '">',
|
||
|
this.createListItem(this.classes.before, lastDigit),
|
||
|
this.createListItem(this.classes.active, this.digit),
|
||
|
'</ul>'
|
||
|
].join(''));
|
||
|
|
||
|
return html;
|
||
|
},
|
||
|
|
||
|
getNextDigit: function () {
|
||
|
return this.digit == 9 ? 0 : this.digit + 1;
|
||
|
},
|
||
|
|
||
|
getPrevDigit: function () {
|
||
|
return this.digit == 0 ? 9 : this.digit - 1;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* Capitalize the first letter in a string
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
|
||
|
String.prototype.ucfirst = function () {
|
||
|
return this.substr(0, 1).toUpperCase() + this.substr(1);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* jQuery helper method
|
||
|
*
|
||
|
* @param int An integer used to start the clock (no. seconds)
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
$.fn.FlipClock = function (digit, options) {
|
||
|
return new FlipClock($(this), digit, options);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* jQuery helper method
|
||
|
*
|
||
|
* @param int An integer used to start the clock (no. seconds)
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
$.fn.flipClock = function (digit, options) {
|
||
|
return $.fn.FlipClock(digit, options);
|
||
|
};
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* The FlipClock Time class is used to manage all the time
|
||
|
* calculations.
|
||
|
*
|
||
|
* @param object A FlipClock.Factory object
|
||
|
* @param mixed This is the digit used to set the clock. If an
|
||
|
* object is passed, 0 will be used.
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock.Time = FlipClock.Base.extend({
|
||
|
|
||
|
/**
|
||
|
* The time (in seconds) or a date object
|
||
|
*/
|
||
|
|
||
|
time: 0,
|
||
|
|
||
|
/**
|
||
|
* The parent FlipClock.Factory object
|
||
|
*/
|
||
|
|
||
|
factory: false,
|
||
|
|
||
|
/**
|
||
|
* The minimum number of digits the clock face must have
|
||
|
*/
|
||
|
|
||
|
minimumDigits: 0,
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param object A FlipClock.Factory object
|
||
|
* @param int An integer use to select the correct digit
|
||
|
* @param object An object to override the default properties
|
||
|
*/
|
||
|
|
||
|
constructor: function (factory, time, options) {
|
||
|
if (typeof options != "object") {
|
||
|
options = {};
|
||
|
}
|
||
|
|
||
|
if (!options.minimumDigits) {
|
||
|
options.minimumDigits = factory.minimumDigits;
|
||
|
}
|
||
|
|
||
|
this.base(options);
|
||
|
this.factory = factory;
|
||
|
|
||
|
if (time) {
|
||
|
this.time = time;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Convert a string or integer to an array of digits
|
||
|
*
|
||
|
* @param mixed String or Integer of digits
|
||
|
* @return array An array of digits
|
||
|
*/
|
||
|
|
||
|
convertDigitsToArray: function (str) {
|
||
|
var data = [];
|
||
|
|
||
|
str = str.toString();
|
||
|
|
||
|
for (var x = 0; x < str.length; x++) {
|
||
|
if (str[x].match(/^\d*$/g)) {
|
||
|
data.push(str[x]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return data;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get a specific digit from the time integer
|
||
|
*
|
||
|
* @param int The specific digit to select from the time
|
||
|
* @return mixed Returns FALSE if no digit is found, otherwise
|
||
|
* the method returns the defined digit
|
||
|
*/
|
||
|
|
||
|
digit: function (i) {
|
||
|
var timeStr = this.toString();
|
||
|
var length = timeStr.length;
|
||
|
|
||
|
if (timeStr[length - i]) {
|
||
|
return timeStr[length - i];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Formats any array of digits into a valid array of digits
|
||
|
*
|
||
|
* @param mixed An array of digits
|
||
|
* @return array An array of digits
|
||
|
*/
|
||
|
|
||
|
digitize: function (obj) {
|
||
|
var data = [];
|
||
|
|
||
|
$.each(obj, function (i, value) {
|
||
|
value = value.toString();
|
||
|
|
||
|
if (value.length == 1) {
|
||
|
value = '0' + value;
|
||
|
}
|
||
|
|
||
|
for (var x = 0; x < value.length; x++) {
|
||
|
data.push(value.charAt(x));
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (data.length > this.minimumDigits) {
|
||
|
this.minimumDigits = data.length;
|
||
|
}
|
||
|
|
||
|
if (this.minimumDigits > data.length) {
|
||
|
for (var x = data.length; x < this.minimumDigits; x++) {
|
||
|
data.unshift('0');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return data;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets a new Date object for the current time
|
||
|
*
|
||
|
* @return array Returns a Date object
|
||
|
*/
|
||
|
|
||
|
getDateObject: function () {
|
||
|
if (this.time instanceof Date) {
|
||
|
return this.time;
|
||
|
}
|
||
|
|
||
|
return new Date((new Date()).getTime() + this.getTimeSeconds() * 1000);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets a digitized daily counter
|
||
|
*
|
||
|
* @return object Returns a digitized object
|
||
|
*/
|
||
|
|
||
|
getDayCounter: function (includeSeconds) {
|
||
|
var digits = [
|
||
|
this.getDays(),
|
||
|
this.getHours(true),
|
||
|
this.getMinutes(true)
|
||
|
];
|
||
|
|
||
|
if (includeSeconds) {
|
||
|
digits.push(this.getSeconds(true));
|
||
|
}
|
||
|
|
||
|
return this.digitize(digits);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets number of days
|
||
|
*
|
||
|
* @param bool Should perform a modulus? If not sent, then no.
|
||
|
* @return int Retuns a floored integer
|
||
|
*/
|
||
|
|
||
|
getDays: function (mod) {
|
||
|
var days = this.getTimeSeconds() / 60 / 60 / 24;
|
||
|
|
||
|
if (mod) {
|
||
|
days = days % 7;
|
||
|
}
|
||
|
|
||
|
return Math.floor(days);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets an hourly breakdown
|
||
|
*
|
||
|
* @return object Returns a digitized object
|
||
|
*/
|
||
|
|
||
|
getHourCounter: function () {
|
||
|
var obj = this.digitize([
|
||
|
this.getHours(),
|
||
|
this.getMinutes(true),
|
||
|
this.getSeconds(true)
|
||
|
]);
|
||
|
|
||
|
return obj;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets an hourly breakdown
|
||
|
*
|
||
|
* @return object Returns a digitized object
|
||
|
*/
|
||
|
|
||
|
getHourly: function () {
|
||
|
return this.getHourCounter();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets number of hours
|
||
|
*
|
||
|
* @param bool Should perform a modulus? If not sent, then no.
|
||
|
* @return int Retuns a floored integer
|
||
|
*/
|
||
|
|
||
|
getHours: function (mod) {
|
||
|
var hours = this.getTimeSeconds() / 60 / 60;
|
||
|
|
||
|
if (mod) {
|
||
|
hours = hours % 24;
|
||
|
}
|
||
|
|
||
|
return Math.floor(hours);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets the twenty-four hour time
|
||
|
*
|
||
|
* @return object returns a digitized object
|
||
|
*/
|
||
|
|
||
|
getMilitaryTime: function (date, showSeconds) {
|
||
|
if (typeof showSeconds === "undefined") {
|
||
|
showSeconds = true;
|
||
|
}
|
||
|
|
||
|
if (!date) {
|
||
|
date = this.getDateObject();
|
||
|
}
|
||
|
|
||
|
var data = [
|
||
|
date.getHours(),
|
||
|
date.getMinutes()
|
||
|
];
|
||
|
|
||
|
if (showSeconds === true) {
|
||
|
data.push(date.getSeconds());
|
||
|
}
|
||
|
|
||
|
return this.digitize(data);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets number of minutes
|
||
|
*
|
||
|
* @param bool Should perform a modulus? If not sent, then no.
|
||
|
* @return int Retuns a floored integer
|
||
|
*/
|
||
|
|
||
|
getMinutes: function (mod) {
|
||
|
var minutes = this.getTimeSeconds() / 60;
|
||
|
|
||
|
if (mod) {
|
||
|
minutes = minutes % 60;
|
||
|
}
|
||
|
|
||
|
return Math.floor(minutes);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets a minute breakdown
|
||
|
*/
|
||
|
|
||
|
getMinuteCounter: function () {
|
||
|
var obj = this.digitize([
|
||
|
this.getMinutes(),
|
||
|
this.getSeconds(true)
|
||
|
]);
|
||
|
|
||
|
return obj;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets time count in seconds regardless of if targetting date or not.
|
||
|
*
|
||
|
* @return int Returns a floored integer
|
||
|
*/
|
||
|
|
||
|
getTimeSeconds: function (date) {
|
||
|
if (!date) {
|
||
|
date = new Date();
|
||
|
}
|
||
|
|
||
|
if (this.time instanceof Date) {
|
||
|
if (this.factory.countdown) {
|
||
|
return Math.max(this.time.getTime() / 1000 - date.getTime() / 1000, 0);
|
||
|
} else {
|
||
|
return date.getTime() / 1000 - this.time.getTime() / 1000;
|
||
|
}
|
||
|
} else {
|
||
|
return this.time;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets the current twelve hour time
|
||
|
*
|
||
|
* @return object Returns a digitized object
|
||
|
*/
|
||
|
|
||
|
getTime: function (date, showSeconds) {
|
||
|
if (typeof showSeconds === "undefined") {
|
||
|
showSeconds = true;
|
||
|
}
|
||
|
|
||
|
if (!date) {
|
||
|
date = this.getDateObject();
|
||
|
}
|
||
|
|
||
|
//console.log(date);
|
||
|
|
||
|
|
||
|
var hours = date.getHours();
|
||
|
var merid = hours > 12 ? 'PM' : 'AM';
|
||
|
var data = [
|
||
|
hours > 12 ? hours - 12 : (hours === 0 ? 12 : hours),
|
||
|
date.getMinutes()
|
||
|
];
|
||
|
|
||
|
if (showSeconds === true) {
|
||
|
data.push(date.getSeconds());
|
||
|
}
|
||
|
|
||
|
return this.digitize(data);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets number of seconds
|
||
|
*
|
||
|
* @param bool Should perform a modulus? If not sent, then no.
|
||
|
* @return int Retuns a ceiled integer
|
||
|
*/
|
||
|
|
||
|
getSeconds: function (mod) {
|
||
|
var seconds = this.getTimeSeconds();
|
||
|
|
||
|
if (mod) {
|
||
|
if (seconds == 60) {
|
||
|
seconds = 0;
|
||
|
}
|
||
|
else {
|
||
|
seconds = seconds % 60;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Math.ceil(seconds);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Gets number of weeks
|
||
|
*
|
||
|
* @param bool Should perform a modulus? If not sent, then no.
|
||
|
* @return int Retuns a floored integer
|
||
|
*/
|
||
|
|
||
|
getWeeks: function (mod) {
|
||
|
var weeks = this.getTimeSeconds() / 60 / 60 / 24 / 7;
|
||
|
|
||
|
if (mod) {
|
||
|
weeks = weeks % 52;
|
||
|
}
|
||
|
|
||
|
return Math.floor(weeks);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Removes a specific number of leading zeros from the array.
|
||
|
* This method prevents you from removing too many digits, even
|
||
|
* if you try.
|
||
|
*
|
||
|
* @param int Total number of digits to remove
|
||
|
* @return array An array of digits
|
||
|
*/
|
||
|
|
||
|
removeLeadingZeros: function (totalDigits, digits) {
|
||
|
var total = 0;
|
||
|
var newArray = [];
|
||
|
|
||
|
$.each(digits, function (i, digit) {
|
||
|
if (i < totalDigits) {
|
||
|
total += parseInt(digits[i], 10);
|
||
|
}
|
||
|
else {
|
||
|
newArray.push(digits[i]);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (total === 0) {
|
||
|
return newArray;
|
||
|
}
|
||
|
|
||
|
return digits;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds X second to the current time
|
||
|
*/
|
||
|
|
||
|
addSeconds: function (x) {
|
||
|
if (this.time instanceof Date) {
|
||
|
this.time.setSeconds(this.time.getSeconds() + x);
|
||
|
}
|
||
|
else {
|
||
|
this.time += x;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds 1 second to the current time
|
||
|
*/
|
||
|
|
||
|
addSecond: function () {
|
||
|
this.addSeconds(1);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Substracts X seconds from the current time
|
||
|
*/
|
||
|
|
||
|
subSeconds: function (x) {
|
||
|
if (this.time instanceof Date) {
|
||
|
this.time.setSeconds(this.time.getSeconds() - x);
|
||
|
}
|
||
|
else {
|
||
|
this.time -= x;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Substracts 1 second from the current time
|
||
|
*/
|
||
|
|
||
|
subSecond: function () {
|
||
|
this.subSeconds(1);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Converts the object to a human readable string
|
||
|
*/
|
||
|
|
||
|
toString: function () {
|
||
|
return this.getTimeSeconds().toString();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
getYears: function() {
|
||
|
return Math.floor(this.time / 60 / 60 / 24 / 7 / 52);
|
||
|
},
|
||
|
|
||
|
getDecades: function() {
|
||
|
return Math.floor(this.getWeeks() / 10);
|
||
|
}*/
|
||
|
});
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
/*jshint smarttabs:true */
|
||
|
|
||
|
/**
|
||
|
* FlipClock.js
|
||
|
*
|
||
|
* @author Justin Kimbrell
|
||
|
* @copyright 2013 - Objective HTML, LLC
|
||
|
* @licesnse http://www.opensource.org/licenses/mit-license.php
|
||
|
*/
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* The FlipClock.Timer object managers the JS timers
|
||
|
*
|
||
|
* @param object The parent FlipClock.Factory object
|
||
|
* @param object Override the default options
|
||
|
*/
|
||
|
|
||
|
FlipClock.Timer = FlipClock.Base.extend({
|
||
|
|
||
|
/**
|
||
|
* Callbacks
|
||
|
*/
|
||
|
|
||
|
callbacks: {
|
||
|
destroy: false,
|
||
|
create: false,
|
||
|
init: false,
|
||
|
interval: false,
|
||
|
start: false,
|
||
|
stop: false,
|
||
|
reset: false
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* FlipClock timer count (how many intervals have passed)
|
||
|
*/
|
||
|
|
||
|
count: 0,
|
||
|
|
||
|
/**
|
||
|
* The parent FlipClock.Factory object
|
||
|
*/
|
||
|
|
||
|
factory: false,
|
||
|
|
||
|
/**
|
||
|
* Timer interval (1 second by default)
|
||
|
*/
|
||
|
|
||
|
interval: 1000,
|
||
|
|
||
|
/**
|
||
|
* The rate of the animation in milliseconds (not currently in use)
|
||
|
*/
|
||
|
|
||
|
animationRate: 1000,
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
constructor: function (factory, options) {
|
||
|
this.base(options);
|
||
|
this.factory = factory;
|
||
|
this.callback(this.callbacks.init);
|
||
|
this.callback(this.callbacks.create);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This method gets the elapsed the time as an interger
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
getElapsed: function () {
|
||
|
return this.count * this.interval;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This method gets the elapsed the time as a Date object
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
getElapsedTime: function () {
|
||
|
return new Date(this.time + this.getElapsed());
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This method is resets the timer
|
||
|
*
|
||
|
* @param callback This method resets the timer back to 0
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
reset: function (callback) {
|
||
|
clearInterval(this.timer);
|
||
|
this.count = 0;
|
||
|
this._setInterval(callback);
|
||
|
this.callback(this.callbacks.reset);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This method is starts the timer
|
||
|
*
|
||
|
* @param callback A function that is called once the timer is destroyed
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
start: function (callback) {
|
||
|
this.factory.running = true;
|
||
|
this._createTimer(callback);
|
||
|
this.callback(this.callbacks.start);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This method is stops the timer
|
||
|
*
|
||
|
* @param callback A function that is called once the timer is destroyed
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
stop: function (callback) {
|
||
|
this.factory.running = false;
|
||
|
this._clearInterval(callback);
|
||
|
this.callback(this.callbacks.stop);
|
||
|
this.callback(callback);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Clear the timer interval
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
_clearInterval: function () {
|
||
|
clearInterval(this.timer);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Create the timer object
|
||
|
*
|
||
|
* @param callback A function that is called once the timer is created
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
_createTimer: function (callback) {
|
||
|
this._setInterval(callback);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Destroy the timer object
|
||
|
*
|
||
|
* @param callback A function that is called once the timer is destroyed
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
_destroyTimer: function (callback) {
|
||
|
this._clearInterval();
|
||
|
this.timer = false;
|
||
|
this.callback(callback);
|
||
|
this.callback(this.callbacks.destroy);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This method is called each time the timer interval is ran
|
||
|
*
|
||
|
* @param callback A function that is called once the timer is destroyed
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
_interval: function (callback) {
|
||
|
this.callback(this.callbacks.interval);
|
||
|
this.callback(callback);
|
||
|
this.count++;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* This sets the timer interval
|
||
|
*
|
||
|
* @param callback A function that is called once the timer is destroyed
|
||
|
* @return void
|
||
|
*/
|
||
|
|
||
|
_setInterval: function (callback) {
|
||
|
var t = this;
|
||
|
|
||
|
t._interval(callback);
|
||
|
|
||
|
t.timer = setInterval(function () {
|
||
|
t._interval(callback);
|
||
|
}, this.interval);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}(jQuery));
|
||
|
|
||
|
(function ($) {
|
||
|
|
||
|
/**
|
||
|
* Daily Counter Clock Face
|
||
|
*
|
||
|
* This class will generate a daily counter for FlipClock.js. A
|
||
|
* daily counter will track days, hours, minutes, and seconds. If
|
||
|
* the number of available digits is exceeded in the count, a new
|
||
|
* digit will be created.
|
||
|
*
|
||
|
* @param object The parent FlipClock.Factory object
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
FlipClock.DailyCounterFace = FlipClock.Face.extend({
|
||
|
|
||
|
showSeconds: true,
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param object The parent FlipClock.Factory object
|
||
|
* @param object An object of properties to override the default
|
||
|
*/
|
||
|
|
||
|
constructor: function (factory, options) {
|
||
|
this.base(factory, options);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Build the clock face
|
||
|
*/
|
||
|
|
||
|
build: function (time) {
|
||
|
var t = this;
|
||
|
var children = this.factory.$el.find('ul');
|
||
|
var offset = 0;
|
||
|
|
||
|
time = time ? time : this.factory.time.getDayCounter(this.showSeconds);
|
||
|
|
||
|
if (time.length > children.length) {
|
||
|
$.each(time, function (i, digit) {
|
||
|
t.createList(digit);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (this.showSeconds) {
|
||
|
$(this.createDivider(mecdata.seconds)).insertBefore(this.lists[this.lists.length - 2].$el);
|
||
|
}
|
||
|
else {
|
||
|
offset = 2;
|
||
|
}
|
||
|
|
||
|
$(this.createDivider(mecdata.minutes)).insertBefore(this.lists[this.lists.length - 4 + offset].$el);
|
||
|
$(this.createDivider(mecdata.hours)).insertBefore(this.lists[this.lists.length - 6 + offset].$el);
|
||
|
$(this.createDivider(mecdata.days, true)).insertBefore(this.lists[0].$el);
|
||
|
|
||
|
this.base();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Flip the clock face
|
||
|
*/
|
||
|
|
||
|
flip: function (time, doNotAddPlayClass) {
|
||
|
if (!time) {
|
||
|
time = this.factory.time.getDayCounter(this.showSeconds);
|
||
|
}
|
||
|
|
||
|
this.autoIncrement();
|
||
|
|
||
|
this.base(time, doNotAddPlayClass);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}(jQuery));
|