From 9e7e5e129133b8c442b6b38b5a13a81ca5f9f321 Mon Sep 17 00:00:00 2001 From: Kyle Capehart Date: Sun, 13 May 2018 22:52:00 -0400 Subject: [PATCH] added changeImage button --- Background/17.jpg | Bin 125970 -> 0 bytes Background/20.jpg | Bin 35263 -> 0 bytes Background/3.jpg | Bin 88580 -> 0 bytes Homepage.html | 20 +- alert.js | 6 - background.js | 13 +- jquery-3.1.1.js | 10220 -------------------------------------------- styleHomepage.css | 17 +- 8 files changed, 24 insertions(+), 10252 deletions(-) delete mode 100644 Background/17.jpg delete mode 100644 Background/20.jpg delete mode 100644 Background/3.jpg delete mode 100644 alert.js delete mode 100644 jquery-3.1.1.js diff --git a/Background/17.jpg b/Background/17.jpg deleted file mode 100644 index 7432db476aff92175e6f374dd1307947ea37f52b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125970 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%0AhQ60Sx^(iKpkg-bcCo>1p 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%0ANHn!C0FnX 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 diff --git a/Background/3.jpg b/Background/3.jpg deleted file mode 100644 index 607c1b2e4cb4a285e8af01d2f0f03908b4ee55a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88580 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%0A{iDg^gS&l2iW6^k+A1*2!@Ga!gjAsI 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%0A-gRD~C?f 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 z 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 P)Iym8joN?*R{Q=7A;^c8 diff --git a/Homepage.html b/Homepage.html index 0b9fe59..27bbc71 100644 --- a/Homepage.html +++ b/Homepage.html @@ -4,22 +4,18 @@ -

- Homepage - + + + + + -
- - -
- +
+
+ +
diff --git a/alert.js b/alert.js deleted file mode 100644 index 649f285..0000000 --- a/alert.js +++ /dev/null @@ -1,6 +0,0 @@ -function main() -{ - alert("My First Jquery Test"); -} - -$(document).ready(main); diff --git a/background.js b/background.js index a8ed3bb..c1e4d93 100644 --- a/background.js +++ b/background.js @@ -1,11 +1,8 @@ -function main() +function changeImage() { - //var fs = require('fs'); - //var fileList = fs.readdirSync('/Background/'); - - var fileList = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.png', '9.jpg', - '10.jpg', '11.jpg', '12.jpg', '13.png', '14.jpg', '15.jpg', '16.jpg', '17.jpg', - '18.jpg', '19.jpg', '20.jpg', '21.jpg', '22.jpg', '23.png', '24.jpg', '25.jpg', + var fileList = ['1.jpg', '2.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.png', '9.jpg', + '10.jpg', '11.jpg', '12.jpg', '13.png', '14.jpg', '15.jpg', '16.jpg', + '18.jpg', '19.jpg', '21.jpg', '22.jpg', '23.png', '24.jpg', '25.jpg', '26.jpg', '27.jpg', '28.jpg', '29.jpg', '30.jpg', '31.jpg', '32.jpg', '34.jpg']; var len = fileList.length; @@ -15,4 +12,4 @@ function main() document.body.style.backgroundImage = 'url("'+filePath+'")'; } -$(document).ready(main); \ No newline at end of file +$(document).ready(changeImage); \ No newline at end of file diff --git a/jquery-3.1.1.js b/jquery-3.1.1.js deleted file mode 100644 index 072e308..0000000 --- a/jquery-3.1.1.js +++ /dev/null @@ -1,10220 +0,0 @@ -/*! - * jQuery JavaScript Library v3.1.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2016-09-22T22:30Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.1.1", - - // 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.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // 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, - - // 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 all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // 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; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - 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(); - }, - - // 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 ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (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 ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // 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(); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - 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 ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - 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 length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - 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 -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (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 = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.3 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-08-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true && ("form" in elem || "label" in elem); - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - disabledAncestor( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - !compilerCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Simple selector that can be filtered directly, removing non-Elements - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - // Complex selector, compare the two sets, removing non-Elements - qualifier = jQuery.filter( qualifier, elements ); - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; - } ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( jQuery.isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - resolve.call( undefined, value ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.call( undefined, value ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( jQuery.isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - jQuery.isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ jQuery.camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ jQuery.camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( jQuery.camelCase ); - } else { - key = jQuery.camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - jQuery.contains( elem.ownerDocument, elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, - scale = 1, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - do { - - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - initialInUnit = initialInUnit / scale; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // Break the loop if scale is unchanged or perfect, or if we've just had enough. - } while ( - scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations - ); - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); - -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); -var documentElement = document.documentElement; - - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 only -// See #13393 for more info -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: jQuery.isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -function manipulationTarget( elem, content ) { - if ( jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rmargin = ( /^margin/ ); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - div.style.cssText = - "box-sizing:border-box;" + - "position:relative;display:block;" + - "margin:auto;border:1px;padding:1px;" + - "top:1%;width:50%"; - div.innerHTML = ""; - documentElement.appendChild( container ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = divStyle.marginLeft === "2px"; - boxSizingReliableVal = divStyle.width === "4px"; - - // Support: Android 4.0 - 4.3 only - // Some styles come back with percentage values, even though they shouldn't - div.style.marginRight = "50%"; - pixelMarginRightVal = divStyle.marginRight === "4px"; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + - "padding:0;margin-top:1px;position:absolute"; - container.appendChild( div ); - - jQuery.extend( support, { - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelMarginRight: function() { - computeStyleTests(); - return pixelMarginRightVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE <=9 only - // getPropertyValue is only needed for .css('filter') (#12537) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style; - -// Return a css property mapped to a potentially vendor prefixed property -function vendorPropName( name ) { - - // Shortcut for names that are not vendor prefixed - if ( name in emptyStyle ) { - return name; - } - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i, - val = 0; - - // If we already have the right measurement, avoid augmentation - if ( extra === ( isBorderBox ? "border" : "content" ) ) { - i = 4; - - // Otherwise initialize for horizontal or vertical properties - } else { - i = name === "width" ? 1 : 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var val, - valueIsBorderBox = true, - styles = getStyles( elem ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - if ( elem.getClientRects().length ) { - val = elem.getBoundingClientRect()[ name ]; - } - - // Some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test( val ) ) { - return val; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // Use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || - ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - if ( type === "number" ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - style[ name ] = value; - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || - ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - } ) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = extra && getStyles( elem ), - subtract = extra && augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ); - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ name ] = value; - value = jQuery.css( elem, name ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && - ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || - jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function raf() { - if ( timerId ) { - window.requestAnimationFrame( raf ); - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 13 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( jQuery.isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - jQuery.proxy( result.stop, result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - // Go to the end state if fx are off or if document is hidden - if ( jQuery.fx.off || document.hidden ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = window.requestAnimationFrame ? - window.requestAnimationFrame( raf ) : - window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - if ( window.cancelAnimationFrame ) { - window.cancelAnimationFrame( timerId ); - } else { - window.clearInterval( timerId ); - } - - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( type === "string" ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = value.match( rnothtmlwhite ) || []; - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, isFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -} ); - -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - - - - -support.focusin = "onfocusin" in window; - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = jQuery.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = jQuery.isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( jQuery.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 13 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available, append data to url - if ( s.data ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - "throws": true - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( jQuery.isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "