version up renderjs/rsvp
This commit is contained in:
parent
31ea8179a6
commit
8bbbe96c22
737
dev/renderjs.js
737
dev/renderjs.js
File diff suppressed because it is too large
Load Diff
206
dev/rsvp.js
206
dev/rsvp.js
|
@ -60,7 +60,7 @@ define("rsvp/all",
|
|||
}
|
||||
}
|
||||
|
||||
return new Promise(function(resolve, reject, notify) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var results = [], remaining = promises.length,
|
||||
promise, remaining_count = promises.length - expected_count;
|
||||
|
||||
|
@ -90,12 +90,6 @@ define("rsvp/all",
|
|||
}
|
||||
}
|
||||
|
||||
function notifier(index) {
|
||||
return function(value) {
|
||||
notify({"index": index, "value": value});
|
||||
};
|
||||
}
|
||||
|
||||
function cancelAll(rejectionValue) {
|
||||
reject(rejectionValue);
|
||||
canceller();
|
||||
|
@ -105,7 +99,7 @@ define("rsvp/all",
|
|||
promise = promises[i];
|
||||
|
||||
if (promise && typeof promise.then === 'function') {
|
||||
promise.then(resolver(i), cancelAll, notifier(i));
|
||||
promise.then(resolver(i), cancelAll);
|
||||
} else {
|
||||
resolveAll(i, promise);
|
||||
}
|
||||
|
@ -213,14 +207,14 @@ define("rsvp/async",
|
|||
};
|
||||
}
|
||||
|
||||
if (typeof setImmediate === 'function') {
|
||||
if (checkNativePromise()) {
|
||||
async = useNativePromise();
|
||||
} else if (typeof setImmediate === 'function') {
|
||||
async = useSetImmediate();
|
||||
} else if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
|
||||
async = useNextTick();
|
||||
} else if (BrowserMutationObserver) {
|
||||
async = useMutationObserver();
|
||||
} else if (checkNativePromise()) {
|
||||
async = useNativePromise();
|
||||
} else {
|
||||
async = useSetTimeout();
|
||||
}
|
||||
|
@ -385,10 +379,10 @@ define("rsvp/events",
|
|||
__exports__.EventTarget = EventTarget;
|
||||
});
|
||||
define("rsvp/hash",
|
||||
["rsvp/defer","exports"],
|
||||
["rsvp/promise","exports"],
|
||||
function(__dependency1__, __exports__) {
|
||||
"use strict";
|
||||
var defer = __dependency1__.defer;
|
||||
var Promise = __dependency1__.Promise;
|
||||
|
||||
function size(object) {
|
||||
var s = 0;
|
||||
|
@ -401,38 +395,61 @@ define("rsvp/hash",
|
|||
}
|
||||
|
||||
function hash(promises) {
|
||||
var results = {}, deferred = defer(), remaining = size(promises);
|
||||
|
||||
if (remaining === 0) {
|
||||
deferred.resolve({});
|
||||
}
|
||||
function canceller() {
|
||||
var promise,
|
||||
key;
|
||||
for (key in promises) {
|
||||
if (promises.hasOwnProperty(key)) {
|
||||
promise = promises[key];
|
||||
|
||||
var resolver = function(prop) {
|
||||
return function(value) {
|
||||
resolveAll(prop, value);
|
||||
};
|
||||
};
|
||||
|
||||
var resolveAll = function(prop, value) {
|
||||
results[prop] = value;
|
||||
if (--remaining === 0) {
|
||||
deferred.resolve(results);
|
||||
}
|
||||
};
|
||||
|
||||
var rejectAll = function(error) {
|
||||
deferred.reject(error);
|
||||
};
|
||||
|
||||
for (var prop in promises) {
|
||||
if (promises[prop] && typeof promises[prop].then === 'function') {
|
||||
promises[prop].then(resolver(prop), rejectAll);
|
||||
} else {
|
||||
resolveAll(prop, promises[prop]);
|
||||
if (promise && typeof promise.then === 'function' &&
|
||||
typeof promise.cancel === 'function') {
|
||||
promise.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var results = {}, remaining = size(promises),
|
||||
promise;
|
||||
|
||||
if (remaining === 0) {
|
||||
resolve(results);
|
||||
}
|
||||
|
||||
function resolver(key) {
|
||||
return function(value) {
|
||||
resolveAll(key, value);
|
||||
};
|
||||
}
|
||||
|
||||
function resolveAll(key, value) {
|
||||
results[key] = value;
|
||||
if (--remaining === 0) {
|
||||
resolve(results);
|
||||
}
|
||||
}
|
||||
|
||||
function cancelAll(rejectionValue) {
|
||||
reject(rejectionValue);
|
||||
canceller();
|
||||
}
|
||||
|
||||
for (var prop in promises) {
|
||||
promise = promises[prop];
|
||||
|
||||
if (promise && typeof promise.then === 'function') {
|
||||
promise.then(resolver(prop), cancelAll);
|
||||
} else {
|
||||
resolveAll(prop, promise);
|
||||
}
|
||||
}
|
||||
|
||||
}, canceller
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -529,11 +546,6 @@ define("rsvp/promise",
|
|||
reject(promise, value);
|
||||
};
|
||||
|
||||
var notifyPromise = function(value) {
|
||||
if (resolved) { return; }
|
||||
notify(promise, value);
|
||||
};
|
||||
|
||||
this.on('promise:failed', function(event) {
|
||||
this.trigger('error', { detail: event.detail });
|
||||
}, this);
|
||||
|
@ -544,6 +556,7 @@ define("rsvp/promise",
|
|||
// For now, simply reject the promise and does not propagate the cancel
|
||||
// to parent or children
|
||||
if (resolved) { return; }
|
||||
promise.isCancelled = true;
|
||||
if (canceller !== undefined) {
|
||||
try {
|
||||
canceller();
|
||||
|
@ -557,7 +570,7 @@ define("rsvp/promise",
|
|||
};
|
||||
|
||||
try {
|
||||
resolver(resolvePromise, rejectPromise, notifyPromise);
|
||||
resolver(resolvePromise, rejectPromise);
|
||||
} catch(e) {
|
||||
rejectPromise(e);
|
||||
}
|
||||
|
@ -575,6 +588,7 @@ define("rsvp/promise",
|
|||
|
||||
if (promise.isFulfilled) { return; }
|
||||
if (promise.isRejected) { return; }
|
||||
if (promise.isCancelled) { return; }
|
||||
|
||||
if (hasCallback) {
|
||||
try {
|
||||
|
@ -602,31 +616,16 @@ define("rsvp/promise",
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
var invokeNotifyCallback = function(promise, callback, event) {
|
||||
var value;
|
||||
if (typeof callback === 'function') {
|
||||
try {
|
||||
value = callback(event.detail);
|
||||
} catch (e) {
|
||||
// stop propagating
|
||||
return;
|
||||
}
|
||||
notify(promise, value);
|
||||
} else {
|
||||
notify(promise, event.detail);
|
||||
}
|
||||
};
|
||||
|
||||
Promise.prototype = {
|
||||
constructor: Promise,
|
||||
|
||||
isCancelled: undefined,
|
||||
isRejected: undefined,
|
||||
isFulfilled: undefined,
|
||||
rejectedReason: undefined,
|
||||
fulfillmentValue: undefined,
|
||||
|
||||
then: function(done, fail, progress) {
|
||||
then: function(done, fail) {
|
||||
this.off('error', onerror);
|
||||
|
||||
var thenPromise = new this.constructor(function() {},
|
||||
|
@ -654,10 +653,6 @@ define("rsvp/promise",
|
|||
invokeCallback('reject', thenPromise, fail, event);
|
||||
});
|
||||
|
||||
this.on('promise:notified', function (event) {
|
||||
invokeNotifyCallback(thenPromise, progress, event);
|
||||
});
|
||||
|
||||
return thenPromise;
|
||||
},
|
||||
|
||||
|
@ -693,11 +688,6 @@ define("rsvp/promise",
|
|||
then = value.then;
|
||||
|
||||
if (isFunction(then)) {
|
||||
if (isFunction(value.on)) {
|
||||
value.on('promise:notified', function (event) {
|
||||
notify(promise, event.detail);
|
||||
});
|
||||
}
|
||||
promise.on('promise:cancelled', function(event) {
|
||||
if (isFunction(value.cancel)) {
|
||||
value.cancel();
|
||||
|
@ -750,12 +740,6 @@ define("rsvp/promise",
|
|||
});
|
||||
}
|
||||
|
||||
function notify(promise, value) {
|
||||
config.async(function() {
|
||||
promise.trigger('promise:notified', { detail: value });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
__exports__.Promise = Promise;
|
||||
});
|
||||
|
@ -777,13 +761,12 @@ define("rsvp/queue",
|
|||
ResolvedQueueError.prototype = new Error();
|
||||
ResolvedQueueError.prototype.constructor = ResolvedQueueError;
|
||||
|
||||
var Queue = function() {
|
||||
var Queue = function(thenable) {
|
||||
var queue = this,
|
||||
promise_list = [],
|
||||
promise,
|
||||
fulfill,
|
||||
reject,
|
||||
notify,
|
||||
resolved;
|
||||
|
||||
if (!(this instanceof Queue)) {
|
||||
|
@ -791,12 +774,32 @@ define("rsvp/queue",
|
|||
}
|
||||
|
||||
function canceller() {
|
||||
for (var i = 0; i < 2; i++) {
|
||||
promise_list[i].cancel();
|
||||
for (var i = promise_list.length; i > 0; i--) {
|
||||
promise_list[i - 1].cancel();
|
||||
}
|
||||
}
|
||||
|
||||
promise = new Promise(function(done, fail, progress) {
|
||||
function checkPromise(next_promise) {
|
||||
promise_list.push(next_promise);
|
||||
// Handle pop
|
||||
promise_list.push(next_promise.then(function (fulfillmentValue) {
|
||||
promise_list.splice(0, 2);
|
||||
if (promise_list.length === 0) {
|
||||
fulfill(fulfillmentValue);
|
||||
} else {
|
||||
return fulfillmentValue;
|
||||
}
|
||||
}, function (rejectedReason) {
|
||||
promise_list.splice(0, 2);
|
||||
if (promise_list.length === 0) {
|
||||
reject(rejectedReason);
|
||||
} else {
|
||||
throw rejectedReason;
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
promise = new Promise(function(done, fail) {
|
||||
fulfill = function (fulfillmentValue) {
|
||||
if (resolved) {return;}
|
||||
queue.isFulfilled = true;
|
||||
|
@ -811,16 +814,9 @@ define("rsvp/queue",
|
|||
resolved = true;
|
||||
return fail(rejectedReason);
|
||||
};
|
||||
notify = progress;
|
||||
}, canceller);
|
||||
|
||||
promise_list.push(resolve());
|
||||
promise_list.push(promise_list[0].then(function () {
|
||||
promise_list.splice(0, 2);
|
||||
if (promise_list.length === 0) {
|
||||
fulfill();
|
||||
}
|
||||
}));
|
||||
checkPromise(resolve(thenable));
|
||||
|
||||
queue.cancel = function () {
|
||||
if (resolved) {return;}
|
||||
|
@ -835,7 +831,7 @@ define("rsvp/queue",
|
|||
return promise.then.apply(promise, arguments);
|
||||
};
|
||||
|
||||
queue.push = function(done, fail, progress) {
|
||||
queue.push = function(done, fail) {
|
||||
var last_promise = promise_list[promise_list.length - 1],
|
||||
next_promise;
|
||||
|
||||
|
@ -843,31 +839,9 @@ define("rsvp/queue",
|
|||
throw new ResolvedQueueError();
|
||||
}
|
||||
|
||||
next_promise = last_promise.then(done, fail, progress);
|
||||
promise_list.push(next_promise);
|
||||
|
||||
// Handle pop
|
||||
last_promise = next_promise.then(function (fulfillmentValue) {
|
||||
promise_list.splice(0, 2);
|
||||
if (promise_list.length === 0) {
|
||||
fulfill(fulfillmentValue);
|
||||
} else {
|
||||
return fulfillmentValue;
|
||||
}
|
||||
}, function (rejectedReason) {
|
||||
promise_list.splice(0, 2);
|
||||
if (promise_list.length === 0) {
|
||||
reject(rejectedReason);
|
||||
} else {
|
||||
throw rejectedReason;
|
||||
}
|
||||
}, function (notificationValue) {
|
||||
if (promise_list[promise_list.length - 1] === last_promise) {
|
||||
notify(notificationValue);
|
||||
}
|
||||
return notificationValue;
|
||||
});
|
||||
promise_list.push(last_promise);
|
||||
checkPromise(last_promise.then(done, fail));
|
||||
|
||||
|
||||
return this;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue