Merge "prototypes: xci: provision-vm-nodes: Do not provision VMs as root."
[releng.git] / utils / test / testapi / 3rd_party / static / testapi-ui / assets / lib / jquery / src / core.js
1 /* global Symbol */
2 // Defining this global in .eslintrc.json would create a danger of using the global
3 // unguarded in another place, it seems safer to define global only for this module
4
5 define( [
6         "./var/arr",
7         "./var/document",
8         "./var/getProto",
9         "./var/slice",
10         "./var/concat",
11         "./var/push",
12         "./var/indexOf",
13         "./var/class2type",
14         "./var/toString",
15         "./var/hasOwn",
16         "./var/fnToString",
17         "./var/ObjectFunctionString",
18         "./var/support",
19         "./core/DOMEval"
20 ], function( arr, document, getProto, slice, concat, push, indexOf,
21         class2type, toString, hasOwn, fnToString, ObjectFunctionString,
22         support, DOMEval ) {
23
24 "use strict";
25
26 var
27         version = "3.2.1",
28
29         // Define a local copy of jQuery
30         jQuery = function( selector, context ) {
31
32                 // The jQuery object is actually just the init constructor 'enhanced'
33                 // Need init if jQuery is called (just allow error to be thrown if not included)
34                 return new jQuery.fn.init( selector, context );
35         },
36
37         // Support: Android <=4.0 only
38         // Make sure we trim BOM and NBSP
39         rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
40
41         // Matches dashed string for camelizing
42         rmsPrefix = /^-ms-/,
43         rdashAlpha = /-([a-z])/g,
44
45         // Used by jQuery.camelCase as callback to replace()
46         fcamelCase = function( all, letter ) {
47                 return letter.toUpperCase();
48         };
49
50 jQuery.fn = jQuery.prototype = {
51
52         // The current version of jQuery being used
53         jquery: version,
54
55         constructor: jQuery,
56
57         // The default length of a jQuery object is 0
58         length: 0,
59
60         toArray: function() {
61                 return slice.call( this );
62         },
63
64         // Get the Nth element in the matched element set OR
65         // Get the whole matched element set as a clean array
66         get: function( num ) {
67
68                 // Return all the elements in a clean array
69                 if ( num == null ) {
70                         return slice.call( this );
71                 }
72
73                 // Return just the one element from the set
74                 return num < 0 ? this[ num + this.length ] : this[ num ];
75         },
76
77         // Take an array of elements and push it onto the stack
78         // (returning the new matched element set)
79         pushStack: function( elems ) {
80
81                 // Build a new jQuery matched element set
82                 var ret = jQuery.merge( this.constructor(), elems );
83
84                 // Add the old object onto the stack (as a reference)
85                 ret.prevObject = this;
86
87                 // Return the newly-formed element set
88                 return ret;
89         },
90
91         // Execute a callback for every element in the matched set.
92         each: function( callback ) {
93                 return jQuery.each( this, callback );
94         },
95
96         map: function( callback ) {
97                 return this.pushStack( jQuery.map( this, function( elem, i ) {
98                         return callback.call( elem, i, elem );
99                 } ) );
100         },
101
102         slice: function() {
103                 return this.pushStack( slice.apply( this, arguments ) );
104         },
105
106         first: function() {
107                 return this.eq( 0 );
108         },
109
110         last: function() {
111                 return this.eq( -1 );
112         },
113
114         eq: function( i ) {
115                 var len = this.length,
116                         j = +i + ( i < 0 ? len : 0 );
117                 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
118         },
119
120         end: function() {
121                 return this.prevObject || this.constructor();
122         },
123
124         // For internal use only.
125         // Behaves like an Array's method, not like a jQuery method.
126         push: push,
127         sort: arr.sort,
128         splice: arr.splice
129 };
130
131 jQuery.extend = jQuery.fn.extend = function() {
132         var options, name, src, copy, copyIsArray, clone,
133                 target = arguments[ 0 ] || {},
134                 i = 1,
135                 length = arguments.length,
136                 deep = false;
137
138         // Handle a deep copy situation
139         if ( typeof target === "boolean" ) {
140                 deep = target;
141
142                 // Skip the boolean and the target
143                 target = arguments[ i ] || {};
144                 i++;
145         }
146
147         // Handle case when target is a string or something (possible in deep copy)
148         if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
149                 target = {};
150         }
151
152         // Extend jQuery itself if only one argument is passed
153         if ( i === length ) {
154                 target = this;
155                 i--;
156         }
157
158         for ( ; i < length; i++ ) {
159
160                 // Only deal with non-null/undefined values
161                 if ( ( options = arguments[ i ] ) != null ) {
162
163                         // Extend the base object
164                         for ( name in options ) {
165                                 src = target[ name ];
166                                 copy = options[ name ];
167
168                                 // Prevent never-ending loop
169                                 if ( target === copy ) {
170                                         continue;
171                                 }
172
173                                 // Recurse if we're merging plain objects or arrays
174                                 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
175                                         ( copyIsArray = Array.isArray( copy ) ) ) ) {
176
177                                         if ( copyIsArray ) {
178                                                 copyIsArray = false;
179                                                 clone = src && Array.isArray( src ) ? src : [];
180
181                                         } else {
182                                                 clone = src && jQuery.isPlainObject( src ) ? src : {};
183                                         }
184
185                                         // Never move original objects, clone them
186                                         target[ name ] = jQuery.extend( deep, clone, copy );
187
188                                 // Don't bring in undefined values
189                                 } else if ( copy !== undefined ) {
190                                         target[ name ] = copy;
191                                 }
192                         }
193                 }
194         }
195
196         // Return the modified object
197         return target;
198 };
199
200 jQuery.extend( {
201
202         // Unique for each copy of jQuery on the page
203         expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
204
205         // Assume jQuery is ready without the ready module
206         isReady: true,
207
208         error: function( msg ) {
209                 throw new Error( msg );
210         },
211
212         noop: function() {},
213
214         isFunction: function( obj ) {
215                 return jQuery.type( obj ) === "function";
216         },
217
218         isWindow: function( obj ) {
219                 return obj != null && obj === obj.window;
220         },
221
222         isNumeric: function( obj ) {
223
224                 // As of jQuery 3.0, isNumeric is limited to
225                 // strings and numbers (primitives or objects)
226                 // that can be coerced to finite numbers (gh-2662)
227                 var type = jQuery.type( obj );
228                 return ( type === "number" || type === "string" ) &&
229
230                         // parseFloat NaNs numeric-cast false positives ("")
231                         // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
232                         // subtraction forces infinities to NaN
233                         !isNaN( obj - parseFloat( obj ) );
234         },
235
236         isPlainObject: function( obj ) {
237                 var proto, Ctor;
238
239                 // Detect obvious negatives
240                 // Use toString instead of jQuery.type to catch host objects
241                 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
242                         return false;
243                 }
244
245                 proto = getProto( obj );
246
247                 // Objects with no prototype (e.g., `Object.create( null )`) are plain
248                 if ( !proto ) {
249                         return true;
250                 }
251
252                 // Objects with prototype are plain iff they were constructed by a global Object function
253                 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
254                 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
255         },
256
257         isEmptyObject: function( obj ) {
258
259                 /* eslint-disable no-unused-vars */
260                 // See https://github.com/eslint/eslint/issues/6125
261                 var name;
262
263                 for ( name in obj ) {
264                         return false;
265                 }
266                 return true;
267         },
268
269         type: function( obj ) {
270                 if ( obj == null ) {
271                         return obj + "";
272                 }
273
274                 // Support: Android <=2.3 only (functionish RegExp)
275                 return typeof obj === "object" || typeof obj === "function" ?
276                         class2type[ toString.call( obj ) ] || "object" :
277                         typeof obj;
278         },
279
280         // Evaluates a script in a global context
281         globalEval: function( code ) {
282                 DOMEval( code );
283         },
284
285         // Convert dashed to camelCase; used by the css and data modules
286         // Support: IE <=9 - 11, Edge 12 - 13
287         // Microsoft forgot to hump their vendor prefix (#9572)
288         camelCase: function( string ) {
289                 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
290         },
291
292         each: function( obj, callback ) {
293                 var length, i = 0;
294
295                 if ( isArrayLike( obj ) ) {
296                         length = obj.length;
297                         for ( ; i < length; i++ ) {
298                                 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
299                                         break;
300                                 }
301                         }
302                 } else {
303                         for ( i in obj ) {
304                                 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
305                                         break;
306                                 }
307                         }
308                 }
309
310                 return obj;
311         },
312
313         // Support: Android <=4.0 only
314         trim: function( text ) {
315                 return text == null ?
316                         "" :
317                         ( text + "" ).replace( rtrim, "" );
318         },
319
320         // results is for internal usage only
321         makeArray: function( arr, results ) {
322                 var ret = results || [];
323
324                 if ( arr != null ) {
325                         if ( isArrayLike( Object( arr ) ) ) {
326                                 jQuery.merge( ret,
327                                         typeof arr === "string" ?
328                                         [ arr ] : arr
329                                 );
330                         } else {
331                                 push.call( ret, arr );
332                         }
333                 }
334
335                 return ret;
336         },
337
338         inArray: function( elem, arr, i ) {
339                 return arr == null ? -1 : indexOf.call( arr, elem, i );
340         },
341
342         // Support: Android <=4.0 only, PhantomJS 1 only
343         // push.apply(_, arraylike) throws on ancient WebKit
344         merge: function( first, second ) {
345                 var len = +second.length,
346                         j = 0,
347                         i = first.length;
348
349                 for ( ; j < len; j++ ) {
350                         first[ i++ ] = second[ j ];
351                 }
352
353                 first.length = i;
354
355                 return first;
356         },
357
358         grep: function( elems, callback, invert ) {
359                 var callbackInverse,
360                         matches = [],
361                         i = 0,
362                         length = elems.length,
363                         callbackExpect = !invert;
364
365                 // Go through the array, only saving the items
366                 // that pass the validator function
367                 for ( ; i < length; i++ ) {
368                         callbackInverse = !callback( elems[ i ], i );
369                         if ( callbackInverse !== callbackExpect ) {
370                                 matches.push( elems[ i ] );
371                         }
372                 }
373
374                 return matches;
375         },
376
377         // arg is for internal usage only
378         map: function( elems, callback, arg ) {
379                 var length, value,
380                         i = 0,
381                         ret = [];
382
383                 // Go through the array, translating each of the items to their new values
384                 if ( isArrayLike( elems ) ) {
385                         length = elems.length;
386                         for ( ; i < length; i++ ) {
387                                 value = callback( elems[ i ], i, arg );
388
389                                 if ( value != null ) {
390                                         ret.push( value );
391                                 }
392                         }
393
394                 // Go through every key on the object,
395                 } else {
396                         for ( i in elems ) {
397                                 value = callback( elems[ i ], i, arg );
398
399                                 if ( value != null ) {
400                                         ret.push( value );
401                                 }
402                         }
403                 }
404
405                 // Flatten any nested arrays
406                 return concat.apply( [], ret );
407         },
408
409         // A global GUID counter for objects
410         guid: 1,
411
412         // Bind a function to a context, optionally partially applying any
413         // arguments.
414         proxy: function( fn, context ) {
415                 var tmp, args, proxy;
416
417                 if ( typeof context === "string" ) {
418                         tmp = fn[ context ];
419                         context = fn;
420                         fn = tmp;
421                 }
422
423                 // Quick check to determine if target is callable, in the spec
424                 // this throws a TypeError, but we will just return undefined.
425                 if ( !jQuery.isFunction( fn ) ) {
426                         return undefined;
427                 }
428
429                 // Simulated bind
430                 args = slice.call( arguments, 2 );
431                 proxy = function() {
432                         return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
433                 };
434
435                 // Set the guid of unique handler to the same of original handler, so it can be removed
436                 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
437
438                 return proxy;
439         },
440
441         now: Date.now,
442
443         // jQuery.support is not used in Core but other projects attach their
444         // properties to it so it needs to exist.
445         support: support
446 } );
447
448 if ( typeof Symbol === "function" ) {
449         jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
450 }
451
452 // Populate the class2type map
453 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
454 function( i, name ) {
455         class2type[ "[object " + name + "]" ] = name.toLowerCase();
456 } );
457
458 function isArrayLike( obj ) {
459
460         // Support: real iOS 8.2 only (not reproducible in simulator)
461         // `in` check used to prevent JIT error (gh-2145)
462         // hasOwn isn't used here due to false negatives
463         // regarding Nodelist length in IE
464         var length = !!obj && "length" in obj && obj.length,
465                 type = jQuery.type( obj );
466
467         if ( type === "function" || jQuery.isWindow( obj ) ) {
468                 return false;
469         }
470
471         return type === "array" || length === 0 ||
472                 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
473 }
474
475 return jQuery;
476 } );