UNPKG

ddd-jquery

Version:

de-bowerified, de-amdified, de-gruntified... jQuery.

102 lines 4.49 kB
var jQuery = require('./core'), slice = require('./var/slice'), __unnameddep__ = require('./callbacks'); jQuery.extend({ Deferred: function (func) { var tuples = [ [ 'resolve', 'done', jQuery.Callbacks('once memory'), 'resolved' ], [ 'reject', 'fail', jQuery.Callbacks('once memory'), 'rejected' ], [ 'notify', 'progress', jQuery.Callbacks('memory') ] ], state = 'pending', promise = { state: function () { return state; }, always: function () { deferred.done(arguments).fail(arguments); return this; }, then: function () { var fns = arguments; return jQuery.Deferred(function (newDefer) { jQuery.each(tuples, function (i, tuple) { var fn = jQuery.isFunction(fns[i]) && fns[i]; deferred[tuple[1]](function () { var returned = fn && fn.apply(this, arguments); if (returned && jQuery.isFunction(returned.promise)) { returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify); } else { newDefer[tuple[0] + 'With'](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments); } }); }); fns = null; }).promise(); }, promise: function (obj) { return obj != null ? jQuery.extend(obj, promise) : promise; } }, deferred = {}; promise.pipe = promise.then; jQuery.each(tuples, function (i, tuple) { var list = tuple[2], stateString = tuple[3]; promise[tuple[1]] = list.add; if (stateString) { list.add(function () { state = stateString; }, tuples[i ^ 1][2].disable, tuples[2][2].lock); } deferred[tuple[0]] = function () { deferred[tuple[0] + 'With'](this === deferred ? promise : this, arguments); return this; }; deferred[tuple[0] + 'With'] = list.fireWith; }); promise.promise(deferred); if (func) { func.call(deferred, deferred); } return deferred; }, when: function (subordinate) { var i = 0, resolveValues = slice.call(arguments), length = resolveValues.length, remaining = length !== 1 || subordinate && jQuery.isFunction(subordinate.promise) ? length : 0, deferred = remaining === 1 ? subordinate : jQuery.Deferred(), updateFunc = function (i, contexts, values) { return function (value) { contexts[i] = this; values[i] = arguments.length > 1 ? slice.call(arguments) : value; if (values === progressValues) { deferred.notifyWith(contexts, values); } else if (!--remaining) { deferred.resolveWith(contexts, values); } }; }, progressValues, progressContexts, resolveContexts; if (length > 1) { progressValues = new Array(length); progressContexts = new Array(length); resolveContexts = new Array(length); for (; i < length; i++) { if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) { resolveValues[i].promise().done(updateFunc(i, resolveContexts, resolveValues)).fail(deferred.reject).progress(updateFunc(i, progressContexts, progressValues)); } else { --remaining; } } } if (!remaining) { deferred.resolveWith(resolveContexts, resolveValues); } return deferred.promise(); } }); module.exports = jQuery;