ember-source 2.7.0.beta.3 → 2.7.0.beta.4
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 +4 -4
- data/VERSION +1 -1
- data/dist/ember-runtime.js +1273 -1275
- data/dist/ember-template-compiler.js +1158 -1160
- data/dist/ember-testing.js +377 -377
- data/dist/ember.debug.js +3059 -3071
- data/dist/ember.js +3059 -3071
- data/dist/ember.min.js +14 -14
- data/dist/ember.prod.js +2782 -2794
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba15c71e1d4162ac3d93051e2875463a3e4aee74
|
4
|
+
data.tar.gz: 21b249f35bb90adbabe4ba379b025f373b260c4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c15c178aee9b7ee90c15c06304405da38de486e87809e37fa7526b39d72c7a83286c762462cfaeb217f9ae2bcc4bd4b9a91530655d26b2518100044a245cd186
|
7
|
+
data.tar.gz: e3f30720d2f0a8770ac5c9f049f43b0e7df80db75285ae06d2de3e3cc9d17450f1985a3339a832ac6589bbec769ad720b20ef45f0bb24fb57912a069976fa452
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.7.0-beta.
|
1
|
+
2.7.0-beta.4
|
data/dist/ember-runtime.js
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
7
7
|
* @license Licensed under MIT license
|
8
8
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
9
|
-
* @version 2.7.0-beta.
|
9
|
+
* @version 2.7.0-beta.4
|
10
10
|
*/
|
11
11
|
|
12
12
|
var enifed, requireModule, require, Ember;
|
@@ -112,1053 +112,1053 @@ var mainContext = this;
|
|
112
112
|
}
|
113
113
|
})();
|
114
114
|
|
115
|
-
enifed(
|
116
|
-
|
115
|
+
enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'backburner/binary-search', 'backburner/deferred-action-queues'], function (exports, _backburnerUtils, _backburnerPlatform, _backburnerBinarySearch, _backburnerDeferredActionQueues) {
|
116
|
+
'use strict';
|
117
117
|
|
118
|
-
exports.default =
|
118
|
+
exports.default = Backburner;
|
119
119
|
|
120
|
-
function
|
121
|
-
|
122
|
-
|
123
|
-
|
120
|
+
function Backburner(queueNames, options) {
|
121
|
+
this.queueNames = queueNames;
|
122
|
+
this.options = options || {};
|
123
|
+
if (!this.options.defaultQueue) {
|
124
|
+
this.options.defaultQueue = queueNames[0];
|
125
|
+
}
|
126
|
+
this.instanceStack = [];
|
127
|
+
this._debouncees = [];
|
128
|
+
this._throttlers = [];
|
129
|
+
this._eventCallbacks = {
|
130
|
+
end: [],
|
131
|
+
begin: []
|
132
|
+
};
|
124
133
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
134
|
+
var _this = this;
|
135
|
+
this._boundClearItems = function () {
|
136
|
+
clearItems();
|
137
|
+
};
|
129
138
|
|
130
|
-
|
131
|
-
|
132
|
-
middle = start + l - l % 2;
|
139
|
+
this._timerTimeoutId = undefined;
|
140
|
+
this._timers = [];
|
133
141
|
|
134
|
-
|
135
|
-
start = middle + 2;
|
136
|
-
} else {
|
137
|
-
end = middle;
|
138
|
-
}
|
139
|
-
}
|
142
|
+
this._platform = this.options._platform || _backburnerPlatform.default;
|
140
143
|
|
141
|
-
|
144
|
+
this._boundRunExpiredTimers = function () {
|
145
|
+
_this._runExpiredTimers();
|
146
|
+
};
|
142
147
|
}
|
143
|
-
});
|
144
|
-
enifed('backburner/deferred-action-queues', ['exports', 'backburner/utils', 'backburner/queue'], function (exports, _backburnerUtils, _backburnerQueue) {
|
145
|
-
'use strict';
|
146
148
|
|
147
|
-
|
149
|
+
Backburner.prototype = {
|
150
|
+
begin: function () {
|
151
|
+
var options = this.options;
|
152
|
+
var onBegin = options && options.onBegin;
|
153
|
+
var previousInstance = this.currentInstance;
|
148
154
|
|
149
|
-
|
150
|
-
|
151
|
-
|
155
|
+
if (previousInstance) {
|
156
|
+
this.instanceStack.push(previousInstance);
|
157
|
+
}
|
152
158
|
|
153
|
-
|
159
|
+
this.currentInstance = new _backburnerDeferredActionQueues.default(this.queueNames, options);
|
160
|
+
this._trigger('begin', this.currentInstance, previousInstance);
|
161
|
+
if (onBegin) {
|
162
|
+
onBegin(this.currentInstance, previousInstance);
|
163
|
+
}
|
164
|
+
},
|
154
165
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
166
|
+
end: function () {
|
167
|
+
var options = this.options;
|
168
|
+
var onEnd = options && options.onEnd;
|
169
|
+
var currentInstance = this.currentInstance;
|
170
|
+
var nextInstance = null;
|
159
171
|
|
160
|
-
|
161
|
-
|
162
|
-
|
172
|
+
// Prevent double-finally bug in Safari 6.0.2 and iOS 6
|
173
|
+
// This bug appears to be resolved in Safari 6.0.5 and iOS 7
|
174
|
+
var finallyAlreadyCalled = false;
|
175
|
+
try {
|
176
|
+
currentInstance.flush();
|
177
|
+
} finally {
|
178
|
+
if (!finallyAlreadyCalled) {
|
179
|
+
finallyAlreadyCalled = true;
|
163
180
|
|
164
|
-
|
165
|
-
throw new Error('You attempted to schedule an action in a queue (' + name + ') for a method that doesn\'t exist');
|
166
|
-
}
|
181
|
+
this.currentInstance = null;
|
167
182
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
183
|
+
if (this.instanceStack.length) {
|
184
|
+
nextInstance = this.instanceStack.pop();
|
185
|
+
this.currentInstance = nextInstance;
|
186
|
+
}
|
187
|
+
this._trigger('end', currentInstance, nextInstance);
|
188
|
+
if (onEnd) {
|
189
|
+
onEnd(currentInstance, nextInstance);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}
|
193
|
+
},
|
172
194
|
|
173
|
-
|
174
|
-
|
195
|
+
/**
|
196
|
+
Trigger an event. Supports up to two arguments. Designed around
|
197
|
+
triggering transition events from one run loop instance to the
|
198
|
+
next, which requires an argument for the first instance and then
|
199
|
+
an argument for the next instance.
|
200
|
+
@private
|
201
|
+
@method _trigger
|
202
|
+
@param {String} eventName
|
203
|
+
@param {any} arg1
|
204
|
+
@param {any} arg2
|
205
|
+
*/
|
206
|
+
_trigger: function (eventName, arg1, arg2) {
|
207
|
+
var callbacks = this._eventCallbacks[eventName];
|
208
|
+
if (callbacks) {
|
209
|
+
for (var i = 0; i < callbacks.length; i++) {
|
210
|
+
callbacks[i](arg1, arg2);
|
211
|
+
}
|
175
212
|
}
|
213
|
+
},
|
176
214
|
|
177
|
-
|
178
|
-
|
215
|
+
on: function (eventName, callback) {
|
216
|
+
if (typeof callback !== 'function') {
|
217
|
+
throw new TypeError('Callback must be a function');
|
218
|
+
}
|
219
|
+
var callbacks = this._eventCallbacks[eventName];
|
220
|
+
if (callbacks) {
|
221
|
+
callbacks.push(callback);
|
222
|
+
} else {
|
223
|
+
throw new TypeError('Cannot on() event "' + eventName + '" because it does not exist');
|
179
224
|
}
|
225
|
+
},
|
180
226
|
|
181
|
-
|
182
|
-
|
227
|
+
off: function (eventName, callback) {
|
228
|
+
if (eventName) {
|
229
|
+
var callbacks = this._eventCallbacks[eventName];
|
230
|
+
var callbackFound = false;
|
231
|
+
if (!callbacks) return;
|
232
|
+
if (callback) {
|
233
|
+
for (var i = 0; i < callbacks.length; i++) {
|
234
|
+
if (callbacks[i] === callback) {
|
235
|
+
callbackFound = true;
|
236
|
+
callbacks.splice(i, 1);
|
237
|
+
i--;
|
238
|
+
}
|
239
|
+
}
|
240
|
+
}
|
241
|
+
if (!callbackFound) {
|
242
|
+
throw new TypeError('Cannot off() callback that does not exist');
|
243
|
+
}
|
183
244
|
} else {
|
184
|
-
|
245
|
+
throw new TypeError('Cannot off() event "' + eventName + '" because it does not exist');
|
185
246
|
}
|
186
247
|
},
|
187
248
|
|
188
|
-
|
189
|
-
var
|
190
|
-
var
|
191
|
-
var queueName, queue;
|
192
|
-
var queueNameIndex = 0;
|
193
|
-
var numberOfQueues = queueNames.length;
|
249
|
+
run: function () /* target, method, args */{
|
250
|
+
var length = arguments.length;
|
251
|
+
var method, target, args;
|
194
252
|
|
195
|
-
|
196
|
-
|
197
|
-
|
253
|
+
if (length === 1) {
|
254
|
+
method = arguments[0];
|
255
|
+
target = null;
|
256
|
+
} else {
|
257
|
+
target = arguments[0];
|
258
|
+
method = arguments[1];
|
259
|
+
}
|
198
260
|
|
199
|
-
|
261
|
+
if (_backburnerUtils.isString(method)) {
|
262
|
+
method = target[method];
|
263
|
+
}
|
200
264
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
queueNameIndex = 0;
|
265
|
+
if (length > 2) {
|
266
|
+
args = new Array(length - 2);
|
267
|
+
for (var i = 0, l = length - 2; i < l; i++) {
|
268
|
+
args[i] = arguments[i + 2];
|
206
269
|
}
|
270
|
+
} else {
|
271
|
+
args = [];
|
207
272
|
}
|
208
|
-
}
|
209
|
-
};
|
210
|
-
});
|
211
|
-
enifed('backburner/platform', ['exports'], function (exports) {
|
212
|
-
'use strict';
|
213
273
|
|
214
|
-
|
274
|
+
var onError = getOnError(this.options);
|
215
275
|
|
216
|
-
|
217
|
-
if (typeof self === 'object') {
|
218
|
-
GlobalContext = self;
|
276
|
+
this.begin();
|
219
277
|
|
220
|
-
|
221
|
-
|
222
|
-
GlobalContext = global;
|
278
|
+
// guard against Safari 6's double-finally bug
|
279
|
+
var didFinally = false;
|
223
280
|
|
224
|
-
|
225
|
-
|
226
|
-
|
281
|
+
if (onError) {
|
282
|
+
try {
|
283
|
+
return method.apply(target, args);
|
284
|
+
} catch (error) {
|
285
|
+
onError(error);
|
286
|
+
} finally {
|
287
|
+
if (!didFinally) {
|
288
|
+
didFinally = true;
|
289
|
+
this.end();
|
290
|
+
}
|
291
|
+
}
|
227
292
|
} else {
|
228
|
-
|
293
|
+
try {
|
294
|
+
return method.apply(target, args);
|
295
|
+
} finally {
|
296
|
+
if (!didFinally) {
|
297
|
+
didFinally = true;
|
298
|
+
this.end();
|
299
|
+
}
|
300
|
+
}
|
229
301
|
}
|
302
|
+
},
|
230
303
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
304
|
+
/*
|
305
|
+
Join the passed method with an existing queue and execute immediately,
|
306
|
+
if there isn't one use `Backburner#run`.
|
307
|
+
The join method is like the run method except that it will schedule into
|
308
|
+
an existing queue if one already exists. In either case, the join method will
|
309
|
+
immediately execute the passed in function and return its result.
|
310
|
+
@method join
|
311
|
+
@param {Object} target
|
312
|
+
@param {Function} method The method to be executed
|
313
|
+
@param {any} args The method arguments
|
314
|
+
@return method result
|
315
|
+
*/
|
316
|
+
join: function () /* target, method, args */{
|
317
|
+
if (!this.currentInstance) {
|
318
|
+
return this.run.apply(this, arguments);
|
319
|
+
}
|
235
320
|
|
236
|
-
|
237
|
-
|
238
|
-
function Queue(name, options, globalOptions) {
|
239
|
-
this.name = name;
|
240
|
-
this.globalOptions = globalOptions || {};
|
241
|
-
this.options = options;
|
242
|
-
this._queue = [];
|
243
|
-
this.targetQueues = {};
|
244
|
-
this._queueBeingFlushed = undefined;
|
245
|
-
}
|
246
|
-
|
247
|
-
Queue.prototype = {
|
248
|
-
push: function (target, method, args, stack) {
|
249
|
-
var queue = this._queue;
|
250
|
-
queue.push(target, method, args, stack);
|
251
|
-
|
252
|
-
return {
|
253
|
-
queue: this,
|
254
|
-
target: target,
|
255
|
-
method: method
|
256
|
-
};
|
257
|
-
},
|
321
|
+
var length = arguments.length;
|
322
|
+
var method, target;
|
258
323
|
|
259
|
-
|
260
|
-
|
324
|
+
if (length === 1) {
|
325
|
+
method = arguments[0];
|
326
|
+
target = null;
|
327
|
+
} else {
|
328
|
+
target = arguments[0];
|
329
|
+
method = arguments[1];
|
330
|
+
}
|
261
331
|
|
262
|
-
|
263
|
-
|
264
|
-
|
332
|
+
if (_backburnerUtils.isString(method)) {
|
333
|
+
method = target[method];
|
334
|
+
}
|
265
335
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
336
|
+
if (length === 1) {
|
337
|
+
return method();
|
338
|
+
} else if (length === 2) {
|
339
|
+
return method.call(target);
|
340
|
+
} else {
|
341
|
+
var args = new Array(length - 2);
|
342
|
+
for (var i = 0, l = length - 2; i < l; i++) {
|
343
|
+
args[i] = arguments[i + 2];
|
270
344
|
}
|
345
|
+
return method.apply(target, args);
|
271
346
|
}
|
272
|
-
|
273
|
-
queue.push(target, method, args, stack);
|
274
347
|
},
|
275
348
|
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
349
|
+
/*
|
350
|
+
Defer the passed function to run inside the specified queue.
|
351
|
+
@method defer
|
352
|
+
@param {String} queueName
|
353
|
+
@param {Object} target
|
354
|
+
@param {Function|String} method The method or method name to be executed
|
355
|
+
@param {any} args The method arguments
|
356
|
+
@return method result
|
357
|
+
*/
|
358
|
+
defer: function (queueName /* , target, method, args */) {
|
359
|
+
var length = arguments.length;
|
360
|
+
var method, target, args;
|
282
361
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
362
|
+
if (length === 2) {
|
363
|
+
method = arguments[1];
|
364
|
+
target = null;
|
365
|
+
} else {
|
366
|
+
target = arguments[1];
|
367
|
+
method = arguments[2];
|
288
368
|
}
|
289
369
|
|
290
|
-
|
291
|
-
|
370
|
+
if (_backburnerUtils.isString(method)) {
|
371
|
+
method = target[method];
|
372
|
+
}
|
292
373
|
|
293
|
-
|
294
|
-
var hasLocalQueue = this.targetQueues[guid];
|
374
|
+
var stack = this.DEBUG ? new Error() : undefined;
|
295
375
|
|
296
|
-
if (
|
297
|
-
|
376
|
+
if (length > 3) {
|
377
|
+
args = new Array(length - 3);
|
378
|
+
for (var i = 3; i < length; i++) {
|
379
|
+
args[i - 3] = arguments[i];
|
380
|
+
}
|
298
381
|
} else {
|
299
|
-
|
382
|
+
args = undefined;
|
300
383
|
}
|
301
384
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
};
|
385
|
+
if (!this.currentInstance) {
|
386
|
+
createAutorun(this);
|
387
|
+
}
|
388
|
+
return this.currentInstance.schedule(queueName, target, method, args, false, stack);
|
307
389
|
},
|
308
390
|
|
309
|
-
|
310
|
-
var
|
391
|
+
deferOnce: function (queueName /* , target, method, args */) {
|
392
|
+
var length = arguments.length;
|
393
|
+
var method, target, args;
|
311
394
|
|
312
|
-
if (
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
395
|
+
if (length === 2) {
|
396
|
+
method = arguments[1];
|
397
|
+
target = null;
|
398
|
+
} else {
|
399
|
+
target = arguments[1];
|
400
|
+
method = arguments[2];
|
317
401
|
}
|
318
402
|
|
319
|
-
|
403
|
+
if (_backburnerUtils.isString(method)) {
|
404
|
+
method = target[method];
|
405
|
+
}
|
320
406
|
|
321
|
-
|
322
|
-
queue: this,
|
323
|
-
target: target,
|
324
|
-
method: method
|
325
|
-
};
|
326
|
-
},
|
407
|
+
var stack = this.DEBUG ? new Error() : undefined;
|
327
408
|
|
328
|
-
|
329
|
-
|
330
|
-
|
409
|
+
if (length > 3) {
|
410
|
+
args = new Array(length - 3);
|
411
|
+
for (var i = 3; i < length; i++) {
|
412
|
+
args[i - 3] = arguments[i];
|
413
|
+
}
|
331
414
|
} else {
|
332
|
-
|
415
|
+
args = undefined;
|
333
416
|
}
|
334
|
-
},
|
335
417
|
|
336
|
-
|
337
|
-
|
338
|
-
if (args && args.length > 0) {
|
339
|
-
method.apply(target, args);
|
340
|
-
} else {
|
341
|
-
method.call(target);
|
342
|
-
}
|
343
|
-
} catch (error) {
|
344
|
-
onError(error, errorRecordedForStack);
|
418
|
+
if (!this.currentInstance) {
|
419
|
+
createAutorun(this);
|
345
420
|
}
|
421
|
+
return this.currentInstance.schedule(queueName, target, method, args, true, stack);
|
346
422
|
},
|
347
423
|
|
348
|
-
|
349
|
-
var
|
350
|
-
var
|
424
|
+
setTimeout: function () {
|
425
|
+
var l = arguments.length;
|
426
|
+
var args = new Array(l);
|
351
427
|
|
352
|
-
|
353
|
-
|
428
|
+
for (var x = 0; x < l; x++) {
|
429
|
+
args[x] = arguments[x];
|
354
430
|
}
|
355
431
|
|
356
|
-
var
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
this.targetQueues = Object.create(null);
|
365
|
-
var queueItems = this._queueBeingFlushed = this._queue.slice();
|
366
|
-
this._queue = [];
|
367
|
-
|
368
|
-
if (before) {
|
369
|
-
before();
|
370
|
-
}
|
432
|
+
var length = args.length,
|
433
|
+
method,
|
434
|
+
wait,
|
435
|
+
target,
|
436
|
+
methodOrTarget,
|
437
|
+
methodOrWait,
|
438
|
+
methodOrArgs;
|
371
439
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
440
|
+
if (length === 0) {
|
441
|
+
return;
|
442
|
+
} else if (length === 1) {
|
443
|
+
method = args.shift();
|
444
|
+
wait = 0;
|
445
|
+
} else if (length === 2) {
|
446
|
+
methodOrTarget = args[0];
|
447
|
+
methodOrWait = args[1];
|
377
448
|
|
378
|
-
if (_backburnerUtils.
|
379
|
-
|
449
|
+
if (_backburnerUtils.isFunction(methodOrWait) || _backburnerUtils.isFunction(methodOrTarget[methodOrWait])) {
|
450
|
+
target = args.shift();
|
451
|
+
method = args.shift();
|
452
|
+
wait = 0;
|
453
|
+
} else if (_backburnerUtils.isCoercableNumber(methodOrWait)) {
|
454
|
+
method = args.shift();
|
455
|
+
wait = args.shift();
|
456
|
+
} else {
|
457
|
+
method = args.shift();
|
458
|
+
wait = 0;
|
380
459
|
}
|
460
|
+
} else {
|
461
|
+
var last = args[args.length - 1];
|
381
462
|
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
//
|
387
|
-
// To find out the stack of this task when it was scheduled onto
|
388
|
-
// the run loop, add the following to your app.js:
|
389
|
-
//
|
390
|
-
// Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
|
391
|
-
//
|
392
|
-
// Once that is in place, when you are at a breakpoint and navigate
|
393
|
-
// here in the stack explorer, you can look at `errorRecordedForStack.stack`,
|
394
|
-
// which will be the captured stack when this job was scheduled.
|
395
|
-
//
|
396
|
-
invoke(target, method, args, onError, errorRecordedForStack);
|
463
|
+
if (_backburnerUtils.isCoercableNumber(last)) {
|
464
|
+
wait = args.pop();
|
465
|
+
} else {
|
466
|
+
wait = 0;
|
397
467
|
}
|
398
|
-
}
|
399
468
|
|
400
|
-
|
401
|
-
|
469
|
+
methodOrTarget = args[0];
|
470
|
+
methodOrArgs = args[1];
|
471
|
+
|
472
|
+
if (_backburnerUtils.isFunction(methodOrArgs) || _backburnerUtils.isString(methodOrArgs) && methodOrTarget !== null && methodOrArgs in methodOrTarget) {
|
473
|
+
target = args.shift();
|
474
|
+
method = args.shift();
|
475
|
+
} else {
|
476
|
+
method = args.shift();
|
477
|
+
}
|
402
478
|
}
|
403
479
|
|
404
|
-
|
480
|
+
var executeAt = Date.now() + parseInt(wait !== wait ? 0 : wait, 10);
|
405
481
|
|
406
|
-
if (
|
407
|
-
|
408
|
-
this.flush(true);
|
482
|
+
if (_backburnerUtils.isString(method)) {
|
483
|
+
method = target[method];
|
409
484
|
}
|
410
|
-
},
|
411
485
|
|
412
|
-
|
413
|
-
var queue = this._queue,
|
414
|
-
currentTarget,
|
415
|
-
currentMethod,
|
416
|
-
i,
|
417
|
-
l;
|
418
|
-
var target = actionToCancel.target;
|
419
|
-
var method = actionToCancel.method;
|
420
|
-
var GUID_KEY = this.globalOptions.GUID_KEY;
|
421
|
-
|
422
|
-
if (GUID_KEY && this.targetQueues && target) {
|
423
|
-
var targetQueue = this.targetQueues[target[GUID_KEY]];
|
486
|
+
var onError = getOnError(this.options);
|
424
487
|
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
488
|
+
function fn() {
|
489
|
+
if (onError) {
|
490
|
+
try {
|
491
|
+
method.apply(target, args);
|
492
|
+
} catch (e) {
|
493
|
+
onError(e);
|
430
494
|
}
|
495
|
+
} else {
|
496
|
+
method.apply(target, args);
|
431
497
|
}
|
432
498
|
}
|
433
499
|
|
434
|
-
|
435
|
-
|
436
|
-
currentMethod = queue[i + 1];
|
500
|
+
return this._setTimeout(fn, executeAt);
|
501
|
+
},
|
437
502
|
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
503
|
+
_setTimeout: function (fn, executeAt) {
|
504
|
+
if (this._timers.length === 0) {
|
505
|
+
this._timers.push(executeAt, fn);
|
506
|
+
this._installTimerTimeout();
|
507
|
+
return fn;
|
442
508
|
}
|
443
509
|
|
444
|
-
//
|
445
|
-
|
446
|
-
queue = this._queueBeingFlushed;
|
510
|
+
// find position to insert
|
511
|
+
var i = _backburnerBinarySearch.default(executeAt, this._timers);
|
447
512
|
|
448
|
-
|
449
|
-
|
513
|
+
this._timers.splice(i, 0, executeAt, fn);
|
514
|
+
|
515
|
+
// we should be the new earliest timer if i == 0
|
516
|
+
if (i === 0) {
|
517
|
+
this._reinstallTimerTimeout();
|
450
518
|
}
|
451
519
|
|
452
|
-
|
453
|
-
|
454
|
-
currentMethod = queue[i + 1];
|
520
|
+
return fn;
|
521
|
+
},
|
455
522
|
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
}
|
523
|
+
throttle: function (target, method /* , args, wait, [immediate] */) {
|
524
|
+
var backburner = this;
|
525
|
+
var args = new Array(arguments.length);
|
526
|
+
for (var i = 0; i < arguments.length; i++) {
|
527
|
+
args[i] = arguments[i];
|
462
528
|
}
|
463
|
-
|
464
|
-
|
465
|
-
});
|
466
|
-
enifed('backburner/utils', ['exports'], function (exports) {
|
467
|
-
'use strict';
|
468
|
-
|
469
|
-
exports.each = each;
|
470
|
-
exports.isString = isString;
|
471
|
-
exports.isFunction = isFunction;
|
472
|
-
exports.isNumber = isNumber;
|
473
|
-
exports.isCoercableNumber = isCoercableNumber;
|
474
|
-
var NUMBER = /\d+/;
|
529
|
+
var immediate = args.pop();
|
530
|
+
var wait, throttler, index, timer;
|
475
531
|
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
532
|
+
if (_backburnerUtils.isNumber(immediate) || _backburnerUtils.isString(immediate)) {
|
533
|
+
wait = immediate;
|
534
|
+
immediate = true;
|
535
|
+
} else {
|
536
|
+
wait = args.pop();
|
537
|
+
}
|
481
538
|
|
482
|
-
|
483
|
-
return typeof suspect === 'string';
|
484
|
-
}
|
539
|
+
wait = parseInt(wait, 10);
|
485
540
|
|
486
|
-
|
487
|
-
|
488
|
-
|
541
|
+
index = findThrottler(target, method, this._throttlers);
|
542
|
+
if (index > -1) {
|
543
|
+
return this._throttlers[index];
|
544
|
+
} // throttled
|
489
545
|
|
490
|
-
|
491
|
-
|
492
|
-
|
546
|
+
timer = this._platform.setTimeout(function () {
|
547
|
+
if (!immediate) {
|
548
|
+
backburner.run.apply(backburner, args);
|
549
|
+
}
|
550
|
+
var index = findThrottler(target, method, backburner._throttlers);
|
551
|
+
if (index > -1) {
|
552
|
+
backburner._throttlers.splice(index, 1);
|
553
|
+
}
|
554
|
+
}, wait);
|
493
555
|
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
});
|
498
|
-
enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'backburner/binary-search', 'backburner/deferred-action-queues'], function (exports, _backburnerUtils, _backburnerPlatform, _backburnerBinarySearch, _backburnerDeferredActionQueues) {
|
499
|
-
'use strict';
|
556
|
+
if (immediate) {
|
557
|
+
this.run.apply(this, args);
|
558
|
+
}
|
500
559
|
|
501
|
-
|
560
|
+
throttler = [target, method, timer];
|
502
561
|
|
503
|
-
|
504
|
-
this.queueNames = queueNames;
|
505
|
-
this.options = options || {};
|
506
|
-
if (!this.options.defaultQueue) {
|
507
|
-
this.options.defaultQueue = queueNames[0];
|
508
|
-
}
|
509
|
-
this.instanceStack = [];
|
510
|
-
this._debouncees = [];
|
511
|
-
this._throttlers = [];
|
512
|
-
this._eventCallbacks = {
|
513
|
-
end: [],
|
514
|
-
begin: []
|
515
|
-
};
|
562
|
+
this._throttlers.push(throttler);
|
516
563
|
|
517
|
-
|
518
|
-
|
519
|
-
clearItems();
|
520
|
-
};
|
564
|
+
return throttler;
|
565
|
+
},
|
521
566
|
|
522
|
-
|
523
|
-
|
567
|
+
debounce: function (target, method /* , args, wait, [immediate] */) {
|
568
|
+
var backburner = this;
|
569
|
+
var args = new Array(arguments.length);
|
570
|
+
for (var i = 0; i < arguments.length; i++) {
|
571
|
+
args[i] = arguments[i];
|
572
|
+
}
|
524
573
|
|
525
|
-
|
574
|
+
var immediate = args.pop();
|
575
|
+
var wait, index, debouncee, timer;
|
526
576
|
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
577
|
+
if (_backburnerUtils.isNumber(immediate) || _backburnerUtils.isString(immediate)) {
|
578
|
+
wait = immediate;
|
579
|
+
immediate = false;
|
580
|
+
} else {
|
581
|
+
wait = args.pop();
|
582
|
+
}
|
531
583
|
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
var onBegin = options && options.onBegin;
|
536
|
-
var previousInstance = this.currentInstance;
|
584
|
+
wait = parseInt(wait, 10);
|
585
|
+
// Remove debouncee
|
586
|
+
index = findDebouncee(target, method, this._debouncees);
|
537
587
|
|
538
|
-
if (
|
539
|
-
this.
|
588
|
+
if (index > -1) {
|
589
|
+
debouncee = this._debouncees[index];
|
590
|
+
this._debouncees.splice(index, 1);
|
591
|
+
this._platform.clearTimeout(debouncee[2]);
|
540
592
|
}
|
541
593
|
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
594
|
+
timer = this._platform.setTimeout(function () {
|
595
|
+
if (!immediate) {
|
596
|
+
backburner.run.apply(backburner, args);
|
597
|
+
}
|
598
|
+
var index = findDebouncee(target, method, backburner._debouncees);
|
599
|
+
if (index > -1) {
|
600
|
+
backburner._debouncees.splice(index, 1);
|
601
|
+
}
|
602
|
+
}, wait);
|
603
|
+
|
604
|
+
if (immediate && index === -1) {
|
605
|
+
backburner.run.apply(backburner, args);
|
546
606
|
}
|
607
|
+
|
608
|
+
debouncee = [target, method, timer];
|
609
|
+
|
610
|
+
backburner._debouncees.push(debouncee);
|
611
|
+
|
612
|
+
return debouncee;
|
547
613
|
},
|
548
614
|
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
var currentInstance = this.currentInstance;
|
553
|
-
var nextInstance = null;
|
615
|
+
cancelTimers: function () {
|
616
|
+
_backburnerUtils.each(this._throttlers, this._boundClearItems);
|
617
|
+
this._throttlers = [];
|
554
618
|
|
555
|
-
|
556
|
-
|
557
|
-
var finallyAlreadyCalled = false;
|
558
|
-
try {
|
559
|
-
currentInstance.flush();
|
560
|
-
} finally {
|
561
|
-
if (!finallyAlreadyCalled) {
|
562
|
-
finallyAlreadyCalled = true;
|
619
|
+
_backburnerUtils.each(this._debouncees, this._boundClearItems);
|
620
|
+
this._debouncees = [];
|
563
621
|
|
564
|
-
|
622
|
+
this._clearTimerTimeout();
|
623
|
+
this._timers = [];
|
565
624
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
}
|
570
|
-
this._trigger('end', currentInstance, nextInstance);
|
571
|
-
if (onEnd) {
|
572
|
-
onEnd(currentInstance, nextInstance);
|
573
|
-
}
|
574
|
-
}
|
625
|
+
if (this._autorun) {
|
626
|
+
this._platform.clearTimeout(this._autorun);
|
627
|
+
this._autorun = null;
|
575
628
|
}
|
576
629
|
},
|
577
630
|
|
578
|
-
|
579
|
-
|
580
|
-
triggering transition events from one run loop instance to the
|
581
|
-
next, which requires an argument for the first instance and then
|
582
|
-
an argument for the next instance.
|
583
|
-
@private
|
584
|
-
@method _trigger
|
585
|
-
@param {String} eventName
|
586
|
-
@param {any} arg1
|
587
|
-
@param {any} arg2
|
588
|
-
*/
|
589
|
-
_trigger: function (eventName, arg1, arg2) {
|
590
|
-
var callbacks = this._eventCallbacks[eventName];
|
591
|
-
if (callbacks) {
|
592
|
-
for (var i = 0; i < callbacks.length; i++) {
|
593
|
-
callbacks[i](arg1, arg2);
|
594
|
-
}
|
595
|
-
}
|
596
|
-
},
|
597
|
-
|
598
|
-
on: function (eventName, callback) {
|
599
|
-
if (typeof callback !== 'function') {
|
600
|
-
throw new TypeError('Callback must be a function');
|
601
|
-
}
|
602
|
-
var callbacks = this._eventCallbacks[eventName];
|
603
|
-
if (callbacks) {
|
604
|
-
callbacks.push(callback);
|
605
|
-
} else {
|
606
|
-
throw new TypeError('Cannot on() event "' + eventName + '" because it does not exist');
|
607
|
-
}
|
631
|
+
hasTimers: function () {
|
632
|
+
return !!this._timers.length || !!this._debouncees.length || !!this._throttlers.length || this._autorun;
|
608
633
|
},
|
609
634
|
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
635
|
+
cancel: function (timer) {
|
636
|
+
var timerType = typeof timer;
|
637
|
+
|
638
|
+
if (timer && timerType === 'object' && timer.queue && timer.method) {
|
639
|
+
// we're cancelling a deferOnce
|
640
|
+
return timer.queue.cancel(timer);
|
641
|
+
} else if (timerType === 'function') {
|
642
|
+
// we're cancelling a setTimeout
|
643
|
+
for (var i = 0, l = this._timers.length; i < l; i += 2) {
|
644
|
+
if (this._timers[i + 1] === timer) {
|
645
|
+
this._timers.splice(i, 2); // remove the two elements
|
646
|
+
if (i === 0) {
|
647
|
+
this._reinstallTimerTimeout();
|
621
648
|
}
|
649
|
+
return true;
|
622
650
|
}
|
623
651
|
}
|
624
|
-
|
625
|
-
|
626
|
-
|
652
|
+
} else if (Object.prototype.toString.call(timer) === '[object Array]') {
|
653
|
+
// we're cancelling a throttle or debounce
|
654
|
+
return this._cancelItem(findThrottler, this._throttlers, timer) || this._cancelItem(findDebouncee, this._debouncees, timer);
|
627
655
|
} else {
|
628
|
-
|
656
|
+
return; // timer was null or not a timer
|
629
657
|
}
|
630
658
|
},
|
631
659
|
|
632
|
-
|
633
|
-
var
|
634
|
-
var method, target, args;
|
635
|
-
|
636
|
-
if (length === 1) {
|
637
|
-
method = arguments[0];
|
638
|
-
target = null;
|
639
|
-
} else {
|
640
|
-
target = arguments[0];
|
641
|
-
method = arguments[1];
|
642
|
-
}
|
643
|
-
|
644
|
-
if (_backburnerUtils.isString(method)) {
|
645
|
-
method = target[method];
|
646
|
-
}
|
660
|
+
_cancelItem: function (findMethod, array, timer) {
|
661
|
+
var item, index;
|
647
662
|
|
648
|
-
if (length
|
649
|
-
|
650
|
-
for (var i = 0, l = length - 2; i < l; i++) {
|
651
|
-
args[i] = arguments[i + 2];
|
652
|
-
}
|
653
|
-
} else {
|
654
|
-
args = [];
|
663
|
+
if (timer.length < 3) {
|
664
|
+
return false;
|
655
665
|
}
|
656
666
|
|
657
|
-
|
667
|
+
index = findMethod(timer[0], timer[1], array);
|
658
668
|
|
659
|
-
|
669
|
+
if (index > -1) {
|
660
670
|
|
661
|
-
|
662
|
-
var didFinally = false;
|
671
|
+
item = array[index];
|
663
672
|
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
onError(error);
|
669
|
-
} finally {
|
670
|
-
if (!didFinally) {
|
671
|
-
didFinally = true;
|
672
|
-
this.end();
|
673
|
-
}
|
674
|
-
}
|
675
|
-
} else {
|
676
|
-
try {
|
677
|
-
return method.apply(target, args);
|
678
|
-
} finally {
|
679
|
-
if (!didFinally) {
|
680
|
-
didFinally = true;
|
681
|
-
this.end();
|
682
|
-
}
|
673
|
+
if (item[2] === timer[2]) {
|
674
|
+
array.splice(index, 1);
|
675
|
+
this._platform.clearTimeout(timer[2]);
|
676
|
+
return true;
|
683
677
|
}
|
684
678
|
}
|
685
|
-
},
|
686
|
-
|
687
|
-
/*
|
688
|
-
Join the passed method with an existing queue and execute immediately,
|
689
|
-
if there isn't one use `Backburner#run`.
|
690
|
-
The join method is like the run method except that it will schedule into
|
691
|
-
an existing queue if one already exists. In either case, the join method will
|
692
|
-
immediately execute the passed in function and return its result.
|
693
|
-
@method join
|
694
|
-
@param {Object} target
|
695
|
-
@param {Function} method The method to be executed
|
696
|
-
@param {any} args The method arguments
|
697
|
-
@return method result
|
698
|
-
*/
|
699
|
-
join: function () /* target, method, args */{
|
700
|
-
if (!this.currentInstance) {
|
701
|
-
return this.run.apply(this, arguments);
|
702
|
-
}
|
703
679
|
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
if (length === 1) {
|
708
|
-
method = arguments[0];
|
709
|
-
target = null;
|
710
|
-
} else {
|
711
|
-
target = arguments[0];
|
712
|
-
method = arguments[1];
|
713
|
-
}
|
680
|
+
return false;
|
681
|
+
},
|
714
682
|
|
715
|
-
|
716
|
-
|
717
|
-
|
683
|
+
_runExpiredTimers: function () {
|
684
|
+
this._timerTimeoutId = undefined;
|
685
|
+
this.run(this, this._scheduleExpiredTimers);
|
686
|
+
},
|
718
687
|
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
688
|
+
_scheduleExpiredTimers: function () {
|
689
|
+
var n = Date.now();
|
690
|
+
var timers = this._timers;
|
691
|
+
var i = 0;
|
692
|
+
var l = timers.length;
|
693
|
+
for (; i < l; i += 2) {
|
694
|
+
var executeAt = timers[i];
|
695
|
+
var fn = timers[i + 1];
|
696
|
+
if (executeAt <= n) {
|
697
|
+
this.schedule(this.options.defaultQueue, null, fn);
|
698
|
+
} else {
|
699
|
+
break;
|
727
700
|
}
|
728
|
-
return method.apply(target, args);
|
729
701
|
}
|
702
|
+
timers.splice(0, i);
|
703
|
+
this._installTimerTimeout();
|
730
704
|
},
|
731
705
|
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
@param {Object} target
|
737
|
-
@param {Function|String} method The method or method name to be executed
|
738
|
-
@param {any} args The method arguments
|
739
|
-
@return method result
|
740
|
-
*/
|
741
|
-
defer: function (queueName /* , target, method, args */) {
|
742
|
-
var length = arguments.length;
|
743
|
-
var method, target, args;
|
706
|
+
_reinstallTimerTimeout: function () {
|
707
|
+
this._clearTimerTimeout();
|
708
|
+
this._installTimerTimeout();
|
709
|
+
},
|
744
710
|
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
} else {
|
749
|
-
target = arguments[1];
|
750
|
-
method = arguments[2];
|
711
|
+
_clearTimerTimeout: function () {
|
712
|
+
if (!this._timerTimeoutId) {
|
713
|
+
return;
|
751
714
|
}
|
715
|
+
this._platform.clearTimeout(this._timerTimeoutId);
|
716
|
+
this._timerTimeoutId = undefined;
|
717
|
+
},
|
752
718
|
|
753
|
-
|
754
|
-
|
719
|
+
_installTimerTimeout: function () {
|
720
|
+
if (!this._timers.length) {
|
721
|
+
return;
|
755
722
|
}
|
723
|
+
var minExpiresAt = this._timers[0];
|
724
|
+
var n = Date.now();
|
725
|
+
var wait = Math.max(0, minExpiresAt - n);
|
726
|
+
this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);
|
727
|
+
}
|
728
|
+
};
|
756
729
|
|
757
|
-
|
730
|
+
Backburner.prototype.schedule = Backburner.prototype.defer;
|
731
|
+
Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce;
|
732
|
+
Backburner.prototype.later = Backburner.prototype.setTimeout;
|
758
733
|
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
args[i - 3] = arguments[i];
|
763
|
-
}
|
764
|
-
} else {
|
765
|
-
args = undefined;
|
766
|
-
}
|
734
|
+
function getOnError(options) {
|
735
|
+
return options.onError || options.onErrorTarget && options.onErrorTarget[options.onErrorMethod];
|
736
|
+
}
|
767
737
|
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
738
|
+
function createAutorun(backburner) {
|
739
|
+
backburner.begin();
|
740
|
+
backburner._autorun = backburner._platform.setTimeout(function () {
|
741
|
+
backburner._autorun = null;
|
742
|
+
backburner.end();
|
743
|
+
});
|
744
|
+
}
|
773
745
|
|
774
|
-
|
775
|
-
|
776
|
-
|
746
|
+
function findDebouncee(target, method, debouncees) {
|
747
|
+
return findItem(target, method, debouncees);
|
748
|
+
}
|
777
749
|
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
} else {
|
782
|
-
target = arguments[1];
|
783
|
-
method = arguments[2];
|
784
|
-
}
|
750
|
+
function findThrottler(target, method, throttlers) {
|
751
|
+
return findItem(target, method, throttlers);
|
752
|
+
}
|
785
753
|
|
786
|
-
|
787
|
-
|
754
|
+
function findItem(target, method, collection) {
|
755
|
+
var item;
|
756
|
+
var index = -1;
|
757
|
+
|
758
|
+
for (var i = 0, l = collection.length; i < l; i++) {
|
759
|
+
item = collection[i];
|
760
|
+
if (item[0] === target && item[1] === method) {
|
761
|
+
index = i;
|
762
|
+
break;
|
788
763
|
}
|
764
|
+
}
|
789
765
|
|
790
|
-
|
791
|
-
|
792
|
-
if (length > 3) {
|
793
|
-
args = new Array(length - 3);
|
794
|
-
for (var i = 3; i < length; i++) {
|
795
|
-
args[i - 3] = arguments[i];
|
796
|
-
}
|
797
|
-
} else {
|
798
|
-
args = undefined;
|
799
|
-
}
|
766
|
+
return index;
|
767
|
+
}
|
800
768
|
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
769
|
+
function clearItems(item) {
|
770
|
+
this._platform.clearTimeout(item[2]);
|
771
|
+
}
|
772
|
+
});
|
773
|
+
enifed("backburner/binary-search", ["exports"], function (exports) {
|
774
|
+
"use strict";
|
806
775
|
|
807
|
-
|
808
|
-
var l = arguments.length;
|
809
|
-
var args = new Array(l);
|
776
|
+
exports.default = binarySearch;
|
810
777
|
|
811
|
-
|
812
|
-
|
813
|
-
|
778
|
+
function binarySearch(time, timers) {
|
779
|
+
var start = 0;
|
780
|
+
var end = timers.length - 2;
|
781
|
+
var middle, l;
|
814
782
|
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
methodOrTarget,
|
820
|
-
methodOrWait,
|
821
|
-
methodOrArgs;
|
783
|
+
while (start < end) {
|
784
|
+
// since timers is an array of pairs 'l' will always
|
785
|
+
// be an integer
|
786
|
+
l = (end - start) / 2;
|
822
787
|
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
method = args.shift();
|
827
|
-
wait = 0;
|
828
|
-
} else if (length === 2) {
|
829
|
-
methodOrTarget = args[0];
|
830
|
-
methodOrWait = args[1];
|
788
|
+
// compensate for the index in case even number
|
789
|
+
// of pairs inside timers
|
790
|
+
middle = start + l - l % 2;
|
831
791
|
|
832
|
-
|
833
|
-
|
834
|
-
method = args.shift();
|
835
|
-
wait = 0;
|
836
|
-
} else if (_backburnerUtils.isCoercableNumber(methodOrWait)) {
|
837
|
-
method = args.shift();
|
838
|
-
wait = args.shift();
|
839
|
-
} else {
|
840
|
-
method = args.shift();
|
841
|
-
wait = 0;
|
842
|
-
}
|
792
|
+
if (time >= timers[middle]) {
|
793
|
+
start = middle + 2;
|
843
794
|
} else {
|
844
|
-
|
845
|
-
|
846
|
-
if (_backburnerUtils.isCoercableNumber(last)) {
|
847
|
-
wait = args.pop();
|
848
|
-
} else {
|
849
|
-
wait = 0;
|
850
|
-
}
|
851
|
-
|
852
|
-
methodOrTarget = args[0];
|
853
|
-
methodOrArgs = args[1];
|
854
|
-
|
855
|
-
if (_backburnerUtils.isFunction(methodOrArgs) || _backburnerUtils.isString(methodOrArgs) && methodOrTarget !== null && methodOrArgs in methodOrTarget) {
|
856
|
-
target = args.shift();
|
857
|
-
method = args.shift();
|
858
|
-
} else {
|
859
|
-
method = args.shift();
|
860
|
-
}
|
795
|
+
end = middle;
|
861
796
|
}
|
797
|
+
}
|
862
798
|
|
863
|
-
|
799
|
+
return time >= timers[start] ? start + 2 : start;
|
800
|
+
}
|
801
|
+
});
|
802
|
+
enifed('backburner/deferred-action-queues', ['exports', 'backburner/utils', 'backburner/queue'], function (exports, _backburnerUtils, _backburnerQueue) {
|
803
|
+
'use strict';
|
864
804
|
|
865
|
-
|
866
|
-
method = target[method];
|
867
|
-
}
|
805
|
+
exports.default = DeferredActionQueues;
|
868
806
|
|
869
|
-
|
807
|
+
function DeferredActionQueues(queueNames, options) {
|
808
|
+
var queues = this.queues = {};
|
809
|
+
this.queueNames = queueNames = queueNames || [];
|
870
810
|
|
871
|
-
|
872
|
-
if (onError) {
|
873
|
-
try {
|
874
|
-
method.apply(target, args);
|
875
|
-
} catch (e) {
|
876
|
-
onError(e);
|
877
|
-
}
|
878
|
-
} else {
|
879
|
-
method.apply(target, args);
|
880
|
-
}
|
881
|
-
}
|
811
|
+
this.options = options;
|
882
812
|
|
883
|
-
|
884
|
-
|
813
|
+
_backburnerUtils.each(queueNames, function (queueName) {
|
814
|
+
queues[queueName] = new _backburnerQueue.default(queueName, options[queueName], options);
|
815
|
+
});
|
816
|
+
}
|
885
817
|
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
this._installTimerTimeout();
|
890
|
-
return fn;
|
891
|
-
}
|
818
|
+
function noSuchQueue(name) {
|
819
|
+
throw new Error('You attempted to schedule an action in a queue (' + name + ') that doesn\'t exist');
|
820
|
+
}
|
892
821
|
|
893
|
-
|
894
|
-
|
822
|
+
function noSuchMethod(name) {
|
823
|
+
throw new Error('You attempted to schedule an action in a queue (' + name + ') for a method that doesn\'t exist');
|
824
|
+
}
|
895
825
|
|
896
|
-
|
826
|
+
DeferredActionQueues.prototype = {
|
827
|
+
schedule: function (name, target, method, args, onceFlag, stack) {
|
828
|
+
var queues = this.queues;
|
829
|
+
var queue = queues[name];
|
897
830
|
|
898
|
-
|
899
|
-
|
900
|
-
this._reinstallTimerTimeout();
|
831
|
+
if (!queue) {
|
832
|
+
noSuchQueue(name);
|
901
833
|
}
|
902
834
|
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
throttle: function (target, method /* , args, wait, [immediate] */) {
|
907
|
-
var backburner = this;
|
908
|
-
var args = new Array(arguments.length);
|
909
|
-
for (var i = 0; i < arguments.length; i++) {
|
910
|
-
args[i] = arguments[i];
|
835
|
+
if (!method) {
|
836
|
+
noSuchMethod(name);
|
911
837
|
}
|
912
|
-
var immediate = args.pop();
|
913
|
-
var wait, throttler, index, timer;
|
914
838
|
|
915
|
-
if (
|
916
|
-
|
917
|
-
immediate = true;
|
839
|
+
if (onceFlag) {
|
840
|
+
return queue.pushUnique(target, method, args, stack);
|
918
841
|
} else {
|
919
|
-
|
842
|
+
return queue.push(target, method, args, stack);
|
920
843
|
}
|
844
|
+
},
|
921
845
|
|
922
|
-
|
846
|
+
flush: function () {
|
847
|
+
var queues = this.queues;
|
848
|
+
var queueNames = this.queueNames;
|
849
|
+
var queueName, queue;
|
850
|
+
var queueNameIndex = 0;
|
851
|
+
var numberOfQueues = queueNames.length;
|
923
852
|
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
} // throttled
|
853
|
+
while (queueNameIndex < numberOfQueues) {
|
854
|
+
queueName = queueNames[queueNameIndex];
|
855
|
+
queue = queues[queueName];
|
928
856
|
|
929
|
-
|
930
|
-
if (!immediate) {
|
931
|
-
backburner.run.apply(backburner, args);
|
932
|
-
}
|
933
|
-
var index = findThrottler(target, method, backburner._throttlers);
|
934
|
-
if (index > -1) {
|
935
|
-
backburner._throttlers.splice(index, 1);
|
936
|
-
}
|
937
|
-
}, wait);
|
857
|
+
var numberOfQueueItems = queue._queue.length;
|
938
858
|
|
939
|
-
|
940
|
-
|
859
|
+
if (numberOfQueueItems === 0) {
|
860
|
+
queueNameIndex++;
|
861
|
+
} else {
|
862
|
+
queue.flush(false /* async */);
|
863
|
+
queueNameIndex = 0;
|
864
|
+
}
|
941
865
|
}
|
866
|
+
}
|
867
|
+
};
|
868
|
+
});
|
869
|
+
enifed('backburner/platform', ['exports'], function (exports) {
|
870
|
+
'use strict';
|
942
871
|
|
943
|
-
|
872
|
+
var GlobalContext;
|
944
873
|
|
945
|
-
|
874
|
+
/* global self */
|
875
|
+
if (typeof self === 'object') {
|
876
|
+
GlobalContext = self;
|
946
877
|
|
947
|
-
|
948
|
-
|
878
|
+
/* global global */
|
879
|
+
} else if (typeof global === 'object') {
|
880
|
+
GlobalContext = global;
|
949
881
|
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
882
|
+
/* global window */
|
883
|
+
} else if (typeof window === 'object') {
|
884
|
+
GlobalContext = window;
|
885
|
+
} else {
|
886
|
+
throw new Error('no global: `self`, `global` nor `window` was found');
|
955
887
|
}
|
956
888
|
|
957
|
-
|
958
|
-
|
889
|
+
exports.default = GlobalContext;
|
890
|
+
});
|
891
|
+
enifed('backburner/queue', ['exports', 'backburner/utils'], function (exports, _backburnerUtils) {
|
892
|
+
'use strict';
|
959
893
|
|
960
|
-
|
961
|
-
wait = immediate;
|
962
|
-
immediate = false;
|
963
|
-
} else {
|
964
|
-
wait = args.pop();
|
965
|
-
}
|
894
|
+
exports.default = Queue;
|
966
895
|
|
967
|
-
|
968
|
-
|
969
|
-
|
896
|
+
function Queue(name, options, globalOptions) {
|
897
|
+
this.name = name;
|
898
|
+
this.globalOptions = globalOptions || {};
|
899
|
+
this.options = options;
|
900
|
+
this._queue = [];
|
901
|
+
this.targetQueues = {};
|
902
|
+
this._queueBeingFlushed = undefined;
|
903
|
+
}
|
970
904
|
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
}
|
905
|
+
Queue.prototype = {
|
906
|
+
push: function (target, method, args, stack) {
|
907
|
+
var queue = this._queue;
|
908
|
+
queue.push(target, method, args, stack);
|
976
909
|
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
if (index > -1) {
|
983
|
-
backburner._debouncees.splice(index, 1);
|
984
|
-
}
|
985
|
-
}, wait);
|
986
|
-
|
987
|
-
if (immediate && index === -1) {
|
988
|
-
backburner.run.apply(backburner, args);
|
989
|
-
}
|
990
|
-
|
991
|
-
debouncee = [target, method, timer];
|
992
|
-
|
993
|
-
backburner._debouncees.push(debouncee);
|
994
|
-
|
995
|
-
return debouncee;
|
910
|
+
return {
|
911
|
+
queue: this,
|
912
|
+
target: target,
|
913
|
+
method: method
|
914
|
+
};
|
996
915
|
},
|
997
916
|
|
998
|
-
|
999
|
-
|
1000
|
-
this._throttlers = [];
|
1001
|
-
|
1002
|
-
_backburnerUtils.each(this._debouncees, this._boundClearItems);
|
1003
|
-
this._debouncees = [];
|
917
|
+
pushUniqueWithoutGuid: function (target, method, args, stack) {
|
918
|
+
var queue = this._queue;
|
1004
919
|
|
1005
|
-
|
1006
|
-
|
920
|
+
for (var i = 0, l = queue.length; i < l; i += 4) {
|
921
|
+
var currentTarget = queue[i];
|
922
|
+
var currentMethod = queue[i + 1];
|
1007
923
|
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
924
|
+
if (currentTarget === target && currentMethod === method) {
|
925
|
+
queue[i + 2] = args; // replace args
|
926
|
+
queue[i + 3] = stack; // replace stack
|
927
|
+
return;
|
928
|
+
}
|
1011
929
|
}
|
1012
|
-
},
|
1013
930
|
|
1014
|
-
|
1015
|
-
return !!this._timers.length || !!this._debouncees.length || !!this._throttlers.length || this._autorun;
|
931
|
+
queue.push(target, method, args, stack);
|
1016
932
|
},
|
1017
933
|
|
1018
|
-
|
1019
|
-
var
|
934
|
+
targetQueue: function (targetQueue, target, method, args, stack) {
|
935
|
+
var queue = this._queue;
|
1020
936
|
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
if (i === 0) {
|
1030
|
-
this._reinstallTimerTimeout();
|
1031
|
-
}
|
1032
|
-
return true;
|
1033
|
-
}
|
937
|
+
for (var i = 0, l = targetQueue.length; i < l; i += 2) {
|
938
|
+
var currentMethod = targetQueue[i];
|
939
|
+
var currentIndex = targetQueue[i + 1];
|
940
|
+
|
941
|
+
if (currentMethod === method) {
|
942
|
+
queue[currentIndex + 2] = args; // replace args
|
943
|
+
queue[currentIndex + 3] = stack; // replace stack
|
944
|
+
return;
|
1034
945
|
}
|
1035
|
-
} else if (Object.prototype.toString.call(timer) === '[object Array]') {
|
1036
|
-
// we're cancelling a throttle or debounce
|
1037
|
-
return this._cancelItem(findThrottler, this._throttlers, timer) || this._cancelItem(findDebouncee, this._debouncees, timer);
|
1038
|
-
} else {
|
1039
|
-
return; // timer was null or not a timer
|
1040
946
|
}
|
947
|
+
|
948
|
+
targetQueue.push(method, queue.push(target, method, args, stack) - 4);
|
1041
949
|
},
|
1042
950
|
|
1043
|
-
|
1044
|
-
var
|
951
|
+
pushUniqueWithGuid: function (guid, target, method, args, stack) {
|
952
|
+
var hasLocalQueue = this.targetQueues[guid];
|
1045
953
|
|
1046
|
-
if (
|
1047
|
-
|
954
|
+
if (hasLocalQueue) {
|
955
|
+
this.targetQueue(hasLocalQueue, target, method, args, stack);
|
956
|
+
} else {
|
957
|
+
this.targetQueues[guid] = [method, this._queue.push(target, method, args, stack) - 4];
|
1048
958
|
}
|
1049
959
|
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
960
|
+
return {
|
961
|
+
queue: this,
|
962
|
+
target: target,
|
963
|
+
method: method
|
964
|
+
};
|
965
|
+
},
|
1053
966
|
|
1054
|
-
|
967
|
+
pushUnique: function (target, method, args, stack) {
|
968
|
+
var KEY = this.globalOptions.GUID_KEY;
|
1055
969
|
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
return
|
970
|
+
if (target && KEY) {
|
971
|
+
var guid = target[KEY];
|
972
|
+
if (guid) {
|
973
|
+
return this.pushUniqueWithGuid(guid, target, method, args, stack);
|
1060
974
|
}
|
1061
975
|
}
|
1062
976
|
|
1063
|
-
|
977
|
+
this.pushUniqueWithoutGuid(target, method, args, stack);
|
978
|
+
|
979
|
+
return {
|
980
|
+
queue: this,
|
981
|
+
target: target,
|
982
|
+
method: method
|
983
|
+
};
|
1064
984
|
},
|
1065
985
|
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
986
|
+
invoke: function (target, method, args, _, _errorRecordedForStack) {
|
987
|
+
if (args && args.length > 0) {
|
988
|
+
method.apply(target, args);
|
989
|
+
} else {
|
990
|
+
method.call(target);
|
991
|
+
}
|
1069
992
|
},
|
1070
993
|
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
var l = timers.length;
|
1076
|
-
for (; i < l; i += 2) {
|
1077
|
-
var executeAt = timers[i];
|
1078
|
-
var fn = timers[i + 1];
|
1079
|
-
if (executeAt <= n) {
|
1080
|
-
this.schedule(this.options.defaultQueue, null, fn);
|
994
|
+
invokeWithOnError: function (target, method, args, onError, errorRecordedForStack) {
|
995
|
+
try {
|
996
|
+
if (args && args.length > 0) {
|
997
|
+
method.apply(target, args);
|
1081
998
|
} else {
|
1082
|
-
|
999
|
+
method.call(target);
|
1083
1000
|
}
|
1001
|
+
} catch (error) {
|
1002
|
+
onError(error, errorRecordedForStack);
|
1084
1003
|
}
|
1085
|
-
timers.splice(0, i);
|
1086
|
-
this._installTimerTimeout();
|
1087
|
-
},
|
1088
|
-
|
1089
|
-
_reinstallTimerTimeout: function () {
|
1090
|
-
this._clearTimerTimeout();
|
1091
|
-
this._installTimerTimeout();
|
1092
1004
|
},
|
1093
1005
|
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
}
|
1098
|
-
this._platform.clearTimeout(this._timerTimeoutId);
|
1099
|
-
this._timerTimeoutId = undefined;
|
1100
|
-
},
|
1006
|
+
flush: function (sync) {
|
1007
|
+
var queue = this._queue;
|
1008
|
+
var length = queue.length;
|
1101
1009
|
|
1102
|
-
|
1103
|
-
if (!this._timers.length) {
|
1010
|
+
if (length === 0) {
|
1104
1011
|
return;
|
1105
1012
|
}
|
1106
|
-
var minExpiresAt = this._timers[0];
|
1107
|
-
var n = Date.now();
|
1108
|
-
var wait = Math.max(0, minExpiresAt - n);
|
1109
|
-
this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);
|
1110
|
-
}
|
1111
|
-
};
|
1112
|
-
|
1113
|
-
Backburner.prototype.schedule = Backburner.prototype.defer;
|
1114
|
-
Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce;
|
1115
|
-
Backburner.prototype.later = Backburner.prototype.setTimeout;
|
1116
1013
|
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1014
|
+
var globalOptions = this.globalOptions;
|
1015
|
+
var options = this.options;
|
1016
|
+
var before = options && options.before;
|
1017
|
+
var after = options && options.after;
|
1018
|
+
var onError = globalOptions.onError || globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod];
|
1019
|
+
var target, method, args, errorRecordedForStack;
|
1020
|
+
var invoke = onError ? this.invokeWithOnError : this.invoke;
|
1120
1021
|
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
backburner._autorun = null;
|
1125
|
-
backburner.end();
|
1126
|
-
});
|
1127
|
-
}
|
1022
|
+
this.targetQueues = Object.create(null);
|
1023
|
+
var queueItems = this._queueBeingFlushed = this._queue.slice();
|
1024
|
+
this._queue = [];
|
1128
1025
|
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1026
|
+
if (before) {
|
1027
|
+
before();
|
1028
|
+
}
|
1132
1029
|
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1030
|
+
for (var i = 0; i < length; i += 4) {
|
1031
|
+
target = queueItems[i];
|
1032
|
+
method = queueItems[i + 1];
|
1033
|
+
args = queueItems[i + 2];
|
1034
|
+
errorRecordedForStack = queueItems[i + 3]; // Debugging assistance
|
1136
1035
|
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1036
|
+
if (_backburnerUtils.isString(method)) {
|
1037
|
+
method = target[method];
|
1038
|
+
}
|
1140
1039
|
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1040
|
+
// method could have been nullified / canceled during flush
|
1041
|
+
if (method) {
|
1042
|
+
//
|
1043
|
+
// ** Attention intrepid developer **
|
1044
|
+
//
|
1045
|
+
// To find out the stack of this task when it was scheduled onto
|
1046
|
+
// the run loop, add the following to your app.js:
|
1047
|
+
//
|
1048
|
+
// Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
|
1049
|
+
//
|
1050
|
+
// Once that is in place, when you are at a breakpoint and navigate
|
1051
|
+
// here in the stack explorer, you can look at `errorRecordedForStack.stack`,
|
1052
|
+
// which will be the captured stack when this job was scheduled.
|
1053
|
+
//
|
1054
|
+
invoke(target, method, args, onError, errorRecordedForStack);
|
1055
|
+
}
|
1146
1056
|
}
|
1147
|
-
}
|
1148
1057
|
|
1149
|
-
|
1150
|
-
|
1058
|
+
if (after) {
|
1059
|
+
after();
|
1060
|
+
}
|
1151
1061
|
|
1152
|
-
|
1153
|
-
this._platform.clearTimeout(item[2]);
|
1154
|
-
}
|
1155
|
-
});
|
1156
|
-
enifed('container/container', ['exports', 'ember-environment', 'ember-metal/debug', 'ember-metal/dictionary', 'container/owner', 'ember-runtime/mixins/container_proxy', 'ember-metal/symbol'], function (exports, _emberEnvironment, _emberMetalDebug, _emberMetalDictionary, _containerOwner, _emberRuntimeMixinsContainer_proxy, _emberMetalSymbol) {
|
1157
|
-
'use strict';
|
1062
|
+
this._queueBeingFlushed = undefined;
|
1158
1063
|
|
1159
|
-
|
1064
|
+
if (sync !== false && this._queue.length > 0) {
|
1065
|
+
// check if new items have been added
|
1066
|
+
this.flush(true);
|
1067
|
+
}
|
1068
|
+
},
|
1160
1069
|
|
1161
|
-
|
1070
|
+
cancel: function (actionToCancel) {
|
1071
|
+
var queue = this._queue,
|
1072
|
+
currentTarget,
|
1073
|
+
currentMethod,
|
1074
|
+
i,
|
1075
|
+
l;
|
1076
|
+
var target = actionToCancel.target;
|
1077
|
+
var method = actionToCancel.method;
|
1078
|
+
var GUID_KEY = this.globalOptions.GUID_KEY;
|
1079
|
+
|
1080
|
+
if (GUID_KEY && this.targetQueues && target) {
|
1081
|
+
var targetQueue = this.targetQueues[target[GUID_KEY]];
|
1082
|
+
|
1083
|
+
if (targetQueue) {
|
1084
|
+
for (i = 0, l = targetQueue.length; i < l; i++) {
|
1085
|
+
if (targetQueue[i] === method) {
|
1086
|
+
targetQueue.splice(i, 1);
|
1087
|
+
}
|
1088
|
+
}
|
1089
|
+
}
|
1090
|
+
}
|
1091
|
+
|
1092
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
1093
|
+
currentTarget = queue[i];
|
1094
|
+
currentMethod = queue[i + 1];
|
1095
|
+
|
1096
|
+
if (currentTarget === target && currentMethod === method) {
|
1097
|
+
queue.splice(i, 4);
|
1098
|
+
return true;
|
1099
|
+
}
|
1100
|
+
}
|
1101
|
+
|
1102
|
+
// if not found in current queue
|
1103
|
+
// could be in the queue that is being flushed
|
1104
|
+
queue = this._queueBeingFlushed;
|
1105
|
+
|
1106
|
+
if (!queue) {
|
1107
|
+
return;
|
1108
|
+
}
|
1109
|
+
|
1110
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
1111
|
+
currentTarget = queue[i];
|
1112
|
+
currentMethod = queue[i + 1];
|
1113
|
+
|
1114
|
+
if (currentTarget === target && currentMethod === method) {
|
1115
|
+
// don't mess with array during flush
|
1116
|
+
// just nullify the method
|
1117
|
+
queue[i + 1] = null;
|
1118
|
+
return true;
|
1119
|
+
}
|
1120
|
+
}
|
1121
|
+
}
|
1122
|
+
};
|
1123
|
+
});
|
1124
|
+
enifed('backburner/utils', ['exports'], function (exports) {
|
1125
|
+
'use strict';
|
1126
|
+
|
1127
|
+
exports.each = each;
|
1128
|
+
exports.isString = isString;
|
1129
|
+
exports.isFunction = isFunction;
|
1130
|
+
exports.isNumber = isNumber;
|
1131
|
+
exports.isCoercableNumber = isCoercableNumber;
|
1132
|
+
var NUMBER = /\d+/;
|
1133
|
+
|
1134
|
+
function each(collection, callback) {
|
1135
|
+
for (var i = 0; i < collection.length; i++) {
|
1136
|
+
callback(collection[i]);
|
1137
|
+
}
|
1138
|
+
}
|
1139
|
+
|
1140
|
+
function isString(suspect) {
|
1141
|
+
return typeof suspect === 'string';
|
1142
|
+
}
|
1143
|
+
|
1144
|
+
function isFunction(suspect) {
|
1145
|
+
return typeof suspect === 'function';
|
1146
|
+
}
|
1147
|
+
|
1148
|
+
function isNumber(suspect) {
|
1149
|
+
return typeof suspect === 'number';
|
1150
|
+
}
|
1151
|
+
|
1152
|
+
function isCoercableNumber(number) {
|
1153
|
+
return isNumber(number) || NUMBER.test(number);
|
1154
|
+
}
|
1155
|
+
});
|
1156
|
+
enifed('container/container', ['exports', 'ember-environment', 'ember-metal/debug', 'ember-metal/dictionary', 'container/owner', 'ember-runtime/mixins/container_proxy', 'ember-metal/symbol'], function (exports, _emberEnvironment, _emberMetalDebug, _emberMetalDictionary, _containerOwner, _emberRuntimeMixinsContainer_proxy, _emberMetalSymbol) {
|
1157
|
+
'use strict';
|
1158
|
+
|
1159
|
+
var CONTAINER_OVERRIDE = _emberMetalSymbol.default('CONTAINER_OVERRIDE');
|
1160
|
+
|
1161
|
+
/**
|
1162
1162
|
A container used to instantiate and cache objects.
|
1163
1163
|
|
1164
1164
|
Every `Container` must be associated with a `Registry`, which is referenced
|
@@ -2477,16 +2477,6 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
|
|
2477
2477
|
|
2478
2478
|
exports.default = Registry;
|
2479
2479
|
});
|
2480
|
-
enifed("ember/features", ["exports"], function (exports) {
|
2481
|
-
"use strict";
|
2482
|
-
|
2483
|
-
exports.default = {};
|
2484
|
-
});
|
2485
|
-
enifed("ember/version", ["exports"], function (exports) {
|
2486
|
-
"use strict";
|
2487
|
-
|
2488
|
-
exports.default = "2.7.0-beta.3";
|
2489
|
-
});
|
2490
2480
|
enifed('ember-console/index', ['exports', 'ember-environment'], function (exports, _emberEnvironment) {
|
2491
2481
|
'use strict';
|
2492
2482
|
|
@@ -4813,13 +4803,11 @@ enifed('ember-metal/events', ['exports', 'ember-metal/debug', 'ember-metal/utils
|
|
4813
4803
|
function addListener(obj, eventName, target, method, once) {
|
4814
4804
|
_emberMetalDebug.assert('You must pass at least an object and event name to Ember.addListener', !!obj && !!eventName);
|
4815
4805
|
|
4816
|
-
|
4817
|
-
|
4818
|
-
|
4819
|
-
|
4820
|
-
|
4821
|
-
});
|
4822
|
-
}
|
4806
|
+
_emberMetalDebug.deprecate('didInitAttrs called in ' + (obj && obj.toString && obj.toString()) + '.', eventName !== 'didInitAttrs', {
|
4807
|
+
id: 'ember-views.did-init-attrs',
|
4808
|
+
until: '3.0.0',
|
4809
|
+
url: 'http://emberjs.com/deprecations/v2.x#toc_ember-component-didinitattrs'
|
4810
|
+
});
|
4823
4811
|
|
4824
4812
|
if (!method && 'function' === typeof target) {
|
4825
4813
|
method = target;
|
@@ -19719,6 +19707,103 @@ enifed('ember-runtime/utils', ['exports', 'ember-runtime/mixins/array', 'ember-r
|
|
19719
19707
|
return ret;
|
19720
19708
|
}
|
19721
19709
|
});
|
19710
|
+
enifed("ember/features", ["exports"], function (exports) {
|
19711
|
+
"use strict";
|
19712
|
+
|
19713
|
+
exports.default = {};
|
19714
|
+
});
|
19715
|
+
enifed("ember/version", ["exports"], function (exports) {
|
19716
|
+
"use strict";
|
19717
|
+
|
19718
|
+
exports.default = "2.7.0-beta.4";
|
19719
|
+
});
|
19720
|
+
enifed('rsvp', ['exports', 'rsvp/promise', 'rsvp/events', 'rsvp/node', 'rsvp/all', 'rsvp/all-settled', 'rsvp/race', 'rsvp/hash', 'rsvp/hash-settled', 'rsvp/rethrow', 'rsvp/defer', 'rsvp/config', 'rsvp/map', 'rsvp/resolve', 'rsvp/reject', 'rsvp/filter', 'rsvp/asap'], function (exports, _rsvpPromise, _rsvpEvents, _rsvpNode, _rsvpAll, _rsvpAllSettled, _rsvpRace, _rsvpHash, _rsvpHashSettled, _rsvpRethrow, _rsvpDefer, _rsvpConfig, _rsvpMap, _rsvpResolve, _rsvpReject, _rsvpFilter, _rsvpAsap) {
|
19721
|
+
'use strict';
|
19722
|
+
|
19723
|
+
// defaults
|
19724
|
+
_rsvpConfig.config.async = _rsvpAsap.default;
|
19725
|
+
_rsvpConfig.config.after = function (cb) {
|
19726
|
+
setTimeout(cb, 0);
|
19727
|
+
};
|
19728
|
+
var cast = _rsvpResolve.default;
|
19729
|
+
function async(callback, arg) {
|
19730
|
+
_rsvpConfig.config.async(callback, arg);
|
19731
|
+
}
|
19732
|
+
|
19733
|
+
function on() {
|
19734
|
+
_rsvpConfig.config['on'].apply(_rsvpConfig.config, arguments);
|
19735
|
+
}
|
19736
|
+
|
19737
|
+
function off() {
|
19738
|
+
_rsvpConfig.config['off'].apply(_rsvpConfig.config, arguments);
|
19739
|
+
}
|
19740
|
+
|
19741
|
+
// Set up instrumentation through `window.__PROMISE_INTRUMENTATION__`
|
19742
|
+
if (typeof window !== 'undefined' && typeof window['__PROMISE_INSTRUMENTATION__'] === 'object') {
|
19743
|
+
var callbacks = window['__PROMISE_INSTRUMENTATION__'];
|
19744
|
+
_rsvpConfig.configure('instrument', true);
|
19745
|
+
for (var eventName in callbacks) {
|
19746
|
+
if (callbacks.hasOwnProperty(eventName)) {
|
19747
|
+
on(eventName, callbacks[eventName]);
|
19748
|
+
}
|
19749
|
+
}
|
19750
|
+
}
|
19751
|
+
|
19752
|
+
exports.cast = cast;
|
19753
|
+
exports.Promise = _rsvpPromise.default;
|
19754
|
+
exports.EventTarget = _rsvpEvents.default;
|
19755
|
+
exports.all = _rsvpAll.default;
|
19756
|
+
exports.allSettled = _rsvpAllSettled.default;
|
19757
|
+
exports.race = _rsvpRace.default;
|
19758
|
+
exports.hash = _rsvpHash.default;
|
19759
|
+
exports.hashSettled = _rsvpHashSettled.default;
|
19760
|
+
exports.rethrow = _rsvpRethrow.default;
|
19761
|
+
exports.defer = _rsvpDefer.default;
|
19762
|
+
exports.denodeify = _rsvpNode.default;
|
19763
|
+
exports.configure = _rsvpConfig.configure;
|
19764
|
+
exports.on = on;
|
19765
|
+
exports.off = off;
|
19766
|
+
exports.resolve = _rsvpResolve.default;
|
19767
|
+
exports.reject = _rsvpReject.default;
|
19768
|
+
exports.async = async;
|
19769
|
+
exports.map = _rsvpMap.default;
|
19770
|
+
exports.filter = _rsvpFilter.default;
|
19771
|
+
});
|
19772
|
+
enifed('rsvp.umd', ['exports', 'rsvp/platform', 'rsvp'], function (exports, _rsvpPlatform, _rsvp) {
|
19773
|
+
'use strict';
|
19774
|
+
|
19775
|
+
var RSVP = {
|
19776
|
+
'race': _rsvp.race,
|
19777
|
+
'Promise': _rsvp.Promise,
|
19778
|
+
'allSettled': _rsvp.allSettled,
|
19779
|
+
'hash': _rsvp.hash,
|
19780
|
+
'hashSettled': _rsvp.hashSettled,
|
19781
|
+
'denodeify': _rsvp.denodeify,
|
19782
|
+
'on': _rsvp.on,
|
19783
|
+
'off': _rsvp.off,
|
19784
|
+
'map': _rsvp.map,
|
19785
|
+
'filter': _rsvp.filter,
|
19786
|
+
'resolve': _rsvp.resolve,
|
19787
|
+
'reject': _rsvp.reject,
|
19788
|
+
'all': _rsvp.all,
|
19789
|
+
'rethrow': _rsvp.rethrow,
|
19790
|
+
'defer': _rsvp.defer,
|
19791
|
+
'EventTarget': _rsvp.EventTarget,
|
19792
|
+
'configure': _rsvp.configure,
|
19793
|
+
'async': _rsvp.async
|
19794
|
+
};
|
19795
|
+
|
19796
|
+
/* global define:true module:true window: true */
|
19797
|
+
if (typeof define === 'function' && define['amd']) {
|
19798
|
+
define(function () {
|
19799
|
+
return RSVP;
|
19800
|
+
});
|
19801
|
+
} else if (typeof module !== 'undefined' && module['exports']) {
|
19802
|
+
module['exports'] = RSVP;
|
19803
|
+
} else if (typeof _rsvpPlatform.default !== 'undefined') {
|
19804
|
+
_rsvpPlatform.default['RSVP'] = RSVP;
|
19805
|
+
}
|
19806
|
+
});
|
19722
19807
|
enifed('rsvp/-internal', ['exports', 'rsvp/utils', 'rsvp/instrument', 'rsvp/config'], function (exports, _rsvpUtils, _rsvpInstrument, _rsvpConfig) {
|
19723
19808
|
'use strict';
|
19724
19809
|
|
@@ -21368,271 +21453,14 @@ enifed('rsvp/platform', ['exports'], function (exports) {
|
|
21368
21453
|
|
21369
21454
|
exports.default = platform;
|
21370
21455
|
});
|
21371
|
-
enifed('rsvp/promise
|
21456
|
+
enifed('rsvp/promise-hash', ['exports', 'rsvp/enumerator', 'rsvp/-internal', 'rsvp/utils'], function (exports, _rsvpEnumerator, _rsvpInternal, _rsvpUtils) {
|
21372
21457
|
'use strict';
|
21373
21458
|
|
21374
|
-
|
21459
|
+
function PromiseHash(Constructor, object, label) {
|
21460
|
+
this._superConstructor(Constructor, object, true, label);
|
21461
|
+
}
|
21375
21462
|
|
21376
|
-
|
21377
|
-
`RSVP.Promise.all` accepts an array of promises, and returns a new promise which
|
21378
|
-
is fulfilled with an array of fulfillment values for the passed promises, or
|
21379
|
-
rejected with the reason of the first passed promise to be rejected. It casts all
|
21380
|
-
elements of the passed iterable to promises as it runs this algorithm.
|
21381
|
-
|
21382
|
-
Example:
|
21383
|
-
|
21384
|
-
```javascript
|
21385
|
-
var promise1 = RSVP.resolve(1);
|
21386
|
-
var promise2 = RSVP.resolve(2);
|
21387
|
-
var promise3 = RSVP.resolve(3);
|
21388
|
-
var promises = [ promise1, promise2, promise3 ];
|
21389
|
-
|
21390
|
-
RSVP.Promise.all(promises).then(function(array){
|
21391
|
-
// The array here would be [ 1, 2, 3 ];
|
21392
|
-
});
|
21393
|
-
```
|
21394
|
-
|
21395
|
-
If any of the `promises` given to `RSVP.all` are rejected, the first promise
|
21396
|
-
that is rejected will be given as an argument to the returned promises's
|
21397
|
-
rejection handler. For example:
|
21398
|
-
|
21399
|
-
Example:
|
21400
|
-
|
21401
|
-
```javascript
|
21402
|
-
var promise1 = RSVP.resolve(1);
|
21403
|
-
var promise2 = RSVP.reject(new Error("2"));
|
21404
|
-
var promise3 = RSVP.reject(new Error("3"));
|
21405
|
-
var promises = [ promise1, promise2, promise3 ];
|
21406
|
-
|
21407
|
-
RSVP.Promise.all(promises).then(function(array){
|
21408
|
-
// Code here never runs because there are rejected promises!
|
21409
|
-
}, function(error) {
|
21410
|
-
// error.message === "2"
|
21411
|
-
});
|
21412
|
-
```
|
21413
|
-
|
21414
|
-
@method all
|
21415
|
-
@static
|
21416
|
-
@param {Array} entries array of promises
|
21417
|
-
@param {String} label optional string for labeling the promise.
|
21418
|
-
Useful for tooling.
|
21419
|
-
@return {Promise} promise that is fulfilled when all `promises` have been
|
21420
|
-
fulfilled, or rejected if any of them become rejected.
|
21421
|
-
@static
|
21422
|
-
*/
|
21423
|
-
|
21424
|
-
function all(entries, label) {
|
21425
|
-
return new _rsvpEnumerator.default(this, entries, true, /* abort on reject */label).promise;
|
21426
|
-
}
|
21427
|
-
});
|
21428
|
-
enifed('rsvp/promise/race', ['exports', 'rsvp/utils', 'rsvp/-internal'], function (exports, _rsvpUtils, _rsvpInternal) {
|
21429
|
-
'use strict';
|
21430
|
-
|
21431
|
-
exports.default = race;
|
21432
|
-
|
21433
|
-
/**
|
21434
|
-
`RSVP.Promise.race` returns a new promise which is settled in the same way as the
|
21435
|
-
first passed promise to settle.
|
21436
|
-
|
21437
|
-
Example:
|
21438
|
-
|
21439
|
-
```javascript
|
21440
|
-
var promise1 = new RSVP.Promise(function(resolve, reject){
|
21441
|
-
setTimeout(function(){
|
21442
|
-
resolve('promise 1');
|
21443
|
-
}, 200);
|
21444
|
-
});
|
21445
|
-
|
21446
|
-
var promise2 = new RSVP.Promise(function(resolve, reject){
|
21447
|
-
setTimeout(function(){
|
21448
|
-
resolve('promise 2');
|
21449
|
-
}, 100);
|
21450
|
-
});
|
21451
|
-
|
21452
|
-
RSVP.Promise.race([promise1, promise2]).then(function(result){
|
21453
|
-
// result === 'promise 2' because it was resolved before promise1
|
21454
|
-
// was resolved.
|
21455
|
-
});
|
21456
|
-
```
|
21457
|
-
|
21458
|
-
`RSVP.Promise.race` is deterministic in that only the state of the first
|
21459
|
-
settled promise matters. For example, even if other promises given to the
|
21460
|
-
`promises` array argument are resolved, but the first settled promise has
|
21461
|
-
become rejected before the other promises became fulfilled, the returned
|
21462
|
-
promise will become rejected:
|
21463
|
-
|
21464
|
-
```javascript
|
21465
|
-
var promise1 = new RSVP.Promise(function(resolve, reject){
|
21466
|
-
setTimeout(function(){
|
21467
|
-
resolve('promise 1');
|
21468
|
-
}, 200);
|
21469
|
-
});
|
21470
|
-
|
21471
|
-
var promise2 = new RSVP.Promise(function(resolve, reject){
|
21472
|
-
setTimeout(function(){
|
21473
|
-
reject(new Error('promise 2'));
|
21474
|
-
}, 100);
|
21475
|
-
});
|
21476
|
-
|
21477
|
-
RSVP.Promise.race([promise1, promise2]).then(function(result){
|
21478
|
-
// Code here never runs
|
21479
|
-
}, function(reason){
|
21480
|
-
// reason.message === 'promise 2' because promise 2 became rejected before
|
21481
|
-
// promise 1 became fulfilled
|
21482
|
-
});
|
21483
|
-
```
|
21484
|
-
|
21485
|
-
An example real-world use case is implementing timeouts:
|
21486
|
-
|
21487
|
-
```javascript
|
21488
|
-
RSVP.Promise.race([ajax('foo.json'), timeout(5000)])
|
21489
|
-
```
|
21490
|
-
|
21491
|
-
@method race
|
21492
|
-
@static
|
21493
|
-
@param {Array} entries array of promises to observe
|
21494
|
-
@param {String} label optional string for describing the promise returned.
|
21495
|
-
Useful for tooling.
|
21496
|
-
@return {Promise} a promise which settles in the same way as the first passed
|
21497
|
-
promise to settle.
|
21498
|
-
*/
|
21499
|
-
|
21500
|
-
function race(entries, label) {
|
21501
|
-
/*jshint validthis:true */
|
21502
|
-
var Constructor = this;
|
21503
|
-
|
21504
|
-
var promise = new Constructor(_rsvpInternal.noop, label);
|
21505
|
-
|
21506
|
-
if (!_rsvpUtils.isArray(entries)) {
|
21507
|
-
_rsvpInternal.reject(promise, new TypeError('You must pass an array to race.'));
|
21508
|
-
return promise;
|
21509
|
-
}
|
21510
|
-
|
21511
|
-
var length = entries.length;
|
21512
|
-
|
21513
|
-
function onFulfillment(value) {
|
21514
|
-
_rsvpInternal.resolve(promise, value);
|
21515
|
-
}
|
21516
|
-
|
21517
|
-
function onRejection(reason) {
|
21518
|
-
_rsvpInternal.reject(promise, reason);
|
21519
|
-
}
|
21520
|
-
|
21521
|
-
for (var i = 0; promise._state === _rsvpInternal.PENDING && i < length; i++) {
|
21522
|
-
_rsvpInternal.subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);
|
21523
|
-
}
|
21524
|
-
|
21525
|
-
return promise;
|
21526
|
-
}
|
21527
|
-
});
|
21528
|
-
enifed('rsvp/promise/reject', ['exports', 'rsvp/-internal'], function (exports, _rsvpInternal) {
|
21529
|
-
'use strict';
|
21530
|
-
|
21531
|
-
exports.default = reject;
|
21532
|
-
|
21533
|
-
/**
|
21534
|
-
`RSVP.Promise.reject` returns a promise rejected with the passed `reason`.
|
21535
|
-
It is shorthand for the following:
|
21536
|
-
|
21537
|
-
```javascript
|
21538
|
-
var promise = new RSVP.Promise(function(resolve, reject){
|
21539
|
-
reject(new Error('WHOOPS'));
|
21540
|
-
});
|
21541
|
-
|
21542
|
-
promise.then(function(value){
|
21543
|
-
// Code here doesn't run because the promise is rejected!
|
21544
|
-
}, function(reason){
|
21545
|
-
// reason.message === 'WHOOPS'
|
21546
|
-
});
|
21547
|
-
```
|
21548
|
-
|
21549
|
-
Instead of writing the above, your code now simply becomes the following:
|
21550
|
-
|
21551
|
-
```javascript
|
21552
|
-
var promise = RSVP.Promise.reject(new Error('WHOOPS'));
|
21553
|
-
|
21554
|
-
promise.then(function(value){
|
21555
|
-
// Code here doesn't run because the promise is rejected!
|
21556
|
-
}, function(reason){
|
21557
|
-
// reason.message === 'WHOOPS'
|
21558
|
-
});
|
21559
|
-
```
|
21560
|
-
|
21561
|
-
@method reject
|
21562
|
-
@static
|
21563
|
-
@param {*} reason value that the returned promise will be rejected with.
|
21564
|
-
@param {String} label optional string for identifying the returned promise.
|
21565
|
-
Useful for tooling.
|
21566
|
-
@return {Promise} a promise rejected with the given `reason`.
|
21567
|
-
*/
|
21568
|
-
|
21569
|
-
function reject(reason, label) {
|
21570
|
-
/*jshint validthis:true */
|
21571
|
-
var Constructor = this;
|
21572
|
-
var promise = new Constructor(_rsvpInternal.noop, label);
|
21573
|
-
_rsvpInternal.reject(promise, reason);
|
21574
|
-
return promise;
|
21575
|
-
}
|
21576
|
-
});
|
21577
|
-
enifed('rsvp/promise/resolve', ['exports', 'rsvp/-internal'], function (exports, _rsvpInternal) {
|
21578
|
-
'use strict';
|
21579
|
-
|
21580
|
-
exports.default = resolve;
|
21581
|
-
|
21582
|
-
/**
|
21583
|
-
`RSVP.Promise.resolve` returns a promise that will become resolved with the
|
21584
|
-
passed `value`. It is shorthand for the following:
|
21585
|
-
|
21586
|
-
```javascript
|
21587
|
-
var promise = new RSVP.Promise(function(resolve, reject){
|
21588
|
-
resolve(1);
|
21589
|
-
});
|
21590
|
-
|
21591
|
-
promise.then(function(value){
|
21592
|
-
// value === 1
|
21593
|
-
});
|
21594
|
-
```
|
21595
|
-
|
21596
|
-
Instead of writing the above, your code now simply becomes the following:
|
21597
|
-
|
21598
|
-
```javascript
|
21599
|
-
var promise = RSVP.Promise.resolve(1);
|
21600
|
-
|
21601
|
-
promise.then(function(value){
|
21602
|
-
// value === 1
|
21603
|
-
});
|
21604
|
-
```
|
21605
|
-
|
21606
|
-
@method resolve
|
21607
|
-
@static
|
21608
|
-
@param {*} object value that the returned promise will be resolved with
|
21609
|
-
@param {String} label optional string for identifying the returned promise.
|
21610
|
-
Useful for tooling.
|
21611
|
-
@return {Promise} a promise that will become fulfilled with the given
|
21612
|
-
`value`
|
21613
|
-
*/
|
21614
|
-
|
21615
|
-
function resolve(object, label) {
|
21616
|
-
/*jshint validthis:true */
|
21617
|
-
var Constructor = this;
|
21618
|
-
|
21619
|
-
if (object && typeof object === 'object' && object.constructor === Constructor) {
|
21620
|
-
return object;
|
21621
|
-
}
|
21622
|
-
|
21623
|
-
var promise = new Constructor(_rsvpInternal.noop, label);
|
21624
|
-
_rsvpInternal.resolve(promise, object);
|
21625
|
-
return promise;
|
21626
|
-
}
|
21627
|
-
});
|
21628
|
-
enifed('rsvp/promise-hash', ['exports', 'rsvp/enumerator', 'rsvp/-internal', 'rsvp/utils'], function (exports, _rsvpEnumerator, _rsvpInternal, _rsvpUtils) {
|
21629
|
-
'use strict';
|
21630
|
-
|
21631
|
-
function PromiseHash(Constructor, object, label) {
|
21632
|
-
this._superConstructor(Constructor, object, true, label);
|
21633
|
-
}
|
21634
|
-
|
21635
|
-
exports.default = PromiseHash;
|
21463
|
+
exports.default = PromiseHash;
|
21636
21464
|
|
21637
21465
|
PromiseHash.prototype = _rsvpUtils.o_create(_rsvpEnumerator.default.prototype);
|
21638
21466
|
PromiseHash.prototype._superConstructor = _rsvpEnumerator.default;
|
@@ -22054,105 +21882,362 @@ enifed('rsvp/promise', ['exports', 'rsvp/config', 'rsvp/instrument', 'rsvp/utils
|
|
22054
21882
|
_rsvpInstrument.default('chained', parent, child);
|
22055
21883
|
}
|
22056
21884
|
|
22057
|
-
if (state) {
|
22058
|
-
var callback = arguments[state - 1];
|
22059
|
-
_rsvpConfig.config.async(function () {
|
22060
|
-
_rsvpInternal.invokeCallback(state, child, callback, result);
|
22061
|
-
});
|
22062
|
-
} else {
|
22063
|
-
_rsvpInternal.subscribe(parent, child, onFulfillment, onRejection);
|
22064
|
-
}
|
21885
|
+
if (state) {
|
21886
|
+
var callback = arguments[state - 1];
|
21887
|
+
_rsvpConfig.config.async(function () {
|
21888
|
+
_rsvpInternal.invokeCallback(state, child, callback, result);
|
21889
|
+
});
|
21890
|
+
} else {
|
21891
|
+
_rsvpInternal.subscribe(parent, child, onFulfillment, onRejection);
|
21892
|
+
}
|
21893
|
+
|
21894
|
+
return child;
|
21895
|
+
},
|
21896
|
+
|
21897
|
+
/**
|
21898
|
+
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
|
21899
|
+
as the catch block of a try/catch statement.
|
21900
|
+
|
21901
|
+
```js
|
21902
|
+
function findAuthor(){
|
21903
|
+
throw new Error('couldn't find that author');
|
21904
|
+
}
|
21905
|
+
|
21906
|
+
// synchronous
|
21907
|
+
try {
|
21908
|
+
findAuthor();
|
21909
|
+
} catch(reason) {
|
21910
|
+
// something went wrong
|
21911
|
+
}
|
21912
|
+
|
21913
|
+
// async with promises
|
21914
|
+
findAuthor().catch(function(reason){
|
21915
|
+
// something went wrong
|
21916
|
+
});
|
21917
|
+
```
|
21918
|
+
|
21919
|
+
@method catch
|
21920
|
+
@param {Function} onRejection
|
21921
|
+
@param {String} label optional string for labeling the promise.
|
21922
|
+
Useful for tooling.
|
21923
|
+
@return {Promise}
|
21924
|
+
*/
|
21925
|
+
'catch': function (onRejection, label) {
|
21926
|
+
return this.then(undefined, onRejection, label);
|
21927
|
+
},
|
21928
|
+
|
21929
|
+
/**
|
21930
|
+
`finally` will be invoked regardless of the promise's fate just as native
|
21931
|
+
try/catch/finally behaves
|
21932
|
+
|
21933
|
+
Synchronous example:
|
21934
|
+
|
21935
|
+
```js
|
21936
|
+
findAuthor() {
|
21937
|
+
if (Math.random() > 0.5) {
|
21938
|
+
throw new Error();
|
21939
|
+
}
|
21940
|
+
return new Author();
|
21941
|
+
}
|
21942
|
+
|
21943
|
+
try {
|
21944
|
+
return findAuthor(); // succeed or fail
|
21945
|
+
} catch(error) {
|
21946
|
+
return findOtherAuther();
|
21947
|
+
} finally {
|
21948
|
+
// always runs
|
21949
|
+
// doesn't affect the return value
|
21950
|
+
}
|
21951
|
+
```
|
21952
|
+
|
21953
|
+
Asynchronous example:
|
21954
|
+
|
21955
|
+
```js
|
21956
|
+
findAuthor().catch(function(reason){
|
21957
|
+
return findOtherAuther();
|
21958
|
+
}).finally(function(){
|
21959
|
+
// author was either found, or not
|
21960
|
+
});
|
21961
|
+
```
|
21962
|
+
|
21963
|
+
@method finally
|
21964
|
+
@param {Function} callback
|
21965
|
+
@param {String} label optional string for labeling the promise.
|
21966
|
+
Useful for tooling.
|
21967
|
+
@return {Promise}
|
21968
|
+
*/
|
21969
|
+
'finally': function (callback, label) {
|
21970
|
+
var promise = this;
|
21971
|
+
var constructor = promise.constructor;
|
21972
|
+
|
21973
|
+
return promise.then(function (value) {
|
21974
|
+
return constructor.resolve(callback()).then(function () {
|
21975
|
+
return value;
|
21976
|
+
});
|
21977
|
+
}, function (reason) {
|
21978
|
+
return constructor.resolve(callback()).then(function () {
|
21979
|
+
throw reason;
|
21980
|
+
});
|
21981
|
+
}, label);
|
21982
|
+
}
|
21983
|
+
};
|
21984
|
+
});
|
21985
|
+
enifed('rsvp/promise/all', ['exports', 'rsvp/enumerator'], function (exports, _rsvpEnumerator) {
|
21986
|
+
'use strict';
|
21987
|
+
|
21988
|
+
exports.default = all;
|
21989
|
+
|
21990
|
+
/**
|
21991
|
+
`RSVP.Promise.all` accepts an array of promises, and returns a new promise which
|
21992
|
+
is fulfilled with an array of fulfillment values for the passed promises, or
|
21993
|
+
rejected with the reason of the first passed promise to be rejected. It casts all
|
21994
|
+
elements of the passed iterable to promises as it runs this algorithm.
|
21995
|
+
|
21996
|
+
Example:
|
21997
|
+
|
21998
|
+
```javascript
|
21999
|
+
var promise1 = RSVP.resolve(1);
|
22000
|
+
var promise2 = RSVP.resolve(2);
|
22001
|
+
var promise3 = RSVP.resolve(3);
|
22002
|
+
var promises = [ promise1, promise2, promise3 ];
|
22003
|
+
|
22004
|
+
RSVP.Promise.all(promises).then(function(array){
|
22005
|
+
// The array here would be [ 1, 2, 3 ];
|
22006
|
+
});
|
22007
|
+
```
|
22008
|
+
|
22009
|
+
If any of the `promises` given to `RSVP.all` are rejected, the first promise
|
22010
|
+
that is rejected will be given as an argument to the returned promises's
|
22011
|
+
rejection handler. For example:
|
22012
|
+
|
22013
|
+
Example:
|
22014
|
+
|
22015
|
+
```javascript
|
22016
|
+
var promise1 = RSVP.resolve(1);
|
22017
|
+
var promise2 = RSVP.reject(new Error("2"));
|
22018
|
+
var promise3 = RSVP.reject(new Error("3"));
|
22019
|
+
var promises = [ promise1, promise2, promise3 ];
|
22020
|
+
|
22021
|
+
RSVP.Promise.all(promises).then(function(array){
|
22022
|
+
// Code here never runs because there are rejected promises!
|
22023
|
+
}, function(error) {
|
22024
|
+
// error.message === "2"
|
22025
|
+
});
|
22026
|
+
```
|
22027
|
+
|
22028
|
+
@method all
|
22029
|
+
@static
|
22030
|
+
@param {Array} entries array of promises
|
22031
|
+
@param {String} label optional string for labeling the promise.
|
22032
|
+
Useful for tooling.
|
22033
|
+
@return {Promise} promise that is fulfilled when all `promises` have been
|
22034
|
+
fulfilled, or rejected if any of them become rejected.
|
22035
|
+
@static
|
22036
|
+
*/
|
22037
|
+
|
22038
|
+
function all(entries, label) {
|
22039
|
+
return new _rsvpEnumerator.default(this, entries, true, /* abort on reject */label).promise;
|
22040
|
+
}
|
22041
|
+
});
|
22042
|
+
enifed('rsvp/promise/race', ['exports', 'rsvp/utils', 'rsvp/-internal'], function (exports, _rsvpUtils, _rsvpInternal) {
|
22043
|
+
'use strict';
|
22044
|
+
|
22045
|
+
exports.default = race;
|
22046
|
+
|
22047
|
+
/**
|
22048
|
+
`RSVP.Promise.race` returns a new promise which is settled in the same way as the
|
22049
|
+
first passed promise to settle.
|
22050
|
+
|
22051
|
+
Example:
|
22052
|
+
|
22053
|
+
```javascript
|
22054
|
+
var promise1 = new RSVP.Promise(function(resolve, reject){
|
22055
|
+
setTimeout(function(){
|
22056
|
+
resolve('promise 1');
|
22057
|
+
}, 200);
|
22058
|
+
});
|
22059
|
+
|
22060
|
+
var promise2 = new RSVP.Promise(function(resolve, reject){
|
22061
|
+
setTimeout(function(){
|
22062
|
+
resolve('promise 2');
|
22063
|
+
}, 100);
|
22064
|
+
});
|
22065
|
+
|
22066
|
+
RSVP.Promise.race([promise1, promise2]).then(function(result){
|
22067
|
+
// result === 'promise 2' because it was resolved before promise1
|
22068
|
+
// was resolved.
|
22069
|
+
});
|
22070
|
+
```
|
22071
|
+
|
22072
|
+
`RSVP.Promise.race` is deterministic in that only the state of the first
|
22073
|
+
settled promise matters. For example, even if other promises given to the
|
22074
|
+
`promises` array argument are resolved, but the first settled promise has
|
22075
|
+
become rejected before the other promises became fulfilled, the returned
|
22076
|
+
promise will become rejected:
|
22077
|
+
|
22078
|
+
```javascript
|
22079
|
+
var promise1 = new RSVP.Promise(function(resolve, reject){
|
22080
|
+
setTimeout(function(){
|
22081
|
+
resolve('promise 1');
|
22082
|
+
}, 200);
|
22083
|
+
});
|
22084
|
+
|
22085
|
+
var promise2 = new RSVP.Promise(function(resolve, reject){
|
22086
|
+
setTimeout(function(){
|
22087
|
+
reject(new Error('promise 2'));
|
22088
|
+
}, 100);
|
22089
|
+
});
|
22090
|
+
|
22091
|
+
RSVP.Promise.race([promise1, promise2]).then(function(result){
|
22092
|
+
// Code here never runs
|
22093
|
+
}, function(reason){
|
22094
|
+
// reason.message === 'promise 2' because promise 2 became rejected before
|
22095
|
+
// promise 1 became fulfilled
|
22096
|
+
});
|
22097
|
+
```
|
22098
|
+
|
22099
|
+
An example real-world use case is implementing timeouts:
|
22100
|
+
|
22101
|
+
```javascript
|
22102
|
+
RSVP.Promise.race([ajax('foo.json'), timeout(5000)])
|
22103
|
+
```
|
22104
|
+
|
22105
|
+
@method race
|
22106
|
+
@static
|
22107
|
+
@param {Array} entries array of promises to observe
|
22108
|
+
@param {String} label optional string for describing the promise returned.
|
22109
|
+
Useful for tooling.
|
22110
|
+
@return {Promise} a promise which settles in the same way as the first passed
|
22111
|
+
promise to settle.
|
22112
|
+
*/
|
22113
|
+
|
22114
|
+
function race(entries, label) {
|
22115
|
+
/*jshint validthis:true */
|
22116
|
+
var Constructor = this;
|
22117
|
+
|
22118
|
+
var promise = new Constructor(_rsvpInternal.noop, label);
|
22119
|
+
|
22120
|
+
if (!_rsvpUtils.isArray(entries)) {
|
22121
|
+
_rsvpInternal.reject(promise, new TypeError('You must pass an array to race.'));
|
22122
|
+
return promise;
|
22123
|
+
}
|
22124
|
+
|
22125
|
+
var length = entries.length;
|
22126
|
+
|
22127
|
+
function onFulfillment(value) {
|
22128
|
+
_rsvpInternal.resolve(promise, value);
|
22129
|
+
}
|
22130
|
+
|
22131
|
+
function onRejection(reason) {
|
22132
|
+
_rsvpInternal.reject(promise, reason);
|
22133
|
+
}
|
22134
|
+
|
22135
|
+
for (var i = 0; promise._state === _rsvpInternal.PENDING && i < length; i++) {
|
22136
|
+
_rsvpInternal.subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);
|
22137
|
+
}
|
22138
|
+
|
22139
|
+
return promise;
|
22140
|
+
}
|
22141
|
+
});
|
22142
|
+
enifed('rsvp/promise/reject', ['exports', 'rsvp/-internal'], function (exports, _rsvpInternal) {
|
22143
|
+
'use strict';
|
22144
|
+
|
22145
|
+
exports.default = reject;
|
22146
|
+
|
22147
|
+
/**
|
22148
|
+
`RSVP.Promise.reject` returns a promise rejected with the passed `reason`.
|
22149
|
+
It is shorthand for the following:
|
22150
|
+
|
22151
|
+
```javascript
|
22152
|
+
var promise = new RSVP.Promise(function(resolve, reject){
|
22153
|
+
reject(new Error('WHOOPS'));
|
22154
|
+
});
|
22155
|
+
|
22156
|
+
promise.then(function(value){
|
22157
|
+
// Code here doesn't run because the promise is rejected!
|
22158
|
+
}, function(reason){
|
22159
|
+
// reason.message === 'WHOOPS'
|
22160
|
+
});
|
22161
|
+
```
|
22162
|
+
|
22163
|
+
Instead of writing the above, your code now simply becomes the following:
|
22164
|
+
|
22165
|
+
```javascript
|
22166
|
+
var promise = RSVP.Promise.reject(new Error('WHOOPS'));
|
22167
|
+
|
22168
|
+
promise.then(function(value){
|
22169
|
+
// Code here doesn't run because the promise is rejected!
|
22170
|
+
}, function(reason){
|
22171
|
+
// reason.message === 'WHOOPS'
|
22172
|
+
});
|
22173
|
+
```
|
22174
|
+
|
22175
|
+
@method reject
|
22176
|
+
@static
|
22177
|
+
@param {*} reason value that the returned promise will be rejected with.
|
22178
|
+
@param {String} label optional string for identifying the returned promise.
|
22179
|
+
Useful for tooling.
|
22180
|
+
@return {Promise} a promise rejected with the given `reason`.
|
22181
|
+
*/
|
22182
|
+
|
22183
|
+
function reject(reason, label) {
|
22184
|
+
/*jshint validthis:true */
|
22185
|
+
var Constructor = this;
|
22186
|
+
var promise = new Constructor(_rsvpInternal.noop, label);
|
22187
|
+
_rsvpInternal.reject(promise, reason);
|
22188
|
+
return promise;
|
22189
|
+
}
|
22190
|
+
});
|
22191
|
+
enifed('rsvp/promise/resolve', ['exports', 'rsvp/-internal'], function (exports, _rsvpInternal) {
|
22192
|
+
'use strict';
|
22065
22193
|
|
22066
|
-
|
22067
|
-
},
|
22194
|
+
exports.default = resolve;
|
22068
22195
|
|
22069
|
-
|
22070
|
-
|
22071
|
-
|
22072
|
-
|
22073
|
-
|
22074
|
-
|
22075
|
-
|
22076
|
-
|
22077
|
-
|
22078
|
-
|
22079
|
-
|
22080
|
-
|
22081
|
-
|
22082
|
-
|
22083
|
-
|
22084
|
-
|
22085
|
-
|
22086
|
-
|
22087
|
-
|
22088
|
-
|
22089
|
-
|
22090
|
-
|
22091
|
-
|
22092
|
-
|
22093
|
-
|
22094
|
-
|
22095
|
-
|
22096
|
-
|
22097
|
-
|
22098
|
-
|
22099
|
-
|
22196
|
+
/**
|
22197
|
+
`RSVP.Promise.resolve` returns a promise that will become resolved with the
|
22198
|
+
passed `value`. It is shorthand for the following:
|
22199
|
+
|
22200
|
+
```javascript
|
22201
|
+
var promise = new RSVP.Promise(function(resolve, reject){
|
22202
|
+
resolve(1);
|
22203
|
+
});
|
22204
|
+
|
22205
|
+
promise.then(function(value){
|
22206
|
+
// value === 1
|
22207
|
+
});
|
22208
|
+
```
|
22209
|
+
|
22210
|
+
Instead of writing the above, your code now simply becomes the following:
|
22211
|
+
|
22212
|
+
```javascript
|
22213
|
+
var promise = RSVP.Promise.resolve(1);
|
22214
|
+
|
22215
|
+
promise.then(function(value){
|
22216
|
+
// value === 1
|
22217
|
+
});
|
22218
|
+
```
|
22219
|
+
|
22220
|
+
@method resolve
|
22221
|
+
@static
|
22222
|
+
@param {*} object value that the returned promise will be resolved with
|
22223
|
+
@param {String} label optional string for identifying the returned promise.
|
22224
|
+
Useful for tooling.
|
22225
|
+
@return {Promise} a promise that will become fulfilled with the given
|
22226
|
+
`value`
|
22227
|
+
*/
|
22100
22228
|
|
22101
|
-
|
22102
|
-
|
22103
|
-
|
22104
|
-
|
22105
|
-
Synchronous example:
|
22106
|
-
|
22107
|
-
```js
|
22108
|
-
findAuthor() {
|
22109
|
-
if (Math.random() > 0.5) {
|
22110
|
-
throw new Error();
|
22111
|
-
}
|
22112
|
-
return new Author();
|
22113
|
-
}
|
22114
|
-
|
22115
|
-
try {
|
22116
|
-
return findAuthor(); // succeed or fail
|
22117
|
-
} catch(error) {
|
22118
|
-
return findOtherAuther();
|
22119
|
-
} finally {
|
22120
|
-
// always runs
|
22121
|
-
// doesn't affect the return value
|
22122
|
-
}
|
22123
|
-
```
|
22124
|
-
|
22125
|
-
Asynchronous example:
|
22126
|
-
|
22127
|
-
```js
|
22128
|
-
findAuthor().catch(function(reason){
|
22129
|
-
return findOtherAuther();
|
22130
|
-
}).finally(function(){
|
22131
|
-
// author was either found, or not
|
22132
|
-
});
|
22133
|
-
```
|
22134
|
-
|
22135
|
-
@method finally
|
22136
|
-
@param {Function} callback
|
22137
|
-
@param {String} label optional string for labeling the promise.
|
22138
|
-
Useful for tooling.
|
22139
|
-
@return {Promise}
|
22140
|
-
*/
|
22141
|
-
'finally': function (callback, label) {
|
22142
|
-
var promise = this;
|
22143
|
-
var constructor = promise.constructor;
|
22229
|
+
function resolve(object, label) {
|
22230
|
+
/*jshint validthis:true */
|
22231
|
+
var Constructor = this;
|
22144
22232
|
|
22145
|
-
|
22146
|
-
|
22147
|
-
return value;
|
22148
|
-
});
|
22149
|
-
}, function (reason) {
|
22150
|
-
return constructor.resolve(callback()).then(function () {
|
22151
|
-
throw reason;
|
22152
|
-
});
|
22153
|
-
}, label);
|
22233
|
+
if (object && typeof object === 'object' && object.constructor === Constructor) {
|
22234
|
+
return object;
|
22154
22235
|
}
|
22155
|
-
|
22236
|
+
|
22237
|
+
var promise = new Constructor(_rsvpInternal.noop, label);
|
22238
|
+
_rsvpInternal.resolve(promise, object);
|
22239
|
+
return promise;
|
22240
|
+
}
|
22156
22241
|
});
|
22157
22242
|
enifed('rsvp/race', ['exports', 'rsvp/promise'], function (exports, _rsvpPromise) {
|
22158
22243
|
'use strict';
|
@@ -22321,93 +22406,6 @@ enifed('rsvp/utils', ['exports'], function (exports) {
|
|
22321
22406
|
};
|
22322
22407
|
exports.o_create = o_create;
|
22323
22408
|
});
|
22324
|
-
enifed('rsvp', ['exports', 'rsvp/promise', 'rsvp/events', 'rsvp/node', 'rsvp/all', 'rsvp/all-settled', 'rsvp/race', 'rsvp/hash', 'rsvp/hash-settled', 'rsvp/rethrow', 'rsvp/defer', 'rsvp/config', 'rsvp/map', 'rsvp/resolve', 'rsvp/reject', 'rsvp/filter', 'rsvp/asap'], function (exports, _rsvpPromise, _rsvpEvents, _rsvpNode, _rsvpAll, _rsvpAllSettled, _rsvpRace, _rsvpHash, _rsvpHashSettled, _rsvpRethrow, _rsvpDefer, _rsvpConfig, _rsvpMap, _rsvpResolve, _rsvpReject, _rsvpFilter, _rsvpAsap) {
|
22325
|
-
'use strict';
|
22326
|
-
|
22327
|
-
// defaults
|
22328
|
-
_rsvpConfig.config.async = _rsvpAsap.default;
|
22329
|
-
_rsvpConfig.config.after = function (cb) {
|
22330
|
-
setTimeout(cb, 0);
|
22331
|
-
};
|
22332
|
-
var cast = _rsvpResolve.default;
|
22333
|
-
function async(callback, arg) {
|
22334
|
-
_rsvpConfig.config.async(callback, arg);
|
22335
|
-
}
|
22336
|
-
|
22337
|
-
function on() {
|
22338
|
-
_rsvpConfig.config['on'].apply(_rsvpConfig.config, arguments);
|
22339
|
-
}
|
22340
|
-
|
22341
|
-
function off() {
|
22342
|
-
_rsvpConfig.config['off'].apply(_rsvpConfig.config, arguments);
|
22343
|
-
}
|
22344
|
-
|
22345
|
-
// Set up instrumentation through `window.__PROMISE_INTRUMENTATION__`
|
22346
|
-
if (typeof window !== 'undefined' && typeof window['__PROMISE_INSTRUMENTATION__'] === 'object') {
|
22347
|
-
var callbacks = window['__PROMISE_INSTRUMENTATION__'];
|
22348
|
-
_rsvpConfig.configure('instrument', true);
|
22349
|
-
for (var eventName in callbacks) {
|
22350
|
-
if (callbacks.hasOwnProperty(eventName)) {
|
22351
|
-
on(eventName, callbacks[eventName]);
|
22352
|
-
}
|
22353
|
-
}
|
22354
|
-
}
|
22355
|
-
|
22356
|
-
exports.cast = cast;
|
22357
|
-
exports.Promise = _rsvpPromise.default;
|
22358
|
-
exports.EventTarget = _rsvpEvents.default;
|
22359
|
-
exports.all = _rsvpAll.default;
|
22360
|
-
exports.allSettled = _rsvpAllSettled.default;
|
22361
|
-
exports.race = _rsvpRace.default;
|
22362
|
-
exports.hash = _rsvpHash.default;
|
22363
|
-
exports.hashSettled = _rsvpHashSettled.default;
|
22364
|
-
exports.rethrow = _rsvpRethrow.default;
|
22365
|
-
exports.defer = _rsvpDefer.default;
|
22366
|
-
exports.denodeify = _rsvpNode.default;
|
22367
|
-
exports.configure = _rsvpConfig.configure;
|
22368
|
-
exports.on = on;
|
22369
|
-
exports.off = off;
|
22370
|
-
exports.resolve = _rsvpResolve.default;
|
22371
|
-
exports.reject = _rsvpReject.default;
|
22372
|
-
exports.async = async;
|
22373
|
-
exports.map = _rsvpMap.default;
|
22374
|
-
exports.filter = _rsvpFilter.default;
|
22375
|
-
});
|
22376
|
-
enifed('rsvp.umd', ['exports', 'rsvp/platform', 'rsvp'], function (exports, _rsvpPlatform, _rsvp) {
|
22377
|
-
'use strict';
|
22378
|
-
|
22379
|
-
var RSVP = {
|
22380
|
-
'race': _rsvp.race,
|
22381
|
-
'Promise': _rsvp.Promise,
|
22382
|
-
'allSettled': _rsvp.allSettled,
|
22383
|
-
'hash': _rsvp.hash,
|
22384
|
-
'hashSettled': _rsvp.hashSettled,
|
22385
|
-
'denodeify': _rsvp.denodeify,
|
22386
|
-
'on': _rsvp.on,
|
22387
|
-
'off': _rsvp.off,
|
22388
|
-
'map': _rsvp.map,
|
22389
|
-
'filter': _rsvp.filter,
|
22390
|
-
'resolve': _rsvp.resolve,
|
22391
|
-
'reject': _rsvp.reject,
|
22392
|
-
'all': _rsvp.all,
|
22393
|
-
'rethrow': _rsvp.rethrow,
|
22394
|
-
'defer': _rsvp.defer,
|
22395
|
-
'EventTarget': _rsvp.EventTarget,
|
22396
|
-
'configure': _rsvp.configure,
|
22397
|
-
'async': _rsvp.async
|
22398
|
-
};
|
22399
|
-
|
22400
|
-
/* global define:true module:true window: true */
|
22401
|
-
if (typeof define === 'function' && define['amd']) {
|
22402
|
-
define(function () {
|
22403
|
-
return RSVP;
|
22404
|
-
});
|
22405
|
-
} else if (typeof module !== 'undefined' && module['exports']) {
|
22406
|
-
module['exports'] = RSVP;
|
22407
|
-
} else if (typeof _rsvpPlatform.default !== 'undefined') {
|
22408
|
-
_rsvpPlatform.default['RSVP'] = RSVP;
|
22409
|
-
}
|
22410
|
-
});
|
22411
22409
|
(function (m) { if (typeof module === "object" && module.exports) { module.exports = m } }(requireModule("ember-runtime").default));
|
22412
22410
|
|
22413
22411
|
|