mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
7.2 KiB
296 lines
7.2 KiB
/*!
|
|
* jQuery-runner - v2.3.3 - 2014-08-06
|
|
* https://github.com/jylauril/jquery-runner/
|
|
* Copyright (c) 2014 Jyrki Laurila <https://github.com/jylauril>
|
|
*/
|
|
(function() {
|
|
var Runner, formatTime, meta, pad, runners, uid, _$, _requestAnimationFrame, _uid;
|
|
|
|
meta = {
|
|
version: "2.3.3",
|
|
name: "jQuery-runner"
|
|
};
|
|
|
|
_$ = this.jQuery || this.Zepto || this.$;
|
|
|
|
if (!(_$ && _$.fn)) {
|
|
throw new Error('[' + meta.name + '] jQuery or jQuery-like library is required for this plugin to work');
|
|
}
|
|
|
|
runners = {};
|
|
|
|
pad = function(num) {
|
|
return (num < 10 ? '0' : '') + num;
|
|
};
|
|
|
|
_uid = 1;
|
|
|
|
uid = function() {
|
|
return 'runner' + _uid++;
|
|
};
|
|
|
|
_requestAnimationFrame = (function(win, raf) {
|
|
return win['r' + raf] || win['webkitR' + raf] || win['mozR' + raf] || win['msR' + raf] || function(fn) {
|
|
return setTimeout(fn, 30);
|
|
};
|
|
})(this, 'equestAnimationFrame');
|
|
|
|
formatTime = function(time, settings) {
|
|
var i, len, ms, output, prefix, separator, step, steps, value, _i, _len;
|
|
settings = settings || {};
|
|
steps = [3600000, 60000, 1000, 10];
|
|
separator = ['', ':', ':', '.'];
|
|
prefix = '';
|
|
output = '';
|
|
ms = settings.milliseconds;
|
|
len = steps.length;
|
|
value = 0;
|
|
if (time < 0) {
|
|
time = Math.abs(time);
|
|
prefix = '-';
|
|
}
|
|
for (i = _i = 0, _len = steps.length; _i < _len; i = ++_i) {
|
|
step = steps[i];
|
|
value = 0;
|
|
if (time >= step) {
|
|
value = Math.floor(time / step);
|
|
time -= value * step;
|
|
}
|
|
if ((value || i > 1 || output) && (i !== len - 1 || ms)) {
|
|
output += (output ? separator[i] : '') + pad(value);
|
|
}
|
|
}
|
|
return prefix + output;
|
|
};
|
|
|
|
Runner = (function() {
|
|
function Runner(items, options, start) {
|
|
var id;
|
|
if (!(this instanceof Runner)) {
|
|
return new Runner(items, options, start);
|
|
}
|
|
this.items = items;
|
|
id = this.id = uid();
|
|
this.settings = _$.extend({}, this.settings, options);
|
|
runners[id] = this;
|
|
items.each(function(index, element) {
|
|
_$(element).data('runner', id);
|
|
});
|
|
this.value(this.settings.startAt);
|
|
if (start || this.settings.autostart) {
|
|
this.start();
|
|
}
|
|
}
|
|
|
|
Runner.prototype.running = false;
|
|
|
|
Runner.prototype.updating = false;
|
|
|
|
Runner.prototype.finished = false;
|
|
|
|
Runner.prototype.interval = null;
|
|
|
|
Runner.prototype.total = 0;
|
|
|
|
Runner.prototype.lastTime = 0;
|
|
|
|
Runner.prototype.startTime = 0;
|
|
|
|
Runner.prototype.lastLap = 0;
|
|
|
|
Runner.prototype.lapTime = 0;
|
|
|
|
Runner.prototype.settings = {
|
|
autostart: false,
|
|
countdown: false,
|
|
stopAt: null,
|
|
startAt: 0,
|
|
milliseconds: true,
|
|
format: null
|
|
};
|
|
|
|
Runner.prototype.value = function(value) {
|
|
this.items.each((function(_this) {
|
|
return function(item, element) {
|
|
var action;
|
|
item = _$(element);
|
|
action = item.is('input') ? 'val' : 'text';
|
|
item[action](_this.format(value));
|
|
};
|
|
})(this));
|
|
};
|
|
|
|
Runner.prototype.format = function(value) {
|
|
var format;
|
|
format = this.settings.format;
|
|
format = _$.isFunction(format) ? format : formatTime;
|
|
return format(value, this.settings);
|
|
};
|
|
|
|
Runner.prototype.update = function() {
|
|
var countdown, delta, settings, stopAt, time;
|
|
if (!this.updating) {
|
|
this.updating = true;
|
|
settings = this.settings;
|
|
time = _$.now();
|
|
stopAt = settings.stopAt;
|
|
countdown = settings.countdown;
|
|
delta = time - this.lastTime;
|
|
this.lastTime = time;
|
|
if (countdown) {
|
|
this.total -= delta;
|
|
} else {
|
|
this.total += delta;
|
|
}
|
|
if (stopAt !== null && ((countdown && this.total <= stopAt) || (!countdown && this.total >= stopAt))) {
|
|
this.total = stopAt;
|
|
this.finished = true;
|
|
this.stop();
|
|
this.fire('runnerFinish');
|
|
}
|
|
this.value(this.total);
|
|
this.updating = false;
|
|
}
|
|
};
|
|
|
|
Runner.prototype.fire = function(event) {
|
|
this.items.trigger(event, this.info());
|
|
};
|
|
|
|
Runner.prototype.start = function() {
|
|
var step;
|
|
if (!this.running) {
|
|
this.running = true;
|
|
if (!this.startTime || this.finished) {
|
|
this.reset();
|
|
}
|
|
this.lastTime = _$.now();
|
|
step = (function(_this) {
|
|
return function() {
|
|
if (_this.running) {
|
|
_this.update();
|
|
_requestAnimationFrame(step);
|
|
}
|
|
};
|
|
})(this);
|
|
_requestAnimationFrame(step);
|
|
this.fire('runnerStart');
|
|
}
|
|
};
|
|
|
|
Runner.prototype.stop = function() {
|
|
if (this.running) {
|
|
this.running = false;
|
|
this.update();
|
|
this.fire('runnerStop');
|
|
}
|
|
};
|
|
|
|
Runner.prototype.toggle = function() {
|
|
if (this.running) {
|
|
this.stop();
|
|
} else {
|
|
this.start();
|
|
}
|
|
};
|
|
|
|
Runner.prototype.lap = function() {
|
|
var lap, last;
|
|
last = this.lastTime;
|
|
lap = last - this.lapTime;
|
|
if (this.settings.countdown) {
|
|
lap = -lap;
|
|
}
|
|
if (this.running || lap) {
|
|
this.lastLap = lap;
|
|
this.lapTime = last;
|
|
}
|
|
last = this.format(this.lastLap);
|
|
this.fire('runnerLap');
|
|
return last;
|
|
};
|
|
|
|
Runner.prototype.reset = function(stop) {
|
|
var nowTime;
|
|
if (stop) {
|
|
this.stop();
|
|
}
|
|
nowTime = _$.now();
|
|
if (typeof this.settings.startAt === 'number' && !this.settings.countdown) {
|
|
nowTime -= this.settings.startAt;
|
|
}
|
|
this.startTime = this.lapTime = this.lastTime = nowTime;
|
|
this.total = this.settings.startAt;
|
|
this.value(this.total);
|
|
this.finished = false;
|
|
this.fire('runnerReset');
|
|
};
|
|
|
|
Runner.prototype.info = function() {
|
|
var lap;
|
|
lap = this.lastLap || 0;
|
|
return {
|
|
running: this.running,
|
|
finished: this.finished,
|
|
time: this.total,
|
|
formattedTime: this.format(this.total),
|
|
startTime: this.startTime,
|
|
lapTime: lap,
|
|
formattedLapTime: this.format(lap),
|
|
settings: this.settings
|
|
};
|
|
};
|
|
|
|
return Runner;
|
|
|
|
})();
|
|
|
|
_$.fn.runner = function(method, options, start) {
|
|
var id, runner;
|
|
if (!method) {
|
|
method = 'init';
|
|
}
|
|
if (typeof method === 'object') {
|
|
start = options;
|
|
options = method;
|
|
method = 'init';
|
|
}
|
|
id = this.data('runner');
|
|
runner = id ? runners[id] : false;
|
|
switch (method) {
|
|
case 'init':
|
|
new Runner(this, options, start);
|
|
break;
|
|
case 'info':
|
|
if (runner) {
|
|
return runner.info();
|
|
}
|
|
break;
|
|
case 'reset':
|
|
if (runner) {
|
|
runner.reset(options);
|
|
}
|
|
break;
|
|
case 'lap':
|
|
if (runner) {
|
|
return runner.lap();
|
|
}
|
|
break;
|
|
case 'start':
|
|
case 'stop':
|
|
case 'toggle':
|
|
if (runner) {
|
|
return runner[method]();
|
|
}
|
|
break;
|
|
case 'version':
|
|
return meta.version;
|
|
default:
|
|
_$.error('[' + meta.name + '] Method ' + method + ' does not exist');
|
|
}
|
|
return this;
|
|
};
|
|
|
|
_$.fn.runner.format = formatTime;
|
|
|
|
}).call(this);
|
|
|