]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/static/AdminLTE-2.3.7/plugins/pace/pace.js
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / pybind / mgr / dashboard / static / AdminLTE-2.3.7 / plugins / pace / pace.js
1 (function() {
2 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,
3 __slice = [].slice,
4 __hasProp = {}.hasOwnProperty,
5 __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; },
6 __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; };
7
8 defaultOptions = {
9 catchupTime: 100,
10 initialRate: .03,
11 minTime: 250,
12 ghostTime: 100,
13 maxProgressPerFrame: 20,
14 easeFactor: 1.25,
15 startOnPageLoad: true,
16 restartOnPushState: true,
17 restartOnRequestAfter: 500,
18 target: 'body',
19 elements: {
20 checkInterval: 100,
21 selectors: ['body']
22 },
23 eventLag: {
24 minSamples: 10,
25 sampleCount: 3,
26 lagThreshold: 3
27 },
28 ajax: {
29 trackMethods: ['GET'],
30 trackWebSockets: true,
31 ignoreURLs: []
32 }
33 };
34
35 now = function() {
36 var _ref;
37 return (_ref = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date);
38 };
39
40 requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
41
42 cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;
43
44 if (requestAnimationFrame == null) {
45 requestAnimationFrame = function(fn) {
46 return setTimeout(fn, 50);
47 };
48 cancelAnimationFrame = function(id) {
49 return clearTimeout(id);
50 };
51 }
52
53 runAnimation = function(fn) {
54 var last, tick;
55 last = now();
56 tick = function() {
57 var diff;
58 diff = now() - last;
59 if (diff >= 33) {
60 last = now();
61 return fn(diff, function() {
62 return requestAnimationFrame(tick);
63 });
64 } else {
65 return setTimeout(tick, 33 - diff);
66 }
67 };
68 return tick();
69 };
70
71 result = function() {
72 var args, key, obj;
73 obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
74 if (typeof obj[key] === 'function') {
75 return obj[key].apply(obj, args);
76 } else {
77 return obj[key];
78 }
79 };
80
81 extend = function() {
82 var key, out, source, sources, val, _i, _len;
83 out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
84 for (_i = 0, _len = sources.length; _i < _len; _i++) {
85 source = sources[_i];
86 if (source) {
87 for (key in source) {
88 if (!__hasProp.call(source, key)) continue;
89 val = source[key];
90 if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') {
91 extend(out[key], val);
92 } else {
93 out[key] = val;
94 }
95 }
96 }
97 }
98 return out;
99 };
100
101 avgAmplitude = function(arr) {
102 var count, sum, v, _i, _len;
103 sum = count = 0;
104 for (_i = 0, _len = arr.length; _i < _len; _i++) {
105 v = arr[_i];
106 sum += Math.abs(v);
107 count++;
108 }
109 return sum / count;
110 };
111
112 getFromDOM = function(key, json) {
113 var data, e, el;
114 if (key == null) {
115 key = 'options';
116 }
117 if (json == null) {
118 json = true;
119 }
120 el = document.querySelector("[data-pace-" + key + "]");
121 if (!el) {
122 return;
123 }
124 data = el.getAttribute("data-pace-" + key);
125 if (!json) {
126 return data;
127 }
128 try {
129 return JSON.parse(data);
130 } catch (_error) {
131 e = _error;
132 return typeof console !== "undefined" && console !== null ? console.error("Error parsing inline pace options", e) : void 0;
133 }
134 };
135
136 Evented = (function() {
137 function Evented() {}
138
139 Evented.prototype.on = function(event, handler, ctx, once) {
140 var _base;
141 if (once == null) {
142 once = false;
143 }
144 if (this.bindings == null) {
145 this.bindings = {};
146 }
147 if ((_base = this.bindings)[event] == null) {
148 _base[event] = [];
149 }
150 return this.bindings[event].push({
151 handler: handler,
152 ctx: ctx,
153 once: once
154 });
155 };
156
157 Evented.prototype.once = function(event, handler, ctx) {
158 return this.on(event, handler, ctx, true);
159 };
160
161 Evented.prototype.off = function(event, handler) {
162 var i, _ref, _results;
163 if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {
164 return;
165 }
166 if (handler == null) {
167 return delete this.bindings[event];
168 } else {
169 i = 0;
170 _results = [];
171 while (i < this.bindings[event].length) {
172 if (this.bindings[event][i].handler === handler) {
173 _results.push(this.bindings[event].splice(i, 1));
174 } else {
175 _results.push(i++);
176 }
177 }
178 return _results;
179 }
180 };
181
182 Evented.prototype.trigger = function() {
183 var args, ctx, event, handler, i, once, _ref, _ref1, _results;
184 event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
185 if ((_ref = this.bindings) != null ? _ref[event] : void 0) {
186 i = 0;
187 _results = [];
188 while (i < this.bindings[event].length) {
189 _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;
190 handler.apply(ctx != null ? ctx : this, args);
191 if (once) {
192 _results.push(this.bindings[event].splice(i, 1));
193 } else {
194 _results.push(i++);
195 }
196 }
197 return _results;
198 }
199 };
200
201 return Evented;
202
203 })();
204
205 Pace = window.Pace || {};
206
207 window.Pace = Pace;
208
209 extend(Pace, Evented.prototype);
210
211 options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM());
212
213 _ref = ['ajax', 'document', 'eventLag', 'elements'];
214 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
215 source = _ref[_i];
216 if (options[source] === true) {
217 options[source] = defaultOptions[source];
218 }
219 }
220
221 NoTargetError = (function(_super) {
222 __extends(NoTargetError, _super);
223
224 function NoTargetError() {
225 _ref1 = NoTargetError.__super__.constructor.apply(this, arguments);
226 return _ref1;
227 }
228
229 return NoTargetError;
230
231 })(Error);
232
233 Bar = (function() {
234 function Bar() {
235 this.progress = 0;
236 }
237
238 Bar.prototype.getElement = function() {
239 var targetElement;
240 if (this.el == null) {
241 targetElement = document.querySelector(options.target);
242 if (!targetElement) {
243 throw new NoTargetError;
244 }
245 this.el = document.createElement('div');
246 this.el.className = "pace pace-active";
247 document.body.className = document.body.className.replace(/pace-done/g, '');
248 document.body.className += ' pace-running';
249 this.el.innerHTML = '<div class="pace-progress">\n <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>';
250 if (targetElement.firstChild != null) {
251 targetElement.insertBefore(this.el, targetElement.firstChild);
252 } else {
253 targetElement.appendChild(this.el);
254 }
255 }
256 return this.el;
257 };
258
259 Bar.prototype.finish = function() {
260 var el;
261 el = this.getElement();
262 el.className = el.className.replace('pace-active', '');
263 el.className += ' pace-inactive';
264 document.body.className = document.body.className.replace('pace-running', '');
265 return document.body.className += ' pace-done';
266 };
267
268 Bar.prototype.update = function(prog) {
269 this.progress = prog;
270 return this.render();
271 };
272
273 Bar.prototype.destroy = function() {
274 try {
275 this.getElement().parentNode.removeChild(this.getElement());
276 } catch (_error) {
277 NoTargetError = _error;
278 }
279 return this.el = void 0;
280 };
281
282 Bar.prototype.render = function() {
283 var el, key, progressStr, transform, _j, _len1, _ref2;
284 if (document.querySelector(options.target) == null) {
285 return false;
286 }
287 el = this.getElement();
288 transform = "translate3d(" + this.progress + "%, 0, 0)";
289 _ref2 = ['webkitTransform', 'msTransform', 'transform'];
290 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
291 key = _ref2[_j];
292 el.children[0].style[key] = transform;
293 }
294 if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {
295 el.children[0].setAttribute('data-progress-text', "" + (this.progress | 0) + "%");
296 if (this.progress >= 100) {
297 progressStr = '99';
298 } else {
299 progressStr = this.progress < 10 ? "0" : "";
300 progressStr += this.progress | 0;
301 }
302 el.children[0].setAttribute('data-progress', "" + progressStr);
303 }
304 return this.lastRenderedProgress = this.progress;
305 };
306
307 Bar.prototype.done = function() {
308 return this.progress >= 100;
309 };
310
311 return Bar;
312
313 })();
314
315 Events = (function() {
316 function Events() {
317 this.bindings = {};
318 }
319
320 Events.prototype.trigger = function(name, val) {
321 var binding, _j, _len1, _ref2, _results;
322 if (this.bindings[name] != null) {
323 _ref2 = this.bindings[name];
324 _results = [];
325 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
326 binding = _ref2[_j];
327 _results.push(binding.call(this, val));
328 }
329 return _results;
330 }
331 };
332
333 Events.prototype.on = function(name, fn) {
334 var _base;
335 if ((_base = this.bindings)[name] == null) {
336 _base[name] = [];
337 }
338 return this.bindings[name].push(fn);
339 };
340
341 return Events;
342
343 })();
344
345 _XMLHttpRequest = window.XMLHttpRequest;
346
347 _XDomainRequest = window.XDomainRequest;
348
349 _WebSocket = window.WebSocket;
350
351 extendNative = function(to, from) {
352 var e, key, _results;
353 _results = [];
354 for (key in from.prototype) {
355 try {
356 if ((to[key] == null) && typeof from[key] !== 'function') {
357 if (typeof Object.defineProperty === 'function') {
358 _results.push(Object.defineProperty(to, key, {
359 get: function() {
360 return from.prototype[key];
361 },
362 configurable: true,
363 enumerable: true
364 }));
365 } else {
366 _results.push(to[key] = from.prototype[key]);
367 }
368 } else {
369 _results.push(void 0);
370 }
371 } catch (_error) {
372 e = _error;
373 }
374 }
375 return _results;
376 };
377
378 ignoreStack = [];
379
380 Pace.ignore = function() {
381 var args, fn, ret;
382 fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
383 ignoreStack.unshift('ignore');
384 ret = fn.apply(null, args);
385 ignoreStack.shift();
386 return ret;
387 };
388
389 Pace.track = function() {
390 var args, fn, ret;
391 fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
392 ignoreStack.unshift('track');
393 ret = fn.apply(null, args);
394 ignoreStack.shift();
395 return ret;
396 };
397
398 shouldTrack = function(method) {
399 var _ref2;
400 if (method == null) {
401 method = 'GET';
402 }
403 if (ignoreStack[0] === 'track') {
404 return 'force';
405 }
406 if (!ignoreStack.length && options.ajax) {
407 if (method === 'socket' && options.ajax.trackWebSockets) {
408 return true;
409 } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {
410 return true;
411 }
412 }
413 return false;
414 };
415
416 RequestIntercept = (function(_super) {
417 __extends(RequestIntercept, _super);
418
419 function RequestIntercept() {
420 var monitorXHR,
421 _this = this;
422 RequestIntercept.__super__.constructor.apply(this, arguments);
423 monitorXHR = function(req) {
424 var _open;
425 _open = req.open;
426 return req.open = function(type, url, async) {
427 if (shouldTrack(type)) {
428 _this.trigger('request', {
429 type: type,
430 url: url,
431 request: req
432 });
433 }
434 return _open.apply(req, arguments);
435 };
436 };
437 window.XMLHttpRequest = function(flags) {
438 var req;
439 req = new _XMLHttpRequest(flags);
440 monitorXHR(req);
441 return req;
442 };
443 try {
444 extendNative(window.XMLHttpRequest, _XMLHttpRequest);
445 } catch (_error) {}
446 if (_XDomainRequest != null) {
447 window.XDomainRequest = function() {
448 var req;
449 req = new _XDomainRequest;
450 monitorXHR(req);
451 return req;
452 };
453 try {
454 extendNative(window.XDomainRequest, _XDomainRequest);
455 } catch (_error) {}
456 }
457 if ((_WebSocket != null) && options.ajax.trackWebSockets) {
458 window.WebSocket = function(url, protocols) {
459 var req;
460 if (protocols != null) {
461 req = new _WebSocket(url, protocols);
462 } else {
463 req = new _WebSocket(url);
464 }
465 if (shouldTrack('socket')) {
466 _this.trigger('request', {
467 type: 'socket',
468 url: url,
469 protocols: protocols,
470 request: req
471 });
472 }
473 return req;
474 };
475 try {
476 extendNative(window.WebSocket, _WebSocket);
477 } catch (_error) {}
478 }
479 }
480
481 return RequestIntercept;
482
483 })(Events);
484
485 _intercept = null;
486
487 getIntercept = function() {
488 if (_intercept == null) {
489 _intercept = new RequestIntercept;
490 }
491 return _intercept;
492 };
493
494 shouldIgnoreURL = function(url) {
495 var pattern, _j, _len1, _ref2;
496 _ref2 = options.ajax.ignoreURLs;
497 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
498 pattern = _ref2[_j];
499 if (typeof pattern === 'string') {
500 if (url.indexOf(pattern) !== -1) {
501 return true;
502 }
503 } else {
504 if (pattern.test(url)) {
505 return true;
506 }
507 }
508 }
509 return false;
510 };
511
512 getIntercept().on('request', function(_arg) {
513 var after, args, request, type, url;
514 type = _arg.type, request = _arg.request, url = _arg.url;
515 if (shouldIgnoreURL(url)) {
516 return;
517 }
518 if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {
519 args = arguments;
520 after = options.restartOnRequestAfter || 0;
521 if (typeof after === 'boolean') {
522 after = 0;
523 }
524 return setTimeout(function() {
525 var stillActive, _j, _len1, _ref2, _ref3, _results;
526 if (type === 'socket') {
527 stillActive = request.readyState < 2;
528 } else {
529 stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);
530 }
531 if (stillActive) {
532 Pace.restart();
533 _ref3 = Pace.sources;
534 _results = [];
535 for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
536 source = _ref3[_j];
537 if (source instanceof AjaxMonitor) {
538 source.watch.apply(source, args);
539 break;
540 } else {
541 _results.push(void 0);
542 }
543 }
544 return _results;
545 }
546 }, after);
547 }
548 });
549
550 AjaxMonitor = (function() {
551 function AjaxMonitor() {
552 var _this = this;
553 this.elements = [];
554 getIntercept().on('request', function() {
555 return _this.watch.apply(_this, arguments);
556 });
557 }
558
559 AjaxMonitor.prototype.watch = function(_arg) {
560 var request, tracker, type, url;
561 type = _arg.type, request = _arg.request, url = _arg.url;
562 if (shouldIgnoreURL(url)) {
563 return;
564 }
565 if (type === 'socket') {
566 tracker = new SocketRequestTracker(request);
567 } else {
568 tracker = new XHRRequestTracker(request);
569 }
570 return this.elements.push(tracker);
571 };
572
573 return AjaxMonitor;
574
575 })();
576
577 XHRRequestTracker = (function() {
578 function XHRRequestTracker(request) {
579 var event, size, _j, _len1, _onreadystatechange, _ref2,
580 _this = this;
581 this.progress = 0;
582 if (window.ProgressEvent != null) {
583 size = null;
584 request.addEventListener('progress', function(evt) {
585 if (evt.lengthComputable) {
586 return _this.progress = 100 * evt.loaded / evt.total;
587 } else {
588 return _this.progress = _this.progress + (100 - _this.progress) / 2;
589 }
590 }, false);
591 _ref2 = ['load', 'abort', 'timeout', 'error'];
592 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
593 event = _ref2[_j];
594 request.addEventListener(event, function() {
595 return _this.progress = 100;
596 }, false);
597 }
598 } else {
599 _onreadystatechange = request.onreadystatechange;
600 request.onreadystatechange = function() {
601 var _ref3;
602 if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {
603 _this.progress = 100;
604 } else if (request.readyState === 3) {
605 _this.progress = 50;
606 }
607 return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
608 };
609 }
610 }
611
612 return XHRRequestTracker;
613
614 })();
615
616 SocketRequestTracker = (function() {
617 function SocketRequestTracker(request) {
618 var event, _j, _len1, _ref2,
619 _this = this;
620 this.progress = 0;
621 _ref2 = ['error', 'open'];
622 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
623 event = _ref2[_j];
624 request.addEventListener(event, function() {
625 return _this.progress = 100;
626 }, false);
627 }
628 }
629
630 return SocketRequestTracker;
631
632 })();
633
634 ElementMonitor = (function() {
635 function ElementMonitor(options) {
636 var selector, _j, _len1, _ref2;
637 if (options == null) {
638 options = {};
639 }
640 this.elements = [];
641 if (options.selectors == null) {
642 options.selectors = [];
643 }
644 _ref2 = options.selectors;
645 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
646 selector = _ref2[_j];
647 this.elements.push(new ElementTracker(selector));
648 }
649 }
650
651 return ElementMonitor;
652
653 })();
654
655 ElementTracker = (function() {
656 function ElementTracker(selector) {
657 this.selector = selector;
658 this.progress = 0;
659 this.check();
660 }
661
662 ElementTracker.prototype.check = function() {
663 var _this = this;
664 if (document.querySelector(this.selector)) {
665 return this.done();
666 } else {
667 return setTimeout((function() {
668 return _this.check();
669 }), options.elements.checkInterval);
670 }
671 };
672
673 ElementTracker.prototype.done = function() {
674 return this.progress = 100;
675 };
676
677 return ElementTracker;
678
679 })();
680
681 DocumentMonitor = (function() {
682 DocumentMonitor.prototype.states = {
683 loading: 0,
684 interactive: 50,
685 complete: 100
686 };
687
688 function DocumentMonitor() {
689 var _onreadystatechange, _ref2,
690 _this = this;
691 this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;
692 _onreadystatechange = document.onreadystatechange;
693 document.onreadystatechange = function() {
694 if (_this.states[document.readyState] != null) {
695 _this.progress = _this.states[document.readyState];
696 }
697 return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
698 };
699 }
700
701 return DocumentMonitor;
702
703 })();
704
705 EventLagMonitor = (function() {
706 function EventLagMonitor() {
707 var avg, interval, last, points, samples,
708 _this = this;
709 this.progress = 0;
710 avg = 0;
711 samples = [];
712 points = 0;
713 last = now();
714 interval = setInterval(function() {
715 var diff;
716 diff = now() - last - 50;
717 last = now();
718 samples.push(diff);
719 if (samples.length > options.eventLag.sampleCount) {
720 samples.shift();
721 }
722 avg = avgAmplitude(samples);
723 if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {
724 _this.progress = 100;
725 return clearInterval(interval);
726 } else {
727 return _this.progress = 100 * (3 / (avg + 3));
728 }
729 }, 50);
730 }
731
732 return EventLagMonitor;
733
734 })();
735
736 Scaler = (function() {
737 function Scaler(source) {
738 this.source = source;
739 this.last = this.sinceLastUpdate = 0;
740 this.rate = options.initialRate;
741 this.catchup = 0;
742 this.progress = this.lastProgress = 0;
743 if (this.source != null) {
744 this.progress = result(this.source, 'progress');
745 }
746 }
747
748 Scaler.prototype.tick = function(frameTime, val) {
749 var scaling;
750 if (val == null) {
751 val = result(this.source, 'progress');
752 }
753 if (val >= 100) {
754 this.done = true;
755 }
756 if (val === this.last) {
757 this.sinceLastUpdate += frameTime;
758 } else {
759 if (this.sinceLastUpdate) {
760 this.rate = (val - this.last) / this.sinceLastUpdate;
761 }
762 this.catchup = (val - this.progress) / options.catchupTime;
763 this.sinceLastUpdate = 0;
764 this.last = val;
765 }
766 if (val > this.progress) {
767 this.progress += this.catchup * frameTime;
768 }
769 scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);
770 this.progress += scaling * this.rate * frameTime;
771 this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);
772 this.progress = Math.max(0, this.progress);
773 this.progress = Math.min(100, this.progress);
774 this.lastProgress = this.progress;
775 return this.progress;
776 };
777
778 return Scaler;
779
780 })();
781
782 sources = null;
783
784 scalers = null;
785
786 bar = null;
787
788 uniScaler = null;
789
790 animation = null;
791
792 cancelAnimation = null;
793
794 Pace.running = false;
795
796 handlePushState = function() {
797 if (options.restartOnPushState) {
798 return Pace.restart();
799 }
800 };
801
802 if (window.history.pushState != null) {
803 _pushState = window.history.pushState;
804 window.history.pushState = function() {
805 handlePushState();
806 return _pushState.apply(window.history, arguments);
807 };
808 }
809
810 if (window.history.replaceState != null) {
811 _replaceState = window.history.replaceState;
812 window.history.replaceState = function() {
813 handlePushState();
814 return _replaceState.apply(window.history, arguments);
815 };
816 }
817
818 SOURCE_KEYS = {
819 ajax: AjaxMonitor,
820 elements: ElementMonitor,
821 document: DocumentMonitor,
822 eventLag: EventLagMonitor
823 };
824
825 (init = function() {
826 var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;
827 Pace.sources = sources = [];
828 _ref2 = ['ajax', 'elements', 'document', 'eventLag'];
829 for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
830 type = _ref2[_j];
831 if (options[type] !== false) {
832 sources.push(new SOURCE_KEYS[type](options[type]));
833 }
834 }
835 _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];
836 for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
837 source = _ref4[_k];
838 sources.push(new source(options));
839 }
840 Pace.bar = bar = new Bar;
841 scalers = [];
842 return uniScaler = new Scaler;
843 })();
844
845 Pace.stop = function() {
846 Pace.trigger('stop');
847 Pace.running = false;
848 bar.destroy();
849 cancelAnimation = true;
850 if (animation != null) {
851 if (typeof cancelAnimationFrame === "function") {
852 cancelAnimationFrame(animation);
853 }
854 animation = null;
855 }
856 return init();
857 };
858
859 Pace.restart = function() {
860 Pace.trigger('restart');
861 Pace.stop();
862 return Pace.start();
863 };
864
865 Pace.go = function() {
866 var start;
867 Pace.running = true;
868 bar.render();
869 start = now();
870 cancelAnimation = false;
871 return animation = runAnimation(function(frameTime, enqueueNextFrame) {
872 var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;
873 remaining = 100 - bar.progress;
874 count = sum = 0;
875 done = true;
876 for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {
877 source = sources[i];
878 scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];
879 elements = (_ref2 = source.elements) != null ? _ref2 : [source];
880 for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {
881 element = elements[j];
882 scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);
883 done &= scaler.done;
884 if (scaler.done) {
885 continue;
886 }
887 count++;
888 sum += scaler.tick(frameTime);
889 }
890 }
891 avg = sum / count;
892 bar.update(uniScaler.tick(frameTime, avg));
893 if (bar.done() || done || cancelAnimation) {
894 bar.update(100);
895 Pace.trigger('done');
896 return setTimeout(function() {
897 bar.finish();
898 Pace.running = false;
899 return Pace.trigger('hide');
900 }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));
901 } else {
902 return enqueueNextFrame();
903 }
904 });
905 };
906
907 Pace.start = function(_options) {
908 extend(options, _options);
909 Pace.running = true;
910 try {
911 bar.render();
912 } catch (_error) {
913 NoTargetError = _error;
914 }
915 if (!document.querySelector('.pace')) {
916 return setTimeout(Pace.start, 50);
917 } else {
918 Pace.trigger('start');
919 return Pace.go();
920 }
921 };
922
923 if (typeof define === 'function' && define.amd) {
924 define(['pace'], function() {
925 return Pace;
926 });
927 } else if (typeof exports === 'object') {
928 module.exports = Pace;
929 } else {
930 if (options.startOnPageLoad) {
931 Pace.start();
932 }
933 }
934
935 }).call(this);