| "use strict"; |
| |
| const { JSDOM } = require( "jsdom" ); |
| |
| const { window } = new JSDOM( "" ); |
| |
| const jQuery = require( "../../" )( window ); |
| |
| module.exports.deferred = () => { |
| let adopted, promised; |
| |
| return { |
| resolve: function() { |
| if ( !adopted ) { |
| adopted = jQuery.when.apply( jQuery, arguments ); |
| if ( promised ) { |
| adopted.then( promised.resolve, promised.reject ); |
| } |
| } |
| return adopted; |
| }, |
| reject: function( value ) { |
| if ( !adopted ) { |
| adopted = jQuery.when( jQuery.Deferred().reject( value ) ); |
| if ( promised ) { |
| adopted.then( promised.resolve, promised.reject ); |
| } |
| } |
| return adopted; |
| }, |
| |
| // A manually-constructed thenable that works even if calls precede resolve/reject |
| promise: { |
| then: function() { |
| if ( !adopted ) { |
| if ( !promised ) { |
| promised = jQuery.Deferred(); |
| } |
| return promised.then.apply( promised, arguments ); |
| } |
| return adopted.then.apply( adopted, arguments ); |
| } |
| } |
| }; |
| }; |