mirror of
https://github.com/Combodo/iTop.git
synced 2026-03-02 23:54:12 +01:00
59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
|
|
var oldDeferred = jQuery.Deferred,
|
|
tuples = [
|
|
|
|
// Action, add listener, callbacks, .then handlers, final state
|
|
[ "resolve", "done", jQuery.Callbacks( "once memory" ),
|
|
jQuery.Callbacks( "once memory" ), "resolved" ],
|
|
[ "reject", "fail", jQuery.Callbacks( "once memory" ),
|
|
jQuery.Callbacks( "once memory" ), "rejected" ],
|
|
[ "notify", "progress", jQuery.Callbacks( "memory" ),
|
|
jQuery.Callbacks( "memory" ) ]
|
|
];
|
|
|
|
jQuery.Deferred = function( func ) {
|
|
var deferred = oldDeferred(),
|
|
promise = deferred.promise();
|
|
|
|
deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
|
|
var fns = arguments;
|
|
|
|
migrateWarn( "deferred.pipe() is deprecated" );
|
|
|
|
return jQuery.Deferred( function( newDefer ) {
|
|
jQuery.each( tuples, function( i, tuple ) {
|
|
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
|
|
|
|
// Deferred.done(function() { bind to newDefer or newDefer.resolve })
|
|
// deferred.fail(function() { bind to newDefer or newDefer.reject })
|
|
// deferred.progress(function() { bind to newDefer or newDefer.notify })
|
|
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();
|
|
|
|
};
|
|
|
|
if ( func ) {
|
|
func.call( deferred, deferred );
|
|
}
|
|
|
|
return deferred;
|
|
};
|
|
|
|
// Preserve handler of uncaught exceptions in promise chains
|
|
jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;
|