scratch – Blame information for rev 63
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
58 | office | 1 | define( [ |
2 | "../core", |
||
3 | "./var/nonce", |
||
4 | "./var/rquery", |
||
5 | "../ajax" |
||
6 | ], function( jQuery, nonce, rquery ) { |
||
7 | |||
8 | "use strict"; |
||
9 | |||
10 | var oldCallbacks = [], |
||
11 | rjsonp = /(=)\?(?=&|$)|\?\?/; |
||
12 | |||
13 | // Default jsonp settings |
||
14 | jQuery.ajaxSetup( { |
||
15 | jsonp: "callback", |
||
16 | jsonpCallback: function() { |
||
17 | var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); |
||
18 | this[ callback ] = true; |
||
19 | return callback; |
||
20 | } |
||
21 | } ); |
||
22 | |||
23 | // Detect, normalize options and install callbacks for jsonp requests |
||
24 | jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { |
||
25 | |||
26 | var callbackName, overwritten, responseContainer, |
||
27 | jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? |
||
28 | "url" : |
||
29 | typeof s.data === "string" && |
||
30 | ( s.contentType || "" ) |
||
31 | .indexOf( "application/x-www-form-urlencoded" ) === 0 && |
||
32 | rjsonp.test( s.data ) && "data" |
||
33 | ); |
||
34 | |||
35 | // Handle iff the expected data type is "jsonp" or we have a parameter to set |
||
36 | if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { |
||
37 | |||
38 | // Get callback name, remembering preexisting value associated with it |
||
39 | callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? |
||
40 | s.jsonpCallback() : |
||
41 | s.jsonpCallback; |
||
42 | |||
43 | // Insert callback into url or form data |
||
44 | if ( jsonProp ) { |
||
45 | s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); |
||
46 | } else if ( s.jsonp !== false ) { |
||
47 | s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; |
||
48 | } |
||
49 | |||
50 | // Use data converter to retrieve json after script execution |
||
51 | s.converters[ "script json" ] = function() { |
||
52 | if ( !responseContainer ) { |
||
53 | jQuery.error( callbackName + " was not called" ); |
||
54 | } |
||
55 | return responseContainer[ 0 ]; |
||
56 | }; |
||
57 | |||
58 | // Force json dataType |
||
59 | s.dataTypes[ 0 ] = "json"; |
||
60 | |||
61 | // Install callback |
||
62 | overwritten = window[ callbackName ]; |
||
63 | window[ callbackName ] = function() { |
||
64 | responseContainer = arguments; |
||
65 | }; |
||
66 | |||
67 | // Clean-up function (fires after converters) |
||
68 | jqXHR.always( function() { |
||
69 | |||
70 | // If previous value didn't exist - remove it |
||
71 | if ( overwritten === undefined ) { |
||
72 | jQuery( window ).removeProp( callbackName ); |
||
73 | |||
74 | // Otherwise restore preexisting value |
||
75 | } else { |
||
76 | window[ callbackName ] = overwritten; |
||
77 | } |
||
78 | |||
79 | // Save back as free |
||
80 | if ( s[ callbackName ] ) { |
||
81 | |||
82 | // Make sure that re-using the options doesn't screw things around |
||
83 | s.jsonpCallback = originalSettings.jsonpCallback; |
||
84 | |||
85 | // Save the callback name for future use |
||
86 | oldCallbacks.push( callbackName ); |
||
87 | } |
||
88 | |||
89 | // Call if it was a function and we have a response |
||
90 | if ( responseContainer && jQuery.isFunction( overwritten ) ) { |
||
91 | overwritten( responseContainer[ 0 ] ); |
||
92 | } |
||
93 | |||
94 | responseContainer = overwritten = undefined; |
||
95 | } ); |
||
96 | |||
97 | // Delegate to script |
||
98 | return "script"; |
||
99 | } |
||
100 | } ); |
||
101 | |||
102 | } ); |