pace-rails 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8bd2b7c4688e2be06055c6461bd0a4d68b99802
4
- data.tar.gz: e106f958b260e65850b54cc8eb58c96cd5135e4c
3
+ metadata.gz: b4527a1298fd354412b9efb132581487a9ba106e
4
+ data.tar.gz: 0923cbabf0c0cc617d4d4361b542440a177601c8
5
5
  SHA512:
6
- metadata.gz: ff0b8f9621b0a639aba19afcc4727ee67be8bcecf82d7f715b69bb71008b67ed8866eedfb52b1ee30e2aad53d21e62907c33ec4745f465747882ff6d7c9689d5
7
- data.tar.gz: f3ca9752efe4d6fcc568fd7d3dabb8e6884acf65075ce325bbbb7b19f9a8a5da18f298b3122f26e5ce65b02af76917dd6be1c3a265ab921dc4028b3cc30894dc
6
+ metadata.gz: 35bcbeb06321400f80e3319bda5fd709f1963115714a358f024bc2fe8452306d64ecb9b7c2b87a2d89e51c219dc7b408d35abfab48c759bdb4c9c86e5195af6c
7
+ data.tar.gz: f7eaa0b09f9150d5a0ae50ead276c42e4a7494b54233b62f68509a09fb82d3ffa018d9bbc3e2c16501196c517f77ccbf9838d9eb47d4ed1ab0b0cb7785db3a0c
data/README.md CHANGED
@@ -9,51 +9,48 @@ Automatic web page progress bar.
9
9
 
10
10
  Include pace-rails in Gemfile:
11
11
 
12
- gem 'pace-rails'
12
+ ```ruby
13
+ gem 'pace-rails'
14
+ ```
13
15
 
14
16
  or you can install from latest build:
15
17
 
16
- gem 'pace-rails', git: 'git@github.com:drkyro/pace-rails.git'
18
+ ```ruby
19
+ gem 'pace-rails', git: 'git@github.com:yovu/pace-rails.git'
20
+ ```
17
21
 
18
22
  ## Usage
19
23
 
20
- app/assets/javascripts/application.js
21
-
22
- //= require pace/pace
23
-
24
- Pace supports a few themes, selec one of the following and have fun and create your own.
25
-
26
- app/assets/stylesheets/application.css
27
-
28
- *= require pace/pace-theme-minimal
29
-
30
- *= require pace/pace-theme-mac-osx
31
-
32
- *= require pace/pace-theme-loading-bar
33
-
34
- *= require pace/pace-theme-flat-top
35
-
36
- *= require pace/pace-theme-flash
37
-
38
- *= require pace/pace-theme-fill-left
39
-
40
- *= require pace/pace-theme-corner-indicator
41
-
42
- *= require pace/pace-theme-center-simple
43
-
44
- *= require pace/pace-theme-center-radar
45
-
46
- *= require pace/pace-theme-center-circle
47
-
48
- *= require pace/pace-theme-center-atom
49
-
50
- *= require pace/pace-theme-bounce
51
-
52
- *= require pace/pace-theme-big-counter
53
-
54
- *= require pace/pace-theme-barber-shop
55
-
56
- You may need to restart your rails server.
24
+ Add the following to your `app/assets/javascripts/application.js` file:
25
+
26
+ ```js
27
+ //= require pace/pace
28
+ ```
29
+
30
+ Pace supports a few [themes](http://github.hubspot.com/pace/docs/welcome/), select one of the following and have fun and create your own.
31
+
32
+ In `app/assets/stylesheets/application.css`, add one of the following:
33
+
34
+ ```scss
35
+ /*
36
+ *= require pace/pace-theme-barber-shop
37
+ *= require pace/pace-theme-big-counter
38
+ *= require pace/pace-theme-bounce
39
+ *= require pace/pace-theme-center-atom
40
+ *= require pace/pace-theme-center-circle
41
+ *= require pace/pace-theme-center-radar
42
+ *= require pace/pace-theme-center-simple
43
+ *= require pace/pace-theme-corner-indicator
44
+ *= require pace/pace-theme-fill-left
45
+ *= require pace/pace-theme-flash
46
+ *= require pace/pace-theme-flat-top
47
+ *= require pace/pace-theme-loading-bar
48
+ *= require pace/pace-theme-mac-osx
49
+ *= require pace/pace-theme-minimal
50
+ */
51
+ ```
52
+
53
+ You may need to restart your Rails server.
57
54
 
58
55
  ## Contributing
59
56
 
@@ -1,5 +1,5 @@
1
1
  module Pace
2
2
  module Rails
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -426,7 +426,9 @@
426
426
  monitorXHR(req);
427
427
  return req;
428
428
  };
