PageSourceSearch

https://cf.mora.jp/cfdocs/addition/js/lib/jquery.jsonp-2.4.0.js

js mora.jp collected 2026-09-24 09:04:04 UTC 10,000 bytes, 300 lines download raw bytes

1/*
2 * jQuery JSONP Core Plugin 2.4.0 (2012-08-21)
3 * jQuery JSONP Core Plugin 2.4.0-1 (2013-02-14) customized
4 *
5 * https://github.com/jaubourg/jquery-jsonp
6 *
7 * Copyright (c) 2012 Julian Aubourg
8 *
9 * This document is licensed as free software under the terms of the
10 * MIT License: http://www.opensource.org/licenses/mit-license.php
11 */
12( function( $ ) {
13
14    // ###################### UTILITIES ##
15
16    // Noop
17    function noop() {
18    }
19
20    // Generic callback
21    function genericCallback( data ) {
22        lastValue = [ data ];
23    }
24
25    // Call if defined
26    function callIfDefined( method , object , parameters ) {
27        return method && method.apply( object.context || object , parameters );
28    }
29
30    // Give joining character given url
31    function qMarkOrAmp( url ) {
32        return /\?/ .test( url ) ? "&" : "?";
33    }
34
35    var STR_ASYNC = "async",
36        STR_CHARSET = "charset",
37        STR_EMPTY = "",
38        STR_ERROR = "error",
39        STR_INSERT_BEFORE = "insertBefore",
40        STR_JQUERY_JSONP = "_jqjsp",
41        STR_ON = "on",
42        STR_ON_CLICK = STR_ON + "click",
43        STR_ON_ERROR = STR_ON + STR_ERROR,
44        STR_ON_LOAD = STR_ON + "load",
45        STR_ON_READY_STATE_CHANGE = STR_ON + "readystatechange",
46        STR_READY_STATE = "readyState",
47        STR_REMOVE_CHILD = "removeChild",
48        STR_SCRIPT_TAG = "<script>",
49        STR_SUCCESS = "success",
50        STR_TIMEOUT = "timeout",
51
52        // Window
53        win = window,
54        // Deferred
55        Deferred = $.Deferred,
56        // Head element
57        head = $( "head" )[ 0 ] || document.documentElement,
58        // Page cache
59        pageCache = {},
60        // Counter
61        count = 0,
62        // Last returned value
63        lastValue,
64
65        // ###################### DEFAULT OPTIONS ##
66        xOptionsDefaults = {
67            //beforeSend: undefined,
68            //cache: false,
69            callback: STR_JQUERY_JSONP,
70            //callbackParameter: undefined,
71            //charset: undefined,
72            //complete: undefined,
73            //context: undefined,
74            //data: "",
75            //dataFilter: undefined,
76            //error: undefined,
77            //pageCache: false,
78            //success: undefined,
79            //timeout: 0,
80            //traditional: false,
81            url: location.href
82        },
83
84        // opera demands sniffing :/
85        opera = win.opera;
86
87        // IE < 10
88        var oldIE = !!$( "<div>" ).html( "<!--[if IE]><i><![endif]-->" ).find("i").length;
89        // customized start
90        if (typeof isMediaGo != "undefined" && isMediaGo) {
91            oldIE = false;
92        } else if (navigator.userAgent.indexOf("MusicCenter/2") > 0){
93            oldIE = false;
94        } else if (typeof isXapl != "undefined" && isXapl) {
95            oldIE = true;
96        } else if (navigator.userAgent.indexOf("Windows NT 6.2") > 0) {
97            oldIE = false;
98        } else if (navigator.userAgent.indexOf("MSIE 7.0") > 0) {
99            oldIE = true;
100        } else if (navigator.userAgent.indexOf("MSIE 8.0") > 0) {
101            oldIE = true;
102        }
103
104        // end
105    // ###################### MAIN FUNCTION ##
106    function jsonp( xOptions ) {
107
108        // Build data with default
109        xOptions = $.extend( {} , xOptionsDefaults , xOptions );
110
111        // References to xOptions members (for better minification)
112        var successCallback = xOptions.success,
113            errorCallback = xOptions.error,
114            completeCallback = xOptions.complete,
115            dataFilter = xOptions.dataFilter,
116            callbackParameter = xOptions.callbackParameter,
117            successCallbackName = xOptions.callback,
118            cacheFlag = xOptions.cache,
119            pageCacheFlag = xOptions.pageCache,
120            charset = xOptions.charset,
121            url = xOptions.url,
122            data = xOptions.data,
123            timeout = xOptions.timeout,
124            pageCached,
125
126            // Abort/done flag
127            done = 0,
128
129            // Life-cycle functions
130            cleanUp = noop,
131
132            // Support vars
133            supportOnload,
134            supportOnreadystatechange,
135
136            // Request execution vars
137            firstChild,
138            script,
139            scriptAfter,
140            timeoutTimer;
141
142        // If we have Deferreds:
143        // - substitute callbacks
144        // - promote xOptions to a promise
145        Deferred && Deferred(function( defer ) {
146            defer.done( successCallback ).fail( errorCallback );
147            successCallback = defer.resolve;
148            errorCallback = defer.reject;
149        }).promise( xOptions );
150
151        // Create the abort method
152        xOptions.abort = function() {
153            !( done++ ) && cleanUp();
154        };
155
156        // Call beforeSend if provided (early abort if false returned)
157        if ( callIfDefined( xOptions.beforeSend , xOptions , [ xOptions ] ) === !1 || done ) {
158            return xOptions;
159        }
160
161        // Control entries
162        url = url || STR_EMPTY;
163        data = data ? ( (typeof data) == "string" ? data : $.param( data , xOptions.traditional ) ) : STR_EMPTY;
164
165        // Build final url
166        url += data ? ( qMarkOrAmp( url ) + data ) : STR_EMPTY;
167
168        // Add callback parameter if provided as option
169        callbackParameter && ( url += qMarkOrAmp( url ) + encodeURIComponent( callbackParameter ) + "=?" );
170
171        // Add anticache parameter if needed
172        !cacheFlag && !pageCacheFlag && ( url += qMarkOrAmp( url ) + "_" + ( new Date() ).getTime() + "=" );
173
174        // Replace last ? by callback parameter
175        url = url.replace( /=\?(&|$)/ , "=" + successCallbackName + "$1" );
176
177        // Success notifier
178        function notifySuccess( json ) {
179
180            if ( !( done++ ) ) {
181
182                cleanUp();
183                // Pagecache if needed
184                pageCacheFlag && ( pageCache [ url ] = { s: [ json ] } );
185                // Apply the data filter if provided
186                dataFilter && ( json = dataFilter.apply( xOptions , [ json ] ) );
187                // Call success then complete
188                callIfDefined( successCallback , xOptions , [ json , STR_SUCCESS, xOptions ] );
189                callIfDefined( completeCallback , xOptions , [ xOptions , STR_SUCCESS ] );
190
191            }
192        }
193
194        // Error notifier
195        function notifyError( type ) {
196
197            if ( !( done++ ) ) {
198
199                // Clean up
200                cleanUp();
201                // If pure error (not timeout), cache if needed
202                pageCacheFlag && type != STR_TIMEOUT && ( pageCache[ url ] = type );
203                // Call error then complete
204                callIfDefined( errorCallback , xOptions , [ xOptions , type ] );
205                callIfDefined( completeCallback , xOptions , [ xOptions , type ] );
206
207            }
208        }
209
210        // Check page cache
211        if ( pageCacheFlag && ( pageCached = pageCache[ url ] ) ) {
212
213            pageCached.s ? notifySuccess( pageCached.s[ 0 ] ) : notifyError( pageCached );
214
215        } else {
216
217            // Install the generic callback
218            // (BEWARE: global namespace pollution ahoy)
219            win[ successCallbackName ] = genericCallback;
220
221            // Create the script tag
222            script = $( STR_SCRIPT_TAG )[ 0 ];
223            script.id = STR_JQUERY_JSONP + count++;
224
225            // Set charset if provided
226            if ( charset ) {
227                script[ STR_CHARSET ] = charset;
228            }
229
230            opera && opera.version() < 11.60 ?
231                // onerror is not supported: do not set as async and assume in-order execution.
232                // Add a trailing script to emulate the event
233                ( ( scriptAfter = $( STR_SCRIPT_TAG )[ 0 ] ).text = "document.getElementById('" + script.id + "')." + STR_ON_ERROR + "()" )
234            :
235                // onerror is supported: set the script as async to avoid requests blocking each others
236                ( script[ STR_ASYNC ] = STR_ASYNC )
237
238            ;
239
240            // Internet Explorer: event/htmlFor trick
241            if ( oldIE ) {
242                script.htmlFor = script.id;
243                script.event = STR_ON_CLICK;
244            }
245
246            // Attached event handlers
247            script[ STR_ON_LOAD ] = script[ STR_ON_ERROR ] = script[ STR_ON_READY_STATE_CHANGE ] = function ( result ) {
248
249                // Test readyState if it exists
250                if ( !script[ STR_READY_STATE ] || !/i/.test( script[ STR_READY_STATE ] ) ) {
251
252                    try {
253
254                        script[ STR_ON_CLICK ] && script[ STR_ON_CLICK ]();
255
256                    } catch( _ ) {}
257
258                    result = lastValue;
259                    lastValue = 0;
260                    result ? notifySuccess( result[ 0 ] ) : notifyError( STR_ERROR );
261
262                }
263            };
264
265            // Set source
266            script.src = url;
267
268            // Re-declare cleanUp function
269            cleanUp = function( i ) {
270                timeoutTimer && clearTimeout( timeoutTimer );
271                script[ STR_ON_READY_STATE_CHANGE ] = script[ STR_ON_LOAD ] = script[ STR_ON_ERROR ] = null;
272                head[ STR_REMOVE_CHILD ]( script );
273                scriptAfter && head[ STR_REMOVE_CHILD ]( scriptAfter );
274            };
275
276            // Append main script
277            head[ STR_INSERT_BEFORE ]( script , ( firstChild = head.firstChild ) );
278
279            // Append trailing script if needed
280            scriptAfter && head[ STR_INSERT_BEFORE ]( scriptAfter , firstChild );
281
282            // If a timeout is needed, install it
283            timeoutTimer = timeout > 0 && setTimeout( function() {
284                notifyError( STR_TIMEOUT );
285            } , timeout );
286
287        }
288
289        return xOptions;
290    }
291
292    // ###################### SETUP FUNCTION ##
293    jsonp.setup = function( xOptions ) {
294        $.extend( xOptionsDefaults , xOptions );
295    };
296
297    // ###################### INSTALL in jQuery ##
298    $.jsonp = jsonp;
299
300} )( jQuery );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.