diff --git a/src/operative.js b/src/operative.js index 98f6366..82e55e7 100644 --- a/src/operative.js +++ b/src/operative.js @@ -228,8 +228,21 @@ // No Callback -- Promise used: - return new operative.Promise(function(deferred) { - deferred.fulfil = deferred.fulfill; + return new operative.Promise(function(fulfil, reject) { + var deferred; + + if (fulfil.fulfil || fulfil.fulfill) { + // Backwards compatibility + deferred = fulfil; + deferred.fulfil = deferred.fulfill = fulfil.fulfil || fulfil.fulfill; + } else { + deferred = { + fulfil: fulfil, + fulfill: fulfil, + reject: reject + }; + } + self.deferreds[token] = deferred; runMethod(); }); diff --git a/vendor/Promise.js b/vendor/Promise.js index eb9514b..a90f411 100644 --- a/vendor/Promise.js +++ b/vendor/Promise.js @@ -1,415 +1,684 @@ -// Copyright (C) 2013: -// Alex Russell -// Yehuda Katz -// -// Use of this source code is governed by -// http://www.apache.org/licenses/LICENSE-2.0 - -// FIXME(slightlyoff): -// - Document "npm test" -// - Change global name from "Promise" to something less conflicty -(function(global, browserGlobal, underTest) { -"use strict"; - -// FIXME(slighltyoff): -// * aggregates + tests -// * check on fast-forwarding - -underTest = !!underTest; - -// -// Async Utilities -// - -// Borrowed from RSVP.js -var async; - -var MutationObserver = browserGlobal.MutationObserver || - browserGlobal.WebKitMutationObserver; -var Promise; - -if (typeof process !== 'undefined' && - {}.toString.call(process) === '[object process]') { - async = function(callback, binding) { - process.nextTick(function() { - callback.call(binding); - }); +(function() { +var define, requireModule, require, requirejs; + +(function() { + var registry = {}, seen = {}; + + define = function(name, deps, callback) { + registry[name] = { deps: deps, callback: callback }; }; -} else if (MutationObserver) { - var queue = []; - - var observer = new MutationObserver(function() { - var toProcess = queue.slice(); - queue = []; - toProcess.forEach(function(tuple) { - tuple[0].call(tuple[1]); - }); - }); - var element = document.createElement('div'); - observer.observe(element, { attributes: true }); + requirejs = require = requireModule = function(name) { + requirejs._eak_seen = registry; - // Chrome Memory Leak: https://bugs.webkit.org/show_bug.cgi?id=93661 - window.addEventListener('unload', function(){ - observer.disconnect(); - observer = null; - }); + if (seen[name]) { return seen[name]; } + seen[name] = {}; - async = function(callback, binding) { - queue.push([callback, binding]); - element.setAttribute('drainQueue', 'drainQueue'); - }; -} else { - async = function(callback, binding) { - setTimeout(function() { - callback.call(binding); - }, 1); + if (!registry[name]) { + throw new Error("Could not find module " + name); + } + + var mod = registry[name], + deps = mod.deps, + callback = mod.callback, + reified = [], + exports; + + for (var i=0, l=deps.length; i