moved to local assets
This commit is contained in:
parent
2d2569c1b0
commit
9d9ecb0729
Binary file not shown.
|
@ -0,0 +1,98 @@
|
||||||
|
.odometer.odometer-auto-theme, .odometer.odometer-theme-default {
|
||||||
|
display: -moz-inline-box;
|
||||||
|
-moz-box-orient: vertical;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
*vertical-align: auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme, .odometer.odometer-theme-default {
|
||||||
|
*display: inline;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit {
|
||||||
|
display: -moz-inline-box;
|
||||||
|
-moz-box-orient: vertical;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
*vertical-align: auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit {
|
||||||
|
*display: inline;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer {
|
||||||
|
display: -moz-inline-box;
|
||||||
|
-moz-box-orient: vertical;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
*vertical-align: auto;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer {
|
||||||
|
*display: inline;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner {
|
||||||
|
text-align: left;
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner {
|
||||||
|
display: block;
|
||||||
|
-webkit-backface-visibility: hidden;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value {
|
||||||
|
display: block;
|
||||||
|
-webkit-transform: translateZ(0);
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner {
|
||||||
|
-webkit-transition: -webkit-transform 2s;
|
||||||
|
-moz-transition: -moz-transform 2s;
|
||||||
|
-ms-transition: -ms-transform 2s;
|
||||||
|
-o-transition: -o-transform 2s;
|
||||||
|
transition: transform 2s;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner {
|
||||||
|
-webkit-transform: translateY(-100%);
|
||||||
|
-moz-transform: translateY(-100%);
|
||||||
|
-ms-transform: translateY(-100%);
|
||||||
|
-o-transform: translateY(-100%);
|
||||||
|
transform: translateY(-100%);
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner {
|
||||||
|
-webkit-transform: translateY(-100%);
|
||||||
|
-moz-transform: translateY(-100%);
|
||||||
|
-ms-transform: translateY(-100%);
|
||||||
|
-o-transform: translateY(-100%);
|
||||||
|
transform: translateY(-100%);
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner {
|
||||||
|
-webkit-transition: -webkit-transform 2s;
|
||||||
|
-moz-transition: -moz-transform 2s;
|
||||||
|
-ms-transition: -ms-transform 2s;
|
||||||
|
-o-transition: -o-transform 2s;
|
||||||
|
transition: transform 2s;
|
||||||
|
-webkit-transform: translateY(0);
|
||||||
|
-moz-transform: translateY(0);
|
||||||
|
-ms-transform: translateY(0);
|
||||||
|
-o-transform: translateY(0);
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.odometer.odometer-auto-theme, .odometer.odometer-theme-default {
|
||||||
|
font-family: "Helvetica Neue", sans-serif;
|
||||||
|
line-height: 1.1em;
|
||||||
|
}
|
||||||
|
.odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value {
|
||||||
|
text-align: center;
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,632 @@
|
||||||
|
(function() {
|
||||||
|
var COUNT_FRAMERATE, COUNT_MS_PER_FRAME, DIGIT_FORMAT, DIGIT_HTML, DIGIT_SPEEDBOOST, DURATION, FORMAT_MARK_HTML, FORMAT_PARSER, FRAMERATE, FRAMES_PER_VALUE, MS_PER_FRAME, MutationObserver, Odometer, RIBBON_HTML, TRANSITION_END_EVENTS, TRANSITION_SUPPORT, VALUE_HTML, addClass, createFromHTML, fractionalPart, now, removeClass, requestAnimationFrame, round, transitionCheckStyles, trigger, truncate, wrapJQuery, _jQueryWrapped, _old, _ref, _ref1,
|
||||||
|
__slice = [].slice;
|
||||||
|
|
||||||
|
VALUE_HTML = '<span class="odometer-value"></span>';
|
||||||
|
|
||||||
|
RIBBON_HTML = '<span class="odometer-ribbon"><span class="odometer-ribbon-inner">' + VALUE_HTML + '</span></span>';
|
||||||
|
|
||||||
|
DIGIT_HTML = '<span class="odometer-digit"><span class="odometer-digit-spacer">8</span><span class="odometer-digit-inner">' + RIBBON_HTML + '</span></span>';
|
||||||
|
|
||||||
|
FORMAT_MARK_HTML = '<span class="odometer-formatting-mark"></span>';
|
||||||
|
|
||||||
|
DIGIT_FORMAT = '(,ddd).dd';
|
||||||
|
|
||||||
|
FORMAT_PARSER = /^\(?([^)]*)\)?(?:(.)(d+))?$/;
|
||||||
|
|
||||||
|
FRAMERATE = 30;
|
||||||
|
|
||||||
|
DURATION = 2000;
|
||||||
|
|
||||||
|
COUNT_FRAMERATE = 20;
|
||||||
|
|
||||||
|
FRAMES_PER_VALUE = 2;
|
||||||
|
|
||||||
|
DIGIT_SPEEDBOOST = .5;
|
||||||
|
|
||||||
|
MS_PER_FRAME = 1000 / FRAMERATE;
|
||||||
|
|
||||||
|
COUNT_MS_PER_FRAME = 1000 / COUNT_FRAMERATE;
|
||||||
|
|
||||||
|
TRANSITION_END_EVENTS = 'transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd';
|
||||||
|
|
||||||
|
transitionCheckStyles = document.createElement('div').style;
|
||||||
|
|
||||||
|
TRANSITION_SUPPORT = (transitionCheckStyles.transition != null) || (transitionCheckStyles.webkitTransition != null) || (transitionCheckStyles.mozTransition != null) || (transitionCheckStyles.oTransition != null);
|
||||||
|
|
||||||
|
requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
|
||||||
|
|
||||||
|
MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
|
||||||
|
|
||||||
|
createFromHTML = function(html) {
|
||||||
|
var el;
|
||||||
|
el = document.createElement('div');
|
||||||
|
el.innerHTML = html;
|
||||||
|
return el.children[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
removeClass = function(el, name) {
|
||||||
|
return el.className = el.className.replace(new RegExp("(^| )" + (name.split(' ').join('|')) + "( |$)", 'gi'), ' ');
|
||||||
|
};
|
||||||
|
|
||||||
|
addClass = function(el, name) {
|
||||||
|
removeClass(el, name);
|
||||||
|
return el.className += " " + name;
|
||||||
|
};
|
||||||
|
|
||||||
|
trigger = function(el, name) {
|
||||||
|
var evt;
|
||||||
|
if (document.createEvent != null) {
|
||||||
|
evt = document.createEvent('HTMLEvents');
|
||||||
|
evt.initEvent(name, true, true);
|
||||||
|
return el.dispatchEvent(evt);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
now = function() {
|
||||||
|
var _ref, _ref1;
|
||||||
|
return (_ref = (_ref1 = window.performance) != null ? typeof _ref1.now === "function" ? _ref1.now() : void 0 : void 0) != null ? _ref : +(new Date);
|
||||||
|
};
|
||||||
|
|
||||||
|
round = function(val, precision) {
|
||||||
|
if (precision == null) {
|
||||||
|
precision = 0;
|
||||||
|
}
|
||||||
|
if (!precision) {
|
||||||
|
return Math.round(val);
|
||||||
|
}
|
||||||
|
val *= Math.pow(10, precision);
|
||||||
|
val += 0.5;
|
||||||
|
val = Math.floor(val);
|
||||||
|
return val /= Math.pow(10, precision);
|
||||||
|
};
|
||||||
|
|
||||||
|
truncate = function(val) {
|
||||||
|
if (val < 0) {
|
||||||
|
return Math.ceil(val);
|
||||||
|
} else {
|
||||||
|
return Math.floor(val);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fractionalPart = function(val) {
|
||||||
|
return val - round(val);
|
||||||
|
};
|
||||||
|
|
||||||
|
_jQueryWrapped = false;
|
||||||
|
|
||||||
|
(wrapJQuery = function() {
|
||||||
|
var property, _i, _len, _ref, _results;
|
||||||
|
if (_jQueryWrapped) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (window.jQuery != null) {
|
||||||
|
_jQueryWrapped = true;
|
||||||
|
_ref = ['html', 'text'];
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
property = _ref[_i];
|
||||||
|
_results.push((function(property) {
|
||||||
|
var old;
|
||||||
|
old = window.jQuery.fn[property];
|
||||||
|
return window.jQuery.fn[property] = function(val) {
|
||||||
|
var _ref1;
|
||||||
|
if ((val == null) || (((_ref1 = this[0]) != null ? _ref1.odometer : void 0) == null)) {
|
||||||
|
return old.apply(this, arguments);
|
||||||
|
}
|
||||||
|
return this[0].odometer.update(val);
|
||||||
|
};
|
||||||
|
})(property));
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
setTimeout(wrapJQuery, 0);
|
||||||
|
|
||||||
|
Odometer = (function() {
|
||||||
|
function Odometer(options) {
|
||||||
|
var e, k, property, v, _base, _i, _len, _ref, _ref1, _ref2,
|
||||||
|
_this = this;
|
||||||
|
this.options = options;
|
||||||
|
this.el = this.options.el;
|
||||||
|
if (this.el.odometer != null) {
|
||||||
|
return this.el.odometer;
|
||||||
|
}
|
||||||
|
this.el.odometer = this;
|
||||||
|
_ref = Odometer.options;
|
||||||
|
for (k in _ref) {
|
||||||
|
v = _ref[k];
|
||||||
|
if (this.options[k] == null) {
|
||||||
|
this.options[k] = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((_base = this.options).duration == null) {
|
||||||
|
_base.duration = DURATION;
|
||||||
|
}
|
||||||
|
this.MAX_VALUES = ((this.options.duration / MS_PER_FRAME) / FRAMES_PER_VALUE) | 0;
|
||||||
|
this.resetFormat();
|
||||||
|
this.value = this.cleanValue((_ref1 = this.options.value) != null ? _ref1 : '');
|
||||||
|
this.renderInside();
|
||||||
|
this.render();
|
||||||
|
try {
|
||||||
|
_ref2 = ['innerHTML', 'innerText', 'textContent'];
|
||||||
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||||
|
property = _ref2[_i];
|
||||||
|
if (this.el[property] != null) {
|
||||||
|
(function(property) {
|
||||||
|
return Object.defineProperty(_this.el, property, {
|
||||||
|
get: function() {
|
||||||
|
var _ref3;
|
||||||
|
if (property === 'innerHTML') {
|
||||||
|
return _this.inside.outerHTML;
|
||||||
|
} else {
|
||||||
|
return (_ref3 = _this.inside.innerText) != null ? _ref3 : _this.inside.textContent;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
set: function(val) {
|
||||||
|
return _this.update(val);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})(property);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (_error) {
|
||||||
|
e = _error;
|
||||||
|
this.watchForMutations();
|
||||||
|
}
|
||||||
|
this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Odometer.prototype.renderInside = function() {
|
||||||
|
this.inside = document.createElement('div');
|
||||||
|
this.inside.className = 'odometer-inside';
|
||||||
|
this.el.innerHTML = '';
|
||||||
|
return this.el.appendChild(this.inside);
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.watchForMutations = function() {
|
||||||
|
var e,
|
||||||
|
_this = this;
|
||||||
|
if (MutationObserver == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (this.observer == null) {
|
||||||
|
this.observer = new MutationObserver(function(mutations) {
|
||||||
|
var newVal;
|
||||||
|
newVal = _this.el.innerText;
|
||||||
|
_this.renderInside();
|
||||||
|
_this.render(_this.value);
|
||||||
|
return _this.update(newVal);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.watchMutations = true;
|
||||||
|
return this.startWatchingMutations();
|
||||||
|
} catch (_error) {
|
||||||
|
e = _error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.startWatchingMutations = function() {
|
||||||
|
if (this.watchMutations) {
|
||||||
|
return this.observer.observe(this.el, {
|
||||||
|
childList: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.stopWatchingMutations = function() {
|
||||||
|
var _ref;
|
||||||
|
return (_ref = this.observer) != null ? _ref.disconnect() : void 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.cleanValue = function(val) {
|
||||||
|
var _ref;
|
||||||
|
if (typeof val === 'string') {
|
||||||
|
val = val.replace((_ref = this.format.radix) != null ? _ref : '.', '<radix>');
|
||||||
|
val = val.replace(/[.,]/g, '');
|
||||||
|
val = val.replace('<radix>', '.');
|
||||||
|
val = parseFloat(val, 10) || 0;
|
||||||
|
}
|
||||||
|
return round(val, this.format.precision);
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.bindTransitionEnd = function() {
|
||||||
|
var event, renderEnqueued, _i, _len, _ref, _results,
|
||||||
|
_this = this;
|
||||||
|
if (this.transitionEndBound) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.transitionEndBound = true;
|
||||||
|
renderEnqueued = false;
|
||||||
|
_ref = TRANSITION_END_EVENTS.split(' ');
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
event = _ref[_i];
|
||||||
|
_results.push(this.el.addEventListener(event, function() {
|
||||||
|
if (renderEnqueued) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
renderEnqueued = true;
|
||||||
|
setTimeout(function() {
|
||||||
|
_this.render();
|
||||||
|
renderEnqueued = false;
|
||||||
|
return trigger(_this.el, 'odometerdone');
|
||||||
|
}, 0);
|
||||||
|
return true;
|
||||||
|
}, false));
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.resetFormat = function() {
|
||||||
|
var format, fractional, parsed, precision, radix, repeating, _ref, _ref1;
|
||||||
|
format = (_ref = this.options.format) != null ? _ref : DIGIT_FORMAT;
|
||||||
|
format || (format = 'd');
|
||||||
|
parsed = FORMAT_PARSER.exec(format);
|
||||||
|
if (!parsed) {
|
||||||
|
throw new Error("Odometer: Unparsable digit format");
|
||||||
|
}
|
||||||
|
_ref1 = parsed.slice(1, 4), repeating = _ref1[0], radix = _ref1[1], fractional = _ref1[2];
|
||||||
|
precision = (fractional != null ? fractional.length : void 0) || 0;
|
||||||
|
return this.format = {
|
||||||
|
repeating: repeating,
|
||||||
|
radix: radix,
|
||||||
|
precision: precision
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.render = function(value) {
|
||||||
|
var classes, cls, digit, match, newClasses, theme, wholePart, _i, _j, _len, _len1, _ref;
|
||||||
|
if (value == null) {
|
||||||
|
value = this.value;
|
||||||
|
}
|
||||||
|
this.stopWatchingMutations();
|
||||||
|
this.resetFormat();
|
||||||
|
this.inside.innerHTML = '';
|
||||||
|
theme = this.options.theme;
|
||||||
|
classes = this.el.className.split(' ');
|
||||||
|
newClasses = [];
|
||||||
|
for (_i = 0, _len = classes.length; _i < _len; _i++) {
|
||||||
|
cls = classes[_i];
|
||||||
|
if (!cls.length) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (match = /^odometer-theme-(.+)$/.exec(cls)) {
|
||||||
|
theme = match[1];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (/^odometer(-|$)/.test(cls)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
newClasses.push(cls);
|
||||||
|
}
|
||||||
|
newClasses.push('odometer');
|
||||||
|
if (!TRANSITION_SUPPORT) {
|
||||||
|
newClasses.push('odometer-no-transitions');
|
||||||
|
}
|
||||||
|
if (theme) {
|
||||||
|
newClasses.push("odometer-theme-" + theme);
|
||||||
|
} else {
|
||||||
|
newClasses.push("odometer-auto-theme");
|
||||||
|
}
|
||||||
|
this.el.className = newClasses.join(' ');
|
||||||
|
this.ribbons = {};
|
||||||
|
this.digits = [];
|
||||||
|
wholePart = !this.format.precision || !fractionalPart(value) || false;
|
||||||
|
_ref = value.toString().split('').reverse();
|
||||||
|
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||||
|
digit = _ref[_j];
|
||||||
|
if (digit === '.') {
|
||||||
|
wholePart = true;
|
||||||
|
}
|
||||||
|
this.addDigit(digit, wholePart);
|
||||||
|
}
|
||||||
|
return this.startWatchingMutations();
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.update = function(newValue) {
|
||||||
|
var diff,
|
||||||
|
_this = this;
|
||||||
|
newValue = this.cleanValue(newValue);
|
||||||
|
if (!(diff = newValue - this.value)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeClass(this.el, 'odometer-animating-up odometer-animating-down odometer-animating');
|
||||||
|
if (diff > 0) {
|
||||||
|
addClass(this.el, 'odometer-animating-up');
|
||||||
|
} else {
|
||||||
|
addClass(this.el, 'odometer-animating-down');
|
||||||
|
}
|
||||||
|
this.stopWatchingMutations();
|
||||||
|
this.animate(newValue);
|
||||||
|
this.startWatchingMutations();
|
||||||
|
setTimeout(function() {
|
||||||
|
_this.el.offsetHeight;
|
||||||
|
return addClass(_this.el, 'odometer-animating');
|
||||||
|
}, 0);
|
||||||
|
return this.value = newValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.renderDigit = function() {
|
||||||
|
return createFromHTML(DIGIT_HTML);
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.insertDigit = function(digit, before) {
|
||||||
|
if (before != null) {
|
||||||
|
return this.inside.insertBefore(digit, before);
|
||||||
|
} else if (!this.inside.children.length) {
|
||||||
|
return this.inside.appendChild(digit);
|
||||||
|
} else {
|
||||||
|
return this.inside.insertBefore(digit, this.inside.children[0]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.addSpacer = function(chr, before, extraClasses) {
|
||||||
|
var spacer;
|
||||||
|
spacer = createFromHTML(FORMAT_MARK_HTML);
|
||||||
|
spacer.innerHTML = chr;
|
||||||
|
if (extraClasses) {
|
||||||
|
addClass(spacer, extraClasses);
|
||||||
|
}
|
||||||
|
return this.insertDigit(spacer, before);
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.addDigit = function(value, repeating) {
|
||||||
|
var chr, digit, resetted, _ref;
|
||||||
|
if (repeating == null) {
|
||||||
|
repeating = true;
|
||||||
|
}
|
||||||
|
if (value === '-') {
|
||||||
|
return this.addSpacer(value, null, 'odometer-negation-mark');
|
||||||
|
}
|
||||||
|
if (value === '.') {
|
||||||
|
return this.addSpacer((_ref = this.format.radix) != null ? _ref : '.', null, 'odometer-radix-mark');
|
||||||
|
}
|
||||||
|
if (repeating) {
|
||||||
|
resetted = false;
|
||||||
|
while (true) {
|
||||||
|
if (!this.format.repeating.length) {
|
||||||
|
if (resetted) {
|
||||||
|
throw new Error("Bad odometer format without digits");
|
||||||
|
}
|
||||||
|
this.resetFormat();
|
||||||
|
resetted = true;
|
||||||
|
}
|
||||||
|
chr = this.format.repeating[this.format.repeating.length - 1];
|
||||||
|
this.format.repeating = this.format.repeating.substring(0, this.format.repeating.length - 1);
|
||||||
|
if (chr === 'd') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
this.addSpacer(chr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
digit = this.renderDigit();
|
||||||
|
digit.querySelector('.odometer-value').innerHTML = value;
|
||||||
|
this.digits.push(digit);
|
||||||
|
return this.insertDigit(digit);
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.animate = function(newValue) {
|
||||||
|
if (!TRANSITION_SUPPORT || this.options.animation === 'count') {
|
||||||
|
return this.animateCount(newValue);
|
||||||
|
} else {
|
||||||
|
return this.animateSlide(newValue);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.animateCount = function(newValue) {
|
||||||
|
var cur, diff, last, start, tick,
|
||||||
|
_this = this;
|
||||||
|
if (!(diff = +newValue - this.value)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
start = last = now();
|
||||||
|
cur = this.value;
|
||||||
|
return (tick = function() {
|
||||||
|
var delta, dist, fraction;
|
||||||
|
if ((now() - start) > _this.options.duration) {
|
||||||
|
_this.value = newValue;
|
||||||
|
_this.render();
|
||||||
|
trigger(_this.el, 'odometerdone');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delta = now() - last;
|
||||||
|
if (delta > COUNT_MS_PER_FRAME) {
|
||||||
|
last = now();
|
||||||
|
fraction = delta / _this.options.duration;
|
||||||
|
dist = diff * fraction;
|
||||||
|
cur += dist;
|
||||||
|
_this.render(Math.round(cur));
|
||||||
|
}
|
||||||
|
if (requestAnimationFrame != null) {
|
||||||
|
return requestAnimationFrame(tick);
|
||||||
|
} else {
|
||||||
|
return setTimeout(tick, COUNT_MS_PER_FRAME);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.getDigitCount = function() {
|
||||||
|
var i, max, value, values, _i, _len;
|
||||||
|
values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
||||||
|
for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {
|
||||||
|
value = values[i];
|
||||||
|
values[i] = Math.abs(value);
|
||||||
|
}
|
||||||
|
max = Math.max.apply(Math, values);
|
||||||
|
return Math.ceil(Math.log(max + 1) / Math.log(10));
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.getFractionalDigitCount = function() {
|
||||||
|
var i, parser, parts, value, values, _i, _len;
|
||||||
|
values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
||||||
|
parser = /^\-?\d*\.(\d*?)0*$/;
|
||||||
|
for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {
|
||||||
|
value = values[i];
|
||||||
|
values[i] = value.toString();
|
||||||
|
parts = parser.exec(values[i]);
|
||||||
|
if (parts == null) {
|
||||||
|
values[i] = 0;
|
||||||
|
} else {
|
||||||
|
values[i] = parts[1].length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Math.max.apply(Math, values);
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.resetDigits = function() {
|
||||||
|
this.digits = [];
|
||||||
|
this.ribbons = [];
|
||||||
|
this.inside.innerHTML = '';
|
||||||
|
return this.resetFormat();
|
||||||
|
};
|
||||||
|
|
||||||
|
Odometer.prototype.animateSlide = function(newValue) {
|
||||||
|
var boosted, cur, diff, digitCount, digits, dist, end, fractionalCount, frame, frames, i, incr, j, mark, numEl, oldValue, start, _base, _i, _j, _k, _l, _len, _len1, _len2, _m, _ref, _results;
|
||||||
|
oldValue = this.value;
|
||||||
|
fractionalCount = this.getFractionalDigitCount(oldValue, newValue);
|
||||||
|
if (fractionalCount) {
|
||||||
|
newValue = newValue * Math.pow(10, fractionalCount);
|
||||||
|
oldValue = oldValue * Math.pow(10, fractionalCount);
|
||||||
|
}
|
||||||
|
if (!(diff = newValue - oldValue)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.bindTransitionEnd();
|
||||||
|
digitCount = this.getDigitCount(oldValue, newValue);
|
||||||
|
digits = [];
|
||||||
|
boosted = 0;
|
||||||
|
for (i = _i = 0; 0 <= digitCount ? _i < digitCount : _i > digitCount; i = 0 <= digitCount ? ++_i : --_i) {
|
||||||
|
start = truncate(oldValue / Math.pow(10, digitCount - i - 1));
|
||||||
|
end = truncate(newValue / Math.pow(10, digitCount - i - 1));
|
||||||
|
dist = end - start;
|
||||||
|
if (Math.abs(dist) > this.MAX_VALUES) {
|
||||||
|
frames = [];
|
||||||
|
incr = dist / (this.MAX_VALUES + this.MAX_VALUES * boosted * DIGIT_SPEEDBOOST);
|
||||||
|
cur = start;
|
||||||
|
while ((dist > 0 && cur < end) || (dist < 0 && cur > end)) {
|
||||||
|
frames.push(Math.round(cur));
|
||||||
|
cur += incr;
|
||||||
|
}
|
||||||
|
if (frames[frames.length - 1] !== end) {
|
||||||
|
frames.push(end);
|
||||||
|
}
|
||||||
|
boosted++;
|
||||||
|
} else {
|
||||||
|
frames = (function() {
|
||||||
|
_results = [];
|
||||||
|
for (var _j = start; start <= end ? _j <= end : _j >= end; start <= end ? _j++ : _j--){ _results.push(_j); }
|
||||||
|
return _results;
|
||||||
|
}).apply(this);
|
||||||
|
}
|
||||||
|
for (i = _k = 0, _len = frames.length; _k < _len; i = ++_k) {
|
||||||
|
frame = frames[i];
|
||||||
|
frames[i] = Math.abs(frame % 10);
|
||||||
|
}
|
||||||
|
digits.push(frames);
|
||||||
|
}
|
||||||
|
this.resetDigits();
|
||||||
|
_ref = digits.reverse();
|
||||||
|
for (i = _l = 0, _len1 = _ref.length; _l < _len1; i = ++_l) {
|
||||||
|
frames = _ref[i];
|
||||||
|
if (!this.digits[i]) {
|
||||||
|
this.addDigit(' ', i >= fractionalCount);
|
||||||
|
}
|
||||||
|
if ((_base = this.ribbons)[i] == null) {
|
||||||
|
_base[i] = this.digits[i].querySelector('.odometer-ribbon-inner');
|
||||||
|
}
|
||||||
|
this.ribbons[i].innerHTML = '';
|
||||||
|
if (diff < 0) {
|
||||||
|
frames = frames.reverse();
|
||||||
|
}
|
||||||
|
for (j = _m = 0, _len2 = frames.length; _m < _len2; j = ++_m) {
|
||||||
|
frame = frames[j];
|
||||||
|
numEl = document.createElement('div');
|
||||||
|
numEl.className = 'odometer-value';
|
||||||
|
numEl.innerHTML = frame;
|
||||||
|
this.ribbons[i].appendChild(numEl);
|
||||||
|
if (j === frames.length - 1) {
|
||||||
|
addClass(numEl, 'odometer-last-value');
|
||||||
|
}
|
||||||
|
if (j === 0) {
|
||||||
|
addClass(numEl, 'odometer-first-value');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (start < 0) {
|
||||||
|
this.addDigit('-');
|
||||||
|
}
|
||||||
|
mark = this.inside.querySelector('.odometer-radix-mark');
|
||||||
|
if (mark != null) {
|
||||||
|
mark.parent.removeChild(mark);
|
||||||
|
}
|
||||||
|
if (fractionalCount) {
|
||||||
|
return this.addSpacer(this.format.radix, this.digits[fractionalCount - 1], 'odometer-radix-mark');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Odometer;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
Odometer.options = (_ref = window.odometerOptions) != null ? _ref : {};
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
var k, v, _base, _ref1, _results;
|
||||||
|
if (window.odometerOptions) {
|
||||||
|
_ref1 = window.odometerOptions;
|
||||||
|
_results = [];
|
||||||
|
for (k in _ref1) {
|
||||||
|
v = _ref1[k];
|
||||||
|
_results.push((_base = Odometer.options)[k] != null ? (_base = Odometer.options)[k] : _base[k] = v);
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
Odometer.init = function() {
|
||||||
|
var el, elements, _i, _len, _ref1, _results;
|
||||||
|
if (document.querySelectorAll == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
elements = document.querySelectorAll(Odometer.options.selector || '.odometer');
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = elements.length; _i < _len; _i++) {
|
||||||
|
el = elements[_i];
|
||||||
|
_results.push(el.odometer = new Odometer({
|
||||||
|
el: el,
|
||||||
|
value: (_ref1 = el.innerText) != null ? _ref1 : el.textContent
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ((((_ref1 = document.documentElement) != null ? _ref1.doScroll : void 0) != null) && (document.createEventObject != null)) {
|
||||||
|
_old = document.onreadystatechange;
|
||||||
|
document.onreadystatechange = function() {
|
||||||
|
if (document.readyState === 'complete' && Odometer.options.auto !== false) {
|
||||||
|
Odometer.init();
|
||||||
|
}
|
||||||
|
return _old != null ? _old.apply(this, arguments) : void 0;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
if (Odometer.options.auto !== false) {
|
||||||
|
return Odometer.init();
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define(['jquery'], function() {
|
||||||
|
return Odometer;
|
||||||
|
});
|
||||||
|
} else if (typeof exports === !'undefined') {
|
||||||
|
module.exports = Odometer;
|
||||||
|
} else {
|
||||||
|
window.Odometer = Odometer;
|
||||||
|
}
|
||||||
|
|
||||||
|
}).call(this);
|
|
@ -7,9 +7,10 @@
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="HandheldFriendly" content="true">
|
<meta name="HandheldFriendly" content="true">
|
||||||
<link rel="stylesheet" href="assets/css/style.css">
|
<link rel="stylesheet" href="assets/css/style.css">
|
||||||
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
|
<link rel="stylesheet" href="assets/css/odometer-theme-default.css" />
|
||||||
<link rel="stylesheet" href="http://github.hubspot.com/odometer/themes/odometer-theme-default.css" />
|
<script src="assets/js/odometer.js"></script>
|
||||||
<script src="http://github.hubspot.com/odometer/odometer.js"></script>
|
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<style>
|
<style>
|
||||||
|
|
Loading…
Reference in New Issue