429
- extendNative(window.XMLHttpRequest, _XMLHttpRequest);
429
+ try {
430
+ extendNative(window.XMLHttpRequest, _XMLHttpRequest);
431
+ } catch (_error) {}
430
432
  if (_XDomainRequest != null) {
431
433
  window.XDomainRequest = function() {
432
434
  var req;
@@ -434,7 +436,9 @@
434
436
  monitorXHR(req);
435
437
  return req;
436
438
  };
437
- extendNative(window.XDomainRequest, _XDomainRequest);
439
+ try {
440
+ extendNative(window.XDomainRequest, _XDomainRequest);
441
+ } catch (_error) {}
438
442
  }
439
443
  if ((_WebSocket != null) && options.ajax.trackWebSockets) {
440
444
  window.WebSocket = function(url, protocols) {
@@ -454,7 +458,9 @@
454
458
  }
455
459
  return req;
456
460
  };
457
- extendNative(window.WebSocket, _WebSocket);
461
+ try {
462
+ extendNative(window.WebSocket, _WebSocket);
463
+ } catch (_error) {}
458
464
  }
459
465
  }
460
466
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pace-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Vera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-17 00:00:00.000000000 Z
11
+ date: 2014-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -64,22 +64,6 @@ files:
64
64
  - LICENSE.txt
65
65
  - README.md
66
66
  - Rakefile
67
- - app/assets/javascripts/pace/pace.js
68
- - app/assets/stylesheets/.DS_Store
69
- - app/assets/stylesheets/pace/pace-theme-barber-shop.css
70
- - app/assets/stylesheets/pace/pace-theme-big-counter.css
71
- - app/assets/stylesheets/pace/pace-theme-bounce.css
72
- - app/assets/stylesheets/pace/pace-theme-center-atom.css
73
- - app/assets/stylesheets/pace/pace-theme-center-circle.css
74
- - app/assets/stylesheets/pace/pace-theme-center-radar.css
75
- - app/assets/stylesheets/pace/pace-theme-center-simple.css
76
- - app/assets/stylesheets/pace/pace-theme-corner-indicator.css
77
- - app/assets/stylesheets/pace/pace-theme-fill-left.css
78
- - app/assets/stylesheets/pace/pace-theme-flash.css
79
- - app/assets/stylesheets/pace/pace-theme-flat-top.css
80
- - app/assets/stylesheets/pace/pace-theme-loading-bar.css
81
- - app/assets/stylesheets/pace/pace-theme-mac-osx.css
82
- - app/assets/stylesheets/pace/pace-theme-minimal.css
83
67
  - lib/pace/rails.rb
84
68
  - lib/pace/rails/version.rb
85
69
  - pace-rails.gemspec
@@ -118,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
102
  version: '0'
119
103
  requirements: []
120
104
  rubyforge_project:
121
- rubygems_version: 2.2.2
105
+ rubygems_version: 2.4.1
122
106
  signing_key:
123
107
  specification_version: 4
124
108
  summary: Pace automatic web page progress bar, integrated in Rails assets pipeline.
