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