123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935 |
- (function() {
- var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, Pace, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState,
- __slice = [].slice,
- __hasProp = {}.hasOwnProperty,
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
- defaultOptions = {
- catchupTime: 100,
- initialRate: .03,
- minTime: 250,
- ghostTime: 100,
- maxProgressPerFrame: 20,
- easeFactor: 1.25,
- startOnPageLoad: true,
- restartOnPushState: true,
- restartOnRequestAfter: 500,
- target: 'body',
- elements: {
- checkInterval: 100,
- selectors: ['body']
- },
- eventLag: {
- minSamples: 10,
- sampleCount: 3,
- lagThreshold: 3
- },
- ajax: {
- trackMethods: ['GET'],
- trackWebSockets: true,
- ignoreURLs: []
- }
- };
- now = function() {
- var _ref;
- return (_ref = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date);
- };
- requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
- cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;
- if (requestAnimationFrame == null) {
- requestAnimationFrame = function(fn) {
- return setTimeout(fn, 50);
- };
- cancelAnimationFrame = function(id) {
- return clearTimeout(id);
- };
- }
- runAnimation = function(fn) {
- var last, tick;
- last = now();
- tick = function() {
- var diff;
- diff = now() - last;
- if (diff >= 33) {
- last = now();
- return fn(diff, function() {
- return requestAnimationFrame(tick);
- });
- } else {
- return setTimeout(tick, 33 - diff);
- }
- };
- return tick();
- };
- result = function() {
- var args, key, obj;
- obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
- if (typeof obj[key] === 'function') {
- return obj[key].apply(obj, args);
- } else {
- return obj[key];
- }
- };
- extend = function() {
- var key, out, source, sources, val, _i, _len;
- out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- for (_i = 0, _len = sources.length; _i < _len; _i++) {
- source = sources[_i];
- if (source) {
- for (key in source) {
- if (!__hasProp.call(source, key)) continue;
- val = source[key];
- if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') {
- extend(out[key], val);
- } else {
- out[key] = val;
- }
- }
- }
- }
- return out;
- };
- avgAmplitude = function(arr) {
- var count, sum, v, _i, _len;
- sum = count = 0;
- for (_i = 0, _len = arr.length; _i < _len; _i++) {
- v = arr[_i];
- sum += Math.abs(v);
- count++;
- }
- return sum / count;
- };
- getFromDOM = function(key, json) {
- var data, e, el;
- if (key == null) {
- key = 'options';
- }
- if (json == null) {
- json = true;
- }
- el = document.querySelector("[data-pace-" + key + "]");
- if (!el) {
- return;
- }
- data = el.getAttribute("data-pace-" + key);
- if (!json) {
- return data;
- }
- try {
- return JSON.parse(data);
- } catch (_error) {
- e = _error;
- return typeof console !== "undefined" && console !== null ? console.error("Error parsing inline pace options", e) : void 0;
- }
- };
- Evented = (function() {
- function Evented() {}
- Evented.prototype.on = function(event, handler, ctx, once) {
- var _base;
- if (once == null) {
- once = false;
- }
- if (this.bindings == null) {
- this.bindings = {};
- }
- if ((_base = this.bindings)[event] == null) {
- _base[event] = [];
- }
- return this.bindings[event].push({
- handler: handler,
- ctx: ctx,
- once: once
- });
- };
- Evented.prototype.once = function(event, handler, ctx) {
- return this.on(event, handler, ctx, true);
- };
- Evented.prototype.off = function(event, handler) {
- var i, _ref, _results;
- if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {
- return;
- }
- if (handler == null) {
- return delete this.bindings[event];
- } else {
- i = 0;
- _results = [];
- while (i < this.bindings[event].length) {
- if (this.bindings[event][i].handler === handler) {
- _results.push(this.bindings[event].splice(i, 1));
- } else {
- _results.push(i++);
- }
- }
- return _results;
- }
- };
- Evented.prototype.trigger = function() {
- var args, ctx, event, handler, i, once, _ref, _ref1, _results;
- event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- if ((_ref = this.bindings) != null ? _ref[event] : void 0) {
- i = 0;
- _results = [];
- while (i < this.bindings[event].length) {
- _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;
- handler.apply(ctx != null ? ctx : this, args);
- if (once) {
- _results.push(this.bindings[event].splice(i, 1));
- } else {
- _results.push(i++);
- }
- }
- return _results;
- }
- };
- return Evented;
- })();
- Pace = window.Pace || {};
- window.Pace = Pace;
- extend(Pace, Evented.prototype);
- options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM());
- _ref = ['ajax', 'document', 'eventLag', 'elements'];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- source = _ref[_i];
- if (options[source] === true) {
- options[source] = defaultOptions[source];
- }
- }
- NoTargetError = (function(_super) {
- __extends(NoTargetError, _super);
- function NoTargetError() {
- _ref1 = NoTargetError.__super__.constructor.apply(this, arguments);
- return _ref1;
- }
- return NoTargetError;
- })(Error);
- Bar = (function() {
- function Bar() {
- this.progress = 0;
- }
- Bar.prototype.getElement = function() {
- var targetElement;
- if (this.el == null) {
- targetElement = document.querySelector(options.target);
- if (!targetElement) {
- throw new NoTargetError;
- }
- this.el = document.createElement('div');
- this.el.className = "pace pace-active";
- document.body.className = document.body.className.replace(/pace-done/g, '');
- document.body.className += ' pace-running';
- this.el.innerHTML = '<div class="pace-progress">\n <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>';
- if (targetElement.firstChild != null) {
- targetElement.insertBefore(this.el, targetElement.firstChild);
- } else {
- targetElement.appendChild(this.el);
- }
- }
- return this.el;
- };
- Bar.prototype.finish = function() {
- var el;
- el = this.getElement();
- el.className = el.className.replace('pace-active', '');
- el.className += ' pace-inactive';
- document.body.className = document.body.className.replace('pace-running', '');
- return document.body.className += ' pace-done';
- };
- Bar.prototype.update = function(prog) {
- this.progress = prog;
- return this.render();
- };
- Bar.prototype.destroy = function() {
- try {
- this.getElement().parentNode.removeChild(this.getElement());
- } catch (_error) {
- NoTargetError = _error;
- }
- return this.el = void 0;
- };
- Bar.prototype.render = function() {
- var el, key, progressStr, transform, _j, _len1, _ref2;
- if (document.querySelector(options.target) == null) {
- return false;
- }
- el = this.getElement();
- transform = "translate3d(" + this.progress + "%, 0, 0)";
- _ref2 = ['webkitTransform', 'msTransform', 'transform'];
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- key = _ref2[_j];
- el.children[0].style[key] = transform;
- }
- if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {
- el.children[0].setAttribute('data-progress-text', "" + (this.progress | 0) + "%");
- if (this.progress >= 100) {
- progressStr = '99';
- } else {
- progressStr = this.progress < 10 ? "0" : "";
- progressStr += this.progress | 0;
- }
- el.children[0].setAttribute('data-progress', "" + progressStr);
- }
- return this.lastRenderedProgress = this.progress;
- };
- Bar.prototype.done = function() {
- return this.progress >= 100;
- };
- return Bar;
- })();
- Events = (function() {
- function Events() {
- this.bindings = {};
- }
- Events.prototype.trigger = function(name, val) {
- var binding, _j, _len1, _ref2, _results;
- if (this.bindings[name] != null) {
- _ref2 = this.bindings[name];
- _results = [];
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- binding = _ref2[_j];
- _results.push(binding.call(this, val));
- }
- return _results;
- }
- };
- Events.prototype.on = function(name, fn) {
- var _base;
- if ((_base = this.bindings)[name] == null) {
- _base[name] = [];
- }
- return this.bindings[name].push(fn);
- };
- return Events;
- })();
- _XMLHttpRequest = window.XMLHttpRequest;
- _XDomainRequest = window.XDomainRequest;
- _WebSocket = window.WebSocket;
- extendNative = function(to, from) {
- var e, key, _results;
- _results = [];
- for (key in from.prototype) {
- try {
- if ((to[key] == null) && typeof from[key] !== 'function') {
- if (typeof Object.defineProperty === 'function') {
- _results.push(Object.defineProperty(to, key, {
- get: function() {
- return from.prototype[key];
- },
- configurable: true,
- enumerable: true
- }));
- } else {
- _results.push(to[key] = from.prototype[key]);
- }
- } else {
- _results.push(void 0);
- }
- } catch (_error) {
- e = _error;
- }
- }
- return _results;
- };
- ignoreStack = [];
- Pace.ignore = function() {
- var args, fn, ret;
- fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- ignoreStack.unshift('ignore');
- ret = fn.apply(null, args);
- ignoreStack.shift();
- return ret;
- };
- Pace.track = function() {
- var args, fn, ret;
- fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- ignoreStack.unshift('track');
- ret = fn.apply(null, args);
- ignoreStack.shift();
- return ret;
- };
- shouldTrack = function(method) {
- var _ref2;
- if (method == null) {
- method = 'GET';
- }
- if (ignoreStack[0] === 'track') {
- return 'force';
- }
- if (!ignoreStack.length && options.ajax) {
- if (method === 'socket' && options.ajax.trackWebSockets) {
- return true;
- } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {
- return true;
- }
- }
- return false;
- };
- RequestIntercept = (function(_super) {
- __extends(RequestIntercept, _super);
- function RequestIntercept() {
- var monitorXHR,
- _this = this;
- RequestIntercept.__super__.constructor.apply(this, arguments);
- monitorXHR = function(req) {
- var _open;
- _open = req.open;
- return req.open = function(type, url, async) {
- if (shouldTrack(type)) {
- _this.trigger('request', {
- type: type,
- url: url,
- request: req
- });
- }
- return _open.apply(req, arguments);
- };
- };
- window.XMLHttpRequest = function(flags) {
- var req;
- req = new _XMLHttpRequest(flags);
- monitorXHR(req);
- return req;
- };
- try {
- extendNative(window.XMLHttpRequest, _XMLHttpRequest);
- } catch (_error) {}
- if (_XDomainRequest != null) {
- window.XDomainRequest = function() {
- var req;
- req = new _XDomainRequest;
- monitorXHR(req);
- return req;
- };
- try {
- extendNative(window.XDomainRequest, _XDomainRequest);
- } catch (_error) {}
- }
- if ((_WebSocket != null) && options.ajax.trackWebSockets) {
- window.WebSocket = function(url, protocols) {
- var req;
- if (protocols != null) {
- req = new _WebSocket(url, protocols);
- } else {
- req = new _WebSocket(url);
- }
- if (shouldTrack('socket')) {
- _this.trigger('request', {
- type: 'socket',
- url: url,
- protocols: protocols,
- request: req
- });
- }
- return req;
- };
- try {
- extendNative(window.WebSocket, _WebSocket);
- } catch (_error) {}
- }
- }
- return RequestIntercept;
- })(Events);
- _intercept = null;
- getIntercept = function() {
- if (_intercept == null) {
- _intercept = new RequestIntercept;
- }
- return _intercept;
- };
- shouldIgnoreURL = function(url) {
- var pattern, _j, _len1, _ref2;
- _ref2 = options.ajax.ignoreURLs;
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- pattern = _ref2[_j];
- if (typeof pattern === 'string') {
- if (url.indexOf(pattern) !== -1) {
- return true;
- }
- } else {
- if (pattern.test(url)) {
- return true;
- }
- }
- }
- return false;
- };
- getIntercept().on('request', function(_arg) {
- var after, args, request, type, url;
- type = _arg.type, request = _arg.request, url = _arg.url;
- if (shouldIgnoreURL(url)) {
- return;
- }
- if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {
- args = arguments;
- after = options.restartOnRequestAfter || 0;
- if (typeof after === 'boolean') {
- after = 0;
- }
- return setTimeout(function() {
- var stillActive, _j, _len1, _ref2, _ref3, _results;
- if (type === 'socket') {
- stillActive = request.readyState < 2;
- } else {
- stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);
- }
- if (stillActive) {
- Pace.restart();
- _ref3 = Pace.sources;
- _results = [];
- for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
- source = _ref3[_j];
- if (source instanceof AjaxMonitor) {
- source.watch.apply(source, args);
- break;
- } else {
- _results.push(void 0);
- }
- }
- return _results;
- }
- }, after);
- }
- });
- AjaxMonitor = (function() {
- function AjaxMonitor() {
- var _this = this;
- this.elements = [];
- getIntercept().on('request', function() {
- return _this.watch.apply(_this, arguments);
- });
- }
- AjaxMonitor.prototype.watch = function(_arg) {
- var request, tracker, type, url;
- type = _arg.type, request = _arg.request, url = _arg.url;
- if (shouldIgnoreURL(url)) {
- return;
- }
- if (type === 'socket') {
- tracker = new SocketRequestTracker(request);
- } else {
- tracker = new XHRRequestTracker(request);
- }
- return this.elements.push(tracker);
- };
- return AjaxMonitor;
- })();
- XHRRequestTracker = (function() {
- function XHRRequestTracker(request) {
- var event, size, _j, _len1, _onreadystatechange, _ref2,
- _this = this;
- this.progress = 0;
- if (window.ProgressEvent != null) {
- size = null;
- request.addEventListener('progress', function(evt) {
- if (evt.lengthComputable) {
- return _this.progress = 100 * evt.loaded / evt.total;
- } else {
- return _this.progress = _this.progress + (100 - _this.progress) / 2;
- }
- }, false);
- _ref2 = ['load', 'abort', 'timeout', 'error'];
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- event = _ref2[_j];
- request.addEventListener(event, function() {
- return _this.progress = 100;
- }, false);
- }
- } else {
- _onreadystatechange = request.onreadystatechange;
- request.onreadystatechange = function() {
- var _ref3;
- if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {
- _this.progress = 100;
- } else if (request.readyState === 3) {
- _this.progress = 50;
- }
- return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
- };
- }
- }
- return XHRRequestTracker;
- })();
- SocketRequestTracker = (function() {
- function SocketRequestTracker(request) {
- var event, _j, _len1, _ref2,
- _this = this;
- this.progress = 0;
- _ref2 = ['error', 'open'];
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- event = _ref2[_j];
- request.addEventListener(event, function() {
- return _this.progress = 100;
- }, false);
- }
- }
- return SocketRequestTracker;
- })();
- ElementMonitor = (function() {
- function ElementMonitor(options) {
- var selector, _j, _len1, _ref2;
- if (options == null) {
- options = {};
- }
- this.elements = [];
- if (options.selectors == null) {
- options.selectors = [];
- }
- _ref2 = options.selectors;
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- selector = _ref2[_j];
- this.elements.push(new ElementTracker(selector));
- }
- }
- return ElementMonitor;
- })();
- ElementTracker = (function() {
- function ElementTracker(selector) {
- this.selector = selector;
- this.progress = 0;
- this.check();
- }
- ElementTracker.prototype.check = function() {
- var _this = this;
- if (document.querySelector(this.selector)) {
- return this.done();
- } else {
- return setTimeout((function() {
- return _this.check();
- }), options.elements.checkInterval);
- }
- };
- ElementTracker.prototype.done = function() {
- return this.progress = 100;
- };
- return ElementTracker;
- })();
- DocumentMonitor = (function() {
- DocumentMonitor.prototype.states = {
- loading: 0,
- interactive: 50,
- complete: 100
- };
- function DocumentMonitor() {
- var _onreadystatechange, _ref2,
- _this = this;
- this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;
- _onreadystatechange = document.onreadystatechange;
- document.onreadystatechange = function() {
- if (_this.states[document.readyState] != null) {
- _this.progress = _this.states[document.readyState];
- }
- return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
- };
- }
- return DocumentMonitor;
- })();
- EventLagMonitor = (function() {
- function EventLagMonitor() {
- var avg, interval, last, points, samples,
- _this = this;
- this.progress = 0;
- avg = 0;
- samples = [];
- points = 0;
- last = now();
- interval = setInterval(function() {
- var diff;
- diff = now() - last - 50;
- last = now();
- samples.push(diff);
- if (samples.length > options.eventLag.sampleCount) {
- samples.shift();
- }
- avg = avgAmplitude(samples);
- if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {
- _this.progress = 100;
- return clearInterval(interval);
- } else {
- return _this.progress = 100 * (3 / (avg + 3));
- }
- }, 50);
- }
- return EventLagMonitor;
- })();
- Scaler = (function() {
- function Scaler(source) {
- this.source = source;
- this.last = this.sinceLastUpdate = 0;
- this.rate = options.initialRate;
- this.catchup = 0;
- this.progress = this.lastProgress = 0;
- if (this.source != null) {
- this.progress = result(this.source, 'progress');
- }
- }
- Scaler.prototype.tick = function(frameTime, val) {
- var scaling;
- if (val == null) {
- val = result(this.source, 'progress');
- }
- if (val >= 100) {
- this.done = true;
- }
- if (val === this.last) {
- this.sinceLastUpdate += frameTime;
- } else {
- if (this.sinceLastUpdate) {
- this.rate = (val - this.last) / this.sinceLastUpdate;
- }
- this.catchup = (val - this.progress) / options.catchupTime;
- this.sinceLastUpdate = 0;
- this.last = val;
- }
- if (val > this.progress) {
- this.progress += this.catchup * frameTime;
- }
- scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);
- this.progress += scaling * this.rate * frameTime;
- this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);
- this.progress = Math.max(0, this.progress);
- this.progress = Math.min(100, this.progress);
- this.lastProgress = this.progress;
- return this.progress;
- };
- return Scaler;
- })();
- sources = null;
- scalers = null;
- bar = null;
- uniScaler = null;
- animation = null;
- cancelAnimation = null;
- Pace.running = false;
- handlePushState = function() {
- if (options.restartOnPushState) {
- return Pace.restart();
- }
- };
- if (window.history.pushState != null) {
- _pushState = window.history.pushState;
- window.history.pushState = function() {
- handlePushState();
- return _pushState.apply(window.history, arguments);
- };
- }
- if (window.history.replaceState != null) {
- _replaceState = window.history.replaceState;
- window.history.replaceState = function() {
- handlePushState();
- return _replaceState.apply(window.history, arguments);
- };
- }
- SOURCE_KEYS = {
- ajax: AjaxMonitor,
- elements: ElementMonitor,
- document: DocumentMonitor,
- eventLag: EventLagMonitor
- };
- (init = function() {
- var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;
- Pace.sources = sources = [];
- _ref2 = ['ajax', 'elements', 'document', 'eventLag'];
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
- type = _ref2[_j];
- if (options[type] !== false) {
- sources.push(new SOURCE_KEYS[type](options[type]));
- }
- }
- _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];
- for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
- source = _ref4[_k];
- sources.push(new source(options));
- }
- Pace.bar = bar = new Bar;
- scalers = [];
- return uniScaler = new Scaler;
- })();
- Pace.stop = function() {
- Pace.trigger('stop');
- Pace.running = false;
- bar.destroy();
- cancelAnimation = true;
- if (animation != null) {
- if (typeof cancelAnimationFrame === "function") {
- cancelAnimationFrame(animation);
- }
- animation = null;
- }
- return init();
- };
- Pace.restart = function() {
- Pace.trigger('restart');
- Pace.stop();
- return Pace.start();
- };
- Pace.go = function() {
- var start;
- Pace.running = true;
- bar.render();
- start = now();
- cancelAnimation = false;
- return animation = runAnimation(function(frameTime, enqueueNextFrame) {
- var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;
- remaining = 100 - bar.progress;
- count = sum = 0;
- done = true;
- for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {
- source = sources[i];
- scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];
- elements = (_ref2 = source.elements) != null ? _ref2 : [source];
- for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {
- element = elements[j];
- scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);
- done &= scaler.done;
- if (scaler.done) {
- continue;
- }
- count++;
- sum += scaler.tick(frameTime);
- }
- }
- avg = sum / count;
- bar.update(uniScaler.tick(frameTime, avg));
- if (bar.done() || done || cancelAnimation) {
- bar.update(100);
- Pace.trigger('done');
- return setTimeout(function() {
- bar.finish();
- Pace.running = false;
- return Pace.trigger('hide');
- }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));
- } else {
- return enqueueNextFrame();
- }
- });
- };
- Pace.start = function(_options) {
- extend(options, _options);
- Pace.running = true;
- try {
- bar.render();
- } catch (_error) {
- NoTargetError = _error;
- }
- if (!document.querySelector('.pace')) {
- return setTimeout(Pace.start, 50);
- } else {
- Pace.trigger('start');
- return Pace.go();
- }
- };
- if (typeof define === 'function' && define.amd) {
- define(['pace'], function() {
- return Pace;
- });
- } else if (typeof exports === 'object') {
- module.exports = Pace;
- } else {
- if (options.startOnPageLoad) {
- Pace.start();
- }
- }
- }).call(this);
|