@@ -1,915 +0,0 @@
1
- (function() {
2
- var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, 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: 500,
10
- initialRate: .03,
11
- minTime: 500,
12
- ghostTime: 500,
13
- maxProgressPerFrame: 10,
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
- if (window.Pace == null) {
206
- window.Pace = {};
207
- }
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, progressStr;
284
- if (document.querySelector(options.target) == null) {
285
- return false;
286
- }
287
- el = this.getElement();
288
- el.children[0].style.width = "" + this.progress + "%";
289
- if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {
290
- el.children[0].setAttribute('data-progress-text', "" + (this.progress | 0) + "%");
291
- if (this.progress >= 100) {
292
- progressStr = '99';
293
- } else {
294
- progressStr = this.progress < 10 ? "0" : "";
295
- progressStr += this.progress | 0;
296
- }
297
- el.children[0].setAttribute('data-progress', "" + progressStr);
298
- }
299
- return this.lastRenderedProgress = this.progress;
300
- };
301
-
302
- Bar.prototype.done = function() {
303
- return this.progress >= 100;
304
- };
305
-
306
- return Bar;
307
-
308
- })();
309
-
310
- Events = (function() {
311
- function Events() {
312
- this.bindings = {};
313
- }
314
-
315
- Events.prototype.trigger = function(name, val) {
316
- var binding, _j, _len1, _ref2, _results;
317
- if (this.bindings[name] != null) {
318
- _ref2 = this.bindings[name];
319
- _results = [];
320
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
321
- binding = _ref2[_j];
322
- _results.push(binding.call(this, val));
323
- }
324
- return _results;
325
- }
326
- };
327
-
328
- Events.prototype.on = function(name, fn) {
329
- var _base;
330
- if ((_base = this.bindings)[name] == null) {
331
- _base[name] = [];
332
- }
333
- return this.bindings[name].push(fn);
334
- };
335
-
336
- return Events;
337
-
338
- })();
339
-
340
- _XMLHttpRequest = window.XMLHttpRequest;
341
-
342
- _XDomainRequest = window.XDomainRequest;
343
-
344
- _WebSocket = window.WebSocket;
345
-
346
- extendNative = function(to, from) {
347
- var e, key, val, _results;
348
- _results = [];
349
- for (key in from.prototype) {
350
- try {
351
- val = from.prototype[key];
352
- if ((to[key] == null) && typeof val !== 'function') {
353
- _results.push(to[key] = val);
354
- } else {
355
- _results.push(void 0);
356
- }
357
- } catch (_error) {
358
- e = _error;
359
- }
360
- }
361
- return _results;
362
- };
363
-
364
- ignoreStack = [];
365
-
366
- Pace.ignore = function() {
367
- var args, fn, ret;
368
- fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
369
- ignoreStack.unshift('ignore');
370
- ret = fn.apply(null, args);
371
- ignoreStack.shift();
372
- return ret;
373
- };
374
-
375
- Pace.track = function() {
376
- var args, fn, ret;
377
- fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
378
- ignoreStack.unshift('track');
379
- ret = fn.apply(null, args);
380
- ignoreStack.shift();
381
- return ret;
382
- };
383
-
384
- shouldTrack = function(method) {
385
- var _ref2;
386
- if (method == null) {
387
- method = 'GET';
388
- }
389
- if (ignoreStack[0] === 'track') {
390
- return 'force';
391
- }
392
- if (!ignoreStack.length && options.ajax) {
393
- if (method === 'socket' && options.ajax.trackWebSockets) {
394
- return true;
395
- } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {
396
- return true;
397
- }
398
- }
399
- return false;
400
- };
401
-
402
- RequestIntercept = (function(_super) {
403
- __extends(RequestIntercept, _super);
404
-
405
- function RequestIntercept() {
406
- var monitorXHR,
407
- _this = this;
408
- RequestIntercept.__super__.constructor.apply(this, arguments);
409
- monitorXHR = function(req) {
410
- var _open;
411
- _open = req.open;
412
- return req.open = function(type, url, async) {
413
- if (shouldTrack(type)) {
414
- _this.trigger('request', {
415
- type: type,
416
- url: url,
417
- request: req
418
- });
419
- }
420
- return _open.apply(req, arguments);
421
- };
422
- };
423
- window.XMLHttpRequest = function(flags) {
424
- var req;
425
- req = new _XMLHttpRequest(flags);
426
- monitorXHR(req);
427
- return req;
428
- };
429
- extendNative(window.XMLHttpRequest, _XMLHttpRequest);
430
- if (_XDomainRequest != null) {
431
- window.XDomainRequest = function() {
432
- var req;
433
- req = new _XDomainRequest;
434
- monitorXHR(req);
435
- return req;
436
- };
437
- extendNative(window.XDomainRequest, _XDomainRequest);
438
- }
439
- if ((_WebSocket != null) && options.ajax.trackWebSockets) {
440
- window.WebSocket = function(url, protocols) {
441
- var req;
442
- if (protocols != null) {
443
- req = new _WebSocket(url, protocols);
444
- } else {
445
- req = new _WebSocket(url);
446
- }
447
- if (shouldTrack('socket')) {
448
- _this.trigger('request', {
449
- type: 'socket',
450
- url: url,
451
- protocols: protocols,
452
- request: req
453
- });
454
- }
455
- return req;
456
- };
457
- extendNative(window.WebSocket, _WebSocket);
458
- }
459
- }
460
-
461
- return RequestIntercept;
462
-
463
- })(Events);
464
-
465
- _intercept = null;
466
-
467
- getIntercept = function() {
468
- if (_intercept == null) {
469
- _intercept = new RequestIntercept;
470
- }
471
- return _intercept;
472
- };
473
-
474
- shouldIgnoreURL = function(url) {
475
- var pattern, _j, _len1, _ref2;
476
- _ref2 = options.ajax.ignoreURLs;
477
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
478
- pattern = _ref2[_j];
479
- if (typeof pattern === 'string') {
480
- if (url.indexOf(pattern) !== -1) {
481
- return true;
482
- }
483
- } else {
484
- if (pattern.test(url)) {
485
- return true;
486
- }
487
- }
488
- }
489
- return false;
490
- };
491
-
492
- getIntercept().on('request', function(_arg) {
493
- var after, args, request, type, url;
494
- type = _arg.type, request = _arg.request, url = _arg.url;
495
- if (shouldIgnoreURL(url)) {
496
- return;
497
- }
498
- if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {
499
- args = arguments;
500
- after = options.restartOnRequestAfter || 0;
501
- if (typeof after === 'boolean') {
502
- after = 0;
503
- }
504
- return setTimeout(function() {
505
- var stillActive, _j, _len1, _ref2, _ref3, _results;
506
- if (type === 'socket') {
507
- stillActive = request.readyState < 2;
508
- } else {
509
- stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);
510
- }
511
- if (stillActive) {
512
- Pace.restart();
513
- _ref3 = Pace.sources;
514
- _results = [];
515
- for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
516
- source = _ref3[_j];
517
- if (source instanceof AjaxMonitor) {
518
- source.watch.apply(source, args);
519
- break;
520
- } else {
521
- _results.push(void 0);
522
- }
523
- }
524
- return _results;
525
- }
526
- }, after);
527
- }
528
- });
529
-
530
- AjaxMonitor = (function() {
531
- function AjaxMonitor() {
532
- var _this = this;
533
- this.elements = [];
534
- getIntercept().on('request', function() {
535
- return _this.watch.apply(_this, arguments);
536
- });
537
- }
538
-
539
- AjaxMonitor.prototype.watch = function(_arg) {
540
- var request, tracker, type, url;
541
- type = _arg.type, request = _arg.request, url = _arg.url;
542
- if (shouldIgnoreURL(url)) {
543
- return;
544
- }
545
- if (type === 'socket') {
546
- tracker = new SocketRequestTracker(request);
547
- } else {
548
- tracker = new XHRRequestTracker(request);
549
- }
550
- return this.elements.push(tracker);
551
- };
552
-
553
- return AjaxMonitor;
554
-
555
- })();
556
-
557
- XHRRequestTracker = (function() {
558
- function XHRRequestTracker(request) {
559
- var event, size, _j, _len1, _onreadystatechange, _ref2,
560
- _this = this;
561
- this.progress = 0;
562
- if (window.ProgressEvent != null) {
563
- size = null;
564
- request.addEventListener('progress', function(evt) {
565
- if (evt.lengthComputable) {
566
- return _this.progress = 100 * evt.loaded / evt.total;
567
- } else {
568
- return _this.progress = _this.progress + (100 - _this.progress) / 2;
569
- }
570
- });
571
- _ref2 = ['load', 'abort', 'timeout', 'error'];
572
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
573
- event = _ref2[_j];
574
- request.addEventListener(event, function() {
575
- return _this.progress = 100;
576
- });
577
- }
578
- } else {
579
- _onreadystatechange = request.onreadystatechange;
580
- request.onreadystatechange = function() {
581
- var _ref3;
582
- if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {
583
- _this.progress = 100;
584
- } else if (request.readyState === 3) {
585
- _this.progress = 50;
586
- }
587
- return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
588
- };
589
- }
590
- }
591
-
592
- return XHRRequestTracker;
593
-
594
- })();
595
-
596
- SocketRequestTracker = (function() {
597
- function SocketRequestTracker(request) {
598
- var event, _j, _len1, _ref2,
599
- _this = this;
600
- this.progress = 0;
601
- _ref2 = ['error', 'open'];
602
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
603
- event = _ref2[_j];
604
- request.addEventListener(event, function() {
605
- return _this.progress = 100;
606
- });
607
- }
608
- }
609
-
610
- return SocketRequestTracker;
611
-
612
- })();
613
-
614
- ElementMonitor = (function() {
615
- function ElementMonitor(options) {
616
- var selector, _j, _len1, _ref2;
617
- if (options == null) {
618
- options = {};
619
- }
620
- this.elements = [];
621
- if (options.selectors == null) {
622
- options.selectors = [];
623
- }
624
- _ref2 = options.selectors;
625
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
626
- selector = _ref2[_j];
627
- this.elements.push(new ElementTracker(selector));
628
- }
629
- }
630
-
631
- return ElementMonitor;
632
-
633
- })();
634
-
635
- ElementTracker = (function() {
636
- function ElementTracker(selector) {
637
- this.selector = selector;
638
- this.progress = 0;
639
- this.check();
640
- }
641
-
642
- ElementTracker.prototype.check = function() {
643
- var _this = this;
644
- if (document.querySelector(this.selector)) {
645
- return this.done();
646
- } else {
647
- return setTimeout((function() {
648
- return _this.check();
649
- }), options.elements.checkInterval);
650
- }
651
- };
652
-
653
- ElementTracker.prototype.done = function() {
654
- return this.progress = 100;
655
- };
656
-
657
- return ElementTracker;
658
-
659
- })();
660
-
661
- DocumentMonitor = (function() {
662
- DocumentMonitor.prototype.states = {
663
- loading: 0,
664
- interactive: 50,
665
- complete: 100
666
- };
667
-
668
- function DocumentMonitor() {
669
- var _onreadystatechange, _ref2,
670
- _this = this;
671
- this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;
672
- _onreadystatechange = document.onreadystatechange;
673
- document.onreadystatechange = function() {
674
- if (_this.states[document.readyState] != null) {
675
- _this.progress = _this.states[document.readyState];
676
- }
677
- return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
678
- };
679
- }
680
-
681
- return DocumentMonitor;
682
-
683
- })();
684
-
685
- EventLagMonitor = (function() {
686
- function EventLagMonitor() {
687
- var avg, interval, last, points, samples,
688
- _this = this;
689
- this.progress = 0;
690
- avg = 0;
691
- samples = [];
692
- points = 0;
693
- last = now();
694
- interval = setInterval(function() {
695
- var diff;
696
- diff = now() - last - 50;
697
- last = now();
698
- samples.push(diff);
699
- if (samples.length > options.eventLag.sampleCount) {
700
- samples.shift();
701
- }
702
- avg = avgAmplitude(samples);
703
- if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {
704
- _this.progress = 100;
705
- return clearInterval(interval);
706
- } else {
707
- return _this.progress = 100 * (3 / (avg + 3));
708
- }
709
- }, 50);
710
- }
711
-
712
- return EventLagMonitor;
713
-
714
- })();
715
-
716
- Scaler = (function() {
717
- function Scaler(source) {
718
- this.source = source;
719
- this.last = this.sinceLastUpdate = 0;
720
- this.rate = options.initialRate;
721
- this.catchup = 0;
722
- this.progress = this.lastProgress = 0;
723
- if (this.source != null) {
724
- this.progress = result(this.source, 'progress');
725
- }
726
- }
727
-
728
- Scaler.prototype.tick = function(frameTime, val) {
729
- var scaling;
730
- if (val == null) {
731
- val = result(this.source, 'progress');
732
- }
733
- if (val >= 100) {
734
- this.done = true;
735
- }
736
- if (val === this.last) {
737
- this.sinceLastUpdate += frameTime;
738
- } else {
739
- if (this.sinceLastUpdate) {
740
- this.rate = (val - this.last) / this.sinceLastUpdate;
741
- }
742
- this.catchup = (val - this.progress) / options.catchupTime;
743
- this.sinceLastUpdate = 0;
744
- this.last = val;
745
- }
746
- if (val > this.progress) {
747
- this.progress += this.catchup * frameTime;
748
- }
749
- scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);
750
- this.progress += scaling * this.rate * frameTime;
751
- this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);
752
- this.progress = Math.max(0, this.progress);
753
- this.progress = Math.min(100, this.progress);
754
- this.lastProgress = this.progress;
755
- return this.progress;
756
- };
757
-
758
- return Scaler;
759
-
760
- })();
761
-
762
- sources = null;
763
-
764
- scalers = null;
765
-
766
- bar = null;
767
-
768
- uniScaler = null;
769
-
770
- animation = null;
771
-
772
- cancelAnimation = null;
773
-
774
- Pace.running = false;
775
-
776
- handlePushState = function() {
777
- if (options.restartOnPushState) {
778
- return Pace.restart();
779
- }
780
- };
781
-
782
- if (window.history.pushState != null) {
783
- _pushState = window.history.pushState;
784
- window.history.pushState = function() {
785
- handlePushState();
786
- return _pushState.apply(window.history, arguments);
787
- };
788
- }
789
-
790
- if (window.history.replaceState != null) {
791
- _replaceState = window.history.replaceState;
792
- window.history.replaceState = function() {
793
- handlePushState();
794
- return _replaceState.apply(window.history, arguments);
795
- };
796
- }
797
-
798
- SOURCE_KEYS = {
799
- ajax: AjaxMonitor,
800
- elements: ElementMonitor,
801
- document: DocumentMonitor,
802
- eventLag: EventLagMonitor
803
- };
804
-
805
- (init = function() {
806
- var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;
807
- Pace.sources = sources = [];
808
- _ref2 = ['ajax', 'elements', 'document', 'eventLag'];
809
- for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
810
- type = _ref2[_j];
811
- if (options[type] !== false) {
812
- sources.push(new SOURCE_KEYS[type](options[type]));
813
- }
814
- }
815
- _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];
816
- for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
817
- source = _ref4[_k];
818
- sources.push(new source(options));
819
- }
820
- Pace.bar = bar = new Bar;
821
- scalers = [];
822
- return uniScaler = new Scaler;
823
- })();
824
-
825
- Pace.stop = function() {
826
- Pace.trigger('stop');
827
- Pace.running = false;
828
- bar.destroy();
829
- cancelAnimation = true;
830
- if (animation != null) {
831
- if (typeof cancelAnimationFrame === "function") {
832
- cancelAnimationFrame(animation);
833
- }
834
- animation = null;
835
- }
836
- return init();
837
- };
838
-
839
- Pace.restart = function() {
840
- Pace.trigger('restart');
841
- Pace.stop();
842
- return Pace.start();
843
- };
844
-
845
- Pace.go = function() {
846
- var start;
847
- Pace.running = true;
848
- bar.render();
849
- start = now();
850
- cancelAnimation = false;
851
- return animation = runAnimation(function(frameTime, enqueueNextFrame) {
852
- var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;
853
- remaining = 100 - bar.progress;
854
- count = sum = 0;
855
- done = true;
856
- for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {
857
- source = sources[i];
858
- scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];
859
- elements = (_ref2 = source.elements) != null ? _ref2 : [source];
860
- for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {
861
- element = elements[j];
862
- scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);
863
- done &= scaler.done;
864
- if (scaler.done) {
865
- continue;
866
- }
867
- count++;
868
- sum += scaler.tick(frameTime);
869
- }
870
- }
871
- avg = sum / count;
872
- bar.update(uniScaler.tick(frameTime, avg));
873
- if (bar.done() || done || cancelAnimation) {
874
- bar.update(100);
875
- Pace.trigger('done');
876
- return setTimeout(function() {
877
- bar.finish();
878
- Pace.running = false;
879
- return Pace.trigger('hide');
880
- }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));
881
- } else {
882
- return enqueueNextFrame();
883
- }
884
- });
885
- };
886
-
887
- Pace.start = function(_options) {
888
- extend(options, _options);
889
- Pace.running = true;
890
- try {
891
- bar.render();
892
- } catch (_error) {
893
- NoTargetError = _error;
894
- }
895
- if (!document.querySelector('.pace')) {
896
- return setTimeout(Pace.start, 50);
897
- } else {
898
- Pace.trigger('start');
899
- return Pace.go();
900
- }
901
- };
902
-
903
- if (typeof define === 'function' && define.amd) {
904
- define(function() {
905
- return Pace;
906
- });
907
- } else if (typeof exports === 'object') {
908
- module.exports = Pace;
909
- } else {
910
- if (options.startOnPageLoad) {
911
- Pace.start();
912
- }
913
- }
914
-
915
- }).call(this);