| define([ |
| "./var/arr", |
| "./var/slice", |
| "./var/concat", |
| "./var/push", |
| "./var/indexOf", |
| "./var/class2type", |
| "./var/toString", |
| "./var/hasOwn", |
| "./var/support" |
| ], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) { |
| |
| var |
| // Use the correct document accordingly with window argument (sandbox) |
| document = window.document, |
| |
| version = "@VERSION", |
| |
| // Define a local copy of jQuery |
| jQuery = function( selector, context ) { |
| // The jQuery object is actually just the init constructor 'enhanced' |
| // Need init if jQuery is called (just allow error to be thrown if not included) |
| return new jQuery.fn.init( selector, context ); |
| }, |
| |
| // Support: Android<4.1 |
| // Make sure we trim BOM and NBSP |
| rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, |
| |
| // Matches dashed string for camelizing |
| rmsPrefix = /^-ms-/, |
| rdashAlpha = /-([\da-z])/gi, |
| |
| // Used by jQuery.camelCase as callback to replace() |
| fcamelCase = function( all, letter ) { |
| return letter.toUpperCase(); |
| }; |
| |
| jQuery.fn = jQuery.prototype = { |
| // The current version of jQuery being used |
| jquery: version, |
| |
| constructor: jQuery, |
| |
| // Start with an empty selector |
| selector: "", |
| |
| // The default length of a jQuery object is 0 |
| length: 0, |
| |
| toArray: function() { |
| return slice.call( this ); |
| }, |
| |
| // Get the Nth element in the matched element set OR |
| // Get the whole matched element set as a clean array |
| get: function( num ) { |
| return num != null ? |
| |
| // Return just the one element from the set |
| ( num < 0 ? this[ num + this.length ] : this[ num ] ) : |
| |
| // Return all the elements in a clean array |
| slice.call( this ); |
| }, |
| |
| // Take an array of elements and push it onto the stack |
| // (returning the new matched element set) |
| pushStack: function( elems ) { |
| |
| // Build a new jQuery matched element set |
| var ret = jQuery.merge( this.constructor(), elems ); |
| |
| // Add the old object onto the stack (as a reference) |
| ret.prevObject = this; |
| ret.context = this.context; |
| |
| // Return the newly-formed element set |
| return ret; |
| }, |
| |
| // Execute a callback for every element in the matched set. |
| // (You can seed the arguments with an array of args, but this is |
| // only used internally.) |
| each: function( callback, args ) { |
| return jQuery.each( this, callback, args ); |
| }, |
| |
| map: function( callback ) { |
| return this.pushStack( jQuery.map(this, function( elem, i ) { |
| return callback.call( elem, i, elem ); |
| })); |
| }, |
| |
| slice: function() { |
| return this.pushStack( slice.apply( this, arguments ) ); |
| }, |
| |
| first: function() { |
| return this.eq( 0 ); |
| }, |
| |
| last: function() { |
| return this.eq( -1 ); |
| }, |
| |
| eq: function( i ) { |
| var len = this.length, |
| j = +i + ( i < 0 ? len : 0 ); |
| return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); |
| }, |
| |
| end: function() { |
| return this.prevObject || this.constructor(null); |
| }, |
| |
| // For internal use only. |
| // Behaves like an Array's method, not like a jQuery method. |
| push: push, |
| sort: arr.sort, |
| splice: arr.splice |
| }; |
| |
| jQuery.extend = jQuery.fn.extend = function() { |
| var options, name, src, copy, copyIsArray, clone, |
| target = arguments[0] || {}, |
| i = 1, |
| length = arguments.length, |
| deep = false; |
| |
| // Handle a deep copy situation |
| if ( typeof target === "boolean" ) { |
| deep = target; |
| |
| // Skip the boolean and the target |
| target = arguments[ i ] || {}; |
| i++; |
| } |
| |
| // Handle case when target is a string or something (possible in deep copy) |
| if ( typeof target !== "object" && !jQuery.isFunction(target) ) { |
| target = {}; |
| } |
| |
| // Extend jQuery itself if only one argument is passed |
| if ( i === length ) { |
| target = this; |
| i--; |
| } |
| |
| for ( ; i < length; i++ ) { |
| // Only deal with non-null/undefined values |
| if ( (options = arguments[ i ]) != null ) { |
| // Extend the base object |
| for ( name in options ) { |
| src = target[ name ]; |
| copy = options[ name ]; |
| |
| // Prevent never-ending loop |
| if ( target === copy ) { |
| continue; |
| } |
| |
| // Recurse if we're merging plain objects or arrays |
| if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { |
| if ( copyIsArray ) { |
| copyIsArray = false; |
| clone = src && jQuery.isArray(src) ? src : []; |
| |
| } else { |
| clone = src && jQuery.isPlainObject(src) ? src : {}; |
| } |
| |
| // Never move original objects, clone them |
| target[ name ] = jQuery.extend( deep, clone, copy ); |
| |
| // Don't bring in undefined values |
| } else if ( copy !== undefined ) { |
| target[ name ] = copy; |
| } |
| } |
| } |
| } |
| |
| // Return the modified object |
| return target; |
| }; |
| |
| jQuery.extend({ |
| // Unique for each copy of jQuery on the page |
| expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), |
| |
| // Assume jQuery is ready without the ready module |
| isReady: true, |
| |
| error: function( msg ) { |
| throw new Error( msg ); |
| }, |
| |
| noop: function() {}, |
| |
| isFunction: function( obj ) { |
| return jQuery.type(obj) === "function"; |
| }, |
| |
| isArray: Array.isArray, |
| |
| isWindow: function( obj ) { |
| return obj != null && obj === obj.window; |
| }, |
| |
| isNumeric: function( obj ) { |
| // parseFloat NaNs numeric-cast false positives (null|true|false|"") |
| // ...but misinterprets leading-number strings, particularly hex literals ("0x...") |
| // subtraction forces infinities to NaN |
| // adding 1 corrects loss of precision from parseFloat (#15100) |
| return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; |
| }, |
| |
| isPlainObject: function( obj ) { |
| // Not plain objects: |
| // - Any object or value whose internal [[Class]] property is not "[object Object]" |
| // - DOM nodes |
| // - window |
| if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { |
| return false; |
| } |
| |
| if ( obj.constructor && |
| !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { |
| return false; |
| } |
| |
| // If the function hasn't returned already, we're confident that |
| // |obj| is a plain object, created by {} or constructed with new Object |
| return true; |
| }, |
| |
| isEmptyObject: function( obj ) { |
| var name; |
| for ( name in obj ) { |
| return false; |
| } |
| return true; |
| }, |
| |
| type: function( obj ) { |
| if ( obj == null ) { |
| return obj + ""; |
| } |
| // Support: Android<4.0, iOS<6 (functionish RegExp) |
| return typeof obj === "object" || typeof obj === "function" ? |
| class2type[ toString.call(obj) ] || "object" : |
| typeof obj; |
| }, |
| |
| // Evaluates a script in a global context |
| globalEval: function( code ) { |
| var script, |
| indirect = eval; |
| |
| code = jQuery.trim( code ); |
| |
| if ( code ) { |
| // If the code includes a valid, prologue position |
| // strict mode pragma, execute code by injecting a |
| // script tag into the document. |
| if ( code.indexOf("use strict") === 1 ) { |
| script = document.createElement("script"); |
| script.text = code; |
| document.head.appendChild( script ).parentNode.removeChild( script ); |
| } else { |
| // Otherwise, avoid the DOM node creation, insertion |
| // and removal by using an indirect global eval |
| indirect( code ); |
| } |
| } |
| }, |
| |
| // Convert dashed to camelCase; used by the css and data modules |
| // Support: IE9-11+ |
| // Microsoft forgot to hump their vendor prefix (#9572) |
| camelCase: function( string ) { |
| return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); |
| }, |
| |
| nodeName: function( elem, name ) { |
| return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); |
| }, |
| |
| // args is for internal usage only |
| each: function( obj, callback, args ) { |
| var value, |
| i = 0, |
| length = obj.length, |
| isArray = isArraylike( obj ); |
| |
| if ( args ) { |
| if ( isArray ) { |
| for ( ; i < length; i++ ) { |
| value = callback.apply( obj[ i ], args ); |
| |
| if ( value === false ) { |
| break; |
| } |
| } |
| } else { |
| for ( i in obj ) { |
| value = callback.apply( obj[ i ], args ); |
| |
| if ( value === false ) { |
| break; |
| } |
| } |
| } |
| |
| // A special, fast, case for the most common use of each |
| } else { |
| if ( isArray ) { |
| for ( ; i < length; i++ ) { |
| value = callback.call( obj[ i ], i, obj[ i ] ); |
| |
| if ( value === false ) { |
| break; |
| } |
| } |
| } else { |
| for ( i in obj ) { |
| value = callback.call( obj[ i ], i, obj[ i ] ); |
| |
| if ( value === false ) { |
| break; |
| } |
| } |
| } |
| } |
| |
| return obj; |
| }, |
| |
| // Support: Android<4.1 |
| trim: function( text ) { |
| return text == null ? |
| "" : |
| ( text + "" ).replace( rtrim, "" ); |
| }, |
| |
| // results is for internal usage only |
| makeArray: function( arr, results ) { |
| var ret = results || []; |
| |
| if ( arr != null ) { |
| if ( isArraylike( Object(arr) ) ) { |
| jQuery.merge( ret, |
| typeof arr === "string" ? |
| [ arr ] : arr |
| ); |
| } else { |
| push.call( ret, arr ); |
| } |
| } |
| |
| return ret; |
| }, |
| |
| inArray: function( elem, arr, i ) { |
| return arr == null ? -1 : indexOf.call( arr, elem, i ); |
| }, |
| |
| merge: function( first, second ) { |
| var len = +second.length, |
| j = 0, |
| i = first.length; |
| |
| for ( ; j < len; j++ ) { |
| first[ i++ ] = second[ j ]; |
| } |
| |
| first.length = i; |
| |
| return first; |
| }, |
| |
| grep: function( elems, callback, invert ) { |
| var callbackInverse, |
| matches = [], |
| i = 0, |
| length = elems.length, |
| callbackExpect = !invert; |
| |
| // Go through the array, only saving the items |
| // that pass the validator function |
| for ( ; i < length; i++ ) { |
| callbackInverse = !callback( elems[ i ], i ); |
| if ( callbackInverse !== callbackExpect ) { |
| matches.push( elems[ i ] ); |
| } |
| } |
| |
| return matches; |
| }, |
| |
| // arg is for internal usage only |
| map: function( elems, callback, arg ) { |
| var value, |
| i = 0, |
| length = elems.length, |
| isArray = isArraylike( elems ), |
| ret = []; |
| |
| // Go through the array, translating each of the items to their new values |
| if ( isArray ) { |
| for ( ; i < length; i++ ) { |
| value = callback( elems[ i ], i, arg ); |
| |
| if ( value != null ) { |
| ret.push( value ); |
| } |
| } |
| |
| // Go through every key on the object, |
| } else { |
| for ( i in elems ) { |
| value = callback( elems[ i ], i, arg ); |
| |
| if ( value != null ) { |
| ret.push( value ); |
| } |
| } |
| } |
| |
| // Flatten any nested arrays |
| return concat.apply( [], ret ); |
| }, |
| |
| // A global GUID counter for objects |
| guid: 1, |
| |
| // Bind a function to a context, optionally partially applying any |
| // arguments. |
| proxy: function( fn, context ) { |
| var tmp, args, proxy; |
| |
| if ( typeof context === "string" ) { |
| tmp = fn[ context ]; |
| context = fn; |
| fn = tmp; |
| } |
| |
| // Quick check to determine if target is callable, in the spec |
| // this throws a TypeError, but we will just return undefined. |
| if ( !jQuery.isFunction( fn ) ) { |
| return undefined; |
| } |
| |
| // Simulated bind |
| args = slice.call( arguments, 2 ); |
| proxy = function() { |
| return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); |
| }; |
| |
| // Set the guid of unique handler to the same of original handler, so it can be removed |
| proxy.guid = fn.guid = fn.guid || jQuery.guid++; |
| |
| return proxy; |
| }, |
| |
| now: Date.now, |
| |
| // jQuery.support is not used in Core but other projects attach their |
| // properties to it so it needs to exist. |
| support: support |
| }); |
| |
| // Populate the class2type map |
| jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { |
| class2type[ "[object " + name + "]" ] = name.toLowerCase(); |
| }); |
| |
| function isArraylike( obj ) { |
| |
| // Support: iOS 8.2 (not reproducible in simulator) |
| // `in` check used to prevent JIT error (gh-2145) |
| // hasOwn isn't used here due to false negatives |
| // regarding Nodelist length in IE |
| var length = "length" in obj && obj.length, |
| type = jQuery.type( obj ); |
| |
| if ( type === "function" || jQuery.isWindow( obj ) ) { |
| return false; |
| } |
| |
| if ( obj.nodeType === 1 && length ) { |
| return true; |
| } |
| |
| return type === "array" || length === 0 || |
| typeof length === "number" && length > 0 && ( length - 1 ) in obj; |
| } |
| |
| return jQuery; |
| }); |