vendor: 5,301 bytes, lines 1-194
1/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ 2/*! 3 * jQuery JavaScript Library v3.4.1 4 * https://jquery.com/ 5 * 6 * Includes Sizzle.js 7 * https://sizzlejs.com/ 8 * 9 * Copyright JS Foundation and other contributors 10 * Released under the MIT license 11 * https://jquery.org/license 12 * 13 * Date: 2019-05-01T21:04Z 14 */ 15( function( global, factory ) { 16 17 "use strict"; 18 19 if ( typeof module === "object" && typeof module.exports === "object" ) { 20 21 // For CommonJS and CommonJS-like environments where a proper `window` 22 // is present, execute the factory and get jQuery. 23 // For environments that do not have a `window` with a `document` 24 // (such as Node.js), expose a factory as module.exports. 25 // This accentuates the need for the creation of a real `window`. 26 // e.g. var jQuery = require("jquery")(window); 27 // See ticket #14549 for more info. 28 module.exports = global.document ? 29 factory( global, true ) : 30 function( w ) { 31 if ( !w.document ) { 32 throw new Error( "jQuery requires a window with a document" ); 33 } 34 return factory( w ); 35 }; 36 } else { 37 factory( global ); 38 } 39 40// Pass this if window is not defined yet 41} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 42 43// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 44// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 45// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 46// enough that all such attempts are guarded in a try block. 47"use strict"; 48 49var arr = []; 50 51var document = window.document; 52 53var getProto = Object.getPrototypeOf; 54 55var slice = arr.slice; 56 57var concat = arr.concat; 58 59var push = arr.push; 60 61var indexOf = arr.indexOf; 62 63var class2type = {}; 64 65var toString = class2type.toString; 66 67var hasOwn = class2type.hasOwnProperty; 68 69var fnToString = hasOwn.toString; 70 71var ObjectFunctionString = fnToString.call( Object ); 72 73var support = {}; 74 75var isFunction = function isFunction( obj ) { 76 77 // Support: Chrome <=57, Firefox <=52 78 // In some browsers, typeof returns "function" for HTML <object> elements 79 // (i.e., `typeof document.createElement( "object" ) === "function"`). 80 // We don't want to classify *any* DOM node as a function. 81 return typeof obj === "function" && typeof obj.nodeType !== "number"; 82 }; 83 84 85var isWindow = function isWindow( obj ) { 86 return obj != null && obj === obj.window; 87 }; 88 89 90 91 92 var preservedScriptAttributes = { 93 type: true, 94 src: true, 95 nonce: true, 96 noModule: true 97 }; 98 99 function DOMEval( code, node, doc ) { 100 doc = doc || document; 101 102 var i, val, 103 script = doc.createElement( "script" ); 104 105 script.text = code; 106 if ( node ) { 107 for ( i in preservedScriptAttributes ) { 108 109 // Support: Firefox 64+, Edge 18+ 110 // Some browsers don't support the "nonce" property on scripts. 111 // On the other hand, just using `getAttribute` is not enough as 112 // the `nonce` attribute is reset to an empty string whenever it 113 // becomes browsing-context connected. 114 // See https://github.com/whatwg/html/issues/2369 115 // See https://html.spec.whatwg.org/#nonce-attributes 116 // The `node.getAttribute` check was added for the sake of 117 // `jQuery.globalEval` so that it can fake a nonce-containing node 118 // via an object. 119 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 120 if ( val ) { 121 script.setAttribute( i, val ); 122 } 123 } 124 } 125 doc.head.appendChild( script ).parentNode.removeChild( script ); 126 } 127 128 129function toType( obj ) { 130 if ( obj == null ) { 131 return obj + ""; 132 } 133 134 // Support: Android <=2.3 only (functionish RegExp) 135 return typeof obj === "object" || typeof obj === "function" ? 136 class2type[ toString.call( obj ) ] || "object" : 137 typeof obj; 138} 139/* global Symbol */ 140// Defining this global in .eslintrc.json would create a danger of using the global 141// unguarded in another place, it seems safer to define global only for this module 142 143 144 145var 146 version = "3.4.1", 147 148 // Define a local copy of jQuery 149 jQuery = function( selector, context ) { 150 151 // The jQuery object is actually just the init constructor 'enhanced' 152 // Need init if jQuery is called (just allow error to be thrown if not included) 153 return new jQuery.fn.init( selector, context ); 154 }, 155 156 // Support: Android <=4.0 only 157 // Make sure we trim BOM and NBSP 158 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; 159 160jQuery.fn = jQuery.prototype = { 161 162 // The current version of jQuery being used 163 jquery: version, 164 165 constructor: jQuery, 166 167 // The default length of a jQuery object is 0 168 length: 0, 169 170 toArray: function() { 171 return slice.call( this ); 172 }, 173 174 // Get the Nth element in the matched element set OR 175 // Get the whole matched element set as a clean array 176 get: function( num ) { 177 178 // Return all the elements in a clean array 179 if ( num == null ) { 180 return slice.call( this ); 181 } 182 183 // Return just the one element from the set 184 return num < 0 ? this[ num + this.length ] : this[ num ]; 185 }, 186 187 // Take an array of elements and push it onto the stack 188 // (returning the new matched element set) 189 pushStack: function( elems ) { 190 191 // Build a new jQuery matched element set 192 var ret = jQuery.merge( this.constructor(), elems ); 193 194 // Add the old object onto the stack (as a reference)
vendor: 4,276 bytes, lines 195-386
195 ret.prevObject = this; 196 197 // Return the newly-formed element set 198 return ret; 199 }, 200 201 // Execute a callback for every element in the matched set. 202 each: function( callback ) { 203 return jQuery.each( this, callback ); 204 }, 205 206 map: function( callback ) { 207 return this.pushStack( jQuery.map( this, function( elem, i ) { 208 return callback.call( elem, i, elem ); 209 } ) ); 210 }, 211 212 slice: function() { 213 return this.pushStack( slice.apply( this, arguments ) ); 214 }, 215 216 first: function() { 217 return this.eq( 0 ); 218 }, 219 220 last: function() { 221 return this.eq( -1 ); 222 }, 223 224 eq: function( i ) { 225 var len = this.length, 226 j = +i + ( i < 0 ? len : 0 ); 227 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 228 }, 229 230 end: function() { 231 return this.prevObject || this.constructor(); 232 }, 233 234 // For internal use only. 235 // Behaves like an Array's method, not like a jQuery method. 236 push: push, 237 sort: arr.sort, 238 splice: arr.splice 239}; 240 241jQuery.extend = jQuery.fn.extend = function() { 242 var options, name, src, copy, copyIsArray, clone, 243 target = arguments[ 0 ] || {}, 244 i = 1, 245 length = arguments.length, 246 deep = false; 247 248 // Handle a deep copy situation 249 if ( typeof target === "boolean" ) { 250 deep = target; 251 252 // Skip the boolean and the target 253 target = arguments[ i ] || {}; 254 i++; 255 } 256 257 // Handle case when target is a string or something (possible in deep copy) 258 if ( typeof target !== "object" && !isFunction( target ) ) { 259 target = {}; 260 } 261 262 // Extend jQuery itself if only one argument is passed 263 if ( i === length ) { 264 target = this; 265 i--; 266 } 267 268 for ( ; i < length; i++ ) { 269 270 // Only deal with non-null/undefined values 271 if ( ( options = arguments[ i ] ) != null ) { 272 273 // Extend the base object 274 for ( name in options ) { 275 copy = options[ name ]; 276 277 // Prevent Object.prototype pollution 278 // Prevent never-ending loop 279 if ( name === "__proto__" || target === copy ) { 280 continue; 281 } 282 283 // Recurse if we're merging plain objects or arrays 284 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 285 ( copyIsArray = Array.isArray( copy ) ) ) ) { 286 src = target[ name ]; 287 288 // Ensure proper type for the source value 289 if ( copyIsArray && !Array.isArray( src ) ) { 290 clone = []; 291 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 292 clone = {}; 293 } else { 294 clone = src; 295 } 296 copyIsArray = false; 297 298 // Never move original objects, clone them 299 target[ name ] = jQuery.extend( deep, clone, copy ); 300 301 // Don't bring in undefined values 302 } else if ( copy !== undefined ) { 303 target[ name ] = copy; 304 } 305 } 306 } 307 } 308 309 // Return the modified object 310 return target; 311}; 312 313jQuery.extend( { 314 315 // Unique for each copy of jQuery on the page 316 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 317 318 // Assume jQuery is ready without the ready module 319 isReady: true, 320 321 error: function( msg ) { 322 throw new Error( msg ); 323 }, 324 325 noop: function() {}, 326 327 isPlainObject: function( obj ) { 328 var proto, Ctor; 329 330 // Detect obvious negatives 331 // Use toString instead of jQuery.type to catch host objects 332 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 333 return false; 334 } 335 336 proto = getProto( obj ); 337 338 // Objects with no prototype (e.g., `Object.create( null )`) are plain 339 if ( !proto ) { 340 return true; 341 } 342 343 // Objects with prototype are plain iff they were constructed by a global Object function 344 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 345 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 346 }, 347 348 isEmptyObject: function( obj ) { 349 var name; 350 351 for ( name in obj ) { 352 return false; 353 } 354 return true; 355 }, 356 357 // Evaluates a script in a global context 358 globalEval: function( code, options ) { 359 DOMEval( code, { nonce: options && options.nonce } ); 360 }, 361 362 each: function( obj, callback ) { 363 var length, i = 0; 364 365 if ( isArrayLike( obj ) ) { 366 length = obj.length; 367 for ( ; i < length; i++ ) { 368 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 369 break; 370 } 371 } 372 } else { 373 for ( i in obj ) { 374 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 375 break; 376 } 377 } 378 } 379 380 return obj; 381 }, 382 383 // Support: Android <=4.0 only 384 trim: function( text ) { 385 return text == null ? 386 "" :
vendor: 5,066 bytes, lines 387-604
387 ( text + "" ).replace( rtrim, "" ); 388 }, 389 390 // results is for internal usage only 391 makeArray: function( arr, results ) { 392 var ret = results || []; 393 394 if ( arr != null ) { 395 if ( isArrayLike( Object( arr ) ) ) { 396 jQuery.merge( ret, 397 typeof arr === "string" ? 398 [ arr ] : arr 399 ); 400 } else { 401 push.call( ret, arr ); 402 } 403 } 404 405 return ret; 406 }, 407 408 inArray: function( elem, arr, i ) { 409 return arr == null ? -1 : indexOf.call( arr, elem, i ); 410 }, 411 412 // Support: Android <=4.0 only, PhantomJS 1 only 413 // push.apply(_, arraylike) throws on ancient WebKit 414 merge: function( first, second ) { 415 var len = +second.length, 416 j = 0, 417 i = first.length; 418 419 for ( ; j < len; j++ ) { 420 first[ i++ ] = second[ j ]; 421 } 422 423 first.length = i; 424 425 return first; 426 }, 427 428 grep: function( elems, callback, invert ) { 429 var callbackInverse, 430 matches = [], 431 i = 0, 432 length = elems.length, 433 callbackExpect = !invert; 434 435 // Go through the array, only saving the items 436 // that pass the validator function 437 for ( ; i < length; i++ ) { 438 callbackInverse = !callback( elems[ i ], i ); 439 if ( callbackInverse !== callbackExpect ) { 440 matches.push( elems[ i ] ); 441 } 442 } 443 444 return matches; 445 }, 446 447 // arg is for internal usage only 448 map: function( elems, callback, arg ) { 449 var length, value, 450 i = 0, 451 ret = []; 452 453 // Go through the array, translating each of the items to their new values 454 if ( isArrayLike( elems ) ) { 455 length = elems.length; 456 for ( ; i < length; i++ ) { 457 value = callback( elems[ i ], i, arg ); 458 459 if ( value != null ) { 460 ret.push( value ); 461 } 462 } 463 464 // Go through every key on the object, 465 } else { 466 for ( i in elems ) { 467 value = callback( elems[ i ], i, arg ); 468 469 if ( value != null ) { 470 ret.push( value ); 471 } 472 } 473 } 474 475 // Flatten any nested arrays 476 return concat.apply( [], ret ); 477 }, 478 479 // A global GUID counter for objects 480 guid: 1, 481 482 // jQuery.support is not used in Core but other projects attach their 483 // properties to it so it needs to exist. 484 support: support 485} ); 486 487if ( typeof Symbol === "function" ) { 488 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 489} 490 491// Populate the class2type map 492jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 493function( i, name ) { 494 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 495} ); 496 497function isArrayLike( obj ) { 498 499 // Support: real iOS 8.2 only (not reproducible in simulator) 500 // `in` check used to prevent JIT error (gh-2145) 501 // hasOwn isn't used here due to false negatives 502 // regarding Nodelist length in IE 503 var length = !!obj && "length" in obj && obj.length, 504 type = toType( obj ); 505 506 if ( isFunction( obj ) || isWindow( obj ) ) { 507 return false; 508 } 509 510 return type === "array" || length === 0 || 511 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 512} 513var Sizzle = 514/*! 515 * Sizzle CSS Selector Engine v2.3.4 516 * https://sizzlejs.com/ 517 * 518 * Copyright JS Foundation and other contributors 519 * Released under the MIT license 520 * https://js.foundation/ 521 * 522 * Date: 2019-04-08 523 */ 524(function( window ) { 525 526var i, 527 support, 528 Expr, 529 getText, 530 isXML, 531 tokenize, 532 compile, 533 select, 534 outermostContext, 535 sortInput, 536 hasDuplicate, 537 538 // Local document vars 539 setDocument, 540 document, 541 docElem, 542 documentIsHTML, 543 rbuggyQSA, 544 rbuggyMatches, 545 matches, 546 contains, 547 548 // Instance-specific data 549 expando = "sizzle" + 1 * new Date(), 550 preferredDoc = window.document, 551 dirruns = 0, 552 done = 0, 553 classCache = createCache(), 554 tokenCache = createCache(), 555 compilerCache = createCache(), 556 nonnativeSelectorCache = createCache(), 557 sortOrder = function( a, b ) { 558 if ( a === b ) { 559 hasDuplicate = true; 560 } 561 return 0; 562 }, 563 564 // Instance methods 565 hasOwn = ({}).hasOwnProperty, 566 arr = [], 567 pop = arr.pop, 568 push_native = arr.push, 569 push = arr.push, 570 slice = arr.slice, 571 // Use a stripped-down indexOf as it's faster than native 572 // https://jsperf.com/thor-indexof-vs-for/5 573 indexOf = function( list, elem ) { 574 var i = 0, 575 len = list.length; 576 for ( ; i < len; i++ ) { 577 if ( list[i] === elem ) { 578 return i; 579 } 580 } 581 return -1; 582 }, 583 584 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 585 586 // Regular expressions 587 588 // http://www.w3.org/TR/css3-selectors/#whitespace 589 whitespace = "[\\x20\\t\\r\\n\\f]", 590 591 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 592 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", 593 594 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 595 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 596 // Operator (capture 2) 597 "*([*^$|!~]?=)" + whitespace + 598 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 599 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + 600 "*\\]", 601 602 pseudos = ":(" + identifier + ")(?:\\((" + 603 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 604 // 1. quoted (capture 3; capture 4 or capture 5)
vendor: 4,396 bytes, lines 605-738
605 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 606 // 2. simple (capture 6) 607 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 608 // 3. anything else (capture 2) 609 ".*" + 610 ")\\)|)", 611 612 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 613 rwhitespace = new RegExp( whitespace + "+", "g" ), 614 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), 615 616 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 617 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), 618 rdescend = new RegExp( whitespace + "|>" ), 619 620 rpseudo = new RegExp( pseudos ), 621 ridentifier = new RegExp( "^" + identifier + "$" ), 622 623 matchExpr = { 624 "ID": new RegExp( "^#(" + identifier + ")" ), 625 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 626 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 627 "ATTR": new RegExp( "^" + attributes ), 628 "PSEUDO": new RegExp( "^" + pseudos ), 629 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + 630 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + 631 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 632 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 633 // For use in libraries implementing .is() 634 // We use this for POS matching in `select` 635 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + 636 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 637 }, 638 639 rhtml = /HTML$/i, 640 rinputs = /^(?:input|select|textarea|button)$/i, 641 rheader = /^h\d$/i, 642 643 rnative = /^[^{]+\{\s*\[native \w/, 644 645 // Easily-parseable/retrievable ID or TAG or CLASS selectors 646 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 647 648 rsibling = /[+~]/, 649 650 // CSS escapes 651 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 652 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), 653 funescape = function( _, escaped, escapedWhitespace ) { 654 var high = "0x" + escaped - 0x10000; 655 // NaN means non-codepoint 656 // Support: Firefox<24 657 // Workaround erroneous numeric interpretation of +"0x" 658 return high !== high || escapedWhitespace ? 659 escaped : 660 high < 0 ? 661 // BMP codepoint 662 String.fromCharCode( high + 0x10000 ) : 663 // Supplemental Plane codepoint (surrogate pair) 664 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 665 }, 666 667 // CSS string/identifier serialization 668 // https://drafts.csswg.org/cssom/#common-serializing-idioms 669 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, 670 fcssescape = function( ch, asCodePoint ) { 671 if ( asCodePoint ) { 672 673 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 674 if ( ch === "\0" ) { 675 return "\uFFFD"; 676 } 677 678 // Control characters and (dependent upon position) numbers get escaped as code points 679 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 680 } 681 682 // Other potentially-special ASCII characters get backslash-escaped 683 return "\\" + ch; 684 }, 685 686 // Used for iframes 687 // See setDocument() 688 // Removing the function wrapper causes a "Permission Denied" 689 // error in IE 690 unloadHandler = function() { 691 setDocument(); 692 }, 693 694 inDisabledFieldset = addCombinator( 695 function( elem ) { 696 return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; 697 }, 698 { dir: "parentNode", next: "legend" } 699 ); 700 701// Optimize for push.apply( _, NodeList ) 702try { 703 push.apply( 704 (arr = slice.call( preferredDoc.childNodes )), 705 preferredDoc.childNodes 706 ); 707 // Support: Android<4.0 708 // Detect silently failing push.apply 709 arr[ preferredDoc.childNodes.length ].nodeType; 710} catch ( e ) { 711 push = { apply: arr.length ? 712 713 // Leverage slice if possible 714 function( target, els ) { 715 push_native.apply( target, slice.call(els) ); 716 } : 717 718 // Support: IE<9 719 // Otherwise append directly 720 function( target, els ) { 721 var j = target.length, 722 i = 0; 723 // Can't trust NodeList.length 724 while ( (target[j++] = els[i++]) ) {} 725 target.length = j - 1; 726 } 727 }; 728} 729 730function Sizzle( selector, context, results, seed ) { 731 var m, i, elem, nid, match, groups, newSelector, 732 newContext = context && context.ownerDocument, 733 734 // nodeType defaults to 9, since context defaults to document 735 nodeType = context ? context.nodeType : 9; 736 737 results = results || []; 738
vendor: 4,664 bytes, lines 739-905
739 // Return early from calls with invalid selector or context 740 if ( typeof selector !== "string" || !selector || 741 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 742 743 return results; 744 } 745 746 // Try to shortcut find operations (as opposed to filters) in HTML documents 747 if ( !seed ) { 748 749 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { 750 setDocument( context ); 751 } 752 context = context || document; 753 754 if ( documentIsHTML ) { 755 756 // If the selector is sufficiently simple, try using a "get*By*" DOM method 757 // (excepting DocumentFragment context, where the methods don't exist) 758 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { 759 760 // ID selector 761 if ( (m = match[1]) ) { 762 763 // Document context 764 if ( nodeType === 9 ) { 765 if ( (elem = context.getElementById( m )) ) { 766 767 // Support: IE, Opera, Webkit 768 // TODO: identify versions 769 // getElementById can match elements by name instead of ID 770 if ( elem.id === m ) { 771 results.push( elem ); 772 return results; 773 } 774 } else { 775 return results; 776 } 777 778 // Element context 779 } else { 780 781 // Support: IE, Opera, Webkit 782 // TODO: identify versions 783 // getElementById can match elements by name instead of ID 784 if ( newContext && (elem = newContext.getElementById( m )) && 785 contains( context, elem ) && 786 elem.id === m ) { 787 788 results.push( elem ); 789 return results; 790 } 791 } 792 793 // Type selector 794 } else if ( match[2] ) { 795 push.apply( results, context.getElementsByTagName( selector ) ); 796 return results; 797 798 // Class selector 799 } else if ( (m = match[3]) && support.getElementsByClassName && 800 context.getElementsByClassName ) { 801 802 push.apply( results, context.getElementsByClassName( m ) ); 803 return results; 804 } 805 } 806 807 // Take advantage of querySelectorAll 808 if ( support.qsa && 809 !nonnativeSelectorCache[ selector + " " ] && 810 (!rbuggyQSA || !rbuggyQSA.test( selector )) && 811 812 // Support: IE 8 only 813 // Exclude object elements 814 (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { 815 816 newSelector = selector; 817 newContext = context; 818 819 // qSA considers elements outside a scoping root when evaluating child or 820 // descendant combinators, which is not what we want. 821 // In such cases, we work around the behavior by prefixing every selector in the 822 // list with an ID selector referencing the scope context. 823 // Thanks to Andrew Dupont for this technique. 824 if ( nodeType === 1 && rdescend.test( selector ) ) { 825 826 // Capture the context ID, setting it first if necessary 827 if ( (nid = context.getAttribute( "id" )) ) { 828 nid = nid.replace( rcssescape, fcssescape ); 829 } else { 830 context.setAttribute( "id", (nid = expando) ); 831 } 832 833 // Prefix every selector in the list 834 groups = tokenize( selector ); 835 i = groups.length; 836 while ( i-- ) { 837 groups[i] = "#" + nid + " " + toSelector( groups[i] ); 838 } 839 newSelector = groups.join( "," ); 840 841 // Expand context for sibling selectors 842 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 843 context; 844 } 845 846 try { 847 push.apply( results, 848 newContext.querySelectorAll( newSelector ) 849 ); 850 return results; 851 } catch ( qsaError ) { 852 nonnativeSelectorCache( selector, true ); 853 } finally { 854 if ( nid === expando ) { 855 context.removeAttribute( "id" ); 856 } 857 } 858 } 859 } 860 } 861 862 // All others 863 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 864} 865 866/** 867 * Create key-value caches of limited size 868 * @returns {function(string, object)} Returns the Object data after storing it on itself with 869 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 870 * deleting the oldest entry 871 */ 872function createCache() { 873 var keys = []; 874 875 function cache( key, value ) { 876 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 877 if ( keys.push( key + " " ) > Expr.cacheLength ) { 878 // Only keep the most recent entries 879 delete cache[ keys.shift() ]; 880 } 881 return (cache[ key + " " ] = value); 882 } 883 return cache; 884} 885 886/** 887 * Mark a function for special use by Sizzle 888 * @param {Function} fn The function to mark 889 */ 890function markFunction( fn ) { 891 fn[ expando ] = true; 892 return fn; 893} 894 895/** 896 * Support testing using an element 897 * @param {Function} fn Passed the created element and returns a boolean result 898 */ 899function assert( fn ) { 900 var el = document.createElement("fieldset"); 901 902 try { 903 return !!fn( el ); 904 } catch (e) { 905 return false;
vendor: 10,862 bytes, lines 906-1272
906 } finally { 907 // Remove from its parent by default 908 if ( el.parentNode ) { 909 el.parentNode.removeChild( el ); 910 } 911 // release memory in IE 912 el = null; 913 } 914} 915 916/** 917 * Adds the same handler for all of the specified attrs 918 * @param {String} attrs Pipe-separated list of attributes 919 * @param {Function} handler The method that will be applied 920 */ 921function addHandle( attrs, handler ) { 922 var arr = attrs.split("|"), 923 i = arr.length; 924 925 while ( i-- ) { 926 Expr.attrHandle[ arr[i] ] = handler; 927 } 928} 929 930/** 931 * Checks document order of two siblings 932 * @param {Element} a 933 * @param {Element} b 934 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 935 */ 936function siblingCheck( a, b ) { 937 var cur = b && a, 938 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 939 a.sourceIndex - b.sourceIndex; 940 941 // Use IE sourceIndex if available on both nodes 942 if ( diff ) { 943 return diff; 944 } 945 946 // Check if b follows a 947 if ( cur ) { 948 while ( (cur = cur.nextSibling) ) { 949 if ( cur === b ) { 950 return -1; 951 } 952 } 953 } 954 955 return a ? 1 : -1; 956} 957 958/** 959 * Returns a function to use in pseudos for input types 960 * @param {String} type 961 */ 962function createInputPseudo( type ) { 963 return function( elem ) { 964 var name = elem.nodeName.toLowerCase(); 965 return name === "input" && elem.type === type; 966 }; 967} 968 969/** 970 * Returns a function to use in pseudos for buttons 971 * @param {String} type 972 */ 973function createButtonPseudo( type ) { 974 return function( elem ) { 975 var name = elem.nodeName.toLowerCase(); 976 return (name === "input" || name === "button") && elem.type === type; 977 }; 978} 979 980/** 981 * Returns a function to use in pseudos for :enabled/:disabled 982 * @param {Boolean} disabled true for :disabled; false for :enabled 983 */ 984function createDisabledPseudo( disabled ) { 985 986 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 987 return function( elem ) { 988 989 // Only certain elements can match :enabled or :disabled 990 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 991 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 992 if ( "form" in elem ) { 993 994 // Check for inherited disabledness on relevant non-disabled elements: 995 // * listed form-associated elements in a disabled fieldset 996 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 997 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 998 // * option elements in a disabled optgroup 999 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 1000 // All such elements have a "form" property. 1001 if ( elem.parentNode && elem.disabled === false ) { 1002 1003 // Option elements defer to a parent optgroup if present 1004 if ( "label" in elem ) { 1005 if ( "label" in elem.parentNode ) { 1006 return elem.parentNode.disabled === disabled; 1007 } else { 1008 return elem.disabled === disabled; 1009 } 1010 } 1011 1012 // Support: IE 6 - 11 1013 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 1014 return elem.isDisabled === disabled || 1015 1016 // Where there is no isDisabled, check manually 1017 /* jshint -W018 */ 1018 elem.isDisabled !== !disabled && 1019 inDisabledFieldset( elem ) === disabled; 1020 } 1021 1022 return elem.disabled === disabled; 1023 1024 // Try to winnow out elements that can't be disabled before trusting the disabled property. 1025 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 1026 // even exist on them, let alone have a boolean value. 1027 } else if ( "label" in elem ) { 1028 return elem.disabled === disabled; 1029 } 1030 1031 // Remaining elements are neither :enabled nor :disabled 1032 return false; 1033 }; 1034} 1035 1036/** 1037 * Returns a function to use in pseudos for positionals 1038 * @param {Function} fn 1039 */ 1040function createPositionalPseudo( fn ) { 1041 return markFunction(function( argument ) { 1042 argument = +argument; 1043 return markFunction(function( seed, matches ) { 1044 var j, 1045 matchIndexes = fn( [], seed.length, argument ), 1046 i = matchIndexes.length; 1047 1048 // Match elements found at the specified indexes 1049 while ( i-- ) { 1050 if ( seed[ (j = matchIndexes[i]) ] ) { 1051 seed[j] = !(matches[j] = seed[j]); 1052 } 1053 } 1054 }); 1055 }); 1056} 1057 1058/** 1059 * Checks a node for validity as a Sizzle context 1060 * @param {Element|Object=} context 1061 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1062 */ 1063function testContext( context ) { 1064 return context && typeof context.getElementsByTagName !== "undefined" && context; 1065} 1066 1067// Expose support vars for convenience 1068support = Sizzle.support = {}; 1069 1070/** 1071 * Detects XML nodes 1072 * @param {Element|Object} elem An element or a document 1073 * @returns {Boolean} True iff elem is a non-HTML XML node 1074 */ 1075isXML = Sizzle.isXML = function( elem ) { 1076 var namespace = elem.namespaceURI, 1077 docElem = (elem.ownerDocument || elem).documentElement; 1078 1079 // Support: IE <=8 1080 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes 1081 // https://bugs.jquery.com/ticket/4833 1082 return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); 1083}; 1084 1085/** 1086 * Sets document-related variables once based on the current document 1087 * @param {Element|Object} [doc] An element or document object to use to set the document 1088 * @returns {Object} Returns the current document 1089 */ 1090setDocument = Sizzle.setDocument = function( node ) { 1091 var hasCompare, subWindow, 1092 doc = node ? node.ownerDocument || node : preferredDoc; 1093 1094 // Return early if doc is invalid or already selected 1095 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { 1096 return document; 1097 } 1098 1099 // Update global variables 1100 document = doc; 1101 docElem = document.documentElement; 1102 documentIsHTML = !isXML( document ); 1103 1104 // Support: IE 9-11, Edge 1105 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 1106 if ( preferredDoc !== document && 1107 (subWindow = document.defaultView) && subWindow.top !== subWindow ) { 1108 1109 // Support: IE 11, Edge 1110 if ( subWindow.addEventListener ) { 1111 subWindow.addEventListener( "unload", unloadHandler, false ); 1112 1113 // Support: IE 9 - 10 only 1114 } else if ( subWindow.attachEvent ) { 1115 subWindow.attachEvent( "onunload", unloadHandler ); 1116 } 1117 } 1118 1119 /* Attributes 1120 ---------------------------------------------------------------------- */ 1121 1122 // Support: IE<8 1123 // Verify that getAttribute really returns attributes and not properties 1124 // (excepting IE8 booleans) 1125 support.attributes = assert(function( el ) { 1126 el.className = "i"; 1127 return !el.getAttribute("className"); 1128 }); 1129 1130 /* getElement(s)By* 1131 ---------------------------------------------------------------------- */ 1132 1133 // Check if getElementsByTagName("*") returns only elements 1134 support.getElementsByTagName = assert(function( el ) { 1135 el.appendChild( document.createComment("") ); 1136 return !el.getElementsByTagName("*").length; 1137 }); 1138 1139 // Support: IE<9 1140 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 1141 1142 // Support: IE<10 1143 // Check if getElementById returns elements by name 1144 // The broken getElementById methods don't pick up programmatically-set names, 1145 // so use a roundabout getElementsByName test 1146 support.getById = assert(function( el ) { 1147 docElem.appendChild( el ).id = expando; 1148 return !document.getElementsByName || !document.getElementsByName( expando ).length; 1149 }); 1150 1151 // ID filter and find 1152 if ( support.getById ) { 1153 Expr.filter["ID"] = function( id ) { 1154 var attrId = id.replace( runescape, funescape ); 1155 return function( elem ) { 1156 return elem.getAttribute("id") === attrId; 1157 }; 1158 }; 1159 Expr.find["ID"] = function( id, context ) { 1160 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1161 var elem = context.getElementById( id ); 1162 return elem ? [ elem ] : []; 1163 } 1164 }; 1165 } else { 1166 Expr.filter["ID"] = function( id ) { 1167 var attrId = id.replace( runescape, funescape ); 1168 return function( elem ) { 1169 var node = typeof elem.getAttributeNode !== "undefined" && 1170 elem.getAttributeNode("id"); 1171 return node && node.value === attrId; 1172 }; 1173 }; 1174 1175 // Support: IE 6 - 7 only 1176 // getElementById is not reliable as a find shortcut 1177 Expr.find["ID"] = function( id, context ) { 1178 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1179 var node, i, elems, 1180 elem = context.getElementById( id ); 1181 1182 if ( elem ) { 1183 1184 // Verify the id attribute 1185 node = elem.getAttributeNode("id"); 1186 if ( node && node.value === id ) { 1187 return [ elem ]; 1188 } 1189 1190 // Fall back on getElementsByName 1191 elems = context.getElementsByName( id ); 1192 i = 0; 1193 while ( (elem = elems[i++]) ) { 1194 node = elem.getAttributeNode("id"); 1195 if ( node && node.value === id ) { 1196 return [ elem ]; 1197 } 1198 } 1199 } 1200 1201 return []; 1202 } 1203 }; 1204 } 1205 1206 // Tag 1207 Expr.find["TAG"] = support.getElementsByTagName ? 1208 function( tag, context ) { 1209 if ( typeof context.getElementsByTagName !== "undefined" ) { 1210 return context.getElementsByTagName( tag ); 1211 1212 // DocumentFragment nodes don't have gEBTN 1213 } else if ( support.qsa ) { 1214 return context.querySelectorAll( tag ); 1215 } 1216 } : 1217 1218 function( tag, context ) { 1219 var elem, 1220 tmp = [], 1221 i = 0, 1222 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 1223 results = context.getElementsByTagName( tag ); 1224 1225 // Filter out possible comments 1226 if ( tag === "*" ) { 1227 while ( (elem = results[i++]) ) { 1228 if ( elem.nodeType === 1 ) { 1229 tmp.push( elem ); 1230 } 1231 } 1232 1233 return tmp; 1234 } 1235 return results; 1236 }; 1237 1238 // Class 1239 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { 1240 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 1241 return context.getElementsByClassName( className ); 1242 } 1243 }; 1244 1245 /* QSA/matchesSelector 1246 ---------------------------------------------------------------------- */ 1247 1248 // QSA and matchesSelector support 1249 1250 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 1251 rbuggyMatches = []; 1252 1253 // qSa(:focus) reports false when true (Chrome 21) 1254 // We allow this because of a bug in IE8/9 that throws an error 1255 // whenever `document.activeElement` is accessed on an iframe 1256 // So, we allow :focus to pass through QSA all the time to avoid the IE error 1257 // See https://bugs.jquery.com/ticket/13378 1258 rbuggyQSA = []; 1259 1260 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { 1261 // Build QSA regex 1262 // Regex strategy adopted from Diego Perini 1263 assert(function( el ) { 1264 // Select is set to empty string on purpose 1265 // This is to test IE's treatment of not explicitly 1266 // setting a boolean content attribute, 1267 // since its presence should be enough 1268 // https://bugs.jquery.com/ticket/12359 1269 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + 1270 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 1271 "<option selected=''></option></select>"; 1272
vendor: 8,268 bytes, lines 1273-1557
1273 // Support: IE8, Opera 11-12.16 1274 // Nothing should be selected when empty strings follow ^= or $= or *= 1275 // The test attribute must be unknown in Opera but "safe" for WinRT 1276 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 1277 if ( el.querySelectorAll("[msallowcapture^='']").length ) { 1278 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 1279 } 1280 1281 // Support: IE8 1282 // Boolean attributes and "value" are not treated correctly 1283 if ( !el.querySelectorAll("[selected]").length ) { 1284 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 1285 } 1286 1287 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 1288 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 1289 rbuggyQSA.push("~="); 1290 } 1291 1292 // Webkit/Opera - :checked should return selected option elements 1293 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1294 // IE8 throws error here and will not see later tests 1295 if ( !el.querySelectorAll(":checked").length ) { 1296 rbuggyQSA.push(":checked"); 1297 } 1298 1299 // Support: Safari 8+, iOS 8+ 1300 // https://bugs.webkit.org/show_bug.cgi?id=136851 1301 // In-page `selector#id sibling-combinator selector` fails 1302 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 1303 rbuggyQSA.push(".#.+[+~]"); 1304 } 1305 }); 1306 1307 assert(function( el ) { 1308 el.innerHTML = "<a href='' disabled='disabled'></a>" + 1309 "<select disabled='disabled'><option/></select>"; 1310 1311 // Support: Windows 8 Native Apps 1312 // The type and name attributes are restricted during .innerHTML assignment 1313 var input = document.createElement("input"); 1314 input.setAttribute( "type", "hidden" ); 1315 el.appendChild( input ).setAttribute( "name", "D" ); 1316 1317 // Support: IE8 1318 // Enforce case-sensitivity of name attribute 1319 if ( el.querySelectorAll("[name=d]").length ) { 1320 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 1321 } 1322 1323 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 1324 // IE8 throws error here and will not see later tests 1325 if ( el.querySelectorAll(":enabled").length !== 2 ) { 1326 rbuggyQSA.push( ":enabled", ":disabled" ); 1327 } 1328 1329 // Support: IE9-11+ 1330 // IE's :disabled selector does not pick up the children of disabled fieldsets 1331 docElem.appendChild( el ).disabled = true; 1332 if ( el.querySelectorAll(":disabled").length !== 2 ) { 1333 rbuggyQSA.push( ":enabled", ":disabled" ); 1334 } 1335 1336 // Opera 10-11 does not throw on post-comma invalid pseudos 1337 el.querySelectorAll("*,:x"); 1338 rbuggyQSA.push(",.*:"); 1339 }); 1340 } 1341 1342 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || 1343 docElem.webkitMatchesSelector || 1344 docElem.mozMatchesSelector || 1345 docElem.oMatchesSelector || 1346 docElem.msMatchesSelector) )) ) { 1347 1348 assert(function( el ) { 1349 // Check to see if it's possible to do matchesSelector 1350 // on a disconnected node (IE 9) 1351 support.disconnectedMatch = matches.call( el, "*" ); 1352 1353 // This should fail with an exception 1354 // Gecko does not error, returns false instead 1355 matches.call( el, "[s!='']:x" ); 1356 rbuggyMatches.push( "!=", pseudos ); 1357 }); 1358 } 1359 1360 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); 1361 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); 1362 1363 /* Contains 1364 ---------------------------------------------------------------------- */ 1365 hasCompare = rnative.test( docElem.compareDocumentPosition ); 1366 1367 // Element contains another 1368 // Purposefully self-exclusive 1369 // As in, an element does not contain itself 1370 contains = hasCompare || rnative.test( docElem.contains ) ? 1371 function( a, b ) { 1372 var adown = a.nodeType === 9 ? a.documentElement : a, 1373 bup = b && b.parentNode; 1374 return a === bup || !!( bup && bup.nodeType === 1 && ( 1375 adown.contains ? 1376 adown.contains( bup ) : 1377 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 1378 )); 1379 } : 1380 function( a, b ) { 1381 if ( b ) { 1382 while ( (b = b.parentNode) ) { 1383 if ( b === a ) { 1384 return true; 1385 } 1386 } 1387 } 1388 return false; 1389 }; 1390 1391 /* Sorting 1392 ---------------------------------------------------------------------- */ 1393 1394 // Document order sorting 1395 sortOrder = hasCompare ? 1396 function( a, b ) { 1397 1398 // Flag for duplicate removal 1399 if ( a === b ) { 1400 hasDuplicate = true; 1401 return 0; 1402 } 1403 1404 // Sort on method existence if only one input has compareDocumentPosition 1405 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1406 if ( compare ) { 1407 return compare; 1408 } 1409 1410 // Calculate position if both inputs belong to the same document 1411 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? 1412 a.compareDocumentPosition( b ) : 1413 1414 // Otherwise we know they are disconnected 1415 1; 1416 1417 // Disconnected nodes 1418 if ( compare & 1 || 1419 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { 1420 1421 // Choose the first element that is related to our preferred document 1422 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { 1423 return -1; 1424 } 1425 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { 1426 return 1; 1427 } 1428 1429 // Maintain original order 1430 return sortInput ? 1431 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 1432 0; 1433 } 1434 1435 return compare & 4 ? -1 : 1; 1436 } : 1437 function( a, b ) { 1438 // Exit early if the nodes are identical 1439 if ( a === b ) { 1440 hasDuplicate = true; 1441 return 0; 1442 } 1443 1444 var cur, 1445 i = 0, 1446 aup = a.parentNode, 1447 bup = b.parentNode, 1448 ap = [ a ], 1449 bp = [ b ]; 1450 1451 // Parentless nodes are either documents or disconnected 1452 if ( !aup || !bup ) { 1453 return a === document ? -1 : 1454 b === document ? 1 : 1455 aup ? -1 : 1456 bup ? 1 : 1457 sortInput ? 1458 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 1459 0; 1460 1461 // If the nodes are siblings, we can do a quick check 1462 } else if ( aup === bup ) { 1463 return siblingCheck( a, b ); 1464 } 1465 1466 // Otherwise we need full lists of their ancestors for comparison 1467 cur = a; 1468 while ( (cur = cur.parentNode) ) { 1469 ap.unshift( cur ); 1470 } 1471 cur = b; 1472 while ( (cur = cur.parentNode) ) { 1473 bp.unshift( cur ); 1474 } 1475 1476 // Walk down the tree looking for a discrepancy 1477 while ( ap[i] === bp[i] ) { 1478 i++; 1479 } 1480 1481 return i ? 1482 // Do a sibling check if the nodes have a common ancestor 1483 siblingCheck( ap[i], bp[i] ) : 1484 1485 // Otherwise nodes in our document sort first 1486 ap[i] === preferredDoc ? -1 : 1487 bp[i] === preferredDoc ? 1 : 1488 0; 1489 }; 1490 1491 return document; 1492}; 1493 1494Sizzle.matches = function( expr, elements ) { 1495 return Sizzle( expr, null, null, elements ); 1496}; 1497 1498Sizzle.matchesSelector = function( elem, expr ) { 1499 // Set document vars if needed 1500 if ( ( elem.ownerDocument || elem ) !== document ) { 1501 setDocument( elem ); 1502 } 1503 1504 if ( support.matchesSelector && documentIsHTML && 1505 !nonnativeSelectorCache[ expr + " " ] && 1506 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 1507 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 1508 1509 try { 1510 var ret = matches.call( elem, expr ); 1511 1512 // IE 9's matchesSelector returns false on disconnected nodes 1513 if ( ret || support.disconnectedMatch || 1514 // As well, disconnected nodes are said to be in a document 1515 // fragment in IE 9 1516 elem.document && elem.document.nodeType !== 11 ) { 1517 return ret; 1518 } 1519 } catch (e) { 1520 nonnativeSelectorCache( expr, true ); 1521 } 1522 } 1523 1524 return Sizzle( expr, document, null, [ elem ] ).length > 0; 1525}; 1526 1527Sizzle.contains = function( context, elem ) { 1528 // Set document vars if needed 1529 if ( ( context.ownerDocument || context ) !== document ) { 1530 setDocument( context ); 1531 } 1532 return contains( context, elem ); 1533}; 1534 1535Sizzle.attr = function( elem, name ) { 1536 // Set document vars if needed 1537 if ( ( elem.ownerDocument || elem ) !== document ) { 1538 setDocument( elem ); 1539 } 1540 1541 var fn = Expr.attrHandle[ name.toLowerCase() ], 1542 // Don't get fooled by Object.prototype properties (jQuery #13807) 1543 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 1544 fn( elem, name, !documentIsHTML ) : 1545 undefined; 1546 1547 return val !== undefined ? 1548 val : 1549 support.attributes || !documentIsHTML ? 1550 elem.getAttribute( name ) : 1551 (val = elem.getAttributeNode(name)) && val.specified ? 1552 val.value : 1553 null; 1554}; 1555 1556Sizzle.escape = function( sel ) { 1557 return (sel + "").replace( rcssescape, fcssescape )
vendor: 11,991 bytes, lines 1557-1980
1557; 1558}; 1559 1560Sizzle.error = function( msg ) { 1561 throw new Error( "Syntax error, unrecognized expression: " + msg ); 1562}; 1563 1564/** 1565 * Document sorting and removing duplicates 1566 * @param {ArrayLike} results 1567 */ 1568Sizzle.uniqueSort = function( results ) { 1569 var elem, 1570 duplicates = [], 1571 j = 0, 1572 i = 0; 1573 1574 // Unless we *know* we can detect duplicates, assume their presence 1575 hasDuplicate = !support.detectDuplicates; 1576 sortInput = !support.sortStable && results.slice( 0 ); 1577 results.sort( sortOrder ); 1578 1579 if ( hasDuplicate ) { 1580 while ( (elem = results[i++]) ) { 1581 if ( elem === results[ i ] ) { 1582 j = duplicates.push( i ); 1583 } 1584 } 1585 while ( j-- ) { 1586 results.splice( duplicates[ j ], 1 ); 1587 } 1588 } 1589 1590 // Clear input after sorting to release objects 1591 // See https://github.com/jquery/sizzle/pull/225 1592 sortInput = null; 1593 1594 return results; 1595}; 1596 1597/** 1598 * Utility function for retrieving the text value of an array of DOM nodes 1599 * @param {Array|Element} elem 1600 */ 1601getText = Sizzle.getText = function( elem ) { 1602 var node, 1603 ret = "", 1604 i = 0, 1605 nodeType = elem.nodeType; 1606 1607 if ( !nodeType ) { 1608 // If no nodeType, this is expected to be an array 1609 while ( (node = elem[i++]) ) { 1610 // Do not traverse comment nodes 1611 ret += getText( node ); 1612 } 1613 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 1614 // Use textContent for elements 1615 // innerText usage removed for consistency of new lines (jQuery #11153) 1616 if ( typeof elem.textContent === "string" ) { 1617 return elem.textContent; 1618 } else { 1619 // Traverse its children 1620 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 1621 ret += getText( elem ); 1622 } 1623 } 1624 } else if ( nodeType === 3 || nodeType === 4 ) { 1625 return elem.nodeValue; 1626 } 1627 // Do not include comment or processing instruction nodes 1628 1629 return ret; 1630}; 1631 1632Expr = Sizzle.selectors = { 1633 1634 // Can be adjusted by the user 1635 cacheLength: 50, 1636 1637 createPseudo: markFunction, 1638 1639 match: matchExpr, 1640 1641 attrHandle: {}, 1642 1643 find: {}, 1644 1645 relative: { 1646 ">": { dir: "parentNode", first: true }, 1647 " ": { dir: "parentNode" }, 1648 "+": { dir: "previousSibling", first: true }, 1649 "~": { dir: "previousSibling" } 1650 }, 1651 1652 preFilter: { 1653 "ATTR": function( match ) { 1654 match[1] = match[1].replace( runescape, funescape ); 1655 1656 // Move the given value to match[3] whether quoted or unquoted 1657 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); 1658 1659 if ( match[2] === "~=" ) { 1660 match[3] = " " + match[3] + " "; 1661 } 1662 1663 return match.slice( 0, 4 ); 1664 }, 1665 1666 "CHILD": function( match ) { 1667 /* matches from matchExpr["CHILD"] 1668 1 type (only|nth|...) 1669 2 what (child|of-type) 1670 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 1671 4 xn-component of xn+y argument ([+-]?\d*n|) 1672 5 sign of xn-component 1673 6 x of xn-component 1674 7 sign of y-component 1675 8 y of y-component 1676 */ 1677 match[1] = match[1].toLowerCase(); 1678 1679 if ( match[1].slice( 0, 3 ) === "nth" ) { 1680 // nth-* requires argument 1681 if ( !match[3] ) { 1682 Sizzle.error( match[0] ); 1683 } 1684 1685 // numeric x and y parameters for Expr.filter.CHILD 1686 // remember that false/true cast respectively to 0/1 1687 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); 1688 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); 1689 1690 // other types prohibit arguments 1691 } else if ( match[3] ) { 1692 Sizzle.error( match[0] ); 1693 } 1694 1695 return match; 1696 }, 1697 1698 "PSEUDO": function( match ) { 1699 var excess, 1700 unquoted = !match[6] && match[2]; 1701 1702 if ( matchExpr["CHILD"].test( match[0] ) ) { 1703 return null; 1704 } 1705 1706 // Accept quoted arguments as-is 1707 if ( match[3] ) { 1708 match[2] = match[4] || match[5] || ""; 1709 1710 // Strip excess characters from unquoted arguments 1711 } else if ( unquoted && rpseudo.test( unquoted ) && 1712 // Get excess from tokenize (recursively) 1713 (excess = tokenize( unquoted, true )) && 1714 // advance to the next closing parenthesis 1715 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { 1716 1717 // excess is a negative index 1718 match[0] = match[0].slice( 0, excess ); 1719 match[2] = unquoted.slice( 0, excess ); 1720 } 1721 1722 // Return only captures needed by the pseudo filter method (type and argument) 1723 return match.slice( 0, 3 ); 1724 } 1725 }, 1726 1727 filter: { 1728 1729 "TAG": function( nodeNameSelector ) { 1730 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 1731 return nodeNameSelector === "*" ? 1732 function() { return true; } : 1733 function( elem ) { 1734 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 1735 }; 1736 }, 1737 1738 "CLASS": function( className ) { 1739 var pattern = classCache[ className + " " ]; 1740 1741 return pattern || 1742 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && 1743 classCache( className, function( elem ) { 1744 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); 1745 }); 1746 }, 1747 1748 "ATTR": function( name, operator, check ) { 1749 return function( elem ) { 1750 var result = Sizzle.attr( elem, name ); 1751 1752 if ( result == null ) { 1753 return operator === "!="; 1754 } 1755 if ( !operator ) { 1756 return true; 1757 } 1758 1759 result += ""; 1760 1761 return operator === "=" ? result === check : 1762 operator === "!=" ? result !== check : 1763 operator === "^=" ? check && result.indexOf( check ) === 0 : 1764 operator === "*=" ? check && result.indexOf( check ) > -1 : 1765 operator === "$=" ? check && result.slice( -check.length ) === check : 1766 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 1767 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 1768 false; 1769 }; 1770 }, 1771 1772 "CHILD": function( type, what, argument, first, last ) { 1773 var simple = type.slice( 0, 3 ) !== "nth", 1774 forward = type.slice( -4 ) !== "last", 1775 ofType = what === "of-type"; 1776 1777 return first === 1 && last === 0 ? 1778 1779 // Shortcut for :nth-*(n) 1780 function( elem ) { 1781 return !!elem.parentNode; 1782 } : 1783 1784 function( elem, context, xml ) { 1785 var cache, uniqueCache, outerCache, node, nodeIndex, start, 1786 dir = simple !== forward ? "nextSibling" : "previousSibling", 1787 parent = elem.parentNode, 1788 name = ofType && elem.nodeName.toLowerCase(), 1789 useCache = !xml && !ofType, 1790 diff = false; 1791 1792 if ( parent ) { 1793 1794 // :(first|last|only)-(child|of-type) 1795 if ( simple ) { 1796 while ( dir ) { 1797 node = elem; 1798 while ( (node = node[ dir ]) ) { 1799 if ( ofType ? 1800 node.nodeName.toLowerCase() === name : 1801 node.nodeType === 1 ) { 1802 1803 return false; 1804 } 1805 } 1806 // Reverse direction for :only-* (if we haven't yet done so) 1807 start = dir = type === "only" && !start && "nextSibling"; 1808 } 1809 return true; 1810 } 1811 1812 start = [ forward ? parent.firstChild : parent.lastChild ]; 1813 1814 // non-xml :nth-child(...) stores cache data on `parent` 1815 if ( forward && useCache ) { 1816 1817 // Seek `elem` from a previously-cached index 1818 1819 // ...in a gzip-friendly way 1820 node = parent; 1821 outerCache = node[ expando ] || (node[ expando ] = {}); 1822 1823 // Support: IE <9 only 1824 // Defend against cloned attroperties (jQuery gh-1709) 1825 uniqueCache = outerCache[ node.uniqueID ] || 1826 (outerCache[ node.uniqueID ] = {}); 1827 1828 cache = uniqueCache[ type ] || []; 1829 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 1830 diff = nodeIndex && cache[ 2 ]; 1831 node = nodeIndex && parent.childNodes[ nodeIndex ]; 1832 1833 while ( (node = ++nodeIndex && node && node[ dir ] || 1834 1835 // Fallback to seeking `elem` from the start 1836 (diff = nodeIndex = 0) || start.pop()) ) { 1837 1838 // When found, cache indexes on `parent` and break 1839 if ( node.nodeType === 1 && ++diff && node === elem ) { 1840 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 1841 break; 1842 } 1843 } 1844 1845 } else { 1846 // Use previously-cached element index if available 1847 if ( useCache ) { 1848 // ...in a gzip-friendly way 1849 node = elem; 1850 outerCache = node[ expando ] || (node[ expando ] = {}); 1851 1852 // Support: IE <9 only 1853 // Defend against cloned attroperties (jQuery gh-1709) 1854 uniqueCache = outerCache[ node.uniqueID ] || 1855 (outerCache[ node.uniqueID ] = {}); 1856 1857 cache = uniqueCache[ type ] || []; 1858 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 1859 diff = nodeIndex; 1860 } 1861 1862 // xml :nth-child(...) 1863 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 1864 if ( diff === false ) { 1865 // Use the same loop as above to seek `elem` from the start 1866 while ( (node = ++nodeIndex && node && node[ dir ] || 1867 (diff = nodeIndex = 0) || start.pop()) ) { 1868 1869 if ( ( ofType ? 1870 node.nodeName.toLowerCase() === name : 1871 node.nodeType === 1 ) && 1872 ++diff ) { 1873 1874 // Cache the index of each encountered element 1875 if ( useCache ) { 1876 outerCache = node[ expando ] || (node[ expando ] = {}); 1877 1878 // Support: IE <9 only 1879 // Defend against cloned attroperties (jQuery gh-1709) 1880 uniqueCache = outerCache[ node.uniqueID ] || 1881 (outerCache[ node.uniqueID ] = {}); 1882 1883 uniqueCache[ type ] = [ dirruns, diff ]; 1884 } 1885 1886 if ( node === elem ) { 1887 break; 1888 } 1889 } 1890 } 1891 } 1892 } 1893 1894 // Incorporate the offset, then check against cycle size 1895 diff -= last; 1896 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 1897 } 1898 }; 1899 }, 1900 1901 "PSEUDO": function( pseudo, argument ) { 1902 // pseudo-class names are case-insensitive 1903 // http://www.w3.org/TR/selectors/#pseudo-classes 1904 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 1905 // Remember that setFilters inherits from pseudos 1906 var args, 1907 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 1908 Sizzle.error( "unsupported pseudo: " + pseudo ); 1909 1910 // The user may use createPseudo to indicate that 1911 // arguments are needed to create the filter function 1912 // just as Sizzle does 1913 if ( fn[ expando ] ) { 1914 return fn( argument ); 1915 } 1916 1917 // But maintain support for old signatures 1918 if ( fn.length > 1 ) { 1919 args = [ pseudo, pseudo, "", argument ]; 1920 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 1921 markFunction(function( seed, matches ) { 1922 var idx, 1923 matched = fn( seed, argument ), 1924 i = matched.length; 1925 while ( i-- ) { 1926 idx = indexOf( seed, matched[i] ); 1927 seed[ idx ] = !( matches[ idx ] = matched[i] ); 1928 } 1929 }) : 1930 function( elem ) { 1931 return fn( elem, 0, args ); 1932 }; 1933 } 1934 1935 return fn; 1936 } 1937 }, 1938 1939 pseudos: { 1940 // Potentially complex pseudos 1941 "not": markFunction(function( selector ) { 1942 // Trim the selector passed to compile 1943 // to avoid treating leading and trailing 1944 // spaces as combinators 1945 var input = [], 1946 results = [], 1947 matcher = compile( selector.replace( rtrim, "$1" ) ); 1948 1949 return matcher[ expando ] ? 1950 markFunction(function( seed, matches, context, xml ) { 1951 var elem, 1952 unmatched = matcher( seed, null, xml, [] ), 1953 i = seed.length; 1954 1955 // Match elements unmatched by `matcher` 1956 while ( i-- ) { 1957 if ( (elem = unmatched[i]) ) { 1958 seed[i] = !(matches[i] = elem); 1959 } 1960 } 1961 }) : 1962 function( elem, context, xml ) { 1963 input[0] = elem; 1964 matcher( input, null, xml, results ); 1965 // Don't keep the element (issue #299) 1966 input[0] = null; 1967 return !results.pop(); 1968 }; 1969 }), 1970 1971 "has": markFunction(function( selector ) { 1972 return function( elem ) { 1973 return Sizzle( selector, elem ).length > 0; 1974 }; 1975 }), 1976 1977 "contains": markFunction(function( text ) { 1978 text = text.replace( runescape, funescape ); 1979 return function( elem ) { 1980 return ( elem.textContent ||
vendor: 1,115 bytes, lines 1980-2008
1980getText( elem ) ).indexOf( text ) > -1; 1981 }; 1982 }), 1983 1984 // "Whether an element is represented by a :lang() selector 1985 // is based solely on the element's language value 1986 // being equal to the identifier C, 1987 // or beginning with the identifier C immediately followed by "-". 1988 // The matching of C against the element's language value is performed case-insensitively. 1989 // The identifier C does not have to be a valid language name." 1990 // http://www.w3.org/TR/selectors/#lang-pseudo 1991 "lang": markFunction( function( lang ) { 1992 // lang value must be a valid identifier 1993 if ( !ridentifier.test(lang || "") ) { 1994 Sizzle.error( "unsupported lang: " + lang ); 1995 } 1996 lang = lang.replace( runescape, funescape ).toLowerCase(); 1997 return function( elem ) { 1998 var elemLang; 1999 do { 2000 if ( (elemLang = documentIsHTML ? 2001 elem.lang : 2002 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { 2003 2004 elemLang = elemLang.toLowerCase(); 2005 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 2006 } 2007 } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); 2008 return false;
vendor: 3,169 bytes, lines 2009-2123
2009 }; 2010 }), 2011 2012 // Miscellaneous 2013 "target": function( elem ) { 2014 var hash = window.location && window.location.hash; 2015 return hash && hash.slice( 1 ) === elem.id; 2016 }, 2017 2018 "root": function( elem ) { 2019 return elem === docElem; 2020 }, 2021 2022 "focus": function( elem ) { 2023 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 2024 }, 2025 2026 // Boolean properties 2027 "enabled": createDisabledPseudo( false ), 2028 "disabled": createDisabledPseudo( true ), 2029 2030 "checked": function( elem ) { 2031 // In CSS3, :checked should return both checked and selected elements 2032 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 2033 var nodeName = elem.nodeName.toLowerCase(); 2034 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); 2035 }, 2036 2037 "selected": function( elem ) { 2038 // Accessing this property makes selected-by-default 2039 // options in Safari work properly 2040 if ( elem.parentNode ) { 2041 elem.parentNode.selectedIndex; 2042 } 2043 2044 return elem.selected === true; 2045 }, 2046 2047 // Contents 2048 "empty": function( elem ) { 2049 // http://www.w3.org/TR/selectors/#empty-pseudo 2050 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 2051 // but not by others (comment: 8; processing instruction: 7; etc.) 2052 // nodeType < 6 works because attributes (2) do not appear as children 2053 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 2054 if ( elem.nodeType < 6 ) { 2055 return false; 2056 } 2057 } 2058 return true; 2059 }, 2060 2061 "parent": function( elem ) { 2062 return !Expr.pseudos["empty"]( elem ); 2063 }, 2064 2065 // Element/input types 2066 "header": function( elem ) { 2067 return rheader.test( elem.nodeName ); 2068 }, 2069 2070 "input": function( elem ) { 2071 return rinputs.test( elem.nodeName ); 2072 }, 2073 2074 "button": function( elem ) { 2075 var name = elem.nodeName.toLowerCase(); 2076 return name === "input" && elem.type === "button" || name === "button"; 2077 }, 2078 2079 "text": function( elem ) { 2080 var attr; 2081 return elem.nodeName.toLowerCase() === "input" && 2082 elem.type === "text" && 2083 2084 // Support: IE<8 2085 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 2086 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); 2087 }, 2088 2089 // Position-in-collection 2090 "first": createPositionalPseudo(function() { 2091 return [ 0 ]; 2092 }), 2093 2094 "last": createPositionalPseudo(function( matchIndexes, length ) { 2095 return [ length - 1 ]; 2096 }), 2097 2098 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { 2099 return [ argument < 0 ? argument + length : argument ]; 2100 }), 2101 2102 "even": createPositionalPseudo(function( matchIndexes, length ) { 2103 var i = 0; 2104 for ( ; i < length; i += 2 ) { 2105 matchIndexes.push( i ); 2106 } 2107 return matchIndexes; 2108 }), 2109 2110 "odd": createPositionalPseudo(function( matchIndexes, length ) { 2111 var i = 1; 2112 for ( ; i < length; i += 2 ) { 2113 matchIndexes.push( i ); 2114 } 2115 return matchIndexes; 2116 }), 2117 2118 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2119 var i = argument < 0 ? 2120 argument + length : 2121 argument > length ? 2122 length : 2123
vendor: 20,845 bytes, lines 2123-2884
2123argument; 2124 for ( ; --i >= 0; ) { 2125 matchIndexes.push( i ); 2126 } 2127 return matchIndexes; 2128 }), 2129 2130 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2131 var i = argument < 0 ? argument + length : argument; 2132 for ( ; ++i < length; ) { 2133 matchIndexes.push( i ); 2134 } 2135 return matchIndexes; 2136 }) 2137 } 2138}; 2139 2140Expr.pseudos["nth"] = Expr.pseudos["eq"]; 2141 2142// Add button/input type pseudos 2143for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 2144 Expr.pseudos[ i ] = createInputPseudo( i ); 2145} 2146for ( i in { submit: true, reset: true } ) { 2147 Expr.pseudos[ i ] = createButtonPseudo( i ); 2148} 2149 2150// Easy API for creating new setFilters 2151function setFilters() {} 2152setFilters.prototype = Expr.filters = Expr.pseudos; 2153Expr.setFilters = new setFilters(); 2154 2155tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 2156 var matched, match, tokens, type, 2157 soFar, groups, preFilters, 2158 cached = tokenCache[ selector + " " ]; 2159 2160 if ( cached ) { 2161 return parseOnly ? 0 : cached.slice( 0 ); 2162 } 2163 2164 soFar = selector; 2165 groups = []; 2166 preFilters = Expr.preFilter; 2167 2168 while ( soFar ) { 2169 2170 // Comma and first run 2171 if ( !matched || (match = rcomma.exec( soFar )) ) { 2172 if ( match ) { 2173 // Don't consume trailing commas as valid 2174 soFar = soFar.slice( match[0].length ) || soFar; 2175 } 2176 groups.push( (tokens = []) ); 2177 } 2178 2179 matched = false; 2180 2181 // Combinators 2182 if ( (match = rcombinators.exec( soFar )) ) { 2183 matched = match.shift(); 2184 tokens.push({ 2185 value: matched, 2186 // Cast descendant combinators to space 2187 type: match[0].replace( rtrim, " " ) 2188 }); 2189 soFar = soFar.slice( matched.length ); 2190 } 2191 2192 // Filters 2193 for ( type in Expr.filter ) { 2194 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || 2195 (match = preFilters[ type ]( match ))) ) { 2196 matched = match.shift(); 2197 tokens.push({ 2198 value: matched, 2199 type: type, 2200 matches: match 2201 }); 2202 soFar = soFar.slice( matched.length ); 2203 } 2204 } 2205 2206 if ( !matched ) { 2207 break; 2208 } 2209 } 2210 2211 // Return the length of the invalid excess 2212 // if we're just parsing 2213 // Otherwise, throw an error or return tokens 2214 return parseOnly ? 2215 soFar.length : 2216 soFar ? 2217 Sizzle.error( selector ) : 2218 // Cache the tokens 2219 tokenCache( selector, groups ).slice( 0 ); 2220}; 2221 2222function toSelector( tokens ) { 2223 var i = 0, 2224 len = tokens.length, 2225 selector = ""; 2226 for ( ; i < len; i++ ) { 2227 selector += tokens[i].value; 2228 } 2229 return selector; 2230} 2231 2232function addCombinator( matcher, combinator, base ) { 2233 var dir = combinator.dir, 2234 skip = combinator.next, 2235 key = skip || dir, 2236 checkNonElements = base && key === "parentNode", 2237 doneName = done++; 2238 2239 return combinator.first ? 2240 // Check against closest ancestor/preceding element 2241 function( elem, context, xml ) { 2242 while ( (elem = elem[ dir ]) ) { 2243 if ( elem.nodeType === 1 || checkNonElements ) { 2244 return matcher( elem, context, xml ); 2245 } 2246 } 2247 return false; 2248 } : 2249 2250 // Check against all ancestor/preceding elements 2251 function( elem, context, xml ) { 2252 var oldCache, uniqueCache, outerCache, 2253 newCache = [ dirruns, doneName ]; 2254 2255 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2256 if ( xml ) { 2257 while ( (elem = elem[ dir ]) ) { 2258 if ( elem.nodeType === 1 || checkNonElements ) { 2259 if ( matcher( elem, context, xml ) ) { 2260 return true; 2261 } 2262 } 2263 } 2264 } else { 2265 while ( (elem = elem[ dir ]) ) { 2266 if ( elem.nodeType === 1 || checkNonElements ) { 2267 outerCache = elem[ expando ] || (elem[ expando ] = {}); 2268 2269 // Support: IE <9 only 2270 // Defend against cloned attroperties (jQuery gh-1709) 2271 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); 2272 2273 if ( skip && skip === elem.nodeName.toLowerCase() ) { 2274 elem = elem[ dir ] || elem; 2275 } else if ( (oldCache = uniqueCache[ key ]) && 2276 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 2277 2278 // Assign to newCache so results back-propagate to previous elements 2279 return (newCache[ 2 ] = oldCache[ 2 ]); 2280 } else { 2281 // Reuse newcache so results back-propagate to previous elements 2282 uniqueCache[ key ] = newCache; 2283 2284 // A match means we're done; a fail means we have to keep checking 2285 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { 2286 return true; 2287 } 2288 } 2289 } 2290 } 2291 } 2292 return false; 2293 }; 2294} 2295 2296function elementMatcher( matchers ) { 2297 return matchers.length > 1 ? 2298 function( elem, context, xml ) { 2299 var i = matchers.length; 2300 while ( i-- ) { 2301 if ( !matchers[i]( elem, context, xml ) ) { 2302 return false; 2303 } 2304 } 2305 return true; 2306 } : 2307 matchers[0]; 2308} 2309 2310function multipleContexts( selector, contexts, results ) { 2311 var i = 0, 2312 len = contexts.length; 2313 for ( ; i < len; i++ ) { 2314 Sizzle( selector, contexts[i], results ); 2315 } 2316 return results; 2317} 2318 2319function condense( unmatched, map, filter, context, xml ) { 2320 var elem, 2321 newUnmatched = [], 2322 i = 0, 2323 len = unmatched.length, 2324 mapped = map != null; 2325 2326 for ( ; i < len; i++ ) { 2327 if ( (elem = unmatched[i]) ) { 2328 if ( !filter || filter( elem, context, xml ) ) { 2329 newUnmatched.push( elem ); 2330 if ( mapped ) { 2331 map.push( i ); 2332 } 2333 } 2334 } 2335 } 2336 2337 return newUnmatched; 2338} 2339 2340function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 2341 if ( postFilter && !postFilter[ expando ] ) { 2342 postFilter = setMatcher( postFilter ); 2343 } 2344 if ( postFinder && !postFinder[ expando ] ) { 2345 postFinder = setMatcher( postFinder, postSelector ); 2346 } 2347 return markFunction(function( seed, results, context, xml ) { 2348 var temp, i, elem, 2349 preMap = [], 2350 postMap = [], 2351 preexisting = results.length, 2352 2353 // Get initial elements from seed or context 2354 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), 2355 2356 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2357 matcherIn = preFilter && ( seed || !selector ) ? 2358 condense( elems, preMap, preFilter, context, xml ) : 2359 elems, 2360 2361 matcherOut = matcher ? 2362 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 2363 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 2364 2365 // ...intermediate processing is necessary 2366 [] : 2367 2368 // ...otherwise use results directly 2369 results : 2370 matcherIn; 2371 2372 // Find primary matches 2373 if ( matcher ) { 2374 matcher( matcherIn, matcherOut, context, xml ); 2375 } 2376 2377 // Apply postFilter 2378 if ( postFilter ) { 2379 temp = condense( matcherOut, postMap ); 2380 postFilter( temp, [], context, xml ); 2381 2382 // Un-match failing elements by moving them back to matcherIn 2383 i = temp.length; 2384 while ( i-- ) { 2385 if ( (elem = temp[i]) ) { 2386 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); 2387 } 2388 } 2389 } 2390 2391 if ( seed ) { 2392 if ( postFinder || preFilter ) { 2393 if ( postFinder ) { 2394 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2395 temp = []; 2396 i = matcherOut.length; 2397 while ( i-- ) { 2398 if ( (elem = matcherOut[i]) ) { 2399 // Restore matcherIn since elem is not yet a final match 2400 temp.push( (matcherIn[i] = elem) ); 2401 } 2402 } 2403 postFinder( null, (matcherOut = []), temp, xml ); 2404 } 2405 2406 // Move matched elements from seed to results to keep them synchronized 2407 i = matcherOut.length; 2408 while ( i-- ) { 2409 if ( (elem = matcherOut[i]) && 2410 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { 2411 2412 seed[temp] = !(results[temp] = elem); 2413 } 2414 } 2415 } 2416 2417 // Add elements to results, through postFinder if defined 2418 } else { 2419 matcherOut = condense( 2420 matcherOut === results ? 2421 matcherOut.splice( preexisting, matcherOut.length ) : 2422 matcherOut 2423 ); 2424 if ( postFinder ) { 2425 postFinder( null, results, matcherOut, xml ); 2426 } else { 2427 push.apply( results, matcherOut ); 2428 } 2429 } 2430 }); 2431} 2432 2433function matcherFromTokens( tokens ) { 2434 var checkContext, matcher, j, 2435 len = tokens.length, 2436 leadingRelative = Expr.relative[ tokens[0].type ], 2437 implicitRelative = leadingRelative || Expr.relative[" "], 2438 i = leadingRelative ? 1 : 0, 2439 2440 // The foundational matcher ensures that elements are reachable from top-level context(s) 2441 matchContext = addCombinator( function( elem ) { 2442 return elem === checkContext; 2443 }, implicitRelative, true ), 2444 matchAnyContext = addCombinator( function( elem ) { 2445 return indexOf( checkContext, elem ) > -1; 2446 }, implicitRelative, true ), 2447 matchers = [ function( elem, context, xml ) { 2448 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 2449 (checkContext = context).nodeType ? 2450 matchContext( elem, context, xml ) : 2451 matchAnyContext( elem, context, xml ) ); 2452 // Avoid hanging onto element (issue #299) 2453 checkContext = null; 2454 return ret; 2455 } ]; 2456 2457 for ( ; i < len; i++ ) { 2458 if ( (matcher = Expr.relative[ tokens[i].type ]) ) { 2459 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; 2460 } else { 2461 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); 2462 2463 // Return special upon seeing a positional matcher 2464 if ( matcher[ expando ] ) { 2465 // Find the next relative operator (if any) for proper handling 2466 j = ++i; 2467 for ( ; j < len; j++ ) { 2468 if ( Expr.relative[ tokens[j].type ] ) { 2469 break; 2470 } 2471 } 2472 return setMatcher( 2473 i > 1 && elementMatcher( matchers ), 2474 i > 1 && toSelector( 2475 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 2476 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) 2477 ).replace( rtrim, "$1" ), 2478 matcher, 2479 i < j && matcherFromTokens( tokens.slice( i, j ) ), 2480 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), 2481 j < len && toSelector( tokens ) 2482 ); 2483 } 2484 matchers.push( matcher ); 2485 } 2486 } 2487 2488 return elementMatcher( matchers ); 2489} 2490 2491function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 2492 var bySet = setMatchers.length > 0, 2493 byElement = elementMatchers.length > 0, 2494 superMatcher = function( seed, context, xml, results, outermost ) { 2495 var elem, j, matcher, 2496 matchedCount = 0, 2497 i = "0", 2498 unmatched = seed && [], 2499 setMatched = [], 2500 contextBackup = outermostContext, 2501 // We must always have either seed elements or outermost context 2502 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), 2503 // Use integer dirruns iff this is the outermost matcher 2504 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), 2505 len = elems.length; 2506 2507 if ( outermost ) { 2508 outermostContext = context === document || context || outermost; 2509 } 2510 2511 // Add elements passing elementMatchers directly to results 2512 // Support: IE<9, Safari 2513 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 2514 for ( ; i !== len && (elem = elems[i]) != null; i++ ) { 2515 if ( byElement && elem ) { 2516 j = 0; 2517 if ( !context && elem.ownerDocument !== document ) { 2518 setDocument( elem ); 2519 xml = !documentIsHTML; 2520 } 2521 while ( (matcher = elementMatchers[j++]) ) { 2522 if ( matcher( elem, context || document, xml) ) { 2523 results.push( elem ); 2524 break; 2525 } 2526 } 2527 if ( outermost ) { 2528 dirruns = dirrunsUnique; 2529 } 2530 } 2531 2532 // Track unmatched elements for set filters 2533 if ( bySet ) { 2534 // They will have gone through all possible matchers 2535 if ( (elem = !matcher && elem) ) { 2536 matchedCount--; 2537 } 2538 2539 // Lengthen the array for every element, matched or not 2540 if ( seed ) { 2541 unmatched.push( elem ); 2542 } 2543 } 2544 } 2545 2546 // `i` is now the count of elements visited above, and adding it to `matchedCount` 2547 // makes the latter nonnegative. 2548 matchedCount += i; 2549 2550 // Apply set filters to unmatched elements 2551 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 2552 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 2553 // no element matchers and no seed. 2554 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 2555 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 2556 // numerically zero. 2557 if ( bySet && i !== matchedCount ) { 2558 j = 0; 2559 while ( (matcher = setMatchers[j++]) ) { 2560 matcher( unmatched, setMatched, context, xml ); 2561 } 2562 2563 if ( seed ) { 2564 // Reintegrate element matches to eliminate the need for sorting 2565 if ( matchedCount > 0 ) { 2566 while ( i-- ) { 2567 if ( !(unmatched[i] || setMatched[i]) ) { 2568 setMatched[i] = pop.call( results ); 2569 } 2570 } 2571 } 2572 2573 // Discard index placeholder values to get only actual matches 2574 setMatched = condense( setMatched ); 2575 } 2576 2577 // Add matches to results 2578 push.apply( results, setMatched ); 2579 2580 // Seedless set matches succeeding multiple successful matchers stipulate sorting 2581 if ( outermost && !seed && setMatched.length > 0 && 2582 ( matchedCount + setMatchers.length ) > 1 ) { 2583 2584 Sizzle.uniqueSort( results ); 2585 } 2586 } 2587 2588 // Override manipulation of globals by nested matchers 2589 if ( outermost ) { 2590 dirruns = dirrunsUnique; 2591 outermostContext = contextBackup; 2592 } 2593 2594 return unmatched; 2595 }; 2596 2597 return bySet ? 2598 markFunction( superMatcher ) : 2599 superMatcher; 2600} 2601 2602compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 2603 var i, 2604 setMatchers = [], 2605 elementMatchers = [], 2606 cached = compilerCache[ selector + " " ]; 2607 2608 if ( !cached ) { 2609 // Generate a function of recursive functions that can be used to check each element 2610 if ( !match ) { 2611 match = tokenize( selector ); 2612 } 2613 i = match.length; 2614 while ( i-- ) { 2615 cached = matcherFromTokens( match[i] ); 2616 if ( cached[ expando ] ) { 2617 setMatchers.push( cached ); 2618 } else { 2619 elementMatchers.push( cached ); 2620 } 2621 } 2622 2623 // Cache the compiled function 2624 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 2625 2626 // Save selector and tokenization 2627 cached.selector = selector; 2628 } 2629 return cached; 2630}; 2631 2632/** 2633 * A low-level selection function that works with Sizzle's compiled 2634 * selector functions 2635 * @param {String|Function} selector A selector or a pre-compiled 2636 * selector function built with Sizzle.compile 2637 * @param {Element} context 2638 * @param {Array} [results] 2639 * @param {Array} [seed] A set of elements to match against 2640 */ 2641select = Sizzle.select = function( selector, context, results, seed ) { 2642 var i, tokens, token, type, find, 2643 compiled = typeof selector === "function" && selector, 2644 match = !seed && tokenize( (selector = compiled.selector || selector) ); 2645 2646 results = results || []; 2647 2648 // Try to minimize operations if there is only one selector in the list and no seed 2649 // (the latter of which guarantees us context) 2650 if ( match.length === 1 ) { 2651 2652 // Reduce context if the leading compound selector is an ID 2653 tokens = match[0] = match[0].slice( 0 ); 2654 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && 2655 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { 2656 2657 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; 2658 if ( !context ) { 2659 return results; 2660 2661 // Precompiled matchers will still verify ancestry, so step up a level 2662 } else if ( compiled ) { 2663 context = context.parentNode; 2664 } 2665 2666 selector = selector.slice( tokens.shift().value.length ); 2667 } 2668 2669 // Fetch a seed set for right-to-left matching 2670 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; 2671 while ( i-- ) { 2672 token = tokens[i]; 2673 2674 // Abort if we hit a combinator 2675 if ( Expr.relative[ (type = token.type) ] ) { 2676 break; 2677 } 2678 if ( (find = Expr.find[ type ]) ) { 2679 // Search, expanding context for leading sibling combinators 2680 if ( (seed = find( 2681 token.matches[0].replace( runescape, funescape ), 2682 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context 2683 )) ) { 2684 2685 // If seed is empty or no tokens remain, we can return early 2686 tokens.splice( i, 1 ); 2687 selector = seed.length && toSelector( tokens ); 2688 if ( !selector ) { 2689 push.apply( results, seed ); 2690 return results; 2691 } 2692 2693 break; 2694 } 2695 } 2696 } 2697 } 2698 2699 // Compile and execute a filtering function if one is not provided 2700 // Provide `match` to avoid retokenization if we modified the selector above 2701 ( compiled || compile( selector, match ) )( 2702 seed, 2703 context, 2704 !documentIsHTML, 2705 results, 2706 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 2707 ); 2708 return results; 2709}; 2710 2711// One-time assignments 2712 2713// Sort stability 2714support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; 2715 2716// Support: Chrome 14-35+ 2717// Always assume duplicates if they aren't passed to the comparison function 2718support.detectDuplicates = !!hasDuplicate; 2719 2720// Initialize against the default document 2721setDocument(); 2722 2723// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 2724// Detached nodes confoundingly follow *each other* 2725support.sortDetached = assert(function( el ) { 2726 // Should return 1, but returns 4 (following) 2727 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; 2728}); 2729 2730// Support: IE<8 2731// Prevent attribute/property "interpolation" 2732// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 2733if ( !assert(function( el ) { 2734 el.innerHTML = "<a href='#'></a>"; 2735 return el.firstChild.getAttribute("href") === "#" ; 2736}) ) { 2737 addHandle( "type|href|height|width", function( elem, name, isXML ) { 2738 if ( !isXML ) { 2739 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 2740 } 2741 }); 2742} 2743 2744// Support: IE<9 2745// Use defaultValue in place of getAttribute("value") 2746if ( !support.attributes || !assert(function( el ) { 2747 el.innerHTML = "<input/>"; 2748 el.firstChild.setAttribute( "value", "" ); 2749 return el.firstChild.getAttribute( "value" ) === ""; 2750}) ) { 2751 addHandle( "value", function( elem, name, isXML ) { 2752 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 2753 return elem.defaultValue; 2754 } 2755 }); 2756} 2757 2758// Support: IE<9 2759// Use getAttributeNode to fetch booleans when getAttribute lies 2760if ( !assert(function( el ) { 2761 return el.getAttribute("disabled") == null; 2762}) ) { 2763 addHandle( booleans, function( elem, name, isXML ) { 2764 var val; 2765 if ( !isXML ) { 2766 return elem[ name ] === true ? name.toLowerCase() : 2767 (val = elem.getAttributeNode( name )) && val.specified ? 2768 val.value : 2769 null; 2770 } 2771 }); 2772} 2773 2774return Sizzle; 2775 2776})( window ); 2777 2778 2779 2780jQuery.find = Sizzle; 2781jQuery.expr = Sizzle.selectors; 2782 2783// Deprecated 2784jQuery.expr[ ":" ] = jQuery.expr.pseudos; 2785jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 2786jQuery.text = Sizzle.getText; 2787jQuery.isXMLDoc = Sizzle.isXML; 2788jQuery.contains = Sizzle.contains; 2789jQuery.escapeSelector = Sizzle.escape; 2790 2791 2792 2793 2794var dir = function( elem, dir, until ) { 2795 var matched = [], 2796 truncate = until !== undefined; 2797 2798 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 2799 if ( elem.nodeType === 1 ) { 2800 if ( truncate && jQuery( elem ).is( until ) ) { 2801 break; 2802 } 2803 matched.push( elem ); 2804 } 2805 } 2806 return matched; 2807}; 2808 2809 2810var siblings = function( n, elem ) { 2811 var matched = []; 2812 2813 for ( ; n; n = n.nextSibling ) { 2814 if ( n.nodeType === 1 && n !== elem ) { 2815 matched.push( n ); 2816 } 2817 } 2818 2819 return matched; 2820}; 2821 2822 2823var rneedsContext = jQuery.expr.match.needsContext; 2824 2825 2826 2827function nodeName( elem, name ) { 2828 2829 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 2830 2831}; 2832var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 2833 2834 2835 2836// Implement the identical functionality for filter and not 2837function winnow( elements, qualifier, not ) { 2838 if ( isFunction( qualifier ) ) { 2839 return jQuery.grep( elements, function( elem, i ) { 2840 return !!qualifier.call( elem, i, elem ) !== not; 2841 } ); 2842 } 2843 2844 // Single element 2845 if ( qualifier.nodeType ) { 2846 return jQuery.grep( elements, function( elem ) { 2847 return ( elem === qualifier ) !== not; 2848 } ); 2849 } 2850 2851 // Arraylike of elements (jQuery, arguments, Array) 2852 if ( typeof qualifier !== "string" ) { 2853 return jQuery.grep( elements, function( elem ) { 2854 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 2855 } ); 2856 } 2857 2858 // Filtered directly for both simple and complex selectors 2859 return jQuery.filter( qualifier, elements, not ); 2860} 2861 2862jQuery.filter = function( expr, elems, not ) { 2863 var elem = elems[ 0 ]; 2864 2865 if ( not ) { 2866 expr = ":not(" + expr + ")"; 2867 } 2868 2869 if ( elems.length === 1 && elem.nodeType === 1 ) { 2870 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 2871 } 2872 2873 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 2874 return elem.nodeType === 1; 2875 } ) ); 2876}; 2877 2878jQuery.fn.extend( { 2879 find: function( selector ) { 2880 var i, ret, 2881 len = this.length, 2882 self = this; 2883 2884 if ( typeof selector !== "string" ) {
vendor: 6,536 bytes, lines 2885-3145
2885 return this.pushStack( jQuery( selector ).filter( function() { 2886 for ( i = 0; i < len; i++ ) { 2887 if ( jQuery.contains( self[ i ], this ) ) { 2888 return true; 2889 } 2890 } 2891 } ) ); 2892 } 2893 2894 ret = this.pushStack( [] ); 2895 2896 for ( i = 0; i < len; i++ ) { 2897 jQuery.find( selector, self[ i ], ret ); 2898 } 2899 2900 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 2901 }, 2902 filter: function( selector ) { 2903 return this.pushStack( winnow( this, selector || [], false ) ); 2904 }, 2905 not: function( selector ) { 2906 return this.pushStack( winnow( this, selector || [], true ) ); 2907 }, 2908 is: function( selector ) { 2909 return !!winnow( 2910 this, 2911 2912 // If this is a positional/relative selector, check membership in the returned set 2913 // so $("p:first").is("p:last") won't return true for a doc with two "p". 2914 typeof selector === "string" && rneedsContext.test( selector ) ? 2915 jQuery( selector ) : 2916 selector || [], 2917 false 2918 ).length; 2919 } 2920} ); 2921 2922 2923// Initialize a jQuery object 2924 2925 2926// A central reference to the root jQuery(document) 2927var rootjQuery, 2928 2929 // A simple way to check for HTML strings 2930 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 2931 // Strict HTML recognition (#11290: must start with <) 2932 // Shortcut simple #id case for speed 2933 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 2934 2935 init = jQuery.fn.init = function( selector, context, root ) { 2936 var match, elem; 2937 2938 // HANDLE: $(""), $(null), $(undefined), $(false) 2939 if ( !selector ) { 2940 return this; 2941 } 2942 2943 // Method init() accepts an alternate rootjQuery 2944 // so migrate can support jQuery.sub (gh-2101) 2945 root = root || rootjQuery; 2946 2947 // Handle HTML strings 2948 if ( typeof selector === "string" ) { 2949 if ( selector[ 0 ] === "<" && 2950 selector[ selector.length - 1 ] === ">" && 2951 selector.length >= 3 ) { 2952 2953 // Assume that strings that start and end with <> are HTML and skip the regex check 2954 match = [ null, selector, null ]; 2955 2956 } else { 2957 match = rquickExpr.exec( selector ); 2958 } 2959 2960 // Match html or make sure no context is specified for #id 2961 if ( match && ( match[ 1 ] || !context ) ) { 2962 2963 // HANDLE: $(html) -> $(array) 2964 if ( match[ 1 ] ) { 2965 context = context instanceof jQuery ? context[ 0 ] : context; 2966 2967 // Option to run scripts is true for back-compat 2968 // Intentionally let the error be thrown if parseHTML is not present 2969 jQuery.merge( this, jQuery.parseHTML( 2970 match[ 1 ], 2971 context && context.nodeType ? context.ownerDocument || context : document, 2972 true 2973 ) ); 2974 2975 // HANDLE: $(html, props) 2976 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 2977 for ( match in context ) { 2978 2979 // Properties of context are called as methods if possible 2980 if ( isFunction( this[ match ] ) ) { 2981 this[ match ]( context[ match ] ); 2982 2983 // ...and otherwise set as attributes 2984 } else { 2985 this.attr( match, context[ match ] ); 2986 } 2987 } 2988 } 2989 2990 return this; 2991 2992 // HANDLE: $(#id) 2993 } else { 2994 elem = document.getElementById( match[ 2 ] ); 2995 2996 if ( elem ) { 2997 2998 // Inject the element directly into the jQuery object 2999 this[ 0 ] = elem; 3000 this.length = 1; 3001 } 3002 return this; 3003 } 3004 3005 // HANDLE: $(expr, $(...)) 3006 } else if ( !context || context.jquery ) { 3007 return ( context || root ).find( selector ); 3008 3009 // HANDLE: $(expr, context) 3010 // (which is just equivalent to: $(context).find(expr) 3011 } else { 3012 return this.constructor( context ).find( selector ); 3013 } 3014 3015 // HANDLE: $(DOMElement) 3016 } else if ( selector.nodeType ) { 3017 this[ 0 ] = selector; 3018 this.length = 1; 3019 return this; 3020 3021 // HANDLE: $(function) 3022 // Shortcut for document ready 3023 } else if ( isFunction( selector ) ) { 3024 return root.ready !== undefined ? 3025 root.ready( selector ) : 3026 3027 // Execute immediately if ready is not present 3028 selector( jQuery ); 3029 } 3030 3031 return jQuery.makeArray( selector, this ); 3032 }; 3033 3034// Give the init function the jQuery prototype for later instantiation 3035init.prototype = jQuery.fn; 3036 3037// Initialize central reference 3038rootjQuery = jQuery( document ); 3039 3040 3041var rparentsprev = /^(?:parents|prev(?:Until|All))/, 3042 3043 // Methods guaranteed to produce a unique set when starting from a unique set 3044 guaranteedUnique = { 3045 children: true, 3046 contents: true, 3047 next: true, 3048 prev: true 3049 }; 3050 3051jQuery.fn.extend( { 3052 has: function( target ) { 3053 var targets = jQuery( target, this ), 3054 l = targets.length; 3055 3056 return this.filter( function() { 3057 var i = 0; 3058 for ( ; i < l; i++ ) { 3059 if ( jQuery.contains( this, targets[ i ] ) ) { 3060 return true; 3061 } 3062 } 3063 } ); 3064 }, 3065 3066 closest: function( selectors, context ) { 3067 var cur, 3068 i = 0, 3069 l = this.length, 3070 matched = [], 3071 targets = typeof selectors !== "string" && jQuery( selectors ); 3072 3073 // Positional selectors never match, since there's no _selection_ context 3074 if ( !rneedsContext.test( selectors ) ) { 3075 for ( ; i < l; i++ ) { 3076 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 3077 3078 // Always skip document fragments 3079 if ( cur.nodeType < 11 && ( targets ? 3080 targets.index( cur ) > -1 : 3081 3082 // Don't pass non-elements to Sizzle 3083 cur.nodeType === 1 && 3084 jQuery.find.matchesSelector( cur, selectors ) ) ) { 3085 3086 matched.push( cur ); 3087 break; 3088 } 3089 } 3090 } 3091 } 3092 3093 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 3094 }, 3095 3096 // Determine the position of an element within the set 3097 index: function( elem ) { 3098 3099 // No argument, return index in parent 3100 if ( !elem ) { 3101 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 3102 } 3103 3104 // Index in selector 3105 if ( typeof elem === "string" ) { 3106 return indexOf.call( jQuery( elem ), this[ 0 ] ); 3107 } 3108 3109 // Locate the position of the desired element 3110 return indexOf.call( this, 3111 3112 // If it receives a jQuery object, the first element is used 3113 elem.jquery ? elem[ 0 ] : elem 3114 ); 3115 }, 3116 3117 add: function( selector, context ) { 3118 return this.pushStack( 3119 jQuery.uniqueSort( 3120 jQuery.merge( this.get(), jQuery( selector, context ) ) 3121 ) 3122 ); 3123 }, 3124 3125 addBack: function( selector ) { 3126 return this.add( selector == null ? 3127 this.prevObject : this.prevObject.filter( selector ) 3128 ); 3129 } 3130} ); 3131 3132function sibling( cur, dir ) { 3133 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 3134 return cur; 3135} 3136 3137jQuery.each( { 3138 parent: function( elem ) { 3139 var parent = elem.parentNode; 3140 return parent && parent.nodeType !== 11 ? parent : null; 3141 }, 3142 parents: function( elem ) { 3143 return dir( elem, "parentNode" ); 3144 }, 3145 parentsUntil: function( elem,
3145i, until ) { 3146 return dir( elem, "parentNode", until ); 3147 }, 3148 next: function( elem ) { 3149 return sibling( elem, "nextSibling" ); 3150 }, 3151 prev: function( elem ) { 3152 return sibling( elem, "previousSibling" ); 3153 }, 3154 nextAll: function( elem ) { 3155 return dir( elem, "nextSibling" ); 3156 }, 3157 prevAll: function( elem ) { 3158 return dir( elem, "previousSibling" ); 3159 }, 3160 nextUntil: function( elem, i, until ) { 3161 return dir( elem, "nextSibling", until ); 3162 }, 3163 prevUntil: function( elem, i, until ) { 3164 return dir( elem, "previousSibling", until ); 3165 }, 3166 siblings: function( elem ) { 3167 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 3168 }, 3169 children: function( elem ) { 3170 return siblings( elem.firstChild ); 3171 }, 3172 contents: function( elem ) { 3173 if ( typeof elem.contentDocument !== "undefined" ) {
vendor: 8,211 bytes, lines 3173-3507
3173 3174 return elem.contentDocument; 3175 } 3176 3177 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 3178 // Treat the template element as a regular one in browsers that 3179 // don't support it. 3180 if ( nodeName( elem, "template" ) ) { 3181 elem = elem.content || elem; 3182 } 3183 3184 return jQuery.merge( [], elem.childNodes ); 3185 } 3186}, function( name, fn ) { 3187 jQuery.fn[ name ] = function( until, selector ) { 3188 var matched = jQuery.map( this, fn, until ); 3189 3190 if ( name.slice( -5 ) !== "Until" ) { 3191 selector = until; 3192 } 3193 3194 if ( selector && typeof selector === "string" ) { 3195 matched = jQuery.filter( selector, matched ); 3196 } 3197 3198 if ( this.length > 1 ) { 3199 3200 // Remove duplicates 3201 if ( !guaranteedUnique[ name ] ) { 3202 jQuery.uniqueSort( matched ); 3203 } 3204 3205 // Reverse order for parents* and prev-derivatives 3206 if ( rparentsprev.test( name ) ) { 3207 matched.reverse(); 3208 } 3209 } 3210 3211 return this.pushStack( matched ); 3212 }; 3213} ); 3214var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 3215 3216 3217 3218// Convert String-formatted options into Object-formatted ones 3219function createOptions( options ) { 3220 var object = {}; 3221 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 3222 object[ flag ] = true; 3223 } ); 3224 return object; 3225} 3226 3227/* 3228 * Create a callback list using the following parameters: 3229 * 3230 * options: an optional list of space-separated options that will change how 3231 * the callback list behaves or a more traditional option object 3232 * 3233 * By default a callback list will act like an event callback list and can be 3234 * "fired" multiple times. 3235 * 3236 * Possible options: 3237 * 3238 * once: will ensure the callback list can only be fired once (like a Deferred) 3239 * 3240 * memory: will keep track of previous values and will call any callback added 3241 * after the list has been fired right away with the latest "memorized" 3242 * values (like a Deferred) 3243 * 3244 * unique: will ensure a callback can only be added once (no duplicate in the list) 3245 * 3246 * stopOnFalse: interrupt callings when a callback returns false 3247 * 3248 */ 3249jQuery.Callbacks = function( options ) { 3250 3251 // Convert options from String-formatted to Object-formatted if needed 3252 // (we check in cache first) 3253 options = typeof options === "string" ? 3254 createOptions( options ) : 3255 jQuery.extend( {}, options ); 3256 3257 var // Flag to know if list is currently firing 3258 firing, 3259 3260 // Last fire value for non-forgettable lists 3261 memory, 3262 3263 // Flag to know if list was already fired 3264 fired, 3265 3266 // Flag to prevent firing 3267 locked, 3268 3269 // Actual callback list 3270 list = [], 3271 3272 // Queue of execution data for repeatable lists 3273 queue = [], 3274 3275 // Index of currently firing callback (modified by add/remove as needed) 3276 firingIndex = -1, 3277 3278 // Fire callbacks 3279 fire = function() { 3280 3281 // Enforce single-firing 3282 locked = locked || options.once; 3283 3284 // Execute callbacks for all pending executions, 3285 // respecting firingIndex overrides and runtime changes 3286 fired = firing = true; 3287 for ( ; queue.length; firingIndex = -1 ) { 3288 memory = queue.shift(); 3289 while ( ++firingIndex < list.length ) { 3290 3291 // Run callback and check for early termination 3292 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 3293 options.stopOnFalse ) { 3294 3295 // Jump to end and forget the data so .add doesn't re-fire 3296 firingIndex = list.length; 3297 memory = false; 3298 } 3299 } 3300 } 3301 3302 // Forget the data if we're done with it 3303 if ( !options.memory ) { 3304 memory = false; 3305 } 3306 3307 firing = false; 3308 3309 // Clean up if we're done firing for good 3310 if ( locked ) { 3311 3312 // Keep an empty list if we have data for future add calls 3313 if ( memory ) { 3314 list = []; 3315 3316 // Otherwise, this object is spent 3317 } else { 3318 list = ""; 3319 } 3320 } 3321 }, 3322 3323 // Actual Callbacks object 3324 self = { 3325 3326 // Add a callback or a collection of callbacks to the list 3327 add: function() { 3328 if ( list ) { 3329 3330 // If we have memory from a past run, we should fire after adding 3331 if ( memory && !firing ) { 3332 firingIndex = list.length - 1; 3333 queue.push( memory ); 3334 } 3335 3336 ( function add( args ) { 3337 jQuery.each( args, function( _, arg ) { 3338 if ( isFunction( arg ) ) { 3339 if ( !options.unique || !self.has( arg ) ) { 3340 list.push( arg ); 3341 } 3342 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 3343 3344 // Inspect recursively 3345 add( arg ); 3346 } 3347 } ); 3348 } )( arguments ); 3349 3350 if ( memory && !firing ) { 3351 fire(); 3352 } 3353 } 3354 return this; 3355 }, 3356 3357 // Remove a callback from the list 3358 remove: function() { 3359 jQuery.each( arguments, function( _, arg ) { 3360 var index; 3361 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 3362 list.splice( index, 1 ); 3363 3364 // Handle firing indexes 3365 if ( index <= firingIndex ) { 3366 firingIndex--; 3367 } 3368 } 3369 } ); 3370 return this; 3371 }, 3372 3373 // Check if a given callback is in the list. 3374 // If no argument is given, return whether or not list has callbacks attached. 3375 has: function( fn ) { 3376 return fn ? 3377 jQuery.inArray( fn, list ) > -1 : 3378 list.length > 0; 3379 }, 3380 3381 // Remove all callbacks from the list 3382 empty: function() { 3383 if ( list ) { 3384 list = []; 3385 } 3386 return this; 3387 }, 3388 3389 // Disable .fire and .add 3390 // Abort any current/pending executions 3391 // Clear all callbacks and values 3392 disable: function() { 3393 locked = queue = []; 3394 list = memory = ""; 3395 return this; 3396 }, 3397 disabled: function() { 3398 return !list; 3399 }, 3400 3401 // Disable .fire 3402 // Also disable .add unless we have memory (since it would have no effect) 3403 // Abort any pending executions 3404 lock: function() { 3405 locked = queue = []; 3406 if ( !memory && !firing ) { 3407 list = memory = ""; 3408 } 3409 return this; 3410 }, 3411 locked: function() { 3412 return !!locked; 3413 }, 3414 3415 // Call all callbacks with the given context and arguments 3416 fireWith: function( context, args ) { 3417 if ( !locked ) { 3418 args = args || []; 3419 args = [ context, args.slice ? args.slice() : args ]; 3420 queue.push( args ); 3421 if ( !firing ) { 3422 fire(); 3423 } 3424 } 3425 return this; 3426 }, 3427 3428 // Call all the callbacks with the given arguments 3429 fire: function() { 3430 self.fireWith( this, arguments ); 3431 return this; 3432 }, 3433 3434 // To know if the callbacks have already been called at least once 3435 fired: function() { 3436 return !!fired; 3437 } 3438 }; 3439 3440 return self; 3441}; 3442 3443 3444function Identity( v ) { 3445 return v; 3446} 3447function Thrower( ex ) { 3448 throw ex; 3449} 3450 3451function adoptValue( value, resolve, reject, noValue ) { 3452 var method; 3453 3454 try { 3455 3456 // Check for promise aspect first to privilege synchronous behavior 3457 if ( value && isFunction( ( method = value.promise ) ) ) { 3458 method.call( value ).done( resolve ).fail( reject ); 3459 3460 // Other thenables 3461 } else if ( value && isFunction( ( method = value.then ) ) ) { 3462 method.call( value, resolve, reject ); 3463 3464 // Other non-thenables 3465 } else { 3466 3467 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 3468 // * false: [ value ].slice( 0 ) => resolve( value ) 3469 // * true: [ value ].slice( 1 ) => resolve() 3470 resolve.apply( undefined, [ value ].slice( noValue ) ); 3471 } 3472 3473 // For Promises/A+, convert exceptions into rejections 3474 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 3475 // Deferred#then to conditionally suppress rejection. 3476 } catch ( value ) { 3477 3478 // Support: Android 4.0 only 3479 // Strict mode functions invoked without .call/.apply get global-object context 3480 reject.apply( undefined, [ value ] ); 3481 } 3482} 3483 3484jQuery.extend( { 3485 3486 Deferred: function( func ) { 3487 var tuples = [ 3488 3489 // action, add listener, callbacks, 3490 // ... .then handlers, argument index, [final state] 3491 [ "notify", "progress", jQuery.Callbacks( "memory" ), 3492 jQuery.Callbacks( "memory" ), 2 ], 3493 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 3494 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 3495 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 3496 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 3497 ], 3498 state = "pending", 3499 promise = { 3500 state: function() { 3501 return state; 3502 }, 3503 always: function() { 3504 deferred.done( arguments ).fail( arguments ); 3505 return this; 3506 }, 3507 "catch": function( fn ) {
vendor: 15,167 bytes, lines 3508-4099
3508 return promise.then( null, fn ); 3509 }, 3510 3511 // Keep pipe for back-compat 3512 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 3513 var fns = arguments; 3514 3515 return jQuery.Deferred( function( newDefer ) { 3516 jQuery.each( tuples, function( i, tuple ) { 3517 3518 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 3519 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 3520 3521 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 3522 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 3523 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 3524 deferred[ tuple[ 1 ] ]( function() { 3525 var returned = fn && fn.apply( this, arguments ); 3526 if ( returned && isFunction( returned.promise ) ) { 3527 returned.promise() 3528 .progress( newDefer.notify ) 3529 .done( newDefer.resolve ) 3530 .fail( newDefer.reject ); 3531 } else { 3532 newDefer[ tuple[ 0 ] + "With" ]( 3533 this, 3534 fn ? [ returned ] : arguments 3535 ); 3536 } 3537 } ); 3538 } ); 3539 fns = null; 3540 } ).promise(); 3541 }, 3542 then: function( onFulfilled, onRejected, onProgress ) { 3543 var maxDepth = 0; 3544 function resolve( depth, deferred, handler, special ) { 3545 return function() { 3546 var that = this, 3547 args = arguments, 3548 mightThrow = function() { 3549 var returned, then; 3550 3551 // Support: Promises/A+ section 2.3.3.3.3 3552 // https://promisesaplus.com/#point-59 3553 // Ignore double-resolution attempts 3554 if ( depth < maxDepth ) { 3555 return; 3556 } 3557 3558 returned = handler.apply( that, args ); 3559 3560 // Support: Promises/A+ section 2.3.1 3561 // https://promisesaplus.com/#point-48 3562 if ( returned === deferred.promise() ) { 3563 throw new TypeError( "Thenable self-resolution" ); 3564 } 3565 3566 // Support: Promises/A+ sections 2.3.3.1, 3.5 3567 // https://promisesaplus.com/#point-54 3568 // https://promisesaplus.com/#point-75 3569 // Retrieve `then` only once 3570 then = returned && 3571 3572 // Support: Promises/A+ section 2.3.4 3573 // https://promisesaplus.com/#point-64 3574 // Only check objects and functions for thenability 3575 ( typeof returned === "object" || 3576 typeof returned === "function" ) && 3577 returned.then; 3578 3579 // Handle a returned thenable 3580 if ( isFunction( then ) ) { 3581 3582 // Special processors (notify) just wait for resolution 3583 if ( special ) { 3584 then.call( 3585 returned, 3586 resolve( maxDepth, deferred, Identity, special ), 3587 resolve( maxDepth, deferred, Thrower, special ) 3588 ); 3589 3590 // Normal processors (resolve) also hook into progress 3591 } else { 3592 3593 // ...and disregard older resolution values 3594 maxDepth++; 3595 3596 then.call( 3597 returned, 3598 resolve( maxDepth, deferred, Identity, special ), 3599 resolve( maxDepth, deferred, Thrower, special ), 3600 resolve( maxDepth, deferred, Identity, 3601 deferred.notifyWith ) 3602 ); 3603 } 3604 3605 // Handle all other returned values 3606 } else { 3607 3608 // Only substitute handlers pass on context 3609 // and multiple values (non-spec behavior) 3610 if ( handler !== Identity ) { 3611 that = undefined; 3612 args = [ returned ]; 3613 } 3614 3615 // Process the value(s) 3616 // Default process is resolve 3617 ( special || deferred.resolveWith )( that, args ); 3618 } 3619 }, 3620 3621 // Only normal processors (resolve) catch and reject exceptions 3622 process = special ? 3623 mightThrow : 3624 function() { 3625 try { 3626 mightThrow(); 3627 } catch ( e ) { 3628 3629 if ( jQuery.Deferred.exceptionHook ) { 3630 jQuery.Deferred.exceptionHook( e, 3631 process.stackTrace ); 3632 } 3633 3634 // Support: Promises/A+ section 2.3.3.3.4.1 3635 // https://promisesaplus.com/#point-61 3636 // Ignore post-resolution exceptions 3637 if ( depth + 1 >= maxDepth ) { 3638 3639 // Only substitute handlers pass on context 3640 // and multiple values (non-spec behavior) 3641 if ( handler !== Thrower ) { 3642 that = undefined; 3643 args = [ e ]; 3644 } 3645 3646 deferred.rejectWith( that, args ); 3647 } 3648 } 3649 }; 3650 3651 // Support: Promises/A+ section 2.3.3.3.1 3652 // https://promisesaplus.com/#point-57 3653 // Re-resolve promises immediately to dodge false rejection from 3654 // subsequent errors 3655 if ( depth ) { 3656 process(); 3657 } else { 3658 3659 // Call an optional hook to record the stack, in case of exception 3660 // since it's otherwise lost when execution goes async 3661 if ( jQuery.Deferred.getStackHook ) { 3662 process.stackTrace = jQuery.Deferred.getStackHook(); 3663 } 3664 window.setTimeout( process ); 3665 } 3666 }; 3667 } 3668 3669 return jQuery.Deferred( function( newDefer ) { 3670 3671 // progress_handlers.add( ... ) 3672 tuples[ 0 ][ 3 ].add( 3673 resolve( 3674 0, 3675 newDefer, 3676 isFunction( onProgress ) ? 3677 onProgress : 3678 Identity, 3679 newDefer.notifyWith 3680 ) 3681 ); 3682 3683 // fulfilled_handlers.add( ... ) 3684 tuples[ 1 ][ 3 ].add( 3685 resolve( 3686 0, 3687 newDefer, 3688 isFunction( onFulfilled ) ? 3689 onFulfilled : 3690 Identity 3691 ) 3692 ); 3693 3694 // rejected_handlers.add( ... ) 3695 tuples[ 2 ][ 3 ].add( 3696 resolve( 3697 0, 3698 newDefer, 3699 isFunction( onRejected ) ? 3700 onRejected : 3701 Thrower 3702 ) 3703 ); 3704 } ).promise(); 3705 }, 3706 3707 // Get a promise for this deferred 3708 // If obj is provided, the promise aspect is added to the object 3709 promise: function( obj ) { 3710 return obj != null ? jQuery.extend( obj, promise ) : promise; 3711 } 3712 }, 3713 deferred = {}; 3714 3715 // Add list-specific methods 3716 jQuery.each( tuples, function( i, tuple ) { 3717 var list = tuple[ 2 ], 3718 stateString = tuple[ 5 ]; 3719 3720 // promise.progress = list.add 3721 // promise.done = list.add 3722 // promise.fail = list.add 3723 promise[ tuple[ 1 ] ] = list.add; 3724 3725 // Handle state 3726 if ( stateString ) { 3727 list.add( 3728 function() { 3729 3730 // state = "resolved" (i.e., fulfilled) 3731 // state = "rejected" 3732 state = stateString; 3733 }, 3734 3735 // rejected_callbacks.disable 3736 // fulfilled_callbacks.disable 3737 tuples[ 3 - i ][ 2 ].disable, 3738 3739 // rejected_handlers.disable 3740 // fulfilled_handlers.disable 3741 tuples[ 3 - i ][ 3 ].disable, 3742 3743 // progress_callbacks.lock 3744 tuples[ 0 ][ 2 ].lock, 3745 3746 // progress_handlers.lock 3747 tuples[ 0 ][ 3 ].lock 3748 ); 3749 } 3750 3751 // progress_handlers.fire 3752 // fulfilled_handlers.fire 3753 // rejected_handlers.fire 3754 list.add( tuple[ 3 ].fire ); 3755 3756 // deferred.notify = function() { deferred.notifyWith(...) } 3757 // deferred.resolve = function() { deferred.resolveWith(...) } 3758 // deferred.reject = function() { deferred.rejectWith(...) } 3759 deferred[ tuple[ 0 ] ] = function() { 3760 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 3761 return this; 3762 }; 3763 3764 // deferred.notifyWith = list.fireWith 3765 // deferred.resolveWith = list.fireWith 3766 // deferred.rejectWith = list.fireWith 3767 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 3768 } ); 3769 3770 // Make the deferred a promise 3771 promise.promise( deferred ); 3772 3773 // Call given func if any 3774 if ( func ) { 3775 func.call( deferred, deferred ); 3776 } 3777 3778 // All done! 3779 return deferred; 3780 }, 3781 3782 // Deferred helper 3783 when: function( singleValue ) { 3784 var 3785 3786 // count of uncompleted subordinates 3787 remaining = arguments.length, 3788 3789 // count of unprocessed arguments 3790 i = remaining, 3791 3792 // subordinate fulfillment data 3793 resolveContexts = Array( i ), 3794 resolveValues = slice.call( arguments ), 3795 3796 // the master Deferred 3797 master = jQuery.Deferred(), 3798 3799 // subordinate callback factory 3800 updateFunc = function( i ) { 3801 return function( value ) { 3802 resolveContexts[ i ] = this; 3803 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 3804 if ( !( --remaining ) ) { 3805 master.resolveWith( resolveContexts, resolveValues ); 3806 } 3807 }; 3808 }; 3809 3810 // Single- and empty arguments are adopted like Promise.resolve 3811 if ( remaining <= 1 ) { 3812 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, 3813 !remaining ); 3814 3815 // Use .then() to unwrap secondary thenables (cf. gh-3000) 3816 if ( master.state() === "pending" || 3817 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 3818 3819 return master.then(); 3820 } 3821 } 3822 3823 // Multiple arguments are aggregated like Promise.all array elements 3824 while ( i-- ) { 3825 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); 3826 } 3827 3828 return master.promise(); 3829 } 3830} ); 3831 3832 3833// These usually indicate a programmer mistake during development, 3834// warn about them ASAP rather than swallowing them by default. 3835var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 3836 3837jQuery.Deferred.exceptionHook = function( error, stack ) { 3838 3839 // Support: IE 8 - 9 only 3840 // Console exists when dev tools are open, which can happen at any time 3841 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 3842 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 3843 } 3844}; 3845 3846 3847 3848 3849jQuery.readyException = function( error ) { 3850 window.setTimeout( function() { 3851 throw error; 3852 } ); 3853}; 3854 3855 3856 3857 3858// The deferred used on DOM ready 3859var readyList = jQuery.Deferred(); 3860 3861jQuery.fn.ready = function( fn ) { 3862 3863 readyList 3864 .then( fn ) 3865 3866 // Wrap jQuery.readyException in a function so that the lookup 3867 // happens at the time of error handling instead of callback 3868 // registration. 3869 .catch( function( error ) { 3870 jQuery.readyException( error ); 3871 } ); 3872 3873 return this; 3874}; 3875 3876jQuery.extend( { 3877 3878 // Is the DOM ready to be used? Set to true once it occurs. 3879 isReady: false, 3880 3881 // A counter to track how many items to wait for before 3882 // the ready event fires. See #6781 3883 readyWait: 1, 3884 3885 // Handle when the DOM is ready 3886 ready: function( wait ) { 3887 3888 // Abort if there are pending holds or we're already ready 3889 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 3890 return; 3891 } 3892 3893 // Remember that the DOM is ready 3894 jQuery.isReady = true; 3895 3896 // If a normal DOM Ready event fired, decrement, and wait if need be 3897 if ( wait !== true && --jQuery.readyWait > 0 ) { 3898 return; 3899 } 3900 3901 // If there are functions bound, to execute 3902 readyList.resolveWith( document, [ jQuery ] ); 3903 } 3904} ); 3905 3906jQuery.ready.then = readyList.then; 3907 3908// The ready event handler and self cleanup method 3909function completed() { 3910 document.removeEventListener( "DOMContentLoaded", completed ); 3911 window.removeEventListener( "load", completed ); 3912 jQuery.ready(); 3913} 3914 3915// Catch cases where $(document).ready() is called 3916// after the browser event has already occurred. 3917// Support: IE <=9 - 10 only 3918// Older IE sometimes signals "interactive" too soon 3919if ( document.readyState === "complete" || 3920 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 3921 3922 // Handle it asynchronously to allow scripts the opportunity to delay ready 3923 window.setTimeout( jQuery.ready ); 3924 3925} else { 3926 3927 // Use the handy event callback 3928 document.addEventListener( "DOMContentLoaded", completed ); 3929 3930 // A fallback to window.onload, that will always work 3931 window.addEventListener( "load", completed ); 3932} 3933 3934 3935 3936 3937// Multifunctional method to get and set values of a collection 3938// The value/s can optionally be executed if it's a function 3939var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 3940 var i = 0, 3941 len = elems.length, 3942 bulk = key == null; 3943 3944 // Sets many values 3945 if ( toType( key ) === "object" ) { 3946 chainable = true; 3947 for ( i in key ) { 3948 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 3949 } 3950 3951 // Sets one value 3952 } else if ( value !== undefined ) { 3953 chainable = true; 3954 3955 if ( !isFunction( value ) ) { 3956 raw = true; 3957 } 3958 3959 if ( bulk ) { 3960 3961 // Bulk operations run against the entire set 3962 if ( raw ) { 3963 fn.call( elems, value ); 3964 fn = null; 3965 3966 // ...except when executing function values 3967 } else { 3968 bulk = fn; 3969 fn = function( elem, key, value ) { 3970 return bulk.call( jQuery( elem ), value ); 3971 }; 3972 } 3973 } 3974 3975 if ( fn ) { 3976 for ( ; i < len; i++ ) { 3977 fn( 3978 elems[ i ], key, raw ? 3979 value : 3980 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 3981 ); 3982 } 3983 } 3984 } 3985 3986 if ( chainable ) { 3987 return elems; 3988 } 3989 3990 // Gets 3991 if ( bulk ) { 3992 return fn.call( elems ); 3993 } 3994 3995 return len ? fn( elems[ 0 ], key ) : emptyGet; 3996}; 3997 3998 3999// Matches dashed string for camelizing 4000var rmsPrefix = /^-ms-/, 4001 rdashAlpha = /-([a-z])/g; 4002 4003// Used by camelCase as callback to replace() 4004function fcamelCase( all, letter ) { 4005 return letter.toUpperCase(); 4006} 4007 4008// Convert dashed to camelCase; used by the css and data modules 4009// Support: IE <=9 - 11, Edge 12 - 15 4010// Microsoft forgot to hump their vendor prefix (#9572) 4011function camelCase( string ) { 4012 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 4013} 4014var acceptData = function( owner ) { 4015 4016 // Accepts only: 4017 // - Node 4018 // - Node.ELEMENT_NODE 4019 // - Node.DOCUMENT_NODE 4020 // - Object 4021 // - Any 4022 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 4023}; 4024 4025 4026 4027 4028function Data() { 4029 this.expando = jQuery.expando + Data.uid++; 4030} 4031 4032Data.uid = 1; 4033 4034Data.prototype = { 4035 4036 cache: function( owner ) { 4037 4038 // Check if the owner object already has a cache 4039 var value = owner[ this.expando ]; 4040 4041 // If not, create one 4042 if ( !value ) { 4043 value = {}; 4044 4045 // We can accept data for non-element nodes in modern browsers, 4046 // but we should not, see #8335. 4047 // Always return an empty object. 4048 if ( acceptData( owner ) ) { 4049 4050 // If it is a node unlikely to be stringify-ed or looped over 4051 // use plain assignment 4052 if ( owner.nodeType ) { 4053 owner[ this.expando ] = value; 4054 4055 // Otherwise secure it in a non-enumerable property 4056 // configurable must be true to allow the property to be 4057 // deleted when data is removed 4058 } else { 4059 Object.defineProperty( owner, this.expando, { 4060 value: value, 4061 configurable: true 4062 } ); 4063 } 4064 } 4065 } 4066 4067 return value; 4068 }, 4069 set: function( owner, data, value ) { 4070 var prop, 4071 cache = this.cache( owner ); 4072 4073 // Handle: [ owner, key, value ] args 4074 // Always use camelCase key (gh-2257) 4075 if ( typeof data === "string" ) { 4076 cache[ camelCase( data ) ] = value; 4077 4078 // Handle: [ owner, { properties } ] args 4079 } else { 4080 4081 // Copy the properties one-by-one to the cache object 4082 for ( prop in data ) { 4083 cache[ camelCase( prop ) ] = data[ prop ]; 4084 } 4085 } 4086 return cache; 4087 }, 4088 get: function( owner, key ) { 4089 return key === undefined ? 4090 this.cache( owner ) : 4091 4092 // Always use camelCase key (gh-2257) 4093 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 4094 }, 4095 access: function( owner, key, value ) { 4096 4097 // In cases where either: 4098 // 4099 // 1. No key was specified
vendor: 10,628 bytes, lines 4100-4531
4100 // 2. A string key was specified, but no value provided 4101 // 4102 // Take the "read" path and allow the get method to determine 4103 // which value to return, respectively either: 4104 // 4105 // 1. The entire cache object 4106 // 2. The data stored at the key 4107 // 4108 if ( key === undefined || 4109 ( ( key && typeof key === "string" ) && value === undefined ) ) { 4110 4111 return this.get( owner, key ); 4112 } 4113 4114 // When the key is not a string, or both a key and value 4115 // are specified, set or extend (existing objects) with either: 4116 // 4117 // 1. An object of properties 4118 // 2. A key and value 4119 // 4120 this.set( owner, key, value ); 4121 4122 // Since the "set" path can have two possible entry points 4123 // return the expected data based on which path was taken[*] 4124 return value !== undefined ? value : key; 4125 }, 4126 remove: function( owner, key ) { 4127 var i, 4128 cache = owner[ this.expando ]; 4129 4130 if ( cache === undefined ) { 4131 return; 4132 } 4133 4134 if ( key !== undefined ) { 4135 4136 // Support array or space separated string of keys 4137 if ( Array.isArray( key ) ) { 4138 4139 // If key is an array of keys... 4140 // We always set camelCase keys, so remove that. 4141 key = key.map( camelCase ); 4142 } else { 4143 key = camelCase( key ); 4144 4145 // If a key with the spaces exists, use it. 4146 // Otherwise, create an array by matching non-whitespace 4147 key = key in cache ? 4148 [ key ] : 4149 ( key.match( rnothtmlwhite ) || [] ); 4150 } 4151 4152 i = key.length; 4153 4154 while ( i-- ) { 4155 delete cache[ key[ i ] ]; 4156 } 4157 } 4158 4159 // Remove the expando if there's no more data 4160 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 4161 4162 // Support: Chrome <=35 - 45 4163 // Webkit & Blink performance suffers when deleting properties 4164 // from DOM nodes, so set to undefined instead 4165 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 4166 if ( owner.nodeType ) { 4167 owner[ this.expando ] = undefined; 4168 } else { 4169 delete owner[ this.expando ]; 4170 } 4171 } 4172 }, 4173 hasData: function( owner ) { 4174 var cache = owner[ this.expando ]; 4175 return cache !== undefined && !jQuery.isEmptyObject( cache ); 4176 } 4177}; 4178var dataPriv = new Data(); 4179 4180var dataUser = new Data(); 4181 4182 4183 4184// Implementation Summary 4185// 4186// 1. Enforce API surface and semantic compatibility with 1.9.x branch 4187// 2. Improve the module's maintainability by reducing the storage 4188// paths to a single mechanism. 4189// 3. Use the same single mechanism to support "private" and "user" data. 4190// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 4191// 5. Avoid exposing implementation details on user objects (eg. expando properties) 4192// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 4193 4194var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4195 rmultiDash = /[A-Z]/g; 4196 4197function getData( data ) { 4198 if ( data === "true" ) { 4199 return true; 4200 } 4201 4202 if ( data === "false" ) { 4203 return false; 4204 } 4205 4206 if ( data === "null" ) { 4207 return null; 4208 } 4209 4210 // Only convert to a number if it doesn't change the string 4211 if ( data === +data + "" ) { 4212 return +data; 4213 } 4214 4215 if ( rbrace.test( data ) ) { 4216 return JSON.parse( data ); 4217 } 4218 4219 return data; 4220} 4221 4222function dataAttr( elem, key, data ) { 4223 var name; 4224 4225 // If nothing was found internally, try to fetch any 4226 // data from the HTML5 data-* attribute 4227 if ( data === undefined && elem.nodeType === 1 ) { 4228 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 4229 data = elem.getAttribute( name ); 4230 4231 if ( typeof data === "string" ) { 4232 try { 4233 data = getData( data ); 4234 } catch ( e ) {} 4235 4236 // Make sure we set the data so it isn't changed later 4237 dataUser.set( elem, key, data ); 4238 } else { 4239 data = undefined; 4240 } 4241 } 4242 return data; 4243} 4244 4245jQuery.extend( { 4246 hasData: function( elem ) { 4247 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 4248 }, 4249 4250 data: function( elem, name, data ) { 4251 return dataUser.access( elem, name, data ); 4252 }, 4253 4254 removeData: function( elem, name ) { 4255 dataUser.remove( elem, name ); 4256 }, 4257 4258 // TODO: Now that all calls to _data and _removeData have been replaced 4259 // with direct calls to dataPriv methods, these can be deprecated. 4260 _data: function( elem, name, data ) { 4261 return dataPriv.access( elem, name, data ); 4262 }, 4263 4264 _removeData: function( elem, name ) { 4265 dataPriv.remove( elem, name ); 4266 } 4267} ); 4268 4269jQuery.fn.extend( { 4270 data: function( key, value ) { 4271 var i, name, data, 4272 elem = this[ 0 ], 4273 attrs = elem && elem.attributes; 4274 4275 // Gets all values 4276 if ( key === undefined ) { 4277 if ( this.length ) { 4278 data = dataUser.get( elem ); 4279 4280 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 4281 i = attrs.length; 4282 while ( i-- ) { 4283 4284 // Support: IE 11 only 4285 // The attrs elements can be null (#14894) 4286 if ( attrs[ i ] ) { 4287 name = attrs[ i ].name; 4288 if ( name.indexOf( "data-" ) === 0 ) { 4289 name = camelCase( name.slice( 5 ) ); 4290 dataAttr( elem, name, data[ name ] ); 4291 } 4292 } 4293 } 4294 dataPriv.set( elem, "hasDataAttrs", true ); 4295 } 4296 } 4297 4298 return data; 4299 } 4300 4301 // Sets multiple values 4302 if ( typeof key === "object" ) { 4303 return this.each( function() { 4304 dataUser.set( this, key ); 4305 } ); 4306 } 4307 4308 return access( this, function( value ) { 4309 var data; 4310 4311 // The calling jQuery object (element matches) is not empty 4312 // (and therefore has an element appears at this[ 0 ]) and the 4313 // `value` parameter was not undefined. An empty jQuery object 4314 // will result in `undefined` for elem = this[ 0 ] which will 4315 // throw an exception if an attempt to read a data cache is made. 4316 if ( elem && value === undefined ) { 4317 4318 // Attempt to get data from the cache 4319 // The key will always be camelCased in Data 4320 data = dataUser.get( elem, key ); 4321 if ( data !== undefined ) { 4322 return data; 4323 } 4324 4325 // Attempt to "discover" the data in 4326 // HTML5 custom data-* attrs 4327 data = dataAttr( elem, key ); 4328 if ( data !== undefined ) { 4329 return data; 4330 } 4331 4332 // We tried really hard, but the data doesn't exist. 4333 return; 4334 } 4335 4336 // Set the data... 4337 this.each( function() { 4338 4339 // We always store the camelCased key 4340 dataUser.set( this, key, value ); 4341 } ); 4342 }, null, value, arguments.length > 1, null, true ); 4343 }, 4344 4345 removeData: function( key ) { 4346 return this.each( function() { 4347 dataUser.remove( this, key ); 4348 } ); 4349 } 4350} ); 4351 4352 4353jQuery.extend( { 4354 queue: function( elem, type, data ) { 4355 var queue; 4356 4357 if ( elem ) { 4358 type = ( type || "fx" ) + "queue"; 4359 queue = dataPriv.get( elem, type ); 4360 4361 // Speed up dequeue by getting out quickly if this is just a lookup 4362 if ( data ) { 4363 if ( !queue || Array.isArray( data ) ) { 4364 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 4365 } else { 4366 queue.push( data ); 4367 } 4368 } 4369 return queue || []; 4370 } 4371 }, 4372 4373 dequeue: function( elem, type ) { 4374 type = type || "fx"; 4375 4376 var queue = jQuery.queue( elem, type ), 4377 startLength = queue.length, 4378 fn = queue.shift(), 4379 hooks = jQuery._queueHooks( elem, type ), 4380 next = function() { 4381 jQuery.dequeue( elem, type ); 4382 }; 4383 4384 // If the fx queue is dequeued, always remove the progress sentinel 4385 if ( fn === "inprogress" ) { 4386 fn = queue.shift(); 4387 startLength--; 4388 } 4389 4390 if ( fn ) { 4391 4392 // Add a progress sentinel to prevent the fx queue from being 4393 // automatically dequeued 4394 if ( type === "fx" ) { 4395 queue.unshift( "inprogress" ); 4396 } 4397 4398 // Clear up the last queue stop function 4399 delete hooks.stop; 4400 fn.call( elem, next, hooks ); 4401 } 4402 4403 if ( !startLength && hooks ) { 4404 hooks.empty.fire(); 4405 } 4406 }, 4407 4408 // Not public - generate a queueHooks object, or return the current one 4409 _queueHooks: function( elem, type ) { 4410 var key = type + "queueHooks"; 4411 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 4412 empty: jQuery.Callbacks( "once memory" ).add( function() { 4413 dataPriv.remove( elem, [ type + "queue", key ] ); 4414 } ) 4415 } ); 4416 } 4417} ); 4418 4419jQuery.fn.extend( { 4420 queue: function( type, data ) { 4421 var setter = 2; 4422 4423 if ( typeof type !== "string" ) { 4424 data = type; 4425 type = "fx"; 4426 setter--; 4427 } 4428 4429 if ( arguments.length < setter ) { 4430 return jQuery.queue( this[ 0 ], type ); 4431 } 4432 4433 return data === undefined ? 4434 this : 4435 this.each( function() { 4436 var queue = jQuery.queue( this, type, data ); 4437 4438 // Ensure a hooks for this queue 4439 jQuery._queueHooks( this, type ); 4440 4441 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 4442 jQuery.dequeue( this, type ); 4443 } 4444 } ); 4445 }, 4446 dequeue: function( type ) { 4447 return this.each( function() { 4448 jQuery.dequeue( this, type ); 4449 } ); 4450 }, 4451 clearQueue: function( type ) { 4452 return this.queue( type || "fx", [] ); 4453 }, 4454 4455 // Get a promise resolved when queues of a certain type 4456 // are emptied (fx is the type by default) 4457 promise: function( type, obj ) { 4458 var tmp, 4459 count = 1, 4460 defer = jQuery.Deferred(), 4461 elements = this, 4462 i = this.length, 4463 resolve = function() { 4464 if ( !( --count ) ) { 4465 defer.resolveWith( elements, [ elements ] ); 4466 } 4467 }; 4468 4469 if ( typeof type !== "string" ) { 4470 obj = type; 4471 type = undefined; 4472 } 4473 type = type || "fx"; 4474 4475 while ( i-- ) { 4476 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 4477 if ( tmp && tmp.empty ) { 4478 count++; 4479 tmp.empty.add( resolve ); 4480 } 4481 } 4482 resolve(); 4483 return defer.promise( obj ); 4484 } 4485} ); 4486var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 4487 4488var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 4489 4490 4491var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 4492 4493var documentElement = document.documentElement; 4494 4495 4496 4497 var isAttached = function( elem ) { 4498 return jQuery.contains( elem.ownerDocument, elem ); 4499 }, 4500 composed = { composed: true }; 4501 4502 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 4503 // Check attachment across shadow DOM boundaries when possible (gh-3504) 4504 // Support: iOS 10.0-10.2 only 4505 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 4506 // leading to errors. We need to check for `getRootNode`. 4507 if ( documentElement.getRootNode ) { 4508 isAttached = function( elem ) { 4509 return jQuery.contains( elem.ownerDocument, elem ) || 4510 elem.getRootNode( composed ) === elem.ownerDocument; 4511 }; 4512 } 4513var isHiddenWithinTree = function( elem, el ) { 4514 4515 // isHiddenWithinTree might be called from jQuery#filter function; 4516 // in that case, element will be second argument 4517 elem = el || elem; 4518 4519 // Inline style trumps all 4520 return elem.style.display === "none" || 4521 elem.style.display === "" && 4522 4523 // Otherwise, check computed style 4524 // Support: Firefox <=43 - 45 4525 // Disconnected elements can have computed display: none, so first confirm that elem is 4526 // in the document. 4527 isAttached( elem ) && 4528 4529 jQuery.css( elem, "display" ) === "none"; 4530 }; 4531
vendor: 2,487 bytes, lines 4532-4629
4532var swap = function( elem, options, callback, args ) { 4533 var ret, name, 4534 old = {}; 4535 4536 // Remember the old values, and insert the new ones 4537 for ( name in options ) { 4538 old[ name ] = elem.style[ name ]; 4539 elem.style[ name ] = options[ name ]; 4540 } 4541 4542 ret = callback.apply( elem, args || [] ); 4543 4544 // Revert the old values 4545 for ( name in options ) { 4546 elem.style[ name ] = old[ name ]; 4547 } 4548 4549 return ret; 4550}; 4551 4552 4553 4554 4555function adjustCSS( elem, prop, valueParts, tween ) { 4556 var adjusted, scale, 4557 maxIterations = 20, 4558 currentValue = tween ? 4559 function() { 4560 return tween.cur(); 4561 } : 4562 function() { 4563 return jQuery.css( elem, prop, "" ); 4564 }, 4565 initial = currentValue(), 4566 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 4567 4568 // Starting value computation is required for potential unit mismatches 4569 initialInUnit = elem.nodeType && 4570 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 4571 rcssNum.exec( jQuery.css( elem, prop ) ); 4572 4573 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 4574 4575 // Support: Firefox <=54 4576 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 4577 initial = initial / 2; 4578 4579 // Trust units reported by jQuery.css 4580 unit = unit || initialInUnit[ 3 ]; 4581 4582 // Iteratively approximate from a nonzero starting point 4583 initialInUnit = +initial || 1; 4584 4585 while ( maxIterations-- ) { 4586 4587 // Evaluate and update our best guess (doubling guesses that zero out). 4588 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 4589 jQuery.style( elem, prop, initialInUnit + unit ); 4590 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 4591 maxIterations = 0; 4592 } 4593 initialInUnit = initialInUnit / scale; 4594 4595 } 4596 4597 initialInUnit = initialInUnit * 2; 4598 jQuery.style( elem, prop, initialInUnit + unit ); 4599 4600 // Make sure we update the tween properties later on 4601 valueParts = valueParts || []; 4602 } 4603 4604 if ( valueParts ) { 4605 initialInUnit = +initialInUnit || +initial || 0; 4606 4607 // Apply relative offset (+=/-=) if specified 4608 adjusted = valueParts[ 1 ] ? 4609 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 4610 +valueParts[ 2 ]; 4611 if ( tween ) { 4612 tween.unit = unit; 4613 tween.start = initialInUnit; 4614 tween.end = adjusted; 4615 } 4616 } 4617 return adjusted; 4618} 4619 4620 4621var defaultDisplayMap = {}; 4622 4623function getDefaultDisplay( elem ) { 4624 var temp, 4625 doc = elem.ownerDocument, 4626 nodeName = elem.nodeName, 4627 display = defaultDisplayMap[ nodeName ]; 4628 4629 if ( display ) {
vendor: 4,818 bytes, lines 4630-4825
4630 return display; 4631 } 4632 4633 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 4634 display = jQuery.css( temp, "display" ); 4635 4636 temp.parentNode.removeChild( temp ); 4637 4638 if ( display === "none" ) { 4639 display = "block"; 4640 } 4641 defaultDisplayMap[ nodeName ] = display; 4642 4643 return display; 4644} 4645 4646function showHide( elements, show ) { 4647 var display, elem, 4648 values = [], 4649 index = 0, 4650 length = elements.length; 4651 4652 // Determine new display value for elements that need to change 4653 for ( ; index < length; index++ ) { 4654 elem = elements[ index ]; 4655 if ( !elem.style ) { 4656 continue; 4657 } 4658 4659 display = elem.style.display; 4660 if ( show ) { 4661 4662 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 4663 // check is required in this first loop unless we have a nonempty display value (either 4664 // inline or about-to-be-restored) 4665 if ( display === "none" ) { 4666 values[ index ] = dataPriv.get( elem, "display" ) || null; 4667 if ( !values[ index ] ) { 4668 elem.style.display = ""; 4669 } 4670 } 4671 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 4672 values[ index ] = getDefaultDisplay( elem ); 4673 } 4674 } else { 4675 if ( display !== "none" ) { 4676 values[ index ] = "none"; 4677 4678 // Remember what we're overwriting 4679 dataPriv.set( elem, "display", display ); 4680 } 4681 } 4682 } 4683 4684 // Set the display of the elements in a second loop to avoid constant reflow 4685 for ( index = 0; index < length; index++ ) { 4686 if ( values[ index ] != null ) { 4687 elements[ index ].style.display = values[ index ]; 4688 } 4689 } 4690 4691 return elements; 4692} 4693 4694jQuery.fn.extend( { 4695 show: function() { 4696 return showHide( this, true ); 4697 }, 4698 hide: function() { 4699 return showHide( this ); 4700 }, 4701 toggle: function( state ) { 4702 if ( typeof state === "boolean" ) { 4703 return state ? this.show() : this.hide(); 4704 } 4705 4706 return this.each( function() { 4707 if ( isHiddenWithinTree( this ) ) { 4708 jQuery( this ).show(); 4709 } else { 4710 jQuery( this ).hide(); 4711 } 4712 } ); 4713 } 4714} ); 4715var rcheckableType = ( /^(?:checkbox|radio)$/i ); 4716 4717var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 4718 4719var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 4720 4721 4722 4723// We have to close these tags to support XHTML (#13200) 4724var wrapMap = { 4725 4726 // Support: IE <=9 only 4727 option: [ 1, "<select multiple='multiple'>", "</select>" ], 4728 4729 // XHTML parsers do not magically insert elements in the 4730 // same way that tag soup parsers do. So we cannot shorten 4731 // this by omitting <tbody> or other required elements. 4732 thead: [ 1, "<table>", "</table>" ], 4733 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 4734 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 4735 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 4736 4737 _default: [ 0, "", "" ] 4738}; 4739 4740// Support: IE <=9 only 4741wrapMap.optgroup = wrapMap.option; 4742 4743wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 4744wrapMap.th = wrapMap.td; 4745 4746 4747function getAll( context, tag ) { 4748 4749 // Support: IE <=9 - 11 only 4750 // Use typeof to avoid zero-argument method invocation on host objects (#15151) 4751 var ret; 4752 4753 if ( typeof context.getElementsByTagName !== "undefined" ) { 4754 ret = context.getElementsByTagName( tag || "*" ); 4755 4756 } else if ( typeof context.querySelectorAll !== "undefined" ) { 4757 ret = context.querySelectorAll( tag || "*" ); 4758 4759 } else { 4760 ret = []; 4761 } 4762 4763 if ( tag === undefined || tag && nodeName( context, tag ) ) { 4764 return jQuery.merge( [ context ], ret ); 4765 } 4766 4767 return ret; 4768} 4769 4770 4771// Mark scripts as having already been evaluated 4772function setGlobalEval( elems, refElements ) { 4773 var i = 0, 4774 l = elems.length; 4775 4776 for ( ; i < l; i++ ) { 4777 dataPriv.set( 4778 elems[ i ], 4779 "globalEval", 4780 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 4781 ); 4782 } 4783} 4784 4785 4786var rhtml = /<|&#?\w+;/; 4787 4788function buildFragment( elems, context, scripts, selection, ignored ) { 4789 var elem, tmp, tag, wrap, attached, j, 4790 fragment = context.createDocumentFragment(), 4791 nodes = [], 4792 i = 0, 4793 l = elems.length; 4794 4795 for ( ; i < l; i++ ) { 4796 elem = elems[ i ]; 4797 4798 if ( elem || elem === 0 ) { 4799 4800 // Add nodes directly 4801 if ( toType( elem ) === "object" ) { 4802 4803 // Support: Android <=4.0 only, PhantomJS 1 only 4804 // push.apply(_, arraylike) throws on ancient WebKit 4805 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 4806 4807 // Convert non-html into a text node 4808 } else if ( !rhtml.test( elem ) ) { 4809 nodes.push( context.createTextNode( elem ) ); 4810 4811 // Convert html into DOM nodes 4812 } else { 4813 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 4814 4815 // Deserialize a standard representation 4816 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 4817 wrap = wrapMap[ tag ] || wrapMap._default; 4818 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 4819 4820 // Descend through wrappers to the right content 4821 j = wrap[ 0 ]; 4822 while ( j-- ) { 4823 tmp = tmp.lastChild; 4824 } 4825
vendor: 1,252 bytes, lines 4826-4883
4826 // Support: Android <=4.0 only, PhantomJS 1 only 4827 // push.apply(_, arraylike) throws on ancient WebKit 4828 jQuery.merge( nodes, tmp.childNodes ); 4829 4830 // Remember the top-level container 4831 tmp = fragment.firstChild; 4832 4833 // Ensure the created nodes are orphaned (#12392) 4834 tmp.textContent = ""; 4835 } 4836 } 4837 } 4838 4839 // Remove wrapper from fragment 4840 fragment.textContent = ""; 4841 4842 i = 0; 4843 while ( ( elem = nodes[ i++ ] ) ) { 4844 4845 // Skip elements already in the context collection (trac-4087) 4846 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 4847 if ( ignored ) { 4848 ignored.push( elem ); 4849 } 4850 continue; 4851 } 4852 4853 attached = isAttached( elem ); 4854 4855 // Append to fragment 4856 tmp = getAll( fragment.appendChild( elem ), "script" ); 4857 4858 // Preserve script evaluation history 4859 if ( attached ) { 4860 setGlobalEval( tmp ); 4861 } 4862 4863 // Capture executables 4864 if ( scripts ) { 4865 j = 0; 4866 while ( ( elem = tmp[ j++ ] ) ) { 4867 if ( rscriptType.test( elem.type || "" ) ) { 4868 scripts.push( elem ); 4869 } 4870 } 4871 } 4872 } 4873 4874 return fragment; 4875} 4876 4877 4878( function() { 4879 var fragment = document.createDocumentFragment(), 4880 div = fragment.appendChild( document.createElement( "div" ) ), 4881 input = document.createElement( "input" ); 4882 4883 // Support: Android 4.0 - 4.3 only
vendor: 6,890 bytes, lines 4884-5130
4884 // Check state lost if the name is set (#11217) 4885 // Support: Windows Web Apps (WWA) 4886 // `name` and `type` must use .setAttribute for WWA (#14901) 4887 input.setAttribute( "type", "radio" ); 4888 input.setAttribute( "checked", "checked" ); 4889 input.setAttribute( "name", "t" ); 4890 4891 div.appendChild( input ); 4892 4893 // Support: Android <=4.1 only 4894 // Older WebKit doesn't clone checked state correctly in fragments 4895 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 4896 4897 // Support: IE <=11 only 4898 // Make sure textarea (and checkbox) defaultValue is properly cloned 4899 div.innerHTML = "<textarea>x</textarea>"; 4900 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 4901} )(); 4902 4903 4904var 4905 rkeyEvent = /^key/, 4906 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 4907 rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 4908 4909function returnTrue() { 4910 return true; 4911} 4912 4913function returnFalse() { 4914 return false; 4915} 4916 4917// Support: IE <=9 - 11+ 4918// focus() and blur() are asynchronous, except when they are no-op. 4919// So expect focus to be synchronous when the element is already active, 4920// and blur to be synchronous when the element is not already active. 4921// (focus and blur are always synchronous in other supported browsers, 4922// this just defines when we can count on it). 4923function expectSync( elem, type ) { 4924 return ( elem === safeActiveElement() ) === ( type === "focus" ); 4925} 4926 4927// Support: IE <=9 only 4928// Accessing document.activeElement can throw unexpectedly 4929// https://bugs.jquery.com/ticket/13393 4930function safeActiveElement() { 4931 try { 4932 return document.activeElement; 4933 } catch ( err ) { } 4934} 4935 4936function on( elem, types, selector, data, fn, one ) { 4937 var origFn, type; 4938 4939 // Types can be a map of types/handlers 4940 if ( typeof types === "object" ) { 4941 4942 // ( types-Object, selector, data ) 4943 if ( typeof selector !== "string" ) { 4944 4945 // ( types-Object, data ) 4946 data = data || selector; 4947 selector = undefined; 4948 } 4949 for ( type in types ) { 4950 on( elem, type, selector, data, types[ type ], one ); 4951 } 4952 return elem; 4953 } 4954 4955 if ( data == null && fn == null ) { 4956 4957 // ( types, fn ) 4958 fn = selector; 4959 data = selector = undefined; 4960 } else if ( fn == null ) { 4961 if ( typeof selector === "string" ) { 4962 4963 // ( types, selector, fn ) 4964 fn = data; 4965 data = undefined; 4966 } else { 4967 4968 // ( types, data, fn ) 4969 fn = data; 4970 data = selector; 4971 selector = undefined; 4972 } 4973 } 4974 if ( fn === false ) { 4975 fn = returnFalse; 4976 } else if ( !fn ) { 4977 return elem; 4978 } 4979 4980 if ( one === 1 ) { 4981 origFn = fn; 4982 fn = function( event ) { 4983 4984 // Can use an empty set, since event contains the info 4985 jQuery().off( event ); 4986 return origFn.apply( this, arguments ); 4987 }; 4988 4989 // Use same guid so caller can remove using origFn 4990 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 4991 } 4992 return elem.each( function() { 4993 jQuery.event.add( this, types, fn, data, selector ); 4994 } ); 4995} 4996 4997/* 4998 * Helper functions for managing events -- not part of the public interface. 4999 * Props to Dean Edwards' addEvent library for many of the ideas. 5000 */ 5001jQuery.event = { 5002 5003 global: {}, 5004 5005 add: function( elem, types, handler, data, selector ) { 5006 5007 var handleObjIn, eventHandle, tmp, 5008 events, t, handleObj, 5009 special, handlers, type, namespaces, origType, 5010 elemData = dataPriv.get( elem ); 5011 5012 // Don't attach events to noData or text/comment nodes (but allow plain objects) 5013 if ( !elemData ) { 5014 return; 5015 } 5016 5017 // Caller can pass in an object of custom data in lieu of the handler 5018 if ( handler.handler ) { 5019 handleObjIn = handler; 5020 handler = handleObjIn.handler; 5021 selector = handleObjIn.selector; 5022 } 5023 5024 // Ensure that invalid selectors throw exceptions at attach time 5025 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 5026 if ( selector ) { 5027 jQuery.find.matchesSelector( documentElement, selector ); 5028 } 5029 5030 // Make sure that the handler has a unique ID, used to find/remove it later 5031 if ( !handler.guid ) { 5032 handler.guid = jQuery.guid++; 5033 } 5034 5035 // Init the element's event structure and main handler, if this is the first 5036 if ( !( events = elemData.events ) ) { 5037 events = elemData.events = {}; 5038 } 5039 if ( !( eventHandle = elemData.handle ) ) { 5040 eventHandle = elemData.handle = function( e ) { 5041 5042 // Discard the second event of a jQuery.event.trigger() and 5043 // when an event is called after a page has unloaded 5044 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 5045 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 5046 }; 5047 } 5048 5049 // Handle multiple events separated by a space 5050 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5051 t = types.length; 5052 while ( t-- ) { 5053 tmp = rtypenamespace.exec( types[ t ] ) || []; 5054 type = origType = tmp[ 1 ]; 5055 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5056 5057 // There *must* be a type, no attaching namespace-only handlers 5058 if ( !type ) { 5059 continue; 5060 } 5061 5062 // If event changes its type, use the special event handlers for the changed type 5063 special = jQuery.event.special[ type ] || {}; 5064 5065 // If selector defined, determine special event api type, otherwise given type 5066 type = ( selector ? special.delegateType : special.bindType ) || type; 5067 5068 // Update special based on newly reset type 5069 special = jQuery.event.special[ type ] || {}; 5070 5071 // handleObj is passed to all event handlers 5072 handleObj = jQuery.extend( { 5073 type: type, 5074 origType: origType, 5075 data: data, 5076 handler: handler, 5077 guid: handler.guid, 5078 selector: selector, 5079 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 5080 namespace: namespaces.join( "." ) 5081 }, handleObjIn ); 5082 5083 // Init the event handler queue if we're the first 5084 if ( !( handlers = events[ type ] ) ) { 5085 handlers = events[ type ] = []; 5086 handlers.delegateCount = 0; 5087 5088 // Only use addEventListener if the special events handler returns false 5089 if ( !special.setup || 5090 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 5091 5092 if ( elem.addEventListener ) { 5093 elem.addEventListener( type, eventHandle ); 5094 } 5095 } 5096 } 5097 5098 if ( special.add ) { 5099 special.add.call( elem, handleObj ); 5100 5101 if ( !handleObj.handler.guid ) { 5102 handleObj.handler.guid = handler.guid; 5103 } 5104 } 5105 5106 // Add to the element's handler list, delegates in front 5107 if ( selector ) { 5108 handlers.splice( handlers.delegateCount++, 0, handleObj ); 5109 } else { 5110 handlers.push( handleObj ); 5111 } 5112 5113 // Keep track of which events have ever been used, for event optimization 5114 jQuery.event.global[ type ] = true; 5115 } 5116 5117 }, 5118 5119 // Detach an event or set of events from an element 5120 remove: function( elem, types, handler, selector, mappedTypes ) { 5121 5122 var j, origCount, tmp, 5123 events, t, handleObj, 5124 special, handlers, type, namespaces, origType, 5125 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 5126 5127 if ( !elemData || !( events = elemData.events ) ) { 5128 return; 5129 } 5130
vendor: 4,172 bytes, lines 5131-5266
5131 // Once for each type.namespace in types; type may be omitted 5132 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5133 t = types.length; 5134 while ( t-- ) { 5135 tmp = rtypenamespace.exec( types[ t ] ) || []; 5136 type = origType = tmp[ 1 ]; 5137 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5138 5139 // Unbind all events (on this namespace, if provided) for the element 5140 if ( !type ) { 5141 for ( type in events ) { 5142 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 5143 } 5144 continue; 5145 } 5146 5147 special = jQuery.event.special[ type ] || {}; 5148 type = ( selector ? special.delegateType : special.bindType ) || type; 5149 handlers = events[ type ] || []; 5150 tmp = tmp[ 2 ] && 5151 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 5152 5153 // Remove matching events 5154 origCount = j = handlers.length; 5155 while ( j-- ) { 5156 handleObj = handlers[ j ]; 5157 5158 if ( ( mappedTypes || origType === handleObj.origType ) && 5159 ( !handler || handler.guid === handleObj.guid ) && 5160 ( !tmp || tmp.test( handleObj.namespace ) ) && 5161 ( !selector || selector === handleObj.selector || 5162 selector === "**" && handleObj.selector ) ) { 5163 handlers.splice( j, 1 ); 5164 5165 if ( handleObj.selector ) { 5166 handlers.delegateCount--; 5167 } 5168 if ( special.remove ) { 5169 special.remove.call( elem, handleObj ); 5170 } 5171 } 5172 } 5173 5174 // Remove generic event handler if we removed something and no more handlers exist 5175 // (avoids potential for endless recursion during removal of special event handlers) 5176 if ( origCount && !handlers.length ) { 5177 if ( !special.teardown || 5178 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 5179 5180 jQuery.removeEvent( elem, type, elemData.handle ); 5181 } 5182 5183 delete events[ type ]; 5184 } 5185 } 5186 5187 // Remove data and the expando if it's no longer used 5188 if ( jQuery.isEmptyObject( events ) ) { 5189 dataPriv.remove( elem, "handle events" ); 5190 } 5191 }, 5192 5193 dispatch: function( nativeEvent ) { 5194 5195 // Make a writable jQuery.Event from the native event object 5196 var event = jQuery.event.fix( nativeEvent ); 5197 5198 var i, j, ret, matched, handleObj, handlerQueue, 5199 args = new Array( arguments.length ), 5200 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], 5201 special = jQuery.event.special[ event.type ] || {}; 5202 5203 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5204 args[ 0 ] = event; 5205 5206 for ( i = 1; i < arguments.length; i++ ) { 5207 args[ i ] = arguments[ i ]; 5208 } 5209 5210 event.delegateTarget = this; 5211 5212 // Call the preDispatch hook for the mapped type, and let it bail if desired 5213 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 5214 return; 5215 } 5216 5217 // Determine handlers 5218 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 5219 5220 // Run delegates first; they may want to stop propagation beneath us 5221 i = 0; 5222 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 5223 event.currentTarget = matched.elem; 5224 5225 j = 0; 5226 while ( ( handleObj = matched.handlers[ j++ ] ) && 5227 !event.isImmediatePropagationStopped() ) { 5228 5229 // If the event is namespaced, then each handler is only invoked if it is 5230 // specially universal or its namespaces are a superset of the event's. 5231 if ( !event.rnamespace || handleObj.namespace === false || 5232 event.rnamespace.test( handleObj.namespace ) ) { 5233 5234 event.handleObj = handleObj; 5235 event.data = handleObj.data; 5236 5237 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 5238 handleObj.handler ).apply( matched.elem, args ); 5239 5240 if ( ret !== undefined ) { 5241 if ( ( event.result = ret ) === false ) { 5242 event.preventDefault(); 5243 event.stopPropagation(); 5244 } 5245 } 5246 } 5247 } 5248 } 5249 5250 // Call the postDispatch hook for the mapped type 5251 if ( special.postDispatch ) { 5252 special.postDispatch.call( this, event ); 5253 } 5254 5255 return event.result; 5256 }, 5257 5258 handlers: function( event, handlers ) { 5259 var i, handleObj, sel, matchedHandlers, matchedSelectors, 5260 handlerQueue = [], 5261 delegateCount = handlers.delegateCount, 5262 cur = event.target; 5263 5264 // Find delegate handlers 5265 if ( delegateCount && 5266
vendor: 5,718 bytes, lines 5267-5452
5267 // Support: IE <=9 5268 // Black-hole SVG <use> instance trees (trac-13180) 5269 cur.nodeType && 5270 5271 // Support: Firefox <=42 5272 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 5273 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 5274 // Support: IE 11 only 5275 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 5276 !( event.type === "click" && event.button >= 1 ) ) { 5277 5278 for ( ; cur !== this; cur = cur.parentNode || this ) { 5279 5280 // Don't check non-elements (#13208) 5281 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 5282 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 5283 matchedHandlers = []; 5284 matchedSelectors = {}; 5285 for ( i = 0; i < delegateCount; i++ ) { 5286 handleObj = handlers[ i ]; 5287 5288 // Don't conflict with Object.prototype properties (#13203) 5289 sel = handleObj.selector + " "; 5290 5291 if ( matchedSelectors[ sel ] === undefined ) { 5292 matchedSelectors[ sel ] = handleObj.needsContext ? 5293 jQuery( sel, this ).index( cur ) > -1 : 5294 jQuery.find( sel, this, null, [ cur ] ).length; 5295 } 5296 if ( matchedSelectors[ sel ] ) { 5297 matchedHandlers.push( handleObj ); 5298 } 5299 } 5300 if ( matchedHandlers.length ) { 5301 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 5302 } 5303 } 5304 } 5305 } 5306 5307 // Add the remaining (directly-bound) handlers 5308 cur = this; 5309 if ( delegateCount < handlers.length ) { 5310 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 5311 } 5312 5313 return handlerQueue; 5314 }, 5315 5316 addProp: function( name, hook ) { 5317 Object.defineProperty( jQuery.Event.prototype, name, { 5318 enumerable: true, 5319 configurable: true, 5320 5321 get: isFunction( hook ) ? 5322 function() { 5323 if ( this.originalEvent ) { 5324 return hook( this.originalEvent ); 5325 } 5326 } : 5327 function() { 5328 if ( this.originalEvent ) { 5329 return this.originalEvent[ name ]; 5330 } 5331 }, 5332 5333 set: function( value ) { 5334 Object.defineProperty( this, name, { 5335 enumerable: true, 5336 configurable: true, 5337 writable: true, 5338 value: value 5339 } ); 5340 } 5341 } ); 5342 }, 5343 5344 fix: function( originalEvent ) { 5345 return originalEvent[ jQuery.expando ] ? 5346 originalEvent : 5347 new jQuery.Event( originalEvent ); 5348 }, 5349 5350 special: { 5351 load: { 5352 5353 // Prevent triggered image.load events from bubbling to window.load 5354 noBubble: true 5355 }, 5356 click: { 5357 5358 // Utilize native event to ensure correct state for checkable inputs 5359 setup: function( data ) { 5360 5361 // For mutual compressibility with _default, replace `this` access with a local var. 5362 // `|| data` is dead code meant only to preserve the variable through minification. 5363 var el = this || data; 5364 5365 // Claim the first handler 5366 if ( rcheckableType.test( el.type ) && 5367 el.click && nodeName( el, "input" ) ) { 5368 5369 // dataPriv.set( el, "click", ... ) 5370 leverageNative( el, "click", returnTrue ); 5371 } 5372 5373 // Return false to allow normal processing in the caller 5374 return false; 5375 }, 5376 trigger: function( data ) { 5377 5378 // For mutual compressibility with _default, replace `this` access with a local var. 5379 // `|| data` is dead code meant only to preserve the variable through minification. 5380 var el = this || data; 5381 5382 // Force setup before triggering a click 5383 if ( rcheckableType.test( el.type ) && 5384 el.click && nodeName( el, "input" ) ) { 5385 5386 leverageNative( el, "click" ); 5387 } 5388 5389 // Return non-false to allow normal event-path propagation 5390 return true; 5391 }, 5392 5393 // For cross-browser consistency, suppress native .click() on links 5394 // Also prevent it if we're currently inside a leveraged native-event stack 5395 _default: function( event ) { 5396 var target = event.target; 5397 return rcheckableType.test( target.type ) && 5398 target.click && nodeName( target, "input" ) && 5399 dataPriv.get( target, "click" ) || 5400 nodeName( target, "a" ); 5401 } 5402 }, 5403 5404 beforeunload: { 5405 postDispatch: function( event ) { 5406 5407 // Support: Firefox 20+ 5408 // Firefox doesn't alert if the returnValue field is not set. 5409 if ( event.result !== undefined && event.originalEvent ) { 5410 event.originalEvent.returnValue = event.result; 5411 } 5412 } 5413 } 5414 } 5415}; 5416 5417// Ensure the presence of an event listener that handles manually-triggered 5418// synthetic events by interrupting progress until reinvoked in response to 5419// *native* events that it fires directly, ensuring that state changes have 5420// already occurred before other listeners are invoked. 5421function leverageNative( el, type, expectSync ) { 5422 5423 // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add 5424 if ( !expectSync ) { 5425 if ( dataPriv.get( el, type ) === undefined ) { 5426 jQuery.event.add( el, type, returnTrue ); 5427 } 5428 return; 5429 } 5430 5431 // Register the controller as a special universal handler for all event namespaces 5432 dataPriv.set( el, type, false ); 5433 jQuery.event.add( el, type, { 5434 namespace: false, 5435 handler: function( event ) { 5436 var notAsync, result, 5437 saved = dataPriv.get( this, type ); 5438 5439 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 5440 5441 // Interrupt processing of the outer synthetic .trigger()ed event 5442 // Saved data should be false in such cases, but might be a leftover capture object 5443 // from an async native handler (gh-4350) 5444 if ( !saved.length ) { 5445 5446 // Store arguments for use when handling the inner native event 5447 // There will always be at least one argument (an event object), so this array 5448 // will not be confused with a leftover capture object. 5449 saved = slice.call( arguments ); 5450 dataPriv.set( this, type, saved ); 5451 5452 // Trigger the native event and capture its result
5453 // Support: IE <=9 - 11+ 5454 // focus() and blur() are asynchronous 5455 notAsync = expectSync( this, type ); 5456 this[ type ](); 5457 result = dataPriv.get( this, type ); 5458 if ( saved !== result || notAsync ) { 5459 dataPriv.set( this, type, false ); 5460 } else { 5461 result = {}; 5462 } 5463 if ( saved !== result ) { 5464 5465 // Cancel the outer synthetic event 5466 event.stopImmediatePropagation(); 5467 event.preventDefault(); 5468 return result.value; 5469 } 5470 5471 // If this is an inner synthetic event for an event with a bubbling surrogate 5472 // (focus or blur), assume that the surrogate already propagated from triggering the 5473 // native event and prevent that from happening again here. 5474 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 5475 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 5476 // less bad than duplication. 5477 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 5478 event.stopPropagation(); 5479 } 5480 5481 // If this is a native event triggered above, everything is now in order 5482 // Fire an inner synthetic event with the original arguments 5483 } else if ( saved.length ) { 5484 5485 // ...and capture the result 5486 dataPriv.set( this, type, { 5487 value: jQuery.event.trigger( 5488 5489 // Support: IE <=9 - 11+ 5490 // Extend with the prototype to reset the above stopImmediatePropagation() 5491 jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), 5492 saved.slice( 1 ), 5493 this 5494 ) 5495 } ); 5496 5497 // Abort handling of the native event 5498 event.stopImmediatePropagation(); 5499 } 5500 } 5501 } ); 5502} 5503 5504jQuery.removeEvent = function( elem, type, handle ) { 5505 5506 // This "if" is needed for plain objects 5507 if ( elem.removeEventListener ) { 5508 elem.removeEventListener( type, handle ); 5509 } 5510}; 5511 5512jQuery.Event = function( src, props ) { 5513 5514 // Allow instantiation without the 'new' keyword 5515 if ( !( this instanceof jQuery.Event ) ) { 5516 return new jQuery.Event( src, props ); 5517 } 5518 5519 // Event object 5520 if ( src && src.type ) { 5521 this.originalEvent = src; 5522 this.type = src.type; 5523 5524 // Events bubbling up the document may have been marked as prevented 5525 // by a handler lower down the tree; reflect the correct value. 5526 this.isDefaultPrevented = src.defaultPrevented || 5527 src.defaultPrevented === undefined && 5528 5529 // Support: Android <=2.3 only 5530 src.returnValue === false ? 5531 returnTrue : 5532 returnFalse; 5533 5534 // Create target properties 5535 // Support: Safari <=6 - 7 only 5536 // Target should not be a text node (#504, #13143) 5537 this.target = ( src.target && src.target.nodeType === 3 ) ? 5538 src.target.parentNode : 5539 src.target; 5540 5541 this.currentTarget = src.currentTarget; 5542 this.relatedTarget = src.relatedTarget; 5543 5544 // Event type 5545 } else { 5546 this.type = src; 5547 } 5548 5549 // Put explicitly provided properties onto the event object 5550 if ( props ) { 5551 jQuery.extend( this, props ); 5552 } 5553 5554 // Create a timestamp if incoming event doesn't have one 5555 this.timeStamp = src && src.timeStamp || Date.now(); 5556 5557 // Mark it as fixed 5558 this[ jQuery.expando ] = true; 5559}; 5560 5561// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 5562// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 5563jQuery.Event.prototype = { 5564 constructor: jQuery.Event, 5565 isDefaultPrevented: returnFalse, 5566 isPropagationStopped: returnFalse, 5567 isImmediatePropagationStopped: returnFalse, 5568 isSimulated: false, 5569 5570 preventDefault: function() { 5571 var e = this.originalEvent; 5572 5573 this.isDefaultPrevented = returnTrue; 5574 5575 if ( e && !this.isSimulated ) { 5576 e.preventDefault(); 5577 } 5578 }, 5579 stopPropagation: function() { 5580 var e = this.originalEvent; 5581 5582 this.isPropagationStopped = returnTrue; 5583 5584 if ( e && !this.isSimulated ) { 5585 e.stopPropagation(); 5586 } 5587 }, 5588 stopImmediatePropagation: function() { 5589 var e = this.originalEvent; 5590 5591 this.isImmediatePropagationStopped = returnTrue; 5592 5593 if ( e && !this.isSimulated ) { 5594 e.stopImmediatePropagation(); 5595 } 5596 5597 this.stopPropagation(); 5598 } 5599}; 5600 5601// Includes all common event props including KeyEvent and MouseEvent specific props 5602jQuery.each( { 5603 altKey: true, 5604 bubbles: true, 5605 cancelable: true, 5606 changedTouches: true, 5607 ctrlKey: true, 5608 detail: true, 5609 eventPhase: true, 5610 metaKey: true, 5611 pageX: true, 5612 pageY: true, 5613 shiftKey: true, 5614 view: true, 5615 "char": true, 5616 code: true, 5617 charCode: true, 5618 key: true, 5619 keyCode: true, 5620 button: true, 5621 buttons: true, 5622 clientX: true, 5623 clientY: true, 5624 offsetX: true, 5625 offsetY: true, 5626 pointerId: true, 5627 pointerType: true, 5628 screenX: true, 5629 screenY: true, 5630 targetTouches: true, 5631 toElement: true, 5632 touches: true, 5633 5634 which: function( event ) { 5635 var button = event.button; 5636 5637 // Add which for key events 5638 if ( event.which == null && rkeyEvent.test( event.type ) ) { 5639 return event.charCode != null ? event.charCode : event.keyCode; 5640 } 5641 5642 // Add which for click: 1 === left; 2 === middle; 3 === right 5643 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { 5644 if ( button & 1 ) { 5645 return 1; 5646 } 5647 5648 if ( button & 2 ) { 5649 return 3; 5650 } 5651 5652 if ( button & 4 ) { 5653 return 2; 5654 } 5655 5656 return 0; 5657 } 5658 5659 return event.which; 5660 } 5661}, jQuery.event.addProp ); 5662 5663jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 5664 jQuery.event.special[ type ] = { 5665 5666 // Utilize native event if possible so blur/focus sequence is correct 5667 setup: function() { 5668 5669 // Claim the first handler 5670 // dataPriv.set( this, "focus", ... ) 5671 // dataPriv.set( this, "blur", ... ) 5672 leverageNative( this, type, expectSync ); 5673 5674 // Return false to allow normal processing in the caller 5675 return false;
vendor: 4,563 bytes, lines 5676-5852
5676 }, 5677 trigger: function() { 5678 5679 // Force setup before trigger 5680 leverageNative( this, type ); 5681 5682 // Return non-false to allow normal event-path propagation 5683 return true; 5684 }, 5685 5686 delegateType: delegateType 5687 }; 5688} ); 5689 5690// Create mouseenter/leave events using mouseover/out and event-time checks 5691// so that event delegation works in jQuery. 5692// Do the same for pointerenter/pointerleave and pointerover/pointerout 5693// 5694// Support: Safari 7 only 5695// Safari sends mouseenter too often; see: 5696// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 5697// for the description of the bug (it existed in older Chrome versions as well). 5698jQuery.each( { 5699 mouseenter: "mouseover", 5700 mouseleave: "mouseout", 5701 pointerenter: "pointerover", 5702 pointerleave: "pointerout" 5703}, function( orig, fix ) { 5704 jQuery.event.special[ orig ] = { 5705 delegateType: fix, 5706 bindType: fix, 5707 5708 handle: function( event ) { 5709 var ret, 5710 target = this, 5711 related = event.relatedTarget, 5712 handleObj = event.handleObj; 5713 5714 // For mouseenter/leave call the handler if related is outside the target. 5715 // NB: No relatedTarget if the mouse left/entered the browser window 5716 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 5717 event.type = handleObj.origType; 5718 ret = handleObj.handler.apply( this, arguments ); 5719 event.type = fix; 5720 } 5721 return ret; 5722 } 5723 }; 5724} ); 5725 5726jQuery.fn.extend( { 5727 5728 on: function( types, selector, data, fn ) { 5729 return on( this, types, selector, data, fn ); 5730 }, 5731 one: function( types, selector, data, fn ) { 5732 return on( this, types, selector, data, fn, 1 ); 5733 }, 5734 off: function( types, selector, fn ) { 5735 var handleObj, type; 5736 if ( types && types.preventDefault && types.handleObj ) { 5737 5738 // ( event ) dispatched jQuery.Event 5739 handleObj = types.handleObj; 5740 jQuery( types.delegateTarget ).off( 5741 handleObj.namespace ? 5742 handleObj.origType + "." + handleObj.namespace : 5743 handleObj.origType, 5744 handleObj.selector, 5745 handleObj.handler 5746 ); 5747 return this; 5748 } 5749 if ( typeof types === "object" ) { 5750 5751 // ( types-object [, selector] ) 5752 for ( type in types ) { 5753 this.off( type, selector, types[ type ] ); 5754 } 5755 return this; 5756 } 5757 if ( selector === false || typeof selector === "function" ) { 5758 5759 // ( types [, fn] ) 5760 fn = selector; 5761 selector = undefined; 5762 } 5763 if ( fn === false ) { 5764 fn = returnFalse; 5765 } 5766 return this.each( function() { 5767 jQuery.event.remove( this, types, fn, selector ); 5768 } ); 5769 } 5770} ); 5771 5772 5773var 5774 5775 /* eslint-disable max-len */ 5776 5777 // See https://github.com/eslint/eslint/issues/3229 5778 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, 5779 5780 /* eslint-enable */ 5781 5782 // Support: IE <=10 - 11, Edge 12 - 13 only 5783 // In IE/Edge using regex groups here causes severe slowdowns. 5784 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 5785 rnoInnerhtml = /<script|<style|<link/i, 5786 5787 // checked="checked" or checked 5788 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5789 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; 5790 5791// Prefer a tbody over its parent table for containing new rows 5792function manipulationTarget( elem, content ) { 5793 if ( nodeName( elem, "table" ) && 5794 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 5795 5796 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 5797 } 5798 5799 return elem; 5800} 5801 5802// Replace/restore the type attribute of script elements for safe DOM manipulation 5803function disableScript( elem ) { 5804 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 5805 return elem; 5806} 5807function restoreScript( elem ) { 5808 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 5809 elem.type = elem.type.slice( 5 ); 5810 } else { 5811 elem.removeAttribute( "type" ); 5812 } 5813 5814 return elem; 5815} 5816 5817function cloneCopyEvent( src, dest ) { 5818 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; 5819 5820 if ( dest.nodeType !== 1 ) { 5821 return; 5822 } 5823 5824 // 1. Copy private data: events, handlers, etc. 5825 if ( dataPriv.hasData( src ) ) { 5826 pdataOld = dataPriv.access( src ); 5827 pdataCur = dataPriv.set( dest, pdataOld ); 5828 events = pdataOld.events; 5829 5830 if ( events ) { 5831 delete pdataCur.handle; 5832 pdataCur.events = {}; 5833 5834 for ( type in events ) { 5835 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 5836 jQuery.event.add( dest, type, events[ type ][ i ] ); 5837 } 5838 } 5839 } 5840 } 5841 5842 // 2. Copy user data 5843 if ( dataUser.hasData( src ) ) { 5844 udataOld = dataUser.access( src ); 5845 udataCur = jQuery.extend( {}, udataOld ); 5846 5847 dataUser.set( dest, udataCur ); 5848 } 5849} 5850 5851// Fix IE bugs, see support tests 5852function fixInput( src, dest ) {
vendor: 3,609 bytes, lines 5853-5980
5853 var nodeName = dest.nodeName.toLowerCase(); 5854 5855 // Fails to persist the checked state of a cloned checkbox or radio button. 5856 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 5857 dest.checked = src.checked; 5858 5859 // Fails to return the selected option to the default selected state when cloning options 5860 } else if ( nodeName === "input" || nodeName === "textarea" ) { 5861 dest.defaultValue = src.defaultValue; 5862 } 5863} 5864 5865function domManip( collection, args, callback, ignored ) { 5866 5867 // Flatten any nested arrays 5868 args = concat.apply( [], args ); 5869 5870 var fragment, first, scripts, hasScripts, node, doc, 5871 i = 0, 5872 l = collection.length, 5873 iNoClone = l - 1, 5874 value = args[ 0 ], 5875 valueIsFunction = isFunction( value ); 5876 5877 // We can't cloneNode fragments that contain checked, in WebKit 5878 if ( valueIsFunction || 5879 ( l > 1 && typeof value === "string" && 5880 !support.checkClone && rchecked.test( value ) ) ) { 5881 return collection.each( function( index ) { 5882 var self = collection.eq( index ); 5883 if ( valueIsFunction ) { 5884 args[ 0 ] = value.call( this, index, self.html() ); 5885 } 5886 domManip( self, args, callback, ignored ); 5887 } ); 5888 } 5889 5890 if ( l ) { 5891 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 5892 first = fragment.firstChild; 5893 5894 if ( fragment.childNodes.length === 1 ) { 5895 fragment = first; 5896 } 5897 5898 // Require either new content or an interest in ignored elements to invoke the callback 5899 if ( first || ignored ) { 5900 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 5901 hasScripts = scripts.length; 5902 5903 // Use the original fragment for the last item 5904 // instead of the first because it can end up 5905 // being emptied incorrectly in certain situations (#8070). 5906 for ( ; i < l; i++ ) { 5907 node = fragment; 5908 5909 if ( i !== iNoClone ) { 5910 node = jQuery.clone( node, true, true ); 5911 5912 // Keep references to cloned scripts for later restoration 5913 if ( hasScripts ) { 5914 5915 // Support: Android <=4.0 only, PhantomJS 1 only 5916 // push.apply(_, arraylike) throws on ancient WebKit 5917 jQuery.merge( scripts, getAll( node, "script" ) ); 5918 } 5919 } 5920 5921 callback.call( collection[ i ], node, i ); 5922 } 5923 5924 if ( hasScripts ) { 5925 doc = scripts[ scripts.length - 1 ].ownerDocument; 5926 5927 // Reenable scripts 5928 jQuery.map( scripts, restoreScript ); 5929 5930 // Evaluate executable scripts on first document insertion 5931 for ( i = 0; i < hasScripts; i++ ) { 5932 node = scripts[ i ]; 5933 if ( rscriptType.test( node.type || "" ) && 5934 !dataPriv.access( node, "globalEval" ) && 5935 jQuery.contains( doc, node ) ) { 5936 5937 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 5938 5939 // Optional AJAX dependency, but won't run scripts if not present 5940 if ( jQuery._evalUrl && !node.noModule ) { 5941 jQuery._evalUrl( node.src, { 5942 nonce: node.nonce || node.getAttribute( "nonce" ) 5943 } ); 5944 } 5945 } else { 5946 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 5947 } 5948 } 5949 } 5950 } 5951 } 5952 } 5953 5954 return collection; 5955} 5956 5957function remove( elem, selector, keepData ) { 5958 var node, 5959 nodes = selector ? jQuery.filter( selector, elem ) : elem, 5960 i = 0; 5961 5962 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 5963 if ( !keepData && node.nodeType === 1 ) { 5964 jQuery.cleanData( getAll( node ) ); 5965 } 5966 5967 if ( node.parentNode ) { 5968 if ( keepData && isAttached( node ) ) { 5969 setGlobalEval( getAll( node, "script" ) ); 5970 } 5971 node.parentNode.removeChild( node ); 5972 } 5973 } 5974 5975 return elem; 5976} 5977 5978jQuery.extend( { 5979 htmlPrefilter: function( html ) { 5980 return html.replace( rxhtmlTag, "<$1></$2>" )
vendor: 2,889 bytes, lines 5980-6089
5980; 5981 }, 5982 5983 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 5984 var i, l, srcElements, destElements, 5985 clone = elem.cloneNode( true ), 5986 inPage = isAttached( elem ); 5987 5988 // Fix IE cloning issues 5989 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 5990 !jQuery.isXMLDoc( elem ) ) { 5991 5992 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 5993 destElements = getAll( clone ); 5994 srcElements = getAll( elem ); 5995 5996 for ( i = 0, l = srcElements.length; i < l; i++ ) { 5997 fixInput( srcElements[ i ], destElements[ i ] ); 5998 } 5999 } 6000 6001 // Copy the events from the original to the clone 6002 if ( dataAndEvents ) { 6003 if ( deepDataAndEvents ) { 6004 srcElements = srcElements || getAll( elem ); 6005 destElements = destElements || getAll( clone ); 6006 6007 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6008 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 6009 } 6010 } else { 6011 cloneCopyEvent( elem, clone ); 6012 } 6013 } 6014 6015 // Preserve script evaluation history 6016 destElements = getAll( clone, "script" ); 6017 if ( destElements.length > 0 ) { 6018 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 6019 } 6020 6021 // Return the cloned set 6022 return clone; 6023 }, 6024 6025 cleanData: function( elems ) { 6026 var data, elem, type, 6027 special = jQuery.event.special, 6028 i = 0; 6029 6030 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 6031 if ( acceptData( elem ) ) { 6032 if ( ( data = elem[ dataPriv.expando ] ) ) { 6033 if ( data.events ) { 6034 for ( type in data.events ) { 6035 if ( special[ type ] ) { 6036 jQuery.event.remove( elem, type ); 6037 6038 // This is a shortcut to avoid jQuery.event.remove's overhead 6039 } else { 6040 jQuery.removeEvent( elem, type, data.handle ); 6041 } 6042 } 6043 } 6044 6045 // Support: Chrome <=35 - 45+ 6046 // Assign undefined instead of using delete, see Data#remove 6047 elem[ dataPriv.expando ] = undefined; 6048 } 6049 if ( elem[ dataUser.expando ] ) { 6050 6051 // Support: Chrome <=35 - 45+ 6052 // Assign undefined instead of using delete, see Data#remove 6053 elem[ dataUser.expando ] = undefined; 6054 } 6055 } 6056 } 6057 } 6058} ); 6059 6060jQuery.fn.extend( { 6061 detach: function( selector ) { 6062 return remove( this, selector, true ); 6063 }, 6064 6065 remove: function( selector ) { 6066 return remove( this, selector ); 6067 }, 6068 6069 text: function( value ) { 6070 return access( this, function( value ) { 6071 return value === undefined ? 6072 jQuery.text( this ) : 6073 this.empty().each( function() { 6074 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6075 this.textContent = value; 6076 } 6077 } ); 6078 }, null, value, arguments.length ); 6079 }, 6080 6081 append: function() { 6082 return domManip( this, arguments, function( elem ) { 6083 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6084 var target = manipulationTarget( this, elem ); 6085 target.appendChild( elem ); 6086 } 6087 } ); 6088 }, 6089
vendor: 5,129 bytes, lines 6090-6282
6090 prepend: function() { 6091 return domManip( this, arguments, function( elem ) { 6092 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6093 var target = manipulationTarget( this, elem ); 6094 target.insertBefore( elem, target.firstChild ); 6095 } 6096 } ); 6097 }, 6098 6099 before: function() { 6100 return domManip( this, arguments, function( elem ) { 6101 if ( this.parentNode ) { 6102 this.parentNode.insertBefore( elem, this ); 6103 } 6104 } ); 6105 }, 6106 6107 after: function() { 6108 return domManip( this, arguments, function( elem ) { 6109 if ( this.parentNode ) { 6110 this.parentNode.insertBefore( elem, this.nextSibling ); 6111 } 6112 } ); 6113 }, 6114 6115 empty: function() { 6116 var elem, 6117 i = 0; 6118 6119 for ( ; ( elem = this[ i ] ) != null; i++ ) { 6120 if ( elem.nodeType === 1 ) { 6121 6122 // Prevent memory leaks 6123 jQuery.cleanData( getAll( elem, false ) ); 6124 6125 // Remove any remaining nodes 6126 elem.textContent = ""; 6127 } 6128 } 6129 6130 return this; 6131 }, 6132 6133 clone: function( dataAndEvents, deepDataAndEvents ) { 6134 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 6135 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 6136 6137 return this.map( function() { 6138 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 6139 } ); 6140 }, 6141 6142 html: function( value ) { 6143 return access( this, function( value ) { 6144 var elem = this[ 0 ] || {}, 6145 i = 0, 6146 l = this.length; 6147 6148 if ( value === undefined && elem.nodeType === 1 ) { 6149 return elem.innerHTML; 6150 } 6151 6152 // See if we can take a shortcut and just use innerHTML 6153 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 6154 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 6155 6156 value = jQuery.htmlPrefilter( value ); 6157 6158 try { 6159 for ( ; i < l; i++ ) { 6160 elem = this[ i ] || {}; 6161 6162 // Remove element nodes and prevent memory leaks 6163 if ( elem.nodeType === 1 ) { 6164 jQuery.cleanData( getAll( elem, false ) ); 6165 elem.innerHTML = value; 6166 } 6167 } 6168 6169 elem = 0; 6170 6171 // If using innerHTML throws an exception, use the fallback method 6172 } catch ( e ) {} 6173 } 6174 6175 if ( elem ) { 6176 this.empty().append( value ); 6177 } 6178 }, null, value, arguments.length ); 6179 }, 6180 6181 replaceWith: function() { 6182 var ignored = []; 6183 6184 // Make the changes, replacing each non-ignored context element with the new content 6185 return domManip( this, arguments, function( elem ) { 6186 var parent = this.parentNode; 6187 6188 if ( jQuery.inArray( this, ignored ) < 0 ) { 6189 jQuery.cleanData( getAll( this ) ); 6190 if ( parent ) { 6191 parent.replaceChild( elem, this ); 6192 } 6193 } 6194 6195 // Force callback invocation 6196 }, ignored ); 6197 } 6198} ); 6199 6200jQuery.each( { 6201 appendTo: "append", 6202 prependTo: "prepend", 6203 insertBefore: "before", 6204 insertAfter: "after", 6205 replaceAll: "replaceWith" 6206}, function( name, original ) { 6207 jQuery.fn[ name ] = function( selector ) { 6208 var elems, 6209 ret = [], 6210 insert = jQuery( selector ), 6211 last = insert.length - 1, 6212 i = 0; 6213 6214 for ( ; i <= last; i++ ) { 6215 elems = i === last ? this : this.clone( true ); 6216 jQuery( insert[ i ] )[ original ]( elems ); 6217 6218 // Support: Android <=4.0 only, PhantomJS 1 only 6219 // .get() because push.apply(_, arraylike) throws on ancient WebKit 6220 push.apply( ret, elems.get() ); 6221 } 6222 6223 return this.pushStack( ret ); 6224 }; 6225} ); 6226var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 6227 6228var getStyles = function( elem ) { 6229 6230 // Support: IE <=11 only, Firefox <=30 (#15098, #14150) 6231 // IE throws on elements created in popups 6232 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6233 var view = elem.ownerDocument.defaultView; 6234 6235 if ( !view || !view.opener ) { 6236 view = window; 6237 } 6238 6239 return view.getComputedStyle( elem ); 6240 }; 6241 6242var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 6243 6244 6245 6246( function() { 6247 6248 // Executing both pixelPosition & boxSizingReliable tests require only one layout 6249 // so they're executed at the same time to save the second computation. 6250 function computeStyleTests() { 6251 6252 // This is a singleton, we need to execute it only once 6253 if ( !div ) { 6254 return; 6255 } 6256 6257 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 6258 "margin-top:1px;padding:0;border:0"; 6259 div.style.cssText = 6260 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 6261 "margin:auto;border:1px;padding:1px;" + 6262 "width:60%;top:1%"; 6263 documentElement.appendChild( container ).appendChild( div ); 6264 6265 var divStyle = window.getComputedStyle( div ); 6266 pixelPositionVal = divStyle.top !== "1%"; 6267 6268 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 6269 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 6270 6271 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 6272 // Some styles come back with percentage values, even though they shouldn't 6273 div.style.right = "60%"; 6274 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 6275 6276 // Support: IE 9 - 11 only 6277 // Detect misreporting of content dimensions for box-sizing:border-box elements 6278 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 6279 6280 // Support: IE 9 only 6281 // Detect overflow:scroll screwiness (gh-3699) 6282
vendor: 8,298 bytes, lines 6282-6572
6282// Support: Chrome <=64 6283 // Don't get tricked when zoom affects offsetWidth (gh-4029) 6284 div.style.position = "absolute"; 6285 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 6286 6287 documentElement.removeChild( container ); 6288 6289 // Nullify the div so it wouldn't be stored in the memory and 6290 // it will also be a sign that checks already performed 6291 div = null; 6292 } 6293 6294 function roundPixelMeasures( measure ) { 6295 return Math.round( parseFloat( measure ) ); 6296 } 6297 6298 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 6299 reliableMarginLeftVal, 6300 container = document.createElement( "div" ), 6301 div = document.createElement( "div" ); 6302 6303 // Finish early in limited (non-browser) environments 6304 if ( !div.style ) { 6305 return; 6306 } 6307 6308 // Support: IE <=9 - 11 only 6309 // Style of cloned element affects source element cloned (#8908) 6310 div.style.backgroundClip = "content-box"; 6311 div.cloneNode( true ).style.backgroundClip = ""; 6312 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 6313 6314 jQuery.extend( support, { 6315 boxSizingReliable: function() { 6316 computeStyleTests(); 6317 return boxSizingReliableVal; 6318 }, 6319 pixelBoxStyles: function() { 6320 computeStyleTests(); 6321 return pixelBoxStylesVal; 6322 }, 6323 pixelPosition: function() { 6324 computeStyleTests(); 6325 return pixelPositionVal; 6326 }, 6327 reliableMarginLeft: function() { 6328 computeStyleTests(); 6329 return reliableMarginLeftVal; 6330 }, 6331 scrollboxSize: function() { 6332 computeStyleTests(); 6333 return scrollboxSizeVal; 6334 } 6335 } ); 6336} )(); 6337 6338 6339function curCSS( elem, name, computed ) { 6340 var width, minWidth, maxWidth, ret, 6341 6342 // Support: Firefox 51+ 6343 // Retrieving style before computed somehow 6344 // fixes an issue with getting wrong values 6345 // on detached elements 6346 style = elem.style; 6347 6348 computed = computed || getStyles( elem ); 6349 6350 // getPropertyValue is needed for: 6351 // .css('filter') (IE 9 only, #12537) 6352 // .css('--customProperty) (#3144) 6353 if ( computed ) { 6354 ret = computed.getPropertyValue( name ) || computed[ name ]; 6355 6356 if ( ret === "" && !isAttached( elem ) ) { 6357 ret = jQuery.style( elem, name ); 6358 } 6359 6360 // A tribute to the "awesome hack by Dean Edwards" 6361 // Android Browser returns percentage for some values, 6362 // but width seems to be reliably pixels. 6363 // This is against the CSSOM draft spec: 6364 // https://drafts.csswg.org/cssom/#resolved-values 6365 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 6366 6367 // Remember the original values 6368 width = style.width; 6369 minWidth = style.minWidth; 6370 maxWidth = style.maxWidth; 6371 6372 // Put in the new values to get a computed value out 6373 style.minWidth = style.maxWidth = style.width = ret; 6374 ret = computed.width; 6375 6376 // Revert the changed values 6377 style.width = width; 6378 style.minWidth = minWidth; 6379 style.maxWidth = maxWidth; 6380 } 6381 } 6382 6383 return ret !== undefined ? 6384 6385 // Support: IE <=9 - 11 only 6386 // IE returns zIndex value as an integer. 6387 ret + "" : 6388 ret; 6389} 6390 6391 6392function addGetHookIf( conditionFn, hookFn ) { 6393 6394 // Define the hook, we'll check on the first run if it's really needed. 6395 return { 6396 get: function() { 6397 if ( conditionFn() ) { 6398 6399 // Hook not needed (or it's not possible to use it due 6400 // to missing dependency), remove it. 6401 delete this.get; 6402 return; 6403 } 6404 6405 // Hook needed; redefine it so that the support test is not executed again. 6406 return ( this.get = hookFn ).apply( this, arguments ); 6407 } 6408 }; 6409} 6410 6411 6412var cssPrefixes = [ "Webkit", "Moz", "ms" ], 6413 emptyStyle = document.createElement( "div" ).style, 6414 vendorProps = {}; 6415 6416// Return a vendor-prefixed property or undefined 6417function vendorPropName( name ) { 6418 6419 // Check for vendor prefixed names 6420 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 6421 i = cssPrefixes.length; 6422 6423 while ( i-- ) { 6424 name = cssPrefixes[ i ] + capName; 6425 if ( name in emptyStyle ) { 6426 return name; 6427 } 6428 } 6429} 6430 6431// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 6432function finalPropName( name ) { 6433 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 6434 6435 if ( final ) { 6436 return final; 6437 } 6438 if ( name in emptyStyle ) { 6439 return name; 6440 } 6441 return vendorProps[ name ] = vendorPropName( name ) || name; 6442} 6443 6444 6445var 6446 6447 // Swappable if display is none or starts with table 6448 // except "table", "table-cell", or "table-caption" 6449 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 6450 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 6451 rcustomProp = /^--/, 6452 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 6453 cssNormalTransform = { 6454 letterSpacing: "0", 6455 fontWeight: "400" 6456 }; 6457 6458function setPositiveNumber( elem, value, subtract ) { 6459 6460 // Any relative (+/-) values have already been 6461 // normalized at this point 6462 var matches = rcssNum.exec( value ); 6463 return matches ? 6464 6465 // Guard against undefined "subtract", e.g., when used as in cssHooks 6466 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 6467 value; 6468} 6469 6470function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 6471 var i = dimension === "width" ? 1 : 0, 6472 extra = 0, 6473 delta = 0; 6474 6475 // Adjustment may not be necessary 6476 if ( box === ( isBorderBox ? "border" : "content" ) ) { 6477 return 0; 6478 } 6479 6480 for ( ; i < 4; i += 2 ) { 6481 6482 // Both box models exclude margin 6483 if ( box === "margin" ) { 6484 delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 6485 } 6486 6487 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 6488 if ( !isBorderBox ) { 6489 6490 // Add padding 6491 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6492 6493 // For "border" or "margin", add border 6494 if ( box !== "padding" ) { 6495 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6496 6497 // But still keep track of it otherwise 6498 } else { 6499 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6500 } 6501 6502 // If we get here with a border-box (content + padding + border), we're seeking "content" or 6503 // "padding" or "margin" 6504 } else { 6505 6506 // For "content", subtract padding 6507 if ( box === "content" ) { 6508 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6509 } 6510 6511 // For "content" or "padding", subtract border 6512 if ( box !== "margin" ) { 6513 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6514 } 6515 } 6516 } 6517 6518 // Account for positive content-box scroll gutter when requested by providing computedVal 6519 if ( !isBorderBox && computedVal >= 0 ) { 6520 6521 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 6522 // Assuming integer scroll gutter, subtract the rest and round down 6523 delta += Math.max( 0, Math.ceil( 6524 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 6525 computedVal - 6526 delta - 6527 extra - 6528 0.5 6529 6530 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 6531 // Use an explicit zero to avoid NaN (gh-3964) 6532 ) ) || 0; 6533 } 6534 6535 return delta; 6536} 6537 6538function getWidthOrHeight( elem, dimension, extra ) { 6539 6540 // Start with computed style 6541 var styles = getStyles( elem ), 6542 6543 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 6544 // Fake content-box until we know it's needed to know the true value. 6545 boxSizingNeeded = !support.boxSizingReliable() || extra, 6546 isBorderBox = boxSizingNeeded && 6547 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 6548 valueIsBorderBox = isBorderBox, 6549 6550 val = curCSS( elem, dimension, styles ), 6551 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 6552 6553 // Support: Firefox <=54 6554 // Return a confounding non-pixel value or feign ignorance, as appropriate. 6555 if ( rnumnonpx.test( val ) ) { 6556 if ( !extra ) { 6557 return val; 6558 } 6559 val = "auto"; 6560 } 6561 6562 6563 // Fall back to offsetWidth/offsetHeight when value is "auto" 6564 // This happens for inline elements with no explicit setting (gh-3571) 6565 // Support: Android <=4.1 - 4.3 only 6566 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 6567 // Support: IE 9-11 only 6568 // Also use offsetWidth/offsetHeight for when box sizing is unreliable 6569 // We use getClientRects() to check for hidden/disconnected. 6570 // In those cases, the computed value can be trusted to be border-box 6571 if ( ( !support.boxSizingReliable() && isBorderBox || 6572 val === "auto" ||
vendor: 3,698 bytes, lines 6573-6703
6573 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 6574 elem.getClientRects().length ) { 6575 6576 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 6577 6578 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 6579 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 6580 // retrieved value as a content box dimension. 6581 valueIsBorderBox = offsetProp in elem; 6582 if ( valueIsBorderBox ) { 6583 val = elem[ offsetProp ]; 6584 } 6585 } 6586 6587 // Normalize "" and auto 6588 val = parseFloat( val ) || 0; 6589 6590 // Adjust for the element's box model 6591 return ( val + 6592 boxModelAdjustment( 6593 elem, 6594 dimension, 6595 extra || ( isBorderBox ? "border" : "content" ), 6596 valueIsBorderBox, 6597 styles, 6598 6599 // Provide the current computed size to request scroll gutter calculation (gh-3589) 6600 val 6601 ) 6602 ) + "px"; 6603} 6604 6605jQuery.extend( { 6606 6607 // Add in style property hooks for overriding the default 6608 // behavior of getting and setting a style property 6609 cssHooks: { 6610 opacity: { 6611 get: function( elem, computed ) { 6612 if ( computed ) { 6613 6614 // We should always get a number back from opacity 6615 var ret = curCSS( elem, "opacity" ); 6616 return ret === "" ? "1" : ret; 6617 } 6618 } 6619 } 6620 }, 6621 6622 // Don't automatically add "px" to these possibly-unitless properties 6623 cssNumber: { 6624 "animationIterationCount": true, 6625 "columnCount": true, 6626 "fillOpacity": true, 6627 "flexGrow": true, 6628 "flexShrink": true, 6629 "fontWeight": true, 6630 "gridArea": true, 6631 "gridColumn": true, 6632 "gridColumnEnd": true, 6633 "gridColumnStart": true, 6634 "gridRow": true, 6635 "gridRowEnd": true, 6636 "gridRowStart": true, 6637 "lineHeight": true, 6638 "opacity": true, 6639 "order": true, 6640 "orphans": true, 6641 "widows": true, 6642 "zIndex": true, 6643 "zoom": true 6644 }, 6645 6646 // Add in properties whose names you wish to fix before 6647 // setting or getting the value 6648 cssProps: {}, 6649 6650 // Get and set the style property on a DOM Node 6651 style: function( elem, name, value, extra ) { 6652 6653 // Don't set styles on text and comment nodes 6654 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 6655 return; 6656 } 6657 6658 // Make sure that we're working with the right name 6659 var ret, type, hooks, 6660 origName = camelCase( name ), 6661 isCustomProp = rcustomProp.test( name ), 6662 style = elem.style; 6663 6664 // Make sure that we're working with the right name. We don't 6665 // want to query the value if it is a CSS custom property 6666 // since they are user-defined. 6667 if ( !isCustomProp ) { 6668 name = finalPropName( origName ); 6669 } 6670 6671 // Gets hook for the prefixed version, then unprefixed version 6672 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6673 6674 // Check if we're setting a value 6675 if ( value !== undefined ) { 6676 type = typeof value; 6677 6678 // Convert "+=" or "-=" to relative numbers (#7345) 6679 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 6680 value = adjustCSS( elem, name, ret ); 6681 6682 // Fixes bug #9237 6683 type = "number"; 6684 } 6685 6686 // Make sure that null and NaN values aren't set (#7116) 6687 if ( value == null || value !== value ) { 6688 return; 6689 } 6690 6691 // If a number was passed in, add the unit (except for certain CSS properties) 6692 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 6693 // "px" to a few hardcoded values. 6694 if ( type === "number" && !isCustomProp ) { 6695 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 6696 } 6697 6698 // background-* props affect original clone's values 6699 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 6700 style[ name ] = "inherit"; 6701 } 6702 6703 // If a hook was provided, use that value, otherwise just set the specified value
vendor: 7,976 bytes, lines 6704-6986
6704 if ( !hooks || !( "set" in hooks ) || 6705 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 6706 6707 if ( isCustomProp ) { 6708 style.setProperty( name, value ); 6709 } else { 6710 style[ name ] = value; 6711 } 6712 } 6713 6714 } else { 6715 6716 // If a hook was provided get the non-computed value from there 6717 if ( hooks && "get" in hooks && 6718 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 6719 6720 return ret; 6721 } 6722 6723 // Otherwise just get the value from the style object 6724 return style[ name ]; 6725 } 6726 }, 6727 6728 css: function( elem, name, extra, styles ) { 6729 var val, num, hooks, 6730 origName = camelCase( name ), 6731 isCustomProp = rcustomProp.test( name ); 6732 6733 // Make sure that we're working with the right name. We don't 6734 // want to modify the value if it is a CSS custom property 6735 // since they are user-defined. 6736 if ( !isCustomProp ) { 6737 name = finalPropName( origName ); 6738 } 6739 6740 // Try prefixed name followed by the unprefixed name 6741 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6742 6743 // If a hook was provided get the computed value from there 6744 if ( hooks && "get" in hooks ) { 6745 val = hooks.get( elem, true, extra ); 6746 } 6747 6748 // Otherwise, if a way to get the computed value exists, use that 6749 if ( val === undefined ) { 6750 val = curCSS( elem, name, styles ); 6751 } 6752 6753 // Convert "normal" to computed value 6754 if ( val === "normal" && name in cssNormalTransform ) { 6755 val = cssNormalTransform[ name ]; 6756 } 6757 6758 // Make numeric if forced or a qualifier was provided and val looks numeric 6759 if ( extra === "" || extra ) { 6760 num = parseFloat( val ); 6761 return extra === true || isFinite( num ) ? num || 0 : val; 6762 } 6763 6764 return val; 6765 } 6766} ); 6767 6768jQuery.each( [ "height", "width" ], function( i, dimension ) { 6769 jQuery.cssHooks[ dimension ] = { 6770 get: function( elem, computed, extra ) { 6771 if ( computed ) { 6772 6773 // Certain elements can have dimension info if we invisibly show them 6774 // but it must have a current display style that would benefit 6775 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 6776 6777 // Support: Safari 8+ 6778 // Table columns in Safari have non-zero offsetWidth & zero 6779 // getBoundingClientRect().width unless display is changed. 6780 // Support: IE <=11 only 6781 // Running getBoundingClientRect on a disconnected node 6782 // in IE throws an error. 6783 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 6784 swap( elem, cssShow, function() { 6785 return getWidthOrHeight( elem, dimension, extra ); 6786 } ) : 6787 getWidthOrHeight( elem, dimension, extra ); 6788 } 6789 }, 6790 6791 set: function( elem, value, extra ) { 6792 var matches, 6793 styles = getStyles( elem ), 6794 6795 // Only read styles.position if the test has a chance to fail 6796 // to avoid forcing a reflow. 6797 scrollboxSizeBuggy = !support.scrollboxSize() && 6798 styles.position === "absolute", 6799 6800 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 6801 boxSizingNeeded = scrollboxSizeBuggy || extra, 6802 isBorderBox = boxSizingNeeded && 6803 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 6804 subtract = extra ? 6805 boxModelAdjustment( 6806 elem, 6807 dimension, 6808 extra, 6809 isBorderBox, 6810 styles 6811 ) : 6812 0; 6813 6814 // Account for unreliable border-box dimensions by comparing offset* to computed and 6815 // faking a content-box to get border and padding (gh-3699) 6816 if ( isBorderBox && scrollboxSizeBuggy ) { 6817 subtract -= Math.ceil( 6818 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 6819 parseFloat( styles[ dimension ] ) - 6820 boxModelAdjustment( elem, dimension, "border", false, styles ) - 6821 0.5 6822 ); 6823 } 6824 6825 // Convert to pixels if value adjustment is needed 6826 if ( subtract && ( matches = rcssNum.exec( value ) ) && 6827 ( matches[ 3 ] || "px" ) !== "px" ) { 6828 6829 elem.style[ dimension ] = value; 6830 value = jQuery.css( elem, dimension ); 6831 } 6832 6833 return setPositiveNumber( elem, value, subtract ); 6834 } 6835 }; 6836} ); 6837 6838jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 6839 function( elem, computed ) { 6840 if ( computed ) { 6841 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 6842 elem.getBoundingClientRect().left - 6843 swap( elem, { marginLeft: 0 }, function() { 6844 return elem.getBoundingClientRect().left; 6845 } ) 6846 ) + "px"; 6847 } 6848 } 6849); 6850 6851// These hooks are used by animate to expand properties 6852jQuery.each( { 6853 margin: "", 6854 padding: "", 6855 border: "Width" 6856}, function( prefix, suffix ) { 6857 jQuery.cssHooks[ prefix + suffix ] = { 6858 expand: function( value ) { 6859 var i = 0, 6860 expanded = {}, 6861 6862 // Assumes a single number if not a string 6863 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 6864 6865 for ( ; i < 4; i++ ) { 6866 expanded[ prefix + cssExpand[ i ] + suffix ] = 6867 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 6868 } 6869 6870 return expanded; 6871 } 6872 }; 6873 6874 if ( prefix !== "margin" ) { 6875 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 6876 } 6877} ); 6878 6879jQuery.fn.extend( { 6880 css: function( name, value ) { 6881 return access( this, function( elem, name, value ) { 6882 var styles, len, 6883 map = {}, 6884 i = 0; 6885 6886 if ( Array.isArray( name ) ) { 6887 styles = getStyles( elem ); 6888 len = name.length; 6889 6890 for ( ; i < len; i++ ) { 6891 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 6892 } 6893 6894 return map; 6895 } 6896 6897 return value !== undefined ? 6898 jQuery.style( elem, name, value ) : 6899 jQuery.css( elem, name ); 6900 }, name, value, arguments.length > 1 ); 6901 } 6902} ); 6903 6904 6905function Tween( elem, options, prop, end, easing ) { 6906 return new Tween.prototype.init( elem, options, prop, end, easing ); 6907} 6908jQuery.Tween = Tween; 6909 6910Tween.prototype = { 6911 constructor: Tween, 6912 init: function( elem, options, prop, end, easing, unit ) { 6913 this.elem = elem; 6914 this.prop = prop; 6915 this.easing = easing || jQuery.easing._default; 6916 this.options = options; 6917 this.start = this.now = this.cur(); 6918 this.end = end; 6919 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 6920 }, 6921 cur: function() { 6922 var hooks = Tween.propHooks[ this.prop ]; 6923 6924 return hooks && hooks.get ? 6925 hooks.get( this ) : 6926 Tween.propHooks._default.get( this ); 6927 }, 6928 run: function( percent ) { 6929 var eased, 6930 hooks = Tween.propHooks[ this.prop ]; 6931 6932 if ( this.options.duration ) { 6933 this.pos = eased = jQuery.easing[ this.easing ]( 6934 percent, this.options.duration * percent, 0, 1, this.options.duration 6935 ); 6936 } else { 6937 this.pos = eased = percent; 6938 } 6939 this.now = ( this.end - this.start ) * eased + this.start; 6940 6941 if ( this.options.step ) { 6942 this.options.step.call( this.elem, this.now, this ); 6943 } 6944 6945 if ( hooks && hooks.set ) { 6946 hooks.set( this ); 6947 } else { 6948 Tween.propHooks._default.set( this ); 6949 } 6950 return this; 6951 } 6952}; 6953 6954Tween.prototype.init.prototype = Tween.prototype; 6955 6956Tween.propHooks = { 6957 _default: { 6958 get: function( tween ) { 6959 var result; 6960 6961 // Use a property on the element directly when it is not a DOM element, 6962 // or when there is no matching style property that exists. 6963 if ( tween.elem.nodeType !== 1 || 6964 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 6965 return tween.elem[ tween.prop ]; 6966 } 6967 6968 // Passing an empty string as a 3rd parameter to .css will automatically 6969 // attempt a parseFloat and fallback to a string if the parse fails. 6970 // Simple values such as "10px" are parsed to Float; 6971 // complex values such as "rotate(1rad)" are returned as-is. 6972 result = jQuery.css( tween.elem, tween.prop, "" ); 6973 6974 // Empty strings, null, undefined and "auto" are converted to 0. 6975 return !result || result === "auto" ? 0 : result; 6976 }, 6977 set: function( tween ) { 6978 6979 // Use step hook for back compat. 6980 // Use cssHook if its there. 6981 // Use .style if available and use plain properties where available. 6982 if ( jQuery.fx.step[ tween.prop ] ) { 6983 jQuery.fx.step[ tween.prop ]( tween ); 6984 } else if ( tween.elem.nodeType === 1 && ( 6985 jQuery.cssHooks[ tween.prop ] || 6986 tween.elem.style[ finalPropName( tween.prop ) ] != null
vendor: 29,107 bytes, lines 6986-8183
6986 ) ) { 6987 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 6988 } else { 6989 tween.elem[ tween.prop ] = tween.now; 6990 } 6991 } 6992 } 6993}; 6994 6995// Support: IE <=9 only 6996// Panic based approach to setting things on disconnected nodes 6997Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 6998 set: function( tween ) { 6999 if ( tween.elem.nodeType && tween.elem.parentNode ) { 7000 tween.elem[ tween.prop ] = tween.now; 7001 } 7002 } 7003}; 7004 7005jQuery.easing = { 7006 linear: function( p ) { 7007 return p; 7008 }, 7009 swing: function( p ) { 7010 return 0.5 - Math.cos( p * Math.PI ) / 2; 7011 }, 7012 _default: "swing" 7013}; 7014 7015jQuery.fx = Tween.prototype.init; 7016 7017// Back compat <1.8 extension point 7018jQuery.fx.step = {}; 7019 7020 7021 7022 7023var 7024 fxNow, inProgress, 7025 rfxtypes = /^(?:toggle|show|hide)$/, 7026 rrun = /queueHooks$/; 7027 7028function schedule() { 7029 if ( inProgress ) { 7030 if ( document.hidden === false && window.requestAnimationFrame ) { 7031 window.requestAnimationFrame( schedule ); 7032 } else { 7033 window.setTimeout( schedule, jQuery.fx.interval ); 7034 } 7035 7036 jQuery.fx.tick(); 7037 } 7038} 7039 7040// Animations created synchronously will run synchronously 7041function createFxNow() { 7042 window.setTimeout( function() { 7043 fxNow = undefined; 7044 } ); 7045 return ( fxNow = Date.now() ); 7046} 7047 7048// Generate parameters to create a standard animation 7049function genFx( type, includeWidth ) { 7050 var which, 7051 i = 0, 7052 attrs = { height: type }; 7053 7054 // If we include width, step value is 1 to do all cssExpand values, 7055 // otherwise step value is 2 to skip over Left and Right 7056 includeWidth = includeWidth ? 1 : 0; 7057 for ( ; i < 4; i += 2 - includeWidth ) { 7058 which = cssExpand[ i ]; 7059 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 7060 } 7061 7062 if ( includeWidth ) { 7063 attrs.opacity = attrs.width = type; 7064 } 7065 7066 return attrs; 7067} 7068 7069function createTween( value, prop, animation ) { 7070 var tween, 7071 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 7072 index = 0, 7073 length = collection.length; 7074 for ( ; index < length; index++ ) { 7075 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 7076 7077 // We're done with this property 7078 return tween; 7079 } 7080 } 7081} 7082 7083function defaultPrefilter( elem, props, opts ) { 7084 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 7085 isBox = "width" in props || "height" in props, 7086 anim = this, 7087 orig = {}, 7088 style = elem.style, 7089 hidden = elem.nodeType && isHiddenWithinTree( elem ), 7090 dataShow = dataPriv.get( elem, "fxshow" ); 7091 7092 // Queue-skipping animations hijack the fx hooks 7093 if ( !opts.queue ) { 7094 hooks = jQuery._queueHooks( elem, "fx" ); 7095 if ( hooks.unqueued == null ) { 7096 hooks.unqueued = 0; 7097 oldfire = hooks.empty.fire; 7098 hooks.empty.fire = function() { 7099 if ( !hooks.unqueued ) { 7100 oldfire(); 7101 } 7102 }; 7103 } 7104 hooks.unqueued++; 7105 7106 anim.always( function() { 7107 7108 // Ensure the complete handler is called before this completes 7109 anim.always( function() { 7110 hooks.unqueued--; 7111 if ( !jQuery.queue( elem, "fx" ).length ) { 7112 hooks.empty.fire(); 7113 } 7114 } ); 7115 } ); 7116 } 7117 7118 // Detect show/hide animations 7119 for ( prop in props ) { 7120 value = props[ prop ]; 7121 if ( rfxtypes.test( value ) ) { 7122 delete props[ prop ]; 7123 toggle = toggle || value === "toggle"; 7124 if ( value === ( hidden ? "hide" : "show" ) ) { 7125 7126 // Pretend to be hidden if this is a "show" and 7127 // there is still data from a stopped show/hide 7128 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 7129 hidden = true; 7130 7131 // Ignore all other no-op show/hide data 7132 } else { 7133 continue; 7134 } 7135 } 7136 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 7137 } 7138 } 7139 7140 // Bail out if this is a no-op like .hide().hide() 7141 propTween = !jQuery.isEmptyObject( props ); 7142 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 7143 return; 7144 } 7145 7146 // Restrict "overflow" and "display" styles during box animations 7147 if ( isBox && elem.nodeType === 1 ) { 7148 7149 // Support: IE <=9 - 11, Edge 12 - 15 7150 // Record all 3 overflow attributes because IE does not infer the shorthand 7151 // from identically-valued overflowX and overflowY and Edge just mirrors 7152 // the overflowX value there. 7153 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 7154 7155 // Identify a display type, preferring old show/hide data over the CSS cascade 7156 restoreDisplay = dataShow && dataShow.display; 7157 if ( restoreDisplay == null ) { 7158 restoreDisplay = dataPriv.get( elem, "display" ); 7159 } 7160 display = jQuery.css( elem, "display" ); 7161 if ( display === "none" ) { 7162 if ( restoreDisplay ) { 7163 display = restoreDisplay; 7164 } else { 7165 7166 // Get nonempty value(s) by temporarily forcing visibility 7167 showHide( [ elem ], true ); 7168 restoreDisplay = elem.style.display || restoreDisplay; 7169 display = jQuery.css( elem, "display" ); 7170 showHide( [ elem ] ); 7171 } 7172 } 7173 7174 // Animate inline elements as inline-block 7175 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 7176 if ( jQuery.css( elem, "float" ) === "none" ) { 7177 7178 // Restore the original display value at the end of pure show/hide animations 7179 if ( !propTween ) { 7180 anim.done( function() { 7181 style.display = restoreDisplay; 7182 } ); 7183 if ( restoreDisplay == null ) { 7184 display = style.display; 7185 restoreDisplay = display === "none" ? "" : display; 7186 } 7187 } 7188 style.display = "inline-block"; 7189 } 7190 } 7191 } 7192 7193 if ( opts.overflow ) { 7194 style.overflow = "hidden"; 7195 anim.always( function() { 7196 style.overflow = opts.overflow[ 0 ]; 7197 style.overflowX = opts.overflow[ 1 ]; 7198 style.overflowY = opts.overflow[ 2 ]; 7199 } ); 7200 } 7201 7202 // Implement show/hide animations 7203 propTween = false; 7204 for ( prop in orig ) { 7205 7206 // General show/hide setup for this element animation 7207 if ( !propTween ) { 7208 if ( dataShow ) { 7209 if ( "hidden" in dataShow ) { 7210 hidden = dataShow.hidden; 7211 } 7212 } else { 7213 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 7214 } 7215 7216 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 7217 if ( toggle ) { 7218 dataShow.hidden = !hidden; 7219 } 7220 7221 // Show elements before animating them 7222 if ( hidden ) { 7223 showHide( [ elem ], true ); 7224 } 7225 7226 /* eslint-disable no-loop-func */ 7227 7228 anim.done( function() { 7229 7230 /* eslint-enable no-loop-func */ 7231 7232 // The final step of a "hide" animation is actually hiding the element 7233 if ( !hidden ) { 7234 showHide( [ elem ] ); 7235 } 7236 dataPriv.remove( elem, "fxshow" ); 7237 for ( prop in orig ) { 7238 jQuery.style( elem, prop, orig[ prop ] ); 7239 } 7240 } ); 7241 } 7242 7243 // Per-property setup 7244 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 7245 if ( !( prop in dataShow ) ) { 7246 dataShow[ prop ] = propTween.start; 7247 if ( hidden ) { 7248 propTween.end = propTween.start; 7249 propTween.start = 0; 7250 } 7251 } 7252 } 7253} 7254 7255function propFilter( props, specialEasing ) { 7256 var index, name, easing, value, hooks; 7257 7258 // camelCase, specialEasing and expand cssHook pass 7259 for ( index in props ) { 7260 name = camelCase( index ); 7261 easing = specialEasing[ name ]; 7262 value = props[ index ]; 7263 if ( Array.isArray( value ) ) { 7264 easing = value[ 1 ]; 7265 value = props[ index ] = value[ 0 ]; 7266 } 7267 7268 if ( index !== name ) { 7269 props[ name ] = value; 7270 delete props[ index ]; 7271 } 7272 7273 hooks = jQuery.cssHooks[ name ]; 7274 if ( hooks && "expand" in hooks ) { 7275 value = hooks.expand( value ); 7276 delete props[ name ]; 7277 7278 // Not quite $.extend, this won't overwrite existing keys. 7279 // Reusing 'index' because we have the correct "name" 7280 for ( index in value ) { 7281 if ( !( index in props ) ) { 7282 props[ index ] = value[ index ]; 7283 specialEasing[ index ] = easing; 7284 } 7285 } 7286 } else { 7287 specialEasing[ name ] = easing; 7288 } 7289 } 7290} 7291 7292function Animation( elem, properties, options ) { 7293 var result, 7294 stopped, 7295 index = 0, 7296 length = Animation.prefilters.length, 7297 deferred = jQuery.Deferred().always( function() { 7298 7299 // Don't match elem in the :animated selector 7300 delete tick.elem; 7301 } ), 7302 tick = function() { 7303 if ( stopped ) { 7304 return false; 7305 } 7306 var currentTime = fxNow || createFxNow(), 7307 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 7308 7309 // Support: Android 2.3 only 7310 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 7311 temp = remaining / animation.duration || 0, 7312 percent = 1 - temp, 7313 index = 0, 7314 length = animation.tweens.length; 7315 7316 for ( ; index < length; index++ ) { 7317 animation.tweens[ index ].run( percent ); 7318 } 7319 7320 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 7321 7322 // If there's more to do, yield 7323 if ( percent < 1 && length ) { 7324 return remaining; 7325 } 7326 7327 // If this was an empty animation, synthesize a final progress notification 7328 if ( !length ) { 7329 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7330 } 7331 7332 // Resolve the animation and report its conclusion 7333 deferred.resolveWith( elem, [ animation ] ); 7334 return false; 7335 }, 7336 animation = deferred.promise( { 7337 elem: elem, 7338 props: jQuery.extend( {}, properties ), 7339 opts: jQuery.extend( true, { 7340 specialEasing: {}, 7341 easing: jQuery.easing._default 7342 }, options ), 7343 originalProperties: properties, 7344 originalOptions: options, 7345 startTime: fxNow || createFxNow(), 7346 duration: options.duration, 7347 tweens: [], 7348 createTween: function( prop, end ) { 7349 var tween = jQuery.Tween( elem, animation.opts, prop, end, 7350 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 7351 animation.tweens.push( tween ); 7352 return tween; 7353 }, 7354 stop: function( gotoEnd ) { 7355 var index = 0, 7356 7357 // If we are going to the end, we want to run all the tweens 7358 // otherwise we skip this part 7359 length = gotoEnd ? animation.tweens.length : 0; 7360 if ( stopped ) { 7361 return this; 7362 } 7363 stopped = true; 7364 for ( ; index < length; index++ ) { 7365 animation.tweens[ index ].run( 1 ); 7366 } 7367 7368 // Resolve when we played the last frame; otherwise, reject 7369 if ( gotoEnd ) { 7370 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7371 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 7372 } else { 7373 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 7374 } 7375 return this; 7376 } 7377 } ), 7378 props = animation.props; 7379 7380 propFilter( props, animation.opts.specialEasing ); 7381 7382 for ( ; index < length; index++ ) { 7383 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 7384 if ( result ) { 7385 if ( isFunction( result.stop ) ) { 7386 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 7387 result.stop.bind( result ); 7388 } 7389 return result; 7390 } 7391 } 7392 7393 jQuery.map( props, createTween, animation ); 7394 7395 if ( isFunction( animation.opts.start ) ) { 7396 animation.opts.start.call( elem, animation ); 7397 } 7398 7399 // Attach callbacks from options 7400 animation 7401 .progress( animation.opts.progress ) 7402 .done( animation.opts.done, animation.opts.complete ) 7403 .fail( animation.opts.fail ) 7404 .always( animation.opts.always ); 7405 7406 jQuery.fx.timer( 7407 jQuery.extend( tick, { 7408 elem: elem, 7409 anim: animation, 7410 queue: animation.opts.queue 7411 } ) 7412 ); 7413 7414 return animation; 7415} 7416 7417jQuery.Animation = jQuery.extend( Animation, { 7418 7419 tweeners: { 7420 "*": [ function( prop, value ) { 7421 var tween = this.createTween( prop, value ); 7422 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 7423 return tween; 7424 } ] 7425 }, 7426 7427 tweener: function( props, callback ) { 7428 if ( isFunction( props ) ) { 7429 callback = props; 7430 props = [ "*" ]; 7431 } else { 7432 props = props.match( rnothtmlwhite ); 7433 } 7434 7435 var prop, 7436 index = 0, 7437 length = props.length; 7438 7439 for ( ; index < length; index++ ) { 7440 prop = props[ index ]; 7441 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 7442 Animation.tweeners[ prop ].unshift( callback ); 7443 } 7444 }, 7445 7446 prefilters: [ defaultPrefilter ], 7447 7448 prefilter: function( callback, prepend ) { 7449 if ( prepend ) { 7450 Animation.prefilters.unshift( callback ); 7451 } else { 7452 Animation.prefilters.push( callback ); 7453 } 7454 } 7455} ); 7456 7457jQuery.speed = function( speed, easing, fn ) { 7458 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 7459 complete: fn || !fn && easing || 7460 isFunction( speed ) && speed, 7461 duration: speed, 7462 easing: fn && easing || easing && !isFunction( easing ) && easing 7463 }; 7464 7465 // Go to the end state if fx are off 7466 if ( jQuery.fx.off ) { 7467 opt.duration = 0; 7468 7469 } else { 7470 if ( typeof opt.duration !== "number" ) { 7471 if ( opt.duration in jQuery.fx.speeds ) { 7472 opt.duration = jQuery.fx.speeds[ opt.duration ]; 7473 7474 } else { 7475 opt.duration = jQuery.fx.speeds._default; 7476 } 7477 } 7478 } 7479 7480 // Normalize opt.queue - true/undefined/null -> "fx" 7481 if ( opt.queue == null || opt.queue === true ) { 7482 opt.queue = "fx"; 7483 } 7484 7485 // Queueing 7486 opt.old = opt.complete; 7487 7488 opt.complete = function() { 7489 if ( isFunction( opt.old ) ) { 7490 opt.old.call( this ); 7491 } 7492 7493 if ( opt.queue ) { 7494 jQuery.dequeue( this, opt.queue ); 7495 } 7496 }; 7497 7498 return opt; 7499}; 7500 7501jQuery.fn.extend( { 7502 fadeTo: function( speed, to, easing, callback ) { 7503 7504 // Show any hidden elements after setting opacity to 0 7505 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 7506 7507 // Animate to the value specified 7508 .end().animate( { opacity: to }, speed, easing, callback ); 7509 }, 7510 animate: function( prop, speed, easing, callback ) { 7511 var empty = jQuery.isEmptyObject( prop ), 7512 optall = jQuery.speed( speed, easing, callback ), 7513 doAnimation = function() { 7514 7515 // Operate on a copy of prop so per-property easing won't be lost 7516 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 7517 7518 // Empty animations, or finishing resolves immediately 7519 if ( empty || dataPriv.get( this, "finish" ) ) { 7520 anim.stop( true ); 7521 } 7522 }; 7523 doAnimation.finish = doAnimation; 7524 7525 return empty || optall.queue === false ? 7526 this.each( doAnimation ) : 7527 this.queue( optall.queue, doAnimation ); 7528 }, 7529 stop: function( type, clearQueue, gotoEnd ) { 7530 var stopQueue = function( hooks ) { 7531 var stop = hooks.stop; 7532 delete hooks.stop; 7533 stop( gotoEnd ); 7534 }; 7535 7536 if ( typeof type !== "string" ) { 7537 gotoEnd = clearQueue; 7538 clearQueue = type; 7539 type = undefined; 7540 } 7541 if ( clearQueue && type !== false ) { 7542 this.queue( type || "fx", [] ); 7543 } 7544 7545 return this.each( function() { 7546 var dequeue = true, 7547 index = type != null && type + "queueHooks", 7548 timers = jQuery.timers, 7549 data = dataPriv.get( this ); 7550 7551 if ( index ) { 7552 if ( data[ index ] && data[ index ].stop ) { 7553 stopQueue( data[ index ] ); 7554 } 7555 } else { 7556 for ( index in data ) { 7557 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 7558 stopQueue( data[ index ] ); 7559 } 7560 } 7561 } 7562 7563 for ( index = timers.length; index--; ) { 7564 if ( timers[ index ].elem === this && 7565 ( type == null || timers[ index ].queue === type ) ) { 7566 7567 timers[ index ].anim.stop( gotoEnd ); 7568 dequeue = false; 7569 timers.splice( index, 1 ); 7570 } 7571 } 7572 7573 // Start the next in the queue if the last step wasn't forced. 7574 // Timers currently will call their complete callbacks, which 7575 // will dequeue but only if they were gotoEnd. 7576 if ( dequeue || !gotoEnd ) { 7577 jQuery.dequeue( this, type ); 7578 } 7579 } ); 7580 }, 7581 finish: function( type ) { 7582 if ( type !== false ) { 7583 type = type || "fx"; 7584 } 7585 return this.each( function() { 7586 var index, 7587 data = dataPriv.get( this ), 7588 queue = data[ type + "queue" ], 7589 hooks = data[ type + "queueHooks" ], 7590 timers = jQuery.timers, 7591 length = queue ? queue.length : 0; 7592 7593 // Enable finishing flag on private data 7594 data.finish = true; 7595 7596 // Empty the queue first 7597 jQuery.queue( this, type, [] ); 7598 7599 if ( hooks && hooks.stop ) { 7600 hooks.stop.call( this, true ); 7601 } 7602 7603 // Look for any active animations, and finish them 7604 for ( index = timers.length; index--; ) { 7605 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 7606 timers[ index ].anim.stop( true ); 7607 timers.splice( index, 1 ); 7608 } 7609 } 7610 7611 // Look for any animations in the old queue and finish them 7612 for ( index = 0; index < length; index++ ) { 7613 if ( queue[ index ] && queue[ index ].finish ) { 7614 queue[ index ].finish.call( this ); 7615 } 7616 } 7617 7618 // Turn off finishing flag 7619 delete data.finish; 7620 } ); 7621 } 7622} ); 7623 7624jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { 7625 var cssFn = jQuery.fn[ name ]; 7626 jQuery.fn[ name ] = function( speed, easing, callback ) { 7627 return speed == null || typeof speed === "boolean" ? 7628 cssFn.apply( this, arguments ) : 7629 this.animate( genFx( name, true ), speed, easing, callback ); 7630 }; 7631} ); 7632 7633// Generate shortcuts for custom animations 7634jQuery.each( { 7635 slideDown: genFx( "show" ), 7636 slideUp: genFx( "hide" ), 7637 slideToggle: genFx( "toggle" ), 7638 fadeIn: { opacity: "show" }, 7639 fadeOut: { opacity: "hide" }, 7640 fadeToggle: { opacity: "toggle" } 7641}, function( name, props ) { 7642 jQuery.fn[ name ] = function( speed, easing, callback ) { 7643 return this.animate( props, speed, easing, callback ); 7644 }; 7645} ); 7646 7647jQuery.timers = []; 7648jQuery.fx.tick = function() { 7649 var timer, 7650 i = 0, 7651 timers = jQuery.timers; 7652 7653 fxNow = Date.now(); 7654 7655 for ( ; i < timers.length; i++ ) { 7656 timer = timers[ i ]; 7657 7658 // Run the timer and safely remove it when done (allowing for external removal) 7659 if ( !timer() && timers[ i ] === timer ) { 7660 timers.splice( i--, 1 ); 7661 } 7662 } 7663 7664 if ( !timers.length ) { 7665 jQuery.fx.stop(); 7666 } 7667 fxNow = undefined; 7668}; 7669 7670jQuery.fx.timer = function( timer ) { 7671 jQuery.timers.push( timer ); 7672 jQuery.fx.start(); 7673}; 7674 7675jQuery.fx.interval = 13; 7676jQuery.fx.start = function() { 7677 if ( inProgress ) { 7678 return; 7679 } 7680 7681 inProgress = true; 7682 schedule(); 7683}; 7684 7685jQuery.fx.stop = function() { 7686 inProgress = null; 7687}; 7688 7689jQuery.fx.speeds = { 7690 slow: 600, 7691 fast: 200, 7692 7693 // Default speed 7694 _default: 400 7695}; 7696 7697 7698// Based off of the plugin by Clint Helfers, with permission. 7699// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ 7700jQuery.fn.delay = function( time, type ) { 7701 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 7702 type = type || "fx"; 7703 7704 return this.queue( type, function( next, hooks ) { 7705 var timeout = window.setTimeout( next, time ); 7706 hooks.stop = function() { 7707 window.clearTimeout( timeout ); 7708 }; 7709 } ); 7710}; 7711 7712 7713( function() { 7714 var input = document.createElement( "input" ), 7715 select = document.createElement( "select" ), 7716 opt = select.appendChild( document.createElement( "option" ) ); 7717 7718 input.type = "checkbox"; 7719 7720 // Support: Android <=4.3 only 7721 // Default value for a checkbox should be "on" 7722 support.checkOn = input.value !== ""; 7723 7724 // Support: IE <=11 only 7725 // Must access selectedIndex to make default options select 7726 support.optSelected = opt.selected; 7727 7728 // Support: IE <=11 only 7729 // An input loses its value after becoming a radio 7730 input = document.createElement( "input" ); 7731 input.value = "t"; 7732 input.type = "radio"; 7733 support.radioValue = input.value === "t"; 7734} )(); 7735 7736 7737var boolHook, 7738 attrHandle = jQuery.expr.attrHandle; 7739 7740jQuery.fn.extend( { 7741 attr: function( name, value ) { 7742 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 7743 }, 7744 7745 removeAttr: function( name ) { 7746 return this.each( function() { 7747 jQuery.removeAttr( this, name ); 7748 } ); 7749 } 7750} ); 7751 7752jQuery.extend( { 7753 attr: function( elem, name, value ) { 7754 var ret, hooks, 7755 nType = elem.nodeType; 7756 7757 // Don't get/set attributes on text, comment and attribute nodes 7758 if ( nType === 3 || nType === 8 || nType === 2 ) { 7759 return; 7760 } 7761 7762 // Fallback to prop when attributes are not supported 7763 if ( typeof elem.getAttribute === "undefined" ) { 7764 return jQuery.prop( elem, name, value ); 7765 } 7766 7767 // Attribute hooks are determined by the lowercase version 7768 // Grab necessary hook if one is defined 7769 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7770 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 7771 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 7772 } 7773 7774 if ( value !== undefined ) { 7775 if ( value === null ) { 7776 jQuery.removeAttr( elem, name ); 7777 return; 7778 } 7779 7780 if ( hooks && "set" in hooks && 7781 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7782 return ret; 7783 } 7784 7785 elem.setAttribute( name, value + "" ); 7786 return value; 7787 } 7788 7789 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7790 return ret; 7791 } 7792 7793 ret = jQuery.find.attr( elem, name ); 7794 7795 // Non-existent attributes return null, we normalize to undefined 7796 return ret == null ? undefined : ret; 7797 }, 7798 7799 attrHooks: { 7800 type: { 7801 set: function( elem, value ) { 7802 if ( !support.radioValue && value === "radio" && 7803 nodeName( elem, "input" ) ) { 7804 var val = elem.value; 7805 elem.setAttribute( "type", value ); 7806 if ( val ) { 7807 elem.value = val; 7808 } 7809 return value; 7810 } 7811 } 7812 } 7813 }, 7814 7815 removeAttr: function( elem, value ) { 7816 var name, 7817 i = 0, 7818 7819 // Attribute names can contain non-HTML whitespace characters 7820 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 7821 attrNames = value && value.match( rnothtmlwhite ); 7822 7823 if ( attrNames && elem.nodeType === 1 ) { 7824 while ( ( name = attrNames[ i++ ] ) ) { 7825 elem.removeAttribute( name ); 7826 } 7827 } 7828 } 7829} ); 7830 7831// Hooks for boolean attributes 7832boolHook = { 7833 set: function( elem, value, name ) { 7834 if ( value === false ) { 7835 7836 // Remove boolean attributes when set to false 7837 jQuery.removeAttr( elem, name ); 7838 } else { 7839 elem.setAttribute( name, name ); 7840 } 7841 return name; 7842 } 7843}; 7844 7845jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { 7846 var getter = attrHandle[ name ] || jQuery.find.attr; 7847 7848 attrHandle[ name ] = function( elem, name, isXML ) { 7849 var ret, handle, 7850 lowercaseName = name.toLowerCase(); 7851 7852 if ( !isXML ) { 7853 7854 // Avoid an infinite loop by temporarily removing this function from the getter 7855 handle = attrHandle[ lowercaseName ]; 7856 attrHandle[ lowercaseName ] = ret; 7857 ret = getter( elem, name, isXML ) != null ? 7858 lowercaseName : 7859 null; 7860 attrHandle[ lowercaseName ] = handle; 7861 } 7862 return ret; 7863 }; 7864} ); 7865 7866 7867 7868 7869var rfocusable = /^(?:input|select|textarea|button)$/i, 7870 rclickable = /^(?:a|area)$/i; 7871 7872jQuery.fn.extend( { 7873 prop: function( name, value ) { 7874 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 7875 }, 7876 7877 removeProp: function( name ) { 7878 return this.each( function() { 7879 delete this[ jQuery.propFix[ name ] || name ]; 7880 } ); 7881 } 7882} ); 7883 7884jQuery.extend( { 7885 prop: function( elem, name, value ) { 7886 var ret, hooks, 7887 nType = elem.nodeType; 7888 7889 // Don't get/set properties on text, comment and attribute nodes 7890 if ( nType === 3 || nType === 8 || nType === 2 ) { 7891 return; 7892 } 7893 7894 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7895 7896 // Fix name and attach hooks 7897 name = jQuery.propFix[ name ] || name; 7898 hooks = jQuery.propHooks[ name ]; 7899 } 7900 7901 if ( value !== undefined ) { 7902 if ( hooks && "set" in hooks && 7903 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7904 return ret; 7905 } 7906 7907 return ( elem[ name ] = value ); 7908 } 7909 7910 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7911 return ret; 7912 } 7913 7914 return elem[ name ]; 7915 }, 7916 7917 propHooks: { 7918 tabIndex: { 7919 get: function( elem ) { 7920 7921 // Support: IE <=9 - 11 only 7922 // elem.tabIndex doesn't always return the 7923 // correct value when it hasn't been explicitly set 7924 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 7925 // Use proper attribute retrieval(#12072) 7926 var tabindex = jQuery.find.attr( elem, "tabindex" ); 7927 7928 if ( tabindex ) { 7929 return parseInt( tabindex, 10 ); 7930 } 7931 7932 if ( 7933 rfocusable.test( elem.nodeName ) || 7934 rclickable.test( elem.nodeName ) && 7935 elem.href 7936 ) { 7937 return 0; 7938 } 7939 7940 return -1; 7941 } 7942 } 7943 }, 7944 7945 propFix: { 7946 "for": "htmlFor", 7947 "class": "className" 7948 } 7949} ); 7950 7951// Support: IE <=11 only 7952// Accessing the selectedIndex property 7953// forces the browser to respect setting selected 7954// on the option 7955// The getter ensures a default option is selected 7956// when in an optgroup 7957// eslint rule "no-unused-expressions" is disabled for this code 7958// since it considers such accessions noop 7959if ( !support.optSelected ) { 7960 jQuery.propHooks.selected = { 7961 get: function( elem ) { 7962 7963 /* eslint no-unused-expressions: "off" */ 7964 7965 var parent = elem.parentNode; 7966 if ( parent && parent.parentNode ) { 7967 parent.parentNode.selectedIndex; 7968 } 7969 return null; 7970 }, 7971 set: function( elem ) { 7972 7973 /* eslint no-unused-expressions: "off" */ 7974 7975 var parent = elem.parentNode; 7976 if ( parent ) { 7977 parent.selectedIndex; 7978 7979 if ( parent.parentNode ) { 7980 parent.parentNode.selectedIndex; 7981 } 7982 } 7983 } 7984 }; 7985} 7986 7987jQuery.each( [ 7988 "tabIndex", 7989 "readOnly", 7990 "maxLength", 7991 "cellSpacing", 7992 "cellPadding", 7993 "rowSpan", 7994 "colSpan", 7995 "useMap", 7996 "frameBorder", 7997 "contentEditable" 7998], function() { 7999 jQuery.propFix[ this.toLowerCase() ] = this; 8000} ); 8001 8002 8003 8004 8005 // Strip and collapse whitespace according to HTML spec 8006 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 8007 function stripAndCollapse( value ) { 8008 var tokens = value.match( rnothtmlwhite ) || []; 8009 return tokens.join( " " ); 8010 } 8011 8012 8013function getClass( elem ) { 8014 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 8015} 8016 8017function classesToArray( value ) { 8018 if ( Array.isArray( value ) ) { 8019 return value; 8020 } 8021 if ( typeof value === "string" ) { 8022 return value.match( rnothtmlwhite ) || []; 8023 } 8024 return []; 8025} 8026 8027jQuery.fn.extend( { 8028 addClass: function( value ) { 8029 var classes, elem, cur, curValue, clazz, j, finalValue, 8030 i = 0; 8031 8032 if ( isFunction( value ) ) { 8033 return this.each( function( j ) { 8034 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 8035 } ); 8036 } 8037 8038 classes = classesToArray( value ); 8039 8040 if ( classes.length ) { 8041 while ( ( elem = this[ i++ ] ) ) { 8042 curValue = getClass( elem ); 8043 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 8044 8045 if ( cur ) { 8046 j = 0; 8047 while ( ( clazz = classes[ j++ ] ) ) { 8048 if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 8049 cur += clazz + " "; 8050 } 8051 } 8052 8053 // Only assign if different to avoid unneeded rendering. 8054 finalValue = stripAndCollapse( cur ); 8055 if ( curValue !== finalValue ) { 8056 elem.setAttribute( "class", finalValue ); 8057 } 8058 } 8059 } 8060 } 8061 8062 return this; 8063 }, 8064 8065 removeClass: function( value ) { 8066 var classes, elem, cur, curValue, clazz, j, finalValue, 8067 i = 0; 8068 8069 if ( isFunction( value ) ) { 8070 return this.each( function( j ) { 8071 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 8072 } ); 8073 } 8074 8075 if ( !arguments.length ) { 8076 return this.attr( "class", "" ); 8077 } 8078 8079 classes = classesToArray( value ); 8080 8081 if ( classes.length ) { 8082 while ( ( elem = this[ i++ ] ) ) { 8083 curValue = getClass( elem ); 8084 8085 // This expression is here for better compressibility (see addClass) 8086 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 8087 8088 if ( cur ) { 8089 j = 0; 8090 while ( ( clazz = classes[ j++ ] ) ) { 8091 8092 // Remove *all* instances 8093 while ( cur.indexOf( " " + clazz + " " ) > -1 ) { 8094 cur = cur.replace( " " + clazz + " ", " " ); 8095 } 8096 } 8097 8098 // Only assign if different to avoid unneeded rendering. 8099 finalValue = stripAndCollapse( cur ); 8100 if ( curValue !== finalValue ) { 8101 elem.setAttribute( "class", finalValue ); 8102 } 8103 } 8104 } 8105 } 8106 8107 return this; 8108 }, 8109 8110 toggleClass: function( value, stateVal ) { 8111 var type = typeof value, 8112 isValidValue = type === "string" || Array.isArray( value ); 8113 8114 if ( typeof stateVal === "boolean" && isValidValue ) { 8115 return stateVal ? this.addClass( value ) : this.removeClass( value ); 8116 } 8117 8118 if ( isFunction( value ) ) { 8119 return this.each( function( i ) { 8120 jQuery( this ).toggleClass( 8121 value.call( this, i, getClass( this ), stateVal ), 8122 stateVal 8123 ); 8124 } ); 8125 } 8126 8127 return this.each( function() { 8128 var className, i, self, classNames; 8129 8130 if ( isValidValue ) { 8131 8132 // Toggle individual class names 8133 i = 0; 8134 self = jQuery( this ); 8135 classNames = classesToArray( value ); 8136 8137 while ( ( className = classNames[ i++ ] ) ) { 8138 8139 // Check each className given, space separated list 8140 if ( self.hasClass( className ) ) { 8141 self.removeClass( className ); 8142 } else { 8143 self.addClass( className ); 8144 } 8145 } 8146 8147 // Toggle whole class name 8148 } else if ( value === undefined || type === "boolean" ) { 8149 className = getClass( this ); 8150 if ( className ) { 8151 8152 // Store className if set 8153 dataPriv.set( this, "__className__", className ); 8154 } 8155 8156 // If the element has a class name or if we're passed `false`, 8157 // then remove the whole classname (if there was one, the above saved it). 8158 // Otherwise bring back whatever was previously saved (if anything), 8159 // falling back to the empty string if nothing was stored. 8160 if ( this.setAttribute ) { 8161 this.setAttribute( "class", 8162 className || value === false ? 8163 "" : 8164 dataPriv.get( this, "__className__" ) || "" 8165 ); 8166 } 8167 } 8168 } ); 8169 }, 8170 8171 hasClass: function( selector ) { 8172 var className, elem, 8173 i = 0; 8174 8175 className = " " + selector + " "; 8176 while ( ( elem = this[ i++ ] ) ) { 8177 if ( elem.nodeType === 1 && 8178 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 8179 return true; 8180 } 8181 } 8182 8183 return false;
vendor: 5,544 bytes, lines 8184-8419
8184 } 8185} ); 8186 8187 8188 8189 8190var rreturn = /\r/g; 8191 8192jQuery.fn.extend( { 8193 val: function( value ) { 8194 var hooks, ret, valueIsFunction, 8195 elem = this[ 0 ]; 8196 8197 if ( !arguments.length ) { 8198 if ( elem ) { 8199 hooks = jQuery.valHooks[ elem.type ] || 8200 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 8201 8202 if ( hooks && 8203 "get" in hooks && 8204 ( ret = hooks.get( elem, "value" ) ) !== undefined 8205 ) { 8206 return ret; 8207 } 8208 8209 ret = elem.value; 8210 8211 // Handle most common string cases 8212 if ( typeof ret === "string" ) { 8213 return ret.replace( rreturn, "" ); 8214 } 8215 8216 // Handle cases where value is null/undef or number 8217 return ret == null ? "" : ret; 8218 } 8219 8220 return; 8221 } 8222 8223 valueIsFunction = isFunction( value ); 8224 8225 return this.each( function( i ) { 8226 var val; 8227 8228 if ( this.nodeType !== 1 ) { 8229 return; 8230 } 8231 8232 if ( valueIsFunction ) { 8233 val = value.call( this, i, jQuery( this ).val() ); 8234 } else { 8235 val = value; 8236 } 8237 8238 // Treat null/undefined as ""; convert numbers to string 8239 if ( val == null ) { 8240 val = ""; 8241 8242 } else if ( typeof val === "number" ) { 8243 val += ""; 8244 8245 } else if ( Array.isArray( val ) ) { 8246 val = jQuery.map( val, function( value ) { 8247 return value == null ? "" : value + ""; 8248 } ); 8249 } 8250 8251 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 8252 8253 // If set returns undefined, fall back to normal setting 8254 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 8255 this.value = val; 8256 } 8257 } ); 8258 } 8259} ); 8260 8261jQuery.extend( { 8262 valHooks: { 8263 option: { 8264 get: function( elem ) { 8265 8266 var val = jQuery.find.attr( elem, "value" ); 8267 return val != null ? 8268 val : 8269 8270 // Support: IE <=10 - 11 only 8271 // option.text throws exceptions (#14686, #14858) 8272 // Strip and collapse whitespace 8273 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 8274 stripAndCollapse( jQuery.text( elem ) ); 8275 } 8276 }, 8277 select: { 8278 get: function( elem ) { 8279 var value, option, i, 8280 options = elem.options, 8281 index = elem.selectedIndex, 8282 one = elem.type === "select-one", 8283 values = one ? null : [], 8284 max = one ? index + 1 : options.length; 8285 8286 if ( index < 0 ) { 8287 i = max; 8288 8289 } else { 8290 i = one ? index : 0; 8291 } 8292 8293 // Loop through all the selected options 8294 for ( ; i < max; i++ ) { 8295 option = options[ i ]; 8296 8297 // Support: IE <=9 only 8298 // IE8-9 doesn't update selected after form reset (#2551) 8299 if ( ( option.selected || i === index ) && 8300 8301 // Don't return options that are disabled or in a disabled optgroup 8302 !option.disabled && 8303 ( !option.parentNode.disabled || 8304 !nodeName( option.parentNode, "optgroup" ) ) ) { 8305 8306 // Get the specific value for the option 8307 value = jQuery( option ).val(); 8308 8309 // We don't need an array for one selects 8310 if ( one ) { 8311 return value; 8312 } 8313 8314 // Multi-Selects return an array 8315 values.push( value ); 8316 } 8317 } 8318 8319 return values; 8320 }, 8321 8322 set: function( elem, value ) { 8323 var optionSet, option, 8324 options = elem.options, 8325 values = jQuery.makeArray( value ), 8326 i = options.length; 8327 8328 while ( i-- ) { 8329 option = options[ i ]; 8330 8331 /* eslint-disable no-cond-assign */ 8332 8333 if ( option.selected = 8334 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 8335 ) { 8336 optionSet = true; 8337 } 8338 8339 /* eslint-enable no-cond-assign */ 8340 } 8341 8342 // Force browsers to behave consistently when non-matching value is set 8343 if ( !optionSet ) { 8344 elem.selectedIndex = -1; 8345 } 8346 return values; 8347 } 8348 } 8349 } 8350} ); 8351 8352// Radios and checkboxes getter/setter 8353jQuery.each( [ "radio", "checkbox" ], function() { 8354 jQuery.valHooks[ this ] = { 8355 set: function( elem, value ) { 8356 if ( Array.isArray( value ) ) { 8357 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 8358 } 8359 } 8360 }; 8361 if ( !support.checkOn ) { 8362 jQuery.valHooks[ this ].get = function( elem ) { 8363 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 8364 }; 8365 } 8366} ); 8367 8368 8369 8370 8371// Return jQuery for attributes-only inclusion 8372 8373 8374support.focusin = "onfocusin" in window; 8375 8376 8377var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 8378 stopPropagationCallback = function( e ) { 8379 e.stopPropagation(); 8380 }; 8381 8382jQuery.extend( jQuery.event, { 8383 8384 trigger: function( event, data, elem, onlyHandlers ) { 8385 8386 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 8387 eventPath = [ elem || document ], 8388 type = hasOwn.call( event, "type" ) ? event.type : event, 8389 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 8390 8391 cur = lastElement = tmp = elem = elem || document; 8392 8393 // Don't do events on text and comment nodes 8394 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 8395 return; 8396 } 8397 8398 // focus/blur morphs to focusin/out; ensure we're not firing them right now 8399 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 8400 return; 8401 } 8402 8403 if ( type.indexOf( "." ) > -1 ) { 8404 8405 // Namespaced trigger; create a regexp to match event type in handle() 8406 namespaces = type.split( "." ); 8407 type = namespaces.shift(); 8408 namespaces.sort(); 8409 } 8410 ontype = type.indexOf( ":" ) < 0 && "on" + type; 8411 8412 // Caller can pass in a jQuery.Event object, Object, or just an event type string 8413 event = event[ jQuery.expando ] ? 8414 event : 8415 new jQuery.Event( type, typeof event === "object" && event ); 8416 8417 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 8418 event.isTrigger = onlyHandlers ? 2 : 3; 8419 event.namespace = namespaces.join( "." );
vendor: 7,012 bytes, lines 8420-8693
8420 event.rnamespace = event.namespace ? 8421 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 8422 null; 8423 8424 // Clean up the event in case it is being reused 8425 event.result = undefined; 8426 if ( !event.target ) { 8427 event.target = elem; 8428 } 8429 8430 // Clone any incoming data and prepend the event, creating the handler arg list 8431 data = data == null ? 8432 [ event ] : 8433 jQuery.makeArray( data, [ event ] ); 8434 8435 // Allow special events to draw outside the lines 8436 special = jQuery.event.special[ type ] || {}; 8437 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 8438 return; 8439 } 8440 8441 // Determine event propagation path in advance, per W3C events spec (#9951) 8442 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 8443 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 8444 8445 bubbleType = special.delegateType || type; 8446 if ( !rfocusMorph.test( bubbleType + type ) ) { 8447 cur = cur.parentNode; 8448 } 8449 for ( ; cur; cur = cur.parentNode ) { 8450 eventPath.push( cur ); 8451 tmp = cur; 8452 } 8453 8454 // Only add window if we got to document (e.g., not plain obj or detached DOM) 8455 if ( tmp === ( elem.ownerDocument || document ) ) { 8456 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 8457 } 8458 } 8459 8460 // Fire handlers on the event path 8461 i = 0; 8462 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 8463 lastElement = cur; 8464 event.type = i > 1 ? 8465 bubbleType : 8466 special.bindType || type; 8467 8468 // jQuery handler 8469 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && 8470 dataPriv.get( cur, "handle" ); 8471 if ( handle ) { 8472 handle.apply( cur, data ); 8473 } 8474 8475 // Native handler 8476 handle = ontype && cur[ ontype ]; 8477 if ( handle && handle.apply && acceptData( cur ) ) { 8478 event.result = handle.apply( cur, data ); 8479 if ( event.result === false ) { 8480 event.preventDefault(); 8481 } 8482 } 8483 } 8484 event.type = type; 8485 8486 // If nobody prevented the default action, do it now 8487 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 8488 8489 if ( ( !special._default || 8490 special._default.apply( eventPath.pop(), data ) === false ) && 8491 acceptData( elem ) ) { 8492 8493 // Call a native DOM method on the target with the same name as the event. 8494 // Don't do default actions on window, that's where global variables be (#6170) 8495 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 8496 8497 // Don't re-trigger an onFOO event when we call its FOO() method 8498 tmp = elem[ ontype ]; 8499 8500 if ( tmp ) { 8501 elem[ ontype ] = null; 8502 } 8503 8504 // Prevent re-triggering of the same event, since we already bubbled it above 8505 jQuery.event.triggered = type; 8506 8507 if ( event.isPropagationStopped() ) { 8508 lastElement.addEventListener( type, stopPropagationCallback ); 8509 } 8510 8511 elem[ type ](); 8512 8513 if ( event.isPropagationStopped() ) { 8514 lastElement.removeEventListener( type, stopPropagationCallback ); 8515 } 8516 8517 jQuery.event.triggered = undefined; 8518 8519 if ( tmp ) { 8520 elem[ ontype ] = tmp; 8521 } 8522 } 8523 } 8524 } 8525 8526 return event.result; 8527 }, 8528 8529 // Piggyback on a donor event to simulate a different one 8530 // Used only for `focus(in | out)` events 8531 simulate: function( type, elem, event ) { 8532 var e = jQuery.extend( 8533 new jQuery.Event(), 8534 event, 8535 { 8536 type: type, 8537 isSimulated: true 8538 } 8539 ); 8540 8541 jQuery.event.trigger( e, null, elem ); 8542 } 8543 8544} ); 8545 8546jQuery.fn.extend( { 8547 8548 trigger: function( type, data ) { 8549 return this.each( function() { 8550 jQuery.event.trigger( type, data, this ); 8551 } ); 8552 }, 8553 triggerHandler: function( type, data ) { 8554 var elem = this[ 0 ]; 8555 if ( elem ) { 8556 return jQuery.event.trigger( type, data, elem, true ); 8557 } 8558 } 8559} ); 8560 8561 8562// Support: Firefox <=44 8563// Firefox doesn't have focus(in | out) events 8564// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 8565// 8566// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 8567// focus(in | out) events fire after focus & blur events, 8568// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 8569// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 8570if ( !support.focusin ) { 8571 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 8572 8573 // Attach a single capturing handler on the document while someone wants focusin/focusout 8574 var handler = function( event ) { 8575 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 8576 }; 8577 8578 jQuery.event.special[ fix ] = { 8579 setup: function() { 8580 var doc = this.ownerDocument || this, 8581 attaches = dataPriv.access( doc, fix ); 8582 8583 if ( !attaches ) { 8584 doc.addEventListener( orig, handler, true ); 8585 } 8586 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 8587 }, 8588 teardown: function() { 8589 var doc = this.ownerDocument || this, 8590 attaches = dataPriv.access( doc, fix ) - 1; 8591 8592 if ( !attaches ) { 8593 doc.removeEventListener( orig, handler, true ); 8594 dataPriv.remove( doc, fix ); 8595 8596 } else { 8597 dataPriv.access( doc, fix, attaches ); 8598 } 8599 } 8600 }; 8601 } ); 8602} 8603var location = window.location; 8604 8605var nonce = Date.now(); 8606 8607var rquery = ( /\?/ ); 8608 8609 8610 8611// Cross-browser xml parsing 8612jQuery.parseXML = function( data ) { 8613 var xml; 8614 if ( !data || typeof data !== "string" ) { 8615 return null; 8616 } 8617 8618 // Support: IE 9 - 11 only 8619 // IE throws on parseFromString with invalid input. 8620 try { 8621 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 8622 } catch ( e ) { 8623 xml = undefined; 8624 } 8625 8626 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 8627 jQuery.error( "Invalid XML: " + data ); 8628 } 8629 return xml; 8630}; 8631 8632 8633var 8634 rbracket = /\[\]$/, 8635 rCRLF = /\r?\n/g, 8636 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 8637 rsubmittable = /^(?:input|select|textarea|keygen)/i; 8638 8639function buildParams( prefix, obj, traditional, add ) { 8640 var name; 8641 8642 if ( Array.isArray( obj ) ) { 8643 8644 // Serialize array item. 8645 jQuery.each( obj, function( i, v ) { 8646 if ( traditional || rbracket.test( prefix ) ) { 8647 8648 // Treat each array item as a scalar. 8649 add( prefix, v ); 8650 8651 } else { 8652 8653 // Item is non-scalar (array or object), encode its numeric index. 8654 buildParams( 8655 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 8656 v, 8657 traditional, 8658 add 8659 ); 8660 } 8661 } ); 8662 8663 } else if ( !traditional && toType( obj ) === "object" ) { 8664 8665 // Serialize object item. 8666 for ( name in obj ) { 8667 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 8668 } 8669 8670 } else { 8671 8672 // Serialize scalar item. 8673 add( prefix, obj ); 8674 } 8675} 8676 8677// Serialize an array of form elements or a set of 8678// key/values into a query string 8679jQuery.param = function( a, traditional ) { 8680 var prefix, 8681 s = [], 8682 add = function( key, valueOrFunction ) { 8683 8684 // If value is a function, invoke it and use its return value 8685 var value = isFunction( valueOrFunction ) ? 8686 valueOrFunction() : 8687 valueOrFunction; 8688 8689 s[ s.length ] = encodeURIComponent( key ) + "=" + 8690 encodeURIComponent( value == null ? "" : value ); 8691 }; 8692 8693
8693if ( a == null ) { 8694 return ""; 8695 }
vendor: 12,730 bytes, lines 8695-9199
8695 8696 8697 // If an array was passed in, assume that it is an array of form elements. 8698 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 8699 8700 // Serialize the form elements 8701 jQuery.each( a, function() { 8702 add( this.name, this.value ); 8703 } ); 8704 8705 } else { 8706 8707 // If traditional, encode the "old" way (the way 1.3.2 or older 8708 // did it), otherwise encode params recursively. 8709 for ( prefix in a ) { 8710 buildParams( prefix, a[ prefix ], traditional, add ); 8711 } 8712 } 8713 8714 // Return the resulting serialization 8715 return s.join( "&" ); 8716}; 8717 8718jQuery.fn.extend( { 8719 serialize: function() { 8720 return jQuery.param( this.serializeArray() ); 8721 }, 8722 serializeArray: function() { 8723 return this.map( function() { 8724 8725 // Can add propHook for "elements" to filter or add form elements 8726 var elements = jQuery.prop( this, "elements" ); 8727 return elements ? jQuery.makeArray( elements ) : this; 8728 } ) 8729 .filter( function() { 8730 var type = this.type; 8731 8732 // Use .is( ":disabled" ) so that fieldset[disabled] works 8733 return this.name && !jQuery( this ).is( ":disabled" ) && 8734 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 8735 ( this.checked || !rcheckableType.test( type ) ); 8736 } ) 8737 .map( function( i, elem ) { 8738 var val = jQuery( this ).val(); 8739 8740 if ( val == null ) { 8741 return null; 8742 } 8743 8744 if ( Array.isArray( val ) ) { 8745 return jQuery.map( val, function( val ) { 8746 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8747 } ); 8748 } 8749 8750 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8751 } ).get(); 8752 } 8753} ); 8754 8755 8756var 8757 r20 = /%20/g, 8758 rhash = /#.*$/, 8759 rantiCache = /([?&])_=[^&]*/, 8760 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 8761 8762 // #7653, #8125, #8152: local protocol detection 8763 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 8764 rnoContent = /^(?:GET|HEAD)$/, 8765 rprotocol = /^\/\//, 8766 8767 /* Prefilters 8768 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 8769 * 2) These are called: 8770 * - BEFORE asking for a transport 8771 * - AFTER param serialization (s.data is a string if s.processData is true) 8772 * 3) key is the dataType 8773 * 4) the catchall symbol "*" can be used 8774 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 8775 */ 8776 prefilters = {}, 8777 8778 /* Transports bindings 8779 * 1) key is the dataType 8780 * 2) the catchall symbol "*" can be used 8781 * 3) selection will start with transport dataType and THEN go to "*" if needed 8782 */ 8783 transports = {}, 8784 8785 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 8786 allTypes = "*/".concat( "*" ), 8787 8788 // Anchor tag for parsing the document origin 8789 originAnchor = document.createElement( "a" ); 8790 originAnchor.href = location.href; 8791 8792// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 8793function addToPrefiltersOrTransports( structure ) { 8794 8795 // dataTypeExpression is optional and defaults to "*" 8796 return function( dataTypeExpression, func ) { 8797 8798 if ( typeof dataTypeExpression !== "string" ) { 8799 func = dataTypeExpression; 8800 dataTypeExpression = "*"; 8801 } 8802 8803 var dataType, 8804 i = 0, 8805 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 8806 8807 if ( isFunction( func ) ) { 8808 8809 // For each dataType in the dataTypeExpression 8810 while ( ( dataType = dataTypes[ i++ ] ) ) { 8811 8812 // Prepend if requested 8813 if ( dataType[ 0 ] === "+" ) { 8814 dataType = dataType.slice( 1 ) || "*"; 8815 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 8816 8817 // Otherwise append 8818 } else { 8819 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 8820 } 8821 } 8822 } 8823 }; 8824} 8825 8826// Base inspection function for prefilters and transports 8827function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 8828 8829 var inspected = {}, 8830 seekingTransport = ( structure === transports ); 8831 8832 function inspect( dataType ) { 8833 var selected; 8834 inspected[ dataType ] = true; 8835 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 8836 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 8837 if ( typeof dataTypeOrTransport === "string" && 8838 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 8839 8840 options.dataTypes.unshift( dataTypeOrTransport ); 8841 inspect( dataTypeOrTransport ); 8842 return false; 8843 } else if ( seekingTransport ) { 8844 return !( selected = dataTypeOrTransport ); 8845 } 8846 } ); 8847 return selected; 8848 } 8849 8850 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 8851} 8852 8853// A special extend for ajax options 8854// that takes "flat" options (not to be deep extended) 8855// Fixes #9887 8856function ajaxExtend( target, src ) { 8857 var key, deep, 8858 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 8859 8860 for ( key in src ) { 8861 if ( src[ key ] !== undefined ) { 8862 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 8863 } 8864 } 8865 if ( deep ) { 8866 jQuery.extend( true, target, deep ); 8867 } 8868 8869 return target; 8870} 8871 8872/* Handles responses to an ajax request: 8873 * - finds the right dataType (mediates between content-type and expected dataType) 8874 * - returns the corresponding response 8875 */ 8876function ajaxHandleResponses( s, jqXHR, responses ) { 8877 8878 var ct, type, finalDataType, firstDataType, 8879 contents = s.contents, 8880 dataTypes = s.dataTypes; 8881 8882 // Remove auto dataType and get content-type in the process 8883 while ( dataTypes[ 0 ] === "*" ) { 8884 dataTypes.shift(); 8885 if ( ct === undefined ) { 8886 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 8887 } 8888 } 8889 8890 // Check if we're dealing with a known content-type 8891 if ( ct ) { 8892 for ( type in contents ) { 8893 if ( contents[ type ] && contents[ type ].test( ct ) ) { 8894 dataTypes.unshift( type ); 8895 break; 8896 } 8897 } 8898 } 8899 8900 // Check to see if we have a response for the expected dataType 8901 if ( dataTypes[ 0 ] in responses ) { 8902 finalDataType = dataTypes[ 0 ]; 8903 } else { 8904 8905 // Try convertible dataTypes 8906 for ( type in responses ) { 8907 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 8908 finalDataType = type; 8909 break; 8910 } 8911 if ( !firstDataType ) { 8912 firstDataType = type; 8913 } 8914 } 8915 8916 // Or just use first one 8917 finalDataType = finalDataType || firstDataType; 8918 } 8919 8920 // If we found a dataType 8921 // We add the dataType to the list if needed 8922 // and return the corresponding response 8923 if ( finalDataType ) { 8924 if ( finalDataType !== dataTypes[ 0 ] ) { 8925 dataTypes.unshift( finalDataType ); 8926 } 8927 return responses[ finalDataType ]; 8928 } 8929} 8930 8931/* Chain conversions given the request and the original response 8932 * Also sets the responseXXX fields on the jqXHR instance 8933 */ 8934function ajaxConvert( s, response, jqXHR, isSuccess ) { 8935 var conv2, current, conv, tmp, prev, 8936 converters = {}, 8937 8938 // Work with a copy of dataTypes in case we need to modify it for conversion 8939 dataTypes = s.dataTypes.slice(); 8940 8941 // Create converters map with lowercased keys 8942 if ( dataTypes[ 1 ] ) { 8943 for ( conv in s.converters ) { 8944 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 8945 } 8946 } 8947 8948 current = dataTypes.shift(); 8949 8950 // Convert to each sequential dataType 8951 while ( current ) { 8952 8953 if ( s.responseFields[ current ] ) { 8954 jqXHR[ s.responseFields[ current ] ] = response; 8955 } 8956 8957 // Apply the dataFilter if provided 8958 if ( !prev && isSuccess && s.dataFilter ) { 8959 response = s.dataFilter( response, s.dataType ); 8960 } 8961 8962 prev = current; 8963 current = dataTypes.shift(); 8964 8965 if ( current ) { 8966 8967 // There's only work to do if current dataType is non-auto 8968 if ( current === "*" ) { 8969 8970 current = prev; 8971 8972 // Convert response if prev dataType is non-auto and differs from current 8973 } else if ( prev !== "*" && prev !== current ) { 8974 8975 // Seek a direct converter 8976 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 8977 8978 // If none found, seek a pair 8979 if ( !conv ) { 8980 for ( conv2 in converters ) { 8981 8982 // If conv2 outputs current 8983 tmp = conv2.split( " " ); 8984 if ( tmp[ 1 ] === current ) { 8985 8986 // If prev can be converted to accepted input 8987 conv = converters[ prev + " " + tmp[ 0 ] ] || 8988 converters[ "* " + tmp[ 0 ] ]; 8989 if ( conv ) { 8990 8991 // Condense equivalence converters 8992 if ( conv === true ) { 8993 conv = converters[ conv2 ]; 8994 8995 // Otherwise, insert the intermediate dataType 8996 } else if ( converters[ conv2 ] !== true ) { 8997 current = tmp[ 0 ]; 8998 dataTypes.unshift( tmp[ 1 ] ); 8999 } 9000 break; 9001 } 9002 } 9003 } 9004 } 9005 9006 // Apply converter (if not an equivalence) 9007 if ( conv !== true ) { 9008 9009 // Unless errors are allowed to bubble, catch and return them 9010 if ( conv && s.throws ) { 9011 response = conv( response ); 9012 } else { 9013 try { 9014 response = conv( response ); 9015 } catch ( e ) { 9016 return { 9017 state: "parsererror", 9018 error: conv ? e : "No conversion from " + prev + " to " + current 9019 }; 9020 } 9021 } 9022 } 9023 } 9024 } 9025 } 9026 9027 return { state: "success", data: response }; 9028} 9029 9030jQuery.extend( { 9031 9032 // Counter for holding the number of active queries 9033 active: 0, 9034 9035 // Last-Modified header cache for next request 9036 lastModified: {}, 9037 etag: {}, 9038 9039 ajaxSettings: { 9040 url: location.href, 9041 type: "GET", 9042 isLocal: rlocalProtocol.test( location.protocol ), 9043 global: true, 9044 processData: true, 9045 async: true, 9046 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 9047 9048 /* 9049 timeout: 0, 9050 data: null, 9051 dataType: null, 9052 username: null, 9053 password: null, 9054 cache: null, 9055 throws: false, 9056 traditional: false, 9057 headers: {}, 9058 */ 9059 9060 accepts: { 9061 "*": allTypes, 9062 text: "text/plain", 9063 html: "text/html", 9064 xml: "application/xml, text/xml", 9065 json: "application/json, text/javascript" 9066 }, 9067 9068 contents: { 9069 xml: /\bxml\b/, 9070 html: /\bhtml/, 9071 json: /\bjson\b/ 9072 }, 9073 9074 responseFields: { 9075 xml: "responseXML", 9076 text: "responseText", 9077 json: "responseJSON" 9078 }, 9079 9080 // Data converters 9081 // Keys separate source (or catchall "*") and destination types with a single space 9082 converters: { 9083 9084 // Convert anything to text 9085 "* text": String, 9086 9087 // Text to html (true = no transformation) 9088 "text html": true, 9089 9090 // Evaluate text as a json expression 9091 "text json": JSON.parse, 9092 9093 // Parse text as xml 9094 "text xml": jQuery.parseXML 9095 }, 9096 9097 // For options that shouldn't be deep extended: 9098 // you can add your own custom options here if 9099 // and when you create one that shouldn't be 9100 // deep extended (see ajaxExtend) 9101 flatOptions: { 9102 url: true, 9103 context: true 9104 } 9105 }, 9106 9107 // Creates a full fledged settings object into target 9108 // with both ajaxSettings and settings fields. 9109 // If target is omitted, writes into ajaxSettings. 9110 ajaxSetup: function( target, settings ) { 9111 return settings ? 9112 9113 // Building a settings object 9114 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 9115 9116 // Extending ajaxSettings 9117 ajaxExtend( jQuery.ajaxSettings, target ); 9118 }, 9119 9120 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 9121 ajaxTransport: addToPrefiltersOrTransports( transports ), 9122 9123 // Main method 9124 ajax: function( url, options ) { 9125 9126 // If url is an object, simulate pre-1.5 signature 9127 if ( typeof url === "object" ) { 9128 options = url; 9129 url = undefined; 9130 } 9131 9132 // Force options to be an object 9133 options = options || {}; 9134 9135 var transport, 9136 9137 // URL without anti-cache param 9138 cacheURL, 9139 9140 // Response headers 9141 responseHeadersString, 9142 responseHeaders, 9143 9144 // timeout handle 9145 timeoutTimer, 9146 9147 // Url cleanup var 9148 urlAnchor, 9149 9150 // Request state (becomes false upon send and true upon completion) 9151 completed, 9152 9153 // To know if global events are to be dispatched 9154 fireGlobals, 9155 9156 // Loop variable 9157 i, 9158 9159 // uncached part of the url 9160 uncached, 9161 9162 // Create the final options object 9163 s = jQuery.ajaxSetup( {}, options ), 9164 9165 // Callbacks context 9166 callbackContext = s.context || s, 9167 9168 // Context for global events is callbackContext if it is a DOM node or jQuery collection 9169 globalEventContext = s.context && 9170 ( callbackContext.nodeType || callbackContext.jquery ) ? 9171 jQuery( callbackContext ) : 9172 jQuery.event, 9173 9174 // Deferreds 9175 deferred = jQuery.Deferred(), 9176 completeDeferred = jQuery.Callbacks( "once memory" ), 9177 9178 // Status-dependent callbacks 9179 statusCode = s.statusCode || {}, 9180 9181 // Headers (they are sent all at once) 9182 requestHeaders = {}, 9183 requestHeadersNames = {}, 9184 9185 // Default abort message 9186 strAbort = "canceled", 9187 9188 // Fake xhr 9189 jqXHR = { 9190 readyState: 0, 9191 9192 // Builds headers hashtable if needed 9193 getResponseHeader: function( key ) { 9194 var match; 9195 if ( completed ) { 9196 if ( !responseHeaders ) { 9197 responseHeaders = {}; 9198 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 9199 responseHeaders[ match[ 1 ].toLowerCase()
9199+ " " ] = 9200 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 9201 .concat( match[ 2 ] ); 9202 } 9203 } 9204 match = responseHeaders[ key.toLowerCase() + " " ]; 9205 } 9206 return match == null ? null : match.join( ", " )
vendor: 10,702 bytes, lines 9206-9595
9206; 9207 }, 9208 9209 // Raw string 9210 getAllResponseHeaders: function() { 9211 return completed ? responseHeadersString : null; 9212 }, 9213 9214 // Caches the header 9215 setRequestHeader: function( name, value ) { 9216 if ( completed == null ) { 9217 name = requestHeadersNames[ name.toLowerCase() ] = 9218 requestHeadersNames[ name.toLowerCase() ] || name; 9219 requestHeaders[ name ] = value; 9220 } 9221 return this; 9222 }, 9223 9224 // Overrides response content-type header 9225 overrideMimeType: function( type ) { 9226 if ( completed == null ) { 9227 s.mimeType = type; 9228 } 9229 return this; 9230 }, 9231 9232 // Status-dependent callbacks 9233 statusCode: function( map ) { 9234 var code; 9235 if ( map ) { 9236 if ( completed ) { 9237 9238 // Execute the appropriate callbacks 9239 jqXHR.always( map[ jqXHR.status ] ); 9240 } else { 9241 9242 // Lazy-add the new callbacks in a way that preserves old ones 9243 for ( code in map ) { 9244 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 9245 } 9246 } 9247 } 9248 return this; 9249 }, 9250 9251 // Cancel the request 9252 abort: function( statusText ) { 9253 var finalText = statusText || strAbort; 9254 if ( transport ) { 9255 transport.abort( finalText ); 9256 } 9257 done( 0, finalText ); 9258 return this; 9259 } 9260 }; 9261 9262 // Attach deferreds 9263 deferred.promise( jqXHR ); 9264 9265 // Add protocol if not provided (prefilters might expect it) 9266 // Handle falsy url in the settings object (#10093: consistency with old signature) 9267 // We also use the url parameter if available 9268 s.url = ( ( url || s.url || location.href ) + "" ) 9269 .replace( rprotocol, location.protocol + "//" ); 9270 9271 // Alias method option to type as per ticket #12004 9272 s.type = options.method || options.type || s.method || s.type; 9273 9274 // Extract dataTypes list 9275 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 9276 9277 // A cross-domain request is in order when the origin doesn't match the current origin. 9278 if ( s.crossDomain == null ) { 9279 urlAnchor = document.createElement( "a" ); 9280 9281 // Support: IE <=8 - 11, Edge 12 - 15 9282 // IE throws exception on accessing the href property if url is malformed, 9283 // e.g. http://example.com:80x/ 9284 try { 9285 urlAnchor.href = s.url; 9286 9287 // Support: IE <=8 - 11 only 9288 // Anchor's host property isn't correctly set when s.url is relative 9289 urlAnchor.href = urlAnchor.href; 9290 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 9291 urlAnchor.protocol + "//" + urlAnchor.host; 9292 } catch ( e ) { 9293 9294 // If there is an error parsing the URL, assume it is crossDomain, 9295 // it can be rejected by the transport if it is invalid 9296 s.crossDomain = true; 9297 } 9298 } 9299 9300 // Convert data if not already a string 9301 if ( s.data && s.processData && typeof s.data !== "string" ) { 9302 s.data = jQuery.param( s.data, s.traditional ); 9303 } 9304 9305 // Apply prefilters 9306 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 9307 9308 // If request was aborted inside a prefilter, stop there 9309 if ( completed ) { 9310 return jqXHR; 9311 } 9312 9313 // We can fire global events as of now if asked to 9314 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 9315 fireGlobals = jQuery.event && s.global; 9316 9317 // Watch for a new set of requests 9318 if ( fireGlobals && jQuery.active++ === 0 ) { 9319 jQuery.event.trigger( "ajaxStart" ); 9320 } 9321 9322 // Uppercase the type 9323 s.type = s.type.toUpperCase(); 9324 9325 // Determine if request has content 9326 s.hasContent = !rnoContent.test( s.type ); 9327 9328 // Save the URL in case we're toying with the If-Modified-Since 9329 // and/or If-None-Match header later on 9330 // Remove hash to simplify url manipulation 9331 cacheURL = s.url.replace( rhash, "" ); 9332 9333 // More options handling for requests with no content 9334 if ( !s.hasContent ) { 9335 9336 // Remember the hash so we can put it back 9337 uncached = s.url.slice( cacheURL.length ); 9338 9339 // If data is available and should be processed, append data to url 9340 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 9341 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 9342 9343 // #9682: remove data so that it's not used in an eventual retry 9344 delete s.data; 9345 } 9346 9347 // Add or update anti-cache param if needed 9348 if ( s.cache === false ) { 9349 cacheURL = cacheURL.replace( rantiCache, "$1" ); 9350 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; 9351 } 9352 9353 // Put hash and anti-cache on the URL that will be requested (gh-1732) 9354 s.url = cacheURL + uncached; 9355 9356 // Change '%20' to '+' if this is encoded form body content (gh-2658) 9357 } else if ( s.data && s.processData && 9358 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 9359 s.data = s.data.replace( r20, "+" ); 9360 } 9361 9362 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9363 if ( s.ifModified ) { 9364 if ( jQuery.lastModified[ cacheURL ] ) { 9365 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 9366 } 9367 if ( jQuery.etag[ cacheURL ] ) { 9368 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 9369 } 9370 } 9371 9372 // Set the correct header, if data is being sent 9373 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 9374 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 9375 } 9376 9377 // Set the Accepts header for the server, depending on the dataType 9378 jqXHR.setRequestHeader( 9379 "Accept", 9380 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 9381 s.accepts[ s.dataTypes[ 0 ] ] + 9382 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 9383 s.accepts[ "*" ] 9384 ); 9385 9386 // Check for headers option 9387 for ( i in s.headers ) { 9388 jqXHR.setRequestHeader( i, s.headers[ i ] ); 9389 } 9390 9391 // Allow custom headers/mimetypes and early abort 9392 if ( s.beforeSend && 9393 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 9394 9395 // Abort if not done already and return 9396 return jqXHR.abort(); 9397 } 9398 9399 // Aborting is no longer a cancellation 9400 strAbort = "abort"; 9401 9402 // Install callbacks on deferreds 9403 completeDeferred.add( s.complete ); 9404 jqXHR.done( s.success ); 9405 jqXHR.fail( s.error ); 9406 9407 // Get transport 9408 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 9409 9410 // If no transport, we auto-abort 9411 if ( !transport ) { 9412 done( -1, "No Transport" ); 9413 } else { 9414 jqXHR.readyState = 1; 9415 9416 // Send global event 9417 if ( fireGlobals ) { 9418 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 9419 } 9420 9421 // If request was aborted inside ajaxSend, stop there 9422 if ( completed ) { 9423 return jqXHR; 9424 } 9425 9426 // Timeout 9427 if ( s.async && s.timeout > 0 ) { 9428 timeoutTimer = window.setTimeout( function() { 9429 jqXHR.abort( "timeout" ); 9430 }, s.timeout ); 9431 } 9432 9433 try { 9434 completed = false; 9435 transport.send( requestHeaders, done ); 9436 } catch ( e ) { 9437 9438 // Rethrow post-completion exceptions 9439 if ( completed ) { 9440 throw e; 9441 } 9442 9443 // Propagate others as results 9444 done( -1, e ); 9445 } 9446 } 9447 9448 // Callback for when everything is done 9449 function done( status, nativeStatusText, responses, headers ) { 9450 var isSuccess, success, error, response, modified, 9451 statusText = nativeStatusText; 9452 9453 // Ignore repeat invocations 9454 if ( completed ) { 9455 return; 9456 } 9457 9458 completed = true; 9459 9460 // Clear timeout if it exists 9461 if ( timeoutTimer ) { 9462 window.clearTimeout( timeoutTimer ); 9463 } 9464 9465 // Dereference transport for early garbage collection 9466 // (no matter how long the jqXHR object will be used) 9467 transport = undefined; 9468 9469 // Cache response headers 9470 responseHeadersString = headers || ""; 9471 9472 // Set readyState 9473 jqXHR.readyState = status > 0 ? 4 : 0; 9474 9475 // Determine if successful 9476 isSuccess = status >= 200 && status < 300 || status === 304; 9477 9478 // Get response data 9479 if ( responses ) { 9480 response = ajaxHandleResponses( s, jqXHR, responses ); 9481 } 9482 9483 // Convert no matter what (that way responseXXX fields are always set) 9484 response = ajaxConvert( s, response, jqXHR, isSuccess ); 9485 9486 // If successful, handle type chaining 9487 if ( isSuccess ) { 9488 9489 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9490 if ( s.ifModified ) { 9491 modified = jqXHR.getResponseHeader( "Last-Modified" ); 9492 if ( modified ) { 9493 jQuery.lastModified[ cacheURL ] = modified; 9494 } 9495 modified = jqXHR.getResponseHeader( "etag" ); 9496 if ( modified ) { 9497 jQuery.etag[ cacheURL ] = modified; 9498 } 9499 } 9500 9501 // if no content 9502 if ( status === 204 || s.type === "HEAD" ) { 9503 statusText = "nocontent"; 9504 9505 // if not modified 9506 } else if ( status === 304 ) { 9507 statusText = "notmodified"; 9508 9509 // If we have data, let's convert it 9510 } else { 9511 statusText = response.state; 9512 success = response.data; 9513 error = response.error; 9514 isSuccess = !error; 9515 } 9516 } else { 9517 9518 // Extract error from statusText and normalize for non-aborts 9519 error = statusText; 9520 if ( status || !statusText ) { 9521 statusText = "error"; 9522 if ( status < 0 ) { 9523 status = 0; 9524 } 9525 } 9526 } 9527 9528 // Set data for the fake xhr object 9529 jqXHR.status = status; 9530 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 9531 9532 // Success/Error 9533 if ( isSuccess ) { 9534 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 9535 } else { 9536 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 9537 } 9538 9539 // Status-dependent callbacks 9540 jqXHR.statusCode( statusCode ); 9541 statusCode = undefined; 9542 9543 if ( fireGlobals ) { 9544 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 9545 [ jqXHR, s, isSuccess ? success : error ] ); 9546 } 9547 9548 // Complete 9549 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 9550 9551 if ( fireGlobals ) { 9552 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 9553 9554 // Handle the global AJAX counter 9555 if ( !( --jQuery.active ) ) { 9556 jQuery.event.trigger( "ajaxStop" ); 9557 } 9558 } 9559 } 9560 9561 return jqXHR; 9562 }, 9563 9564 getJSON: function( url, data, callback ) { 9565 return jQuery.get( url, data, callback, "json" ); 9566 }, 9567 9568 getScript: function( url, callback ) { 9569 return jQuery.get( url, undefined, callback, "script" ); 9570 } 9571} ); 9572 9573jQuery.each( [ "get", "post" ], function( i, method ) { 9574 jQuery[ method ] = function( url, data, callback, type ) { 9575 9576 // Shift arguments if data argument was omitted 9577 if ( isFunction( data ) ) { 9578 type = type || callback; 9579 callback = data; 9580 data = undefined; 9581 } 9582 9583 // The url can be an options object (which then must have .url) 9584 return jQuery.ajax( jQuery.extend( { 9585 url: url, 9586 type: method, 9587 dataType: type, 9588 data: data, 9589 success: callback 9590 }, jQuery.isPlainObject( url ) && url ) ); 9591 }; 9592} ); 9593 9594 9595jQuery._evalUrl = function( url
9595, options ) { 9596 return jQuery.ajax( { 9597 url: url, 9598 9599 // Make this explicit, since user can override this through ajaxSetup (#11264) 9600 type: "GET", 9601 dataType: "script", 9602 cache: true, 9603 async: false, 9604 global: false, 9605 9606 // Only evaluate the response if it is successful (gh-4126) 9607 // dataFilter is not invoked for failure responses, so using it instead 9608 // of the default converter is kludgy but it works. 9609 converters: { 9610 "text script": function() {} 9611 }, 9612 dataFilter: function( response ) { 9613 jQuery.globalEval( response, options
vendor: 11,651 bytes, lines 9613-10078
9613 ); 9614 } 9615 } ); 9616}; 9617 9618 9619jQuery.fn.extend( { 9620 wrapAll: function( html ) { 9621 var wrap; 9622 9623 if ( this[ 0 ] ) { 9624 if ( isFunction( html ) ) { 9625 html = html.call( this[ 0 ] ); 9626 } 9627 9628 // The elements to wrap the target around 9629 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 9630 9631 if ( this[ 0 ].parentNode ) { 9632 wrap.insertBefore( this[ 0 ] ); 9633 } 9634 9635 wrap.map( function() { 9636 var elem = this; 9637 9638 while ( elem.firstElementChild ) { 9639 elem = elem.firstElementChild; 9640 } 9641 9642 return elem; 9643 } ).append( this ); 9644 } 9645 9646 return this; 9647 }, 9648 9649 wrapInner: function( html ) { 9650 if ( isFunction( html ) ) { 9651 return this.each( function( i ) { 9652 jQuery( this ).wrapInner( html.call( this, i ) ); 9653 } ); 9654 } 9655 9656 return this.each( function() { 9657 var self = jQuery( this ), 9658 contents = self.contents(); 9659 9660 if ( contents.length ) { 9661 contents.wrapAll( html ); 9662 9663 } else { 9664 self.append( html ); 9665 } 9666 } ); 9667 }, 9668 9669 wrap: function( html ) { 9670 var htmlIsFunction = isFunction( html ); 9671 9672 return this.each( function( i ) { 9673 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 9674 } ); 9675 }, 9676 9677 unwrap: function( selector ) { 9678 this.parent( selector ).not( "body" ).each( function() { 9679 jQuery( this ).replaceWith( this.childNodes ); 9680 } ); 9681 return this; 9682 } 9683} ); 9684 9685 9686jQuery.expr.pseudos.hidden = function( elem ) { 9687 return !jQuery.expr.pseudos.visible( elem ); 9688}; 9689jQuery.expr.pseudos.visible = function( elem ) { 9690 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 9691}; 9692 9693 9694 9695 9696jQuery.ajaxSettings.xhr = function() { 9697 try { 9698 return new window.XMLHttpRequest(); 9699 } catch ( e ) {} 9700}; 9701 9702var xhrSuccessStatus = { 9703 9704 // File protocol always yields status code 0, assume 200 9705 0: 200, 9706 9707 // Support: IE <=9 only 9708 // #1450: sometimes IE returns 1223 when it should be 204 9709 1223: 204 9710 }, 9711 xhrSupported = jQuery.ajaxSettings.xhr(); 9712 9713support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 9714support.ajax = xhrSupported = !!xhrSupported; 9715 9716jQuery.ajaxTransport( function( options ) { 9717 var callback, errorCallback; 9718 9719 // Cross domain only allowed if supported through XMLHttpRequest 9720 if ( support.cors || xhrSupported && !options.crossDomain ) { 9721 return { 9722 send: function( headers, complete ) { 9723 var i, 9724 xhr = options.xhr(); 9725 9726 xhr.open( 9727 options.type, 9728 options.url, 9729 options.async, 9730 options.username, 9731 options.password 9732 ); 9733 9734 // Apply custom fields if provided 9735 if ( options.xhrFields ) { 9736 for ( i in options.xhrFields ) { 9737 xhr[ i ] = options.xhrFields[ i ]; 9738 } 9739 } 9740 9741 // Override mime type if needed 9742 if ( options.mimeType && xhr.overrideMimeType ) { 9743 xhr.overrideMimeType( options.mimeType ); 9744 } 9745 9746 // X-Requested-With header 9747 // For cross-domain requests, seeing as conditions for a preflight are 9748 // akin to a jigsaw puzzle, we simply never set it to be sure. 9749 // (it can always be set on a per-request basis or even using ajaxSetup) 9750 // For same-domain requests, won't change header if already provided. 9751 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 9752 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 9753 } 9754 9755 // Set headers 9756 for ( i in headers ) { 9757 xhr.setRequestHeader( i, headers[ i ] ); 9758 } 9759 9760 // Callback 9761 callback = function( type ) { 9762 return function() { 9763 if ( callback ) { 9764 callback = errorCallback = xhr.onload = 9765 xhr.onerror = xhr.onabort = xhr.ontimeout = 9766 xhr.onreadystatechange = null; 9767 9768 if ( type === "abort" ) { 9769 xhr.abort(); 9770 } else if ( type === "error" ) { 9771 9772 // Support: IE <=9 only 9773 // On a manual native abort, IE9 throws 9774 // errors on any property access that is not readyState 9775 if ( typeof xhr.status !== "number" ) { 9776 complete( 0, "error" ); 9777 } else { 9778 complete( 9779 9780 // File: protocol always yields status 0; see #8605, #14207 9781 xhr.status, 9782 xhr.statusText 9783 ); 9784 } 9785 } else { 9786 complete( 9787 xhrSuccessStatus[ xhr.status ] || xhr.status, 9788 xhr.statusText, 9789 9790 // Support: IE <=9 only 9791 // IE9 has no XHR2 but throws on binary (trac-11426) 9792 // For XHR2 non-text, let the caller handle it (gh-2498) 9793 ( xhr.responseType || "text" ) !== "text" || 9794 typeof xhr.responseText !== "string" ? 9795 { binary: xhr.response } : 9796 { text: xhr.responseText }, 9797 xhr.getAllResponseHeaders() 9798 ); 9799 } 9800 } 9801 }; 9802 }; 9803 9804 // Listen to events 9805 xhr.onload = callback(); 9806 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 9807 9808 // Support: IE 9 only 9809 // Use onreadystatechange to replace onabort 9810 // to handle uncaught aborts 9811 if ( xhr.onabort !== undefined ) { 9812 xhr.onabort = errorCallback; 9813 } else { 9814 xhr.onreadystatechange = function() { 9815 9816 // Check readyState before timeout as it changes 9817 if ( xhr.readyState === 4 ) { 9818 9819 // Allow onerror to be called first, 9820 // but that will not handle a native abort 9821 // Also, save errorCallback to a variable 9822 // as xhr.onerror cannot be accessed 9823 window.setTimeout( function() { 9824 if ( callback ) { 9825 errorCallback(); 9826 } 9827 } ); 9828 } 9829 }; 9830 } 9831 9832 // Create the abort callback 9833 callback = callback( "abort" ); 9834 9835 try { 9836 9837 // Do send the request (this may raise an exception) 9838 xhr.send( options.hasContent && options.data || null ); 9839 } catch ( e ) { 9840 9841 // #14683: Only rethrow if this hasn't been notified as an error yet 9842 if ( callback ) { 9843 throw e; 9844 } 9845 } 9846 }, 9847 9848 abort: function() { 9849 if ( callback ) { 9850 callback(); 9851 } 9852 } 9853 }; 9854 } 9855} ); 9856 9857 9858 9859 9860// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 9861jQuery.ajaxPrefilter( function( s ) { 9862 if ( s.crossDomain ) { 9863 s.contents.script = false; 9864 } 9865} ); 9866 9867// Install script dataType 9868jQuery.ajaxSetup( { 9869 accepts: { 9870 script: "text/javascript, application/javascript, " + 9871 "application/ecmascript, application/x-ecmascript" 9872 }, 9873 contents: { 9874 script: /\b(?:java|ecma)script\b/ 9875 }, 9876 converters: { 9877 "text script": function( text ) { 9878 jQuery.globalEval( text ); 9879 return text; 9880 } 9881 } 9882} ); 9883 9884// Handle cache's special case and crossDomain 9885jQuery.ajaxPrefilter( "script", function( s ) { 9886 if ( s.cache === undefined ) { 9887 s.cache = false; 9888 } 9889 if ( s.crossDomain ) { 9890 s.type = "GET"; 9891 } 9892} ); 9893 9894// Bind script tag hack transport 9895jQuery.ajaxTransport( "script", function( s ) { 9896 9897 // This transport only deals with cross domain or forced-by-attrs requests 9898 if ( s.crossDomain || s.scriptAttrs ) { 9899 var script, callback; 9900 return { 9901 send: function( _, complete ) { 9902 script = jQuery( "<script>" ) 9903 .attr( s.scriptAttrs || {} ) 9904 .prop( { charset: s.scriptCharset, src: s.url } ) 9905 .on( "load error", callback = function( evt ) { 9906 script.remove(); 9907 callback = null; 9908 if ( evt ) { 9909 complete( evt.type === "error" ? 404 : 200, evt.type ); 9910 } 9911 } ); 9912 9913 // Use native DOM manipulation to avoid our domManip AJAX trickery 9914 document.head.appendChild( script[ 0 ] ); 9915 }, 9916 abort: function() { 9917 if ( callback ) { 9918 callback(); 9919 } 9920 } 9921 }; 9922 } 9923} ); 9924 9925 9926 9927 9928var oldCallbacks = [], 9929 rjsonp = /(=)\?(?=&|$)|\?\?/; 9930 9931// Default jsonp settings 9932jQuery.ajaxSetup( { 9933 jsonp: "callback", 9934 jsonpCallback: function() { 9935 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 9936 this[ callback ] = true; 9937 return callback; 9938 } 9939} ); 9940 9941// Detect, normalize options and install callbacks for jsonp requests 9942jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 9943 9944 var callbackName, overwritten, responseContainer, 9945 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 9946 "url" : 9947 typeof s.data === "string" && 9948 ( s.contentType || "" ) 9949 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 9950 rjsonp.test( s.data ) && "data" 9951 ); 9952 9953 // Handle iff the expected data type is "jsonp" or we have a parameter to set 9954 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 9955 9956 // Get callback name, remembering preexisting value associated with it 9957 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 9958 s.jsonpCallback() : 9959 s.jsonpCallback; 9960 9961 // Insert callback into url or form data 9962 if ( jsonProp ) { 9963 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 9964 } else if ( s.jsonp !== false ) { 9965 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 9966 } 9967 9968 // Use data converter to retrieve json after script execution 9969 s.converters[ "script json" ] = function() { 9970 if ( !responseContainer ) { 9971 jQuery.error( callbackName + " was not called" ); 9972 } 9973 return responseContainer[ 0 ]; 9974 }; 9975 9976 // Force json dataType 9977 s.dataTypes[ 0 ] = "json"; 9978 9979 // Install callback 9980 overwritten = window[ callbackName ]; 9981 window[ callbackName ] = function() { 9982 responseContainer = arguments; 9983 }; 9984 9985 // Clean-up function (fires after converters) 9986 jqXHR.always( function() { 9987 9988 // If previous value didn't exist - remove it 9989 if ( overwritten === undefined ) { 9990 jQuery( window ).removeProp( callbackName ); 9991 9992 // Otherwise restore preexisting value 9993 } else { 9994 window[ callbackName ] = overwritten; 9995 } 9996 9997 // Save back as free 9998 if ( s[ callbackName ] ) { 9999 10000 // Make sure that re-using the options doesn't screw things around 10001 s.jsonpCallback = originalSettings.jsonpCallback; 10002 10003 // Save the callback name for future use 10004 oldCallbacks.push( callbackName ); 10005 } 10006 10007 // Call if it was a function and we have a response 10008 if ( responseContainer && isFunction( overwritten ) ) { 10009 overwritten( responseContainer[ 0 ] ); 10010 } 10011 10012 responseContainer = overwritten = undefined; 10013 } ); 10014 10015 // Delegate to script 10016 return "script"; 10017 } 10018} ); 10019 10020 10021 10022 10023// Support: Safari 8 only 10024// In Safari 8 documents created via document.implementation.createHTMLDocument 10025// collapse sibling forms: the second one becomes a child of the first one. 10026// Because of that, this security measure has to be disabled in Safari 8. 10027// https://bugs.webkit.org/show_bug.cgi?id=137337 10028support.createHTMLDocument = ( function() { 10029 var body = document.implementation.createHTMLDocument( "" ).body; 10030 body.innerHTML = "<form></form><form></form>"; 10031 return body.childNodes.length === 2; 10032} )(); 10033 10034 10035// Argument "data" should be string of html 10036// context (optional): If specified, the fragment will be created in this context, 10037// defaults to document 10038// keepScripts (optional): If true, will include scripts passed in the html string 10039jQuery.parseHTML = function( data, context, keepScripts ) { 10040 if ( typeof data !== "string" ) { 10041 return []; 10042 } 10043 if ( typeof context === "boolean" ) { 10044 keepScripts = context; 10045 context = false; 10046 } 10047 10048 var base, parsed, scripts; 10049 10050 if ( !context ) { 10051 10052 // Stop scripts or inline event handlers from being executed immediately 10053 // by using document.implementation 10054 if ( support.createHTMLDocument ) { 10055 context = document.implementation.createHTMLDocument( "" ); 10056 10057 // Set the base href for the created document 10058 // so any parsed elements with URLs 10059 // are based on the document's URL (gh-2965) 10060 base = context.createElement( "base" ); 10061 base.href = document.location.href; 10062 context.head.appendChild( base ); 10063 } else { 10064 context = document; 10065 } 10066 } 10067 10068 parsed = rsingleTag.exec( data ); 10069 scripts = !keepScripts && []; 10070 10071 // Single tag 10072 if ( parsed ) { 10073 return [ context.createElement( parsed[ 1 ] ) ]; 10074 } 10075 10076 parsed = buildFragment( [ data ], context, scripts ); 10077 10078 if ( scripts && scripts.length ) {
vendor: 14,511 bytes, lines 10079-10599
10079 jQuery( scripts ).remove(); 10080 } 10081 10082 return jQuery.merge( [], parsed.childNodes ); 10083}; 10084 10085 10086/** 10087 * Load a url into a page 10088 */ 10089jQuery.fn.load = function( url, params, callback ) { 10090 var selector, type, response, 10091 self = this, 10092 off = url.indexOf( " " ); 10093 10094 if ( off > -1 ) { 10095 selector = stripAndCollapse( url.slice( off ) ); 10096 url = url.slice( 0, off ); 10097 } 10098 10099 // If it's a function 10100 if ( isFunction( params ) ) { 10101 10102 // We assume that it's the callback 10103 callback = params; 10104 params = undefined; 10105 10106 // Otherwise, build a param string 10107 } else if ( params && typeof params === "object" ) { 10108 type = "POST"; 10109 } 10110 10111 // If we have elements to modify, make the request 10112 if ( self.length > 0 ) { 10113 jQuery.ajax( { 10114 url: url, 10115 10116 // If "type" variable is undefined, then "GET" method will be used. 10117 // Make value of this field explicit since 10118 // user can override it through ajaxSetup method 10119 type: type || "GET", 10120 dataType: "html", 10121 data: params 10122 } ).done( function( responseText ) { 10123 10124 // Save response for use in complete callback 10125 response = arguments; 10126 10127 self.html( selector ? 10128 10129 // If a selector was specified, locate the right elements in a dummy div 10130 // Exclude scripts to avoid IE 'Permission Denied' errors 10131 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 10132 10133 // Otherwise use the full result 10134 responseText ); 10135 10136 // If the request succeeds, this function gets "data", "status", "jqXHR" 10137 // but they are ignored because response was set above. 10138 // If it fails, this function gets "jqXHR", "status", "error" 10139 } ).always( callback && function( jqXHR, status ) { 10140 self.each( function() { 10141 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 10142 } ); 10143 } ); 10144 } 10145 10146 return this; 10147}; 10148 10149 10150 10151 10152// Attach a bunch of functions for handling common AJAX events 10153jQuery.each( [ 10154 "ajaxStart", 10155 "ajaxStop", 10156 "ajaxComplete", 10157 "ajaxError", 10158 "ajaxSuccess", 10159 "ajaxSend" 10160], function( i, type ) { 10161 jQuery.fn[ type ] = function( fn ) { 10162 return this.on( type, fn ); 10163 }; 10164} ); 10165 10166 10167 10168 10169jQuery.expr.pseudos.animated = function( elem ) { 10170 return jQuery.grep( jQuery.timers, function( fn ) { 10171 return elem === fn.elem; 10172 } ).length; 10173}; 10174 10175 10176 10177 10178jQuery.offset = { 10179 setOffset: function( elem, options, i ) { 10180 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 10181 position = jQuery.css( elem, "position" ), 10182 curElem = jQuery( elem ), 10183 props = {}; 10184 10185 // Set position first, in-case top/left are set even on static elem 10186 if ( position === "static" ) { 10187 elem.style.position = "relative"; 10188 } 10189 10190 curOffset = curElem.offset(); 10191 curCSSTop = jQuery.css( elem, "top" ); 10192 curCSSLeft = jQuery.css( elem, "left" ); 10193 calculatePosition = ( position === "absolute" || position === "fixed" ) && 10194 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 10195 10196 // Need to be able to calculate position if either 10197 // top or left is auto and position is either absolute or fixed 10198 if ( calculatePosition ) { 10199 curPosition = curElem.position(); 10200 curTop = curPosition.top; 10201 curLeft = curPosition.left; 10202 10203 } else { 10204 curTop = parseFloat( curCSSTop ) || 0; 10205 curLeft = parseFloat( curCSSLeft ) || 0; 10206 } 10207 10208 if ( isFunction( options ) ) { 10209 10210 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 10211 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 10212 } 10213 10214 if ( options.top != null ) { 10215 props.top = ( options.top - curOffset.top ) + curTop; 10216 } 10217 if ( options.left != null ) { 10218 props.left = ( options.left - curOffset.left ) + curLeft; 10219 } 10220 10221 if ( "using" in options ) { 10222 options.using.call( elem, props ); 10223 10224 } else { 10225 curElem.css( props ); 10226 } 10227 } 10228}; 10229 10230jQuery.fn.extend( { 10231 10232 // offset() relates an element's border box to the document origin 10233 offset: function( options ) { 10234 10235 // Preserve chaining for setter 10236 if ( arguments.length ) { 10237 return options === undefined ? 10238 this : 10239 this.each( function( i ) { 10240 jQuery.offset.setOffset( this, options, i ); 10241 } ); 10242 } 10243 10244 var rect, win, 10245 elem = this[ 0 ]; 10246 10247 if ( !elem ) { 10248 return; 10249 } 10250 10251 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 10252 // Support: IE <=11 only 10253 // Running getBoundingClientRect on a 10254 // disconnected node in IE throws an error 10255 if ( !elem.getClientRects().length ) { 10256 return { top: 0, left: 0 }; 10257 } 10258 10259 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 10260 rect = elem.getBoundingClientRect(); 10261 win = elem.ownerDocument.defaultView; 10262 return { 10263 top: rect.top + win.pageYOffset, 10264 left: rect.left + win.pageXOffset 10265 }; 10266 }, 10267 10268 // position() relates an element's margin box to its offset parent's padding box 10269 // This corresponds to the behavior of CSS absolute positioning 10270 position: function() { 10271 if ( !this[ 0 ] ) { 10272 return; 10273 } 10274 10275 var offsetParent, offset, doc, 10276 elem = this[ 0 ], 10277 parentOffset = { top: 0, left: 0 }; 10278 10279 // position:fixed elements are offset from the viewport, which itself always has zero offset 10280 if ( jQuery.css( elem, "position" ) === "fixed" ) { 10281 10282 // Assume position:fixed implies availability of getBoundingClientRect 10283 offset = elem.getBoundingClientRect(); 10284 10285 } else { 10286 offset = this.offset(); 10287 10288 // Account for the *real* offset parent, which can be the document or its root element 10289 // when a statically positioned element is identified 10290 doc = elem.ownerDocument; 10291 offsetParent = elem.offsetParent || doc.documentElement; 10292 while ( offsetParent && 10293 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 10294 jQuery.css( offsetParent, "position" ) === "static" ) { 10295 10296 offsetParent = offsetParent.parentNode; 10297 } 10298 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 10299 10300 // Incorporate borders into its offset, since they are outside its content origin 10301 parentOffset = jQuery( offsetParent ).offset(); 10302 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 10303 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 10304 } 10305 } 10306 10307 // Subtract parent offsets and element margins 10308 return { 10309 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 10310 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 10311 }; 10312 }, 10313 10314 // This method will return documentElement in the following cases: 10315 // 1) For the element inside the iframe without offsetParent, this method will return 10316 // documentElement of the parent window 10317 // 2) For the hidden or detached element 10318 // 3) For body or html element, i.e. in case of the html node - it will return itself 10319 // 10320 // but those exceptions were never presented as a real life use-cases 10321 // and might be considered as more preferable results. 10322 // 10323 // This logic, however, is not guaranteed and can change at any point in the future 10324 offsetParent: function() { 10325 return this.map( function() { 10326 var offsetParent = this.offsetParent; 10327 10328 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 10329 offsetParent = offsetParent.offsetParent; 10330 } 10331 10332 return offsetParent || documentElement; 10333 } ); 10334 } 10335} ); 10336 10337// Create scrollLeft and scrollTop methods 10338jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 10339 var top = "pageYOffset" === prop; 10340 10341 jQuery.fn[ method ] = function( val ) { 10342 return access( this, function( elem, method, val ) { 10343 10344 // Coalesce documents and windows 10345 var win; 10346 if ( isWindow( elem ) ) { 10347 win = elem; 10348 } else if ( elem.nodeType === 9 ) { 10349 win = elem.defaultView; 10350 } 10351 10352 if ( val === undefined ) { 10353 return win ? win[ prop ] : elem[ method ]; 10354 } 10355 10356 if ( win ) { 10357 win.scrollTo( 10358 !top ? val : win.pageXOffset, 10359 top ? val : win.pageYOffset 10360 ); 10361 10362 } else { 10363 elem[ method ] = val; 10364 } 10365 }, method, val, arguments.length ); 10366 }; 10367} ); 10368 10369// Support: Safari <=7 - 9.1, Chrome <=37 - 49 10370// Add the top/left cssHooks using jQuery.fn.position 10371// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 10372// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 10373// getComputedStyle returns percent when specified for top/left/bottom/right; 10374// rather than make the css module depend on the offset module, just check for it here 10375jQuery.each( [ "top", "left" ], function( i, prop ) { 10376 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 10377 function( elem, computed ) { 10378 if ( computed ) { 10379 computed = curCSS( elem, prop ); 10380 10381 // If curCSS returns percentage, fallback to offset 10382 return rnumnonpx.test( computed ) ? 10383 jQuery( elem ).position()[ prop ] + "px" : 10384 computed; 10385 } 10386 } 10387 ); 10388} ); 10389 10390 10391// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 10392jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 10393 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, 10394 function( defaultExtra, funcName ) { 10395 10396 // Margin is only for outerHeight, outerWidth 10397 jQuery.fn[ funcName ] = function( margin, value ) { 10398 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 10399 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 10400 10401 return access( this, function( elem, type, value ) { 10402 var doc; 10403 10404 if ( isWindow( elem ) ) { 10405 10406 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 10407 return funcName.indexOf( "outer" ) === 0 ? 10408 elem[ "inner" + name ] : 10409 elem.document.documentElement[ "client" + name ]; 10410 } 10411 10412 // Get document width or height 10413 if ( elem.nodeType === 9 ) { 10414 doc = elem.documentElement; 10415 10416 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 10417 // whichever is greatest 10418 return Math.max( 10419 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 10420 elem.body[ "offset" + name ], doc[ "offset" + name ], 10421 doc[ "client" + name ] 10422 ); 10423 } 10424 10425 return value === undefined ? 10426 10427 // Get width or height on the element, requesting but not forcing parseFloat 10428 jQuery.css( elem, type, extra ) : 10429 10430 // Set width or height on the element 10431 jQuery.style( elem, type, value, extra ); 10432 }, type, chainable ? margin : undefined, chainable ); 10433 }; 10434 } ); 10435} ); 10436 10437 10438jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + 10439 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 10440 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 10441 function( i, name ) { 10442 10443 // Handle event binding 10444 jQuery.fn[ name ] = function( data, fn ) { 10445 return arguments.length > 0 ? 10446 this.on( name, null, data, fn ) : 10447 this.trigger( name ); 10448 }; 10449} ); 10450 10451jQuery.fn.extend( { 10452 hover: function( fnOver, fnOut ) { 10453 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 10454 } 10455} ); 10456 10457 10458 10459 10460jQuery.fn.extend( { 10461 10462 bind: function( types, data, fn ) { 10463 return this.on( types, null, data, fn ); 10464 }, 10465 unbind: function( types, fn ) { 10466 return this.off( types, null, fn ); 10467 }, 10468 10469 delegate: function( selector, types, data, fn ) { 10470 return this.on( types, selector, data, fn ); 10471 }, 10472 undelegate: function( selector, types, fn ) { 10473 10474 // ( namespace ) or ( selector, types [, fn] ) 10475 return arguments.length === 1 ? 10476 this.off( selector, "**" ) : 10477 this.off( types, selector || "**", fn ); 10478 } 10479} ); 10480 10481// Bind a function to a context, optionally partially applying any 10482// arguments. 10483// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 10484// However, it is not slated for removal any time soon 10485jQuery.proxy = function( fn, context ) { 10486 var tmp, args, proxy; 10487 10488 if ( typeof context === "string" ) { 10489 tmp = fn[ context ]; 10490 context = fn; 10491 fn = tmp; 10492 } 10493 10494 // Quick check to determine if target is callable, in the spec 10495 // this throws a TypeError, but we will just return undefined. 10496 if ( !isFunction( fn ) ) { 10497 return undefined; 10498 } 10499 10500 // Simulated bind 10501 args = slice.call( arguments, 2 ); 10502 proxy = function() { 10503 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 10504 }; 10505 10506 // Set the guid of unique handler to the same of original handler, so it can be removed 10507 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 10508 10509 return proxy; 10510}; 10511 10512jQuery.holdReady = function( hold ) { 10513 if ( hold ) { 10514 jQuery.readyWait++; 10515 } else { 10516 jQuery.ready( true ); 10517 } 10518}; 10519jQuery.isArray = Array.isArray; 10520jQuery.parseJSON = JSON.parse; 10521jQuery.nodeName = nodeName; 10522jQuery.isFunction = isFunction; 10523jQuery.isWindow = isWindow; 10524jQuery.camelCase = camelCase; 10525jQuery.type = toType; 10526 10527jQuery.now = Date.now; 10528 10529jQuery.isNumeric = function( obj ) { 10530 10531 // As of jQuery 3.0, isNumeric is limited to 10532 // strings and numbers (primitives or objects) 10533 // that can be coerced to finite numbers (gh-2662) 10534 var type = jQuery.type( obj ); 10535 return ( type === "number" || type === "string" ) && 10536 10537 // parseFloat NaNs numeric-cast false positives ("") 10538 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 10539 // subtraction forces infinities to NaN 10540 !isNaN( obj - parseFloat( obj ) ); 10541}; 10542 10543 10544 10545 10546// Register as a named AMD module, since jQuery can be concatenated with other 10547// files that may use define, but not via a proper concatenation script that 10548// understands anonymous AMD modules. A named AMD is safest and most robust 10549// way to register. Lowercase jquery is used because AMD module names are 10550// derived from file names, and jQuery is normally delivered in a lowercase 10551// file name. Do this after creating the global so that if an AMD module wants 10552// to call noConflict to hide this version of jQuery, it will work. 10553 10554// Note that for maximum portability, libraries that are not jQuery should 10555// declare themselves as anonymous modules, and avoid setting a global if an 10556// AMD loader is present. jQuery is a special case. For more information, see 10557// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 10558 10559if ( typeof define === "function" && define.amd ) { 10560 define( "jquery", [], function() { 10561 return jQuery; 10562 } ); 10563} 10564 10565 10566 10567 10568var 10569 10570 // Map over jQuery in case of overwrite 10571 _jQuery = window.jQuery, 10572 10573 // Map over the $ in case of overwrite 10574 _$ = window.$; 10575 10576jQuery.noConflict = function( deep ) { 10577 if ( window.$ === jQuery ) { 10578 window.$ = _$; 10579 } 10580 10581 if ( deep && window.jQuery === jQuery ) { 10582 window.jQuery = _jQuery; 10583 } 10584 10585 return jQuery; 10586}; 10587 10588// Expose jQuery and $ identifiers, even in AMD 10589// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 10590// and CommonJS for browser emulators (#13566) 10591if ( !noGlobal ) { 10592 window.jQuery = window.$ = jQuery; 10593} 10594 10595 10596 10597 10598return jQuery; 10599} );
10600//!!!jQuery.cookie 10601var eb$ = jQuery.noConflict(); 10602(function($) { 10603jQuery.cookie = function(name, value, options) { 10604 if (typeof value != 'undefined') { // name and value given, set cookie 10605 options = options || {}; 10606 if (value === null) { 10607 value = ''; 10608 options.expires = -1; 10609 } 10610 var expires = ''; 10611 if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { 10612 var date; 10613 if (typeof options.expires == 'number') { 10614 date = new Date(); 10615 date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); 10616 } else { 10617 date = options.expires; 10618 } 10619 expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE 10620 } 10621 // CAUTION: Needed to parenthesize options.path and options.domain 10622 // in the following expressions, otherwise they evaluate to undefined 10623 // in the packed version for some reason... 10624 var path = options.path ? '; path=' + (options.path) : ''; 10625 var domain = options.domain ? '; domain=' + (options.domain) : ''; 10626 var secure = options.secure ? '; secure' : ''; 10627 document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); 10628 } else { // only name given, get cookie 10629 var cookieValue = null; 10630 if (document.cookie && document.cookie != '') { 10631 var cookies = document.cookie.split(';'); 10632 for (var i = 0; i < cookies.length; i++) { 10633 var cookie = jQuery.trim(cookies[i]); 10634 // Does this cookie string begin with the name we want? 10635 if (cookie.substring(0, name.length + 1) == (name + '=')) { 10636 cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 10637 break; 10638 } 10639 } 10640 } 10641 return cookieValue; 10642 } 10643}; 10644 10645/* Copyright jQuery Foundation and other contributors; Licensed MIT */ 10646 10647(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(h.inline?h.dpDiv.parent()[0]:h.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.ui=t.ui||{},t.ui.version="1.12.1";var r=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},l=e.split(".")[0];e=e.split(".")[1];var h=l+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o}
10647,t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=r++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t
vendor: 9,589 bytes, line 10647
10647(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):l.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=l.test(i[1])?i[1]:"center",t=h.exec(i[0]),e=h.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,l=t(this),h=l.outerWidth(),c=l.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=h+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),T=e(k.my,l.outerWidth(),l.outerHeight());"right"===n.my[0]?D.left-=h:"center"===n.my[0]&&(D.left-=h/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:h,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:l})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-h,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:l,left:D.left,top:D.top,width:h,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>
vendor: 4,336 bytes, line 10647
106470?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,l,h=i.nodeName.toLowerCase();return"area"===h?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(h)?(r=!i.disabled,r&&(l=t(i).closest("fieldset")[0],l&&(r=!l.disabled))):r="a"===h?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(
vendor: 7,583 bytes, line 10647
10647),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.ui,{datepicker:{version:"1.12.1"}});var h;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,l,h,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,h=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+c,h/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),h===n&&(h=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,l,h=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):h?"all"===i?t.extend({},h.settings):this._get(h,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),h&&(this._curInst===h&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(h,"min"),l=this._getMinMaxDate(h,"max"),a(h.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(h.settings.minDate=this._formatDate(h,r)),null!==l&&void 0!==n.dateFormat&&void 0===n.maxDate&&(h.settings.maxDate=this._formatDate(h,l)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),h),this._autoSize(h),this._setDate(h,o),this._updateAlternate(h),this._updateDatepicker(h)),void 0)}
vendor: 4,566 bytes, lines 10647-10648
10647,_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,l,h,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),l={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),l=t.datepicker._checkOffset(s,l,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:l.left+"px",top:l.top+"px"}),s.inline||(h=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?s.dpDiv.show(h,t.datepicker._get(s,"showOptions"),c):s.dpDiv[h||"show"](h?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s)) 10648}},_updateDatepicker:function(e){this.maxRows=4,h=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);
vendor: 10,556 bytes, line 10648
10648var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>l&&l>n?Math.abs(i.left+n-l):0),i.top-=Math.min(i.top,i.top+o>h&&h>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,l=0,h=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof h?h:(new Date).getFullYear()%100+parseInt(h,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(l).match(o);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(l,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],l+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+l},x=function(){if(i.charAt(l)!==e.charAt(n))throw"Unexpected literal at position "+l;l++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>l&&(a=i.substr(l),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,l=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},h=function(t,e,i){var s=""+e;if(l(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return l(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||l("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=h("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=h("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=h("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=l("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":l("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),l=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,h=l.exec(i);h;){switch(h[2]||"d"){case"d":case"D":r+=parseInt(h[1],10);break;case"w":case"W":r+=7*parseInt(h[1],10);break;case"m":case"M":a+=parseInt(h[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(h[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}h=l.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null}
vendor: 6,672 bytes, line 10648
10648,_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,T,I,M,P,S,N,H,A,z,O,E,W,F,L,R=new Date,Y=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),B=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),X=this._get(t,"stepMonths"),$=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),J=this._getMinMaxDate(t,"min"),Q=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),Q)for(e=this._daylightSavingAdjust(new Date(Q.getFullYear(),Q.getMonth()-U[0]*U[1]+1,Q.getDate())),e=J&&J>e?J:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-X,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+X,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:Y,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,l=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",h=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(B?l:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(B?"":l)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),T=" ui-corner-all",I="",$){if(I+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:I+=" ui-datepicker-group-first",T=" ui-corner-"+(B?"right":"left");break;case U[1]-1:I+=" ui-datepicker-group-last",T=" ui-corner-"+(B?"left":"right");break;default:I+=" ui-datepicker-group-middle",T=""}I+="'>"}for(I+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+T+"'>"+(/all|left/.test(T)&&0===k?B?o:s:"")+(/all|right/.test(T)&&0===k?B?s:o:"")+this._generateMonthYearHeader(t,Z,te,J,Q,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",M=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)P=(w+c)%7,M+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[P]+"'>"+p[P]+"</span></th>";for(I+=M+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),N=(this._getFirstDayOfMonth(te,Z)-c+7)%7,H=Math.ceil((N+S)/7),A=$?this.maxRows>H?this.maxRows:H:H,this.maxRows=A,z=this._daylightSavingAdjust(new Date(te,Z,1-N)),O=0;A>O;O++){for(I+="<tr>",E=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(z)+"</td>":"",w=0;7>w;w++)W=m?m.apply(t.input?t.input[0]:null,[z]):[!0,""],F=z.getMonth()!==Z,L=F&&!v||!W[0]||J&&J>z||Q&&z>Q,E+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+W[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===Y.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!W[2]?"":" title='"+W[2].replace(/'/g,"'")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(F&&!_?" ":L?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===Y.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);I+=E+"</tr>"}Z++,Z>11&&(Z=0,te++),I+="</tbody></table>"+($?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=I}y+=x}return y+=h,t._keyEvent=!1,y}
vendor: 4,843 bytes, lines 10648-10656
10648,_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!l||c>=s.getMonth())&&(!h||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker}); 10649 10650/* Japanese initialisation for the jQuery UI date picker plugin. */ 10651$(function($){ 10652 "use strict"; 10653 $.datepicker.regional['ja'] = { 10654 clearText: 'ã¯ãªã¢', clearStatus: 'æ¥ä»ãã¯ãªã¢ãã¾ã', 10655 closeText: 'éãã', closeStatus: '夿´ããã«éãã¾ã', 10656 prevText: '<
10656å', prevStatus: 'åæã表示ãã¾ã', 10657 prevBigText: '<<', prevBigStatus: 'åå¹´ã表示ãã¾ã', 10658 nextText: '次>', nextStatus: 'ç¿æã表示ãã¾ã', 10659 nextBigText: '>>', nextBigStatus: 'ç¿å¹´ã表示ãã¾ã', 10660 currentText: '仿¥', currentStatus: '仿ã表示ãã¾ã', 10661 monthNames: ['1æ','2æ','3æ','4æ','5æ','6æ', 10662 '7æ','8æ','9æ','10æ','11æ','12æ'], 10663 monthNamesShort: ['1æ','2æ','3æ','4æ','5æ','6æ', 10664 '7æ','8æ','9æ','10æ','11æ','12æ'], 10665 monthStatus: '表示ããæã夿´ãã¾ã', yearStatus: '表示ããå¹´ã夿´ãã¾ã', 10666 weekHeader: 'é±', weekStatus: 'æ¦é±ã§ç¬¬ä½é±ç®ãã表ãã¾ã', 10667 dayNames: ['æ¥ææ¥','æææ¥','ç«ææ¥','æ°´ææ¥','æ¨ææ¥','éææ¥','åææ¥'], 10668 dayNamesShort: ['æ¥','æ','ç«','æ°´','æ¨','é','å'], 10669 dayNamesMin: ['æ¥','æ','ç«','æ°´','æ¨','é','å'], 10670 dayStatus: 'é±ã®å§ã¾ããDDã«ãã¾ã', dateStatus: 'Mdæ¥(D)', 10671 dateFormat: 'yy/mm/dd', firstDay: 0, 10672 initStatus: 'æ¥ä»ã鏿ãã¾ã', isRTL: false, 10673 yearSuffix: "å¹´", 10674 showMonthAfterYear: true}; 10675 $.datepicker.setDefaults($.datepicker.regional['ja']); 10676}); 10677}) (jQuery); 10678 10679/* 10680 * jQuery ah-placeholder plugin 1.2 10681 * 10682 * https://github.com/ahomu/jquery.ah-placeholder 10683 * http://havelog.ayumusato.com/develop/javascript/e189-jquery-plugin-placeholder.html 10684 * 10685 * Copyright (c) 2011 Ayumu Sato ( http://havelog.ayumusato.com ) 10686 * 10687 * Dual licensed under the MIT and GPL licenses: 10688 * http://www.opensource.org/licenses/mit-license.php 10689 * http://www.gnu.org/licenses/gpl.html 10690 */ 10691eb$(function() { 10692 eb$('[placeholder]').ahPlaceholder({ 10693 placeholderColor : 'gray', 10694 placeholderAttr : 'placeholder', 10695 likeApple : false 10696 }); 10697 }); 10698 10699(function(eb$) { 10700 10701eb$.fn.ahPlaceholder = function(options) 10702{ 10703 // property 10704 var defaults = { 10705 placeholderColor : 'silver', 10706 placeholderAttr : 'title', 10707 likeApple : false 10708 }, 10709 settings = eb$.extend({}, defaults, options); 10710 10711 var ngCode = [ 10712 ' ', // -------------- 10713 '0', // ??? 10714 '9', // tab 10715 '16', // shift 10716 '17', // ctrl 10717 '32', // space 10718 '27', // esc 10719 '37', // left 10720 '38', // up 10721 '39', // right 10722 '40', // down 10723 '91', // Cmd(L), Win(L) 10724 '92', // Win(R) 10725 '93', // Cmd(R) 10726 '112',// F1 10727 '113',// F2 10728 '114',// F3 10729 '115',// F4 10730 '116',// F5 10731 '117',// F6 10732 '118',// F7 10733 '119',// F8 10734 '120',// F9 10735 '121',// F10 10736 '122',// F11 10737 '123',// F12 10738 ' ' // --------------- 10739 ].join('@'), 10740 keyCatch = (function(){ 10741 if ( document.all ) { 10742 return function(e){return e.keyCode;}; 10743 } else if ( document.getElementById ) { 10744 return function(e){return (e.keyCode)? e.keyCode: e.charCode;}; 10745 } else if ( document.layers ) { 10746 return function(e){return e.which;}; 10747 } 10748 })(); 10749 10750 // method 10751 var init = function() 10752 { 10753 // placeholderãæå¹ãªãå¦çãå¿ è¦ã¨ããªãã®ã§çµäº 10754 if ( settings.placeholderAttr === 'placeholder' && ('placeholder' in document.createElement('input')) ) { 10755 return; 10756 } 10757 10758 eb$.data(this, 'placeholder-string', eb$(this).attr(settings.placeholderAttr)); 10759 eb$.data(this, 'placeholder-color', eb$(this).css('color')); 10760 10761 var phString = eb$.data(this, 'placeholder-string'), 10762 self = this, 10763 eb$self = eb$(this); 10764 10765 if ( self.value === '' ) { 10766 self.value = phString; 10767 eb$self.css('color', settings.placeholderColor); 10768 } 10769 10770 if ( settings.likeApple === true ) { 10771 eb$self.bind('mousedown', moveCursorToHead); 10772 eb$self.bind('keydown', onKeydown); 10773 eb$self.bind('keyup', resetPlaceholder); 10774 } else { 10775 eb$self.bind('focus', onFocus); 10776 eb$self.bind('blur', resetPlaceholder); 10777 } 10778 10779 eb$self.closest('form').submit(function() { 10780 if ( self.value === eb$.data(self, 'placeholder-string') 10781 && eb$self.css('color') === eb$('<div/>').css('color', settings.placeholderColor).css('color')) { 10782 self.value = ''; 10783 } 10784 return true; 10785 }); 10786 }, 10787 onKeydown = function(e) 10788 { 10789 if ( this.value === eb$.data(this, 'placeholder-string') ) { 10790 var key = keyCatch(e); 10791 10792 if ( ngCode.indexOf('@'+key+'@') !== -1 ) { 10793 // tabã®å ¥åã¯èªãã 10794 return ( key === 9 ); 10795 } else { 10796 _clearPlaceholder(this); 10797 } 10798 } 10799 }, 10800 onFocus = function() 10801 { 10802 if ( this.value === eb$.data(this, 'placeholder-string') ) { 10803 _clearPlaceholder(this); 10804 } 10805 }, 10806 resetPlaceholder = function(e) 10807 { 10808 if ( this.value === '' ) { 10809 _setPlaceholder(this); 10810 10811 if ( e.type === 'keyup' ) { 10812 moveCursorToHead.apply(this); 10813 } 10814 } 10815 }, 10816 moveCursorToHead = function() 10817 { 10818 if ( this.value === eb$.data(this, 'placeholder-string') ) { 10819 eb$(this).focus(); 10820 if ( this.createTextRange ) { 10821 var range = this.createTextRange(); 10822 range.collapse(); 10823 range.moveEnd('character', 0); 10824 range.moveStart('character', 0); 10825 setTimeout(function() { 10826 range.select(); 10827 }, 17); 10828 } 10829 else if ( this.setSelectionRange ) { 10830 this.setSelectionRange(0, 0); 10831 } 10832 return false;
10833 } 10834 }, 10835 _setPlaceholder = function(self) 10836 { 10837 self.value = eb$.data(self, 'placeholder-string'); 10838 eb$(self).css('color', settings.placeholderColor); 10839 }, 10840 _clearPlaceholder = function(self) 10841 { 10842 self.value = ''; 10843 eb$(self).css('color', eb$.data(self, 'placeholder-color')); 10844 }; 10845 // construct 10846 this.each(function() 10847 { 10848 init.apply(this); 10849 }); 10850 10851 return this; 10852}; 10853})(jQuery); 10854/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014 10855 * http://jqueryvalidation.org/ 10856 * Copyright (c) 2014 Jæ¦rn Zaefferer; Licensed MIT */ 10857!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(b.target).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c;return a(this[0]).is("form")?b=this.validate().form():(b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b})),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(a,b){(9!==b.which||""!==this.elementValue(a))&&(a.name in this.submitted||a===this.lastElement)&&this.element
10857(a)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!this.is(e.ignore)&&e[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']","focusin focusout keyup",b).validateDelegate("select, option, [type='radio'], [type='checkbox']","click",b),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue").removeAttr("aria-invalid")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)}
10857,hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled], [readonly]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?a("input[name='"+b.name+"']:checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a];return void 0},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");
10857g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id").replace(/(:|\.|\[|\])/g,"\\$1"),i?i.match(new RegExp("\\b"+f+"\\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);
10857return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),/min|max/.test(c)&&(null===g||/number|range|text/.test(g))&&(d=Number(d)),d||0===d?e[c]=d:g===c&&"range"!==g&&(e[c]=!0);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b);for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),void 0!==d&&(e[c]=d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;
10857if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}}),a.format=function(){throw"$.format has been deprecated. Please use $.validator.format instead."};var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);return e.is(b)?d.apply(e,arguments):void 0})}})}); 10858/*! 10859 * jQuery hashchange event - v1.3 - 7/21/2010 10860 * http://benalman.com/projects/jquery-hashchange-plugin/ 10861 * 10862 * Copyright (c) 2010 "Cowboy" Ben Alman 10863 * Dual licensed under the MIT and GPL licenses. 10864 * http://benalman.com/about/license/ 10865 */ 10866 10867// Script: jQuery hashchange event 10868// 10869// *Version: 1.3, Last updated: 7/21/2010* 10870// 10871// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ 10872// GitHub - http://github.com/cowboy/jquery-hashchange/ 10873// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js 10874// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) 10875// 10876// About: License 10877// 10878// Copyright (c) 2010 "Cowboy" Ben Alman, 10879// Dual licensed under the MIT and GPL licenses. 10880// http://benalman.com/about/license/ 10881// 10882// About: Examples 10883// 10884// These working examples, complete with fully commented code, illustrate a few 10885// ways in which this plugin can be used. 10886// 10887// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ 10888// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ 10889// 10890// About: Support and Testing 10891// 10892// Information about what version or versions of jQuery this plugin has been 10893// tested with, what browsers it has been tested in, and where the unit tests 10894// reside (so you can test it yourself). 10895// 10896// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 10897// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, 10898// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. 10899// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ 10900// 10901// About: Known issues 10902// 10903// While this jQuery hashchange event implementation is quite stable and 10904// robust, there are a few unfortunate browser bugs surrounding expected 10905// hashchange event-based behaviors, independent of any JavaScript 10906// window.onhashchange abstraction. See the following examples for more 10907// information: 10908// 10909// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ 10910// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ 10911// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ 10912// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ 10913// 10914// Also note that should a browser natively support the window.onhashchange 10915// event, but not report that it does, the fallback polling loop will be used. 10916// 10917// About: Release History 10918// 10919// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more 10920// "removable" for mobile-only development. Added IE6/7 document.title 10921// support. Attempted to make Iframe as hidden as possible by using 10922// techniques from http://www.paciellogroup.com/blog/?p=604. Added 10923// support for the "shortcut" format $(window).hashchange( fn ) and 10924// $(window).hashchange() like jQuery provides for built-in events. 10925// Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and 10926// lowered its default value to 50. Added <jQuery.fn.hashchange.domain> 10927// and <jQuery.fn.hashchange.src> properties plus document-domain.html 10928// file to address access denied issues when setting document.domain in 10929// IE6/7. 10930// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin 10931// from a page on another domain would cause an error in Safari 4. Also, 10932// IE6/7 Iframe is now inserted after the body (this actually works), 10933// which prevents the page from scrolling when the event is first bound. 10934// Event can also now be bound before DOM ready, but it won't be usable 10935// before then in IE6/7. 10936// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug 10937// where browser version is incorrectly reported as 8.0, despite 10938// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. 10939// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special 10940// window.onhashchange functionality into a separate plugin for users 10941// who want just the basic event & back button support, without all the 10942// extra awesomeness that BBQ provides. This plugin will be included as 10943// part of jQuery BBQ, but also be available separately. 10944 10945(function($,window,undefined){ 10946 '$:nomunge'; // Used by YUI compressor. 10947 10948 // Reused string. 10949 var str_hashchange = 'hashchange', 10950 10951 // Method / object references. 10952 doc = document, 10953 fake_onhashchange, 10954 special = $.event.special, 10955 10956 // Does the browser support window.onhashchange? Note that IE8 running in 10957 // IE7 compatibility mode reports true for 'onhashchange' in window, even 10958 // though the event isn't supported, so also test document.documentMode. 10959 doc_mode = doc.documentMode, 10960 supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); 10961 10962 // Get location.hash (or what you'd expect location.hash to be) sans any 10963 // leading #. Thanks for making this necessary, Firefox! 10964 function get_fragment( url ) { 10965 url = url || location.href; 10966 return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); 10967 }; 10968 10969 // Method: jQuery.fn.hashchange 10970 // 10971 // Bind a handler to the window.onhashchange event or trigger all bound 10972 // window.onhashchange event handlers. This behavior is consistent with 10973 // jQuery's built-in event handlers. 10974 // 10975 // Usage: 10976 // 10977 // > jQuery(window).hashchange( [ handler ] ); 10978 // 10979 // Arguments: 10980 // 10981 // handler - (Function) Optional handler to be bound to the hashchange 10982 // event. This is a "shortcut" for the more verbose form:
10983 // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, 10984 // all bound window.onhashchange event handlers will be triggered. This 10985 // is a shortcut for the more verbose 10986 // jQuery(window).trigger( 'hashchange' ). These forms are described in 10987 // the <hashchange event> section. 10988 // 10989 // Returns: 10990 // 10991 // (jQuery) The initial jQuery collection of elements. 10992 10993 // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and 10994 // $(elem).hashchange() for triggering, like jQuery does for built-in events. 10995 $.fn[ str_hashchange ] = function( fn ) { 10996 return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); 10997 }; 10998 10999 // Property: jQuery.fn.hashchange.delay 11000 // 11001 // The numeric interval (in milliseconds) at which the <hashchange event> 11002 // polling loop executes. Defaults to 50. 11003 11004 // Property: jQuery.fn.hashchange.domain 11005 // 11006 // If you're setting document.domain in your JavaScript, and you want hash 11007 // history to work in IE6/7, not only must this property be set, but you must 11008 // also set document.domain BEFORE jQuery is loaded into the page. This 11009 // property is only applicable if you are supporting IE6/7 (or IE8 operating 11010 // in "IE7 compatibility" mode). 11011 // 11012 // In addition, the <jQuery.fn.hashchange.src> property must be set to the 11013 // path of the included "document-domain.html" file, which can be renamed or 11014 // modified if necessary (note that the document.domain specified must be the 11015 // same in both your main JavaScript as well as in this file). 11016 // 11017 // Usage: 11018 // 11019 // jQuery.fn.hashchange.domain = document.domain; 11020 11021 // Property: jQuery.fn.hashchange.src 11022 // 11023 // If, for some reason, you need to specify an Iframe src file (for example, 11024 // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can 11025 // do so using this property. Note that when using this property, history 11026 // won't be recorded in IE6/7 until the Iframe src file loads. This property 11027 // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 11028 // compatibility" mode). 11029 // 11030 // Usage: 11031 // 11032 // jQuery.fn.hashchange.src = 'path/to/file.html'; 11033 11034 $.fn[ str_hashchange ].delay = 50; 11035 /* 11036 $.fn[ str_hashchange ].domain = null; 11037 $.fn[ str_hashchange ].src = null; 11038 */ 11039 11040 // Event: hashchange event 11041 // 11042 // Fired when location.hash changes. In browsers that support it, the native 11043 // HTML5 window.onhashchange event is used, otherwise a polling loop is 11044 // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to 11045 // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 11046 // compatibility" mode), a hidden Iframe is created to allow the back button 11047 // and hash-based history to work. 11048 // 11049 // Usage as described in <jQuery.fn.hashchange>: 11050 // 11051 // > // Bind an event handler. 11052 // > jQuery(window).hashchange( function(e) { 11053 // > var hash = location.hash; 11054 // > ... 11055 // > }); 11056 // > 11057 // > // Manually trigger the event handler. 11058 // > jQuery(window).hashchange(); 11059 // 11060 // A more verbose usage that allows for event namespacing: 11061 // 11062 // > // Bind an event handler. 11063 // > jQuery(window).bind( 'hashchange', function(e) { 11064 // > var hash = location.hash; 11065 // > ... 11066 // > }); 11067 // > 11068 // > // Manually trigger the event handler. 11069 // > jQuery(window).trigger( 'hashchange' ); 11070 // 11071 // Additional Notes: 11072 // 11073 // * The polling loop and Iframe are not created until at least one handler 11074 // is actually bound to the 'hashchange' event. 11075 // * If you need the bound handler(s) to execute immediately, in cases where 11076 // a location.hash exists on page load, via bookmark or page refresh for 11077 // example, use jQuery(window).hashchange() or the more verbose 11078 // jQuery(window).trigger( 'hashchange' ). 11079 // * The event can be bound before DOM ready, but since it won't be usable 11080 // before then in IE6/7 (due to the necessary Iframe), recommended usage is 11081 // to bind it inside a DOM ready handler. 11082 11083 // Override existing $.event.special.hashchange methods (allowing this plugin 11084 // to be defined after jQuery BBQ in BBQ's source code). 11085 special[ str_hashchange ] = $.extend( special[ str_hashchange ], { 11086 11087 // Called only when the first 'hashchange' event is bound to window. 11088 setup: function() { 11089 // If window.onhashchange is supported natively, there's nothing to do.. 11090 if ( supports_onhashchange ) { return false; } 11091 11092 // Otherwise, we need to create our own. And we don't want to call this 11093 // until the user binds to the event, just in case they never do, since it 11094 // will create a polling loop and possibly even a hidden Iframe. 11095 $( fake_onhashchange.start ); 11096 }, 11097 11098 // Called only when the last 'hashchange' event is unbound from window. 11099 teardown: function() { 11100 // If window.onhashchange is supported natively, there's nothing to do.. 11101 if ( supports_onhashchange ) { return false; } 11102 11103 // Otherwise, we need to stop ours (if possible). 11104 $( fake_onhashchange.stop ); 11105 } 11106 11107 }); 11108 11109 // fake_onhashchange does all the work of triggering the window.onhashchange 11110 // event for browsers that don't natively support it, including creating a
11111 // polling loop to watch for hash changes and in IE 6/7 creating a hidden 11112 // Iframe to enable back and forward. 11113 fake_onhashchange = (function(){ 11114 var self = {}, 11115 timeout_id, 11116 11117 // Remember the initial hash so it doesn't get triggered immediately. 11118 last_hash = get_fragment(), 11119 11120 fn_retval = function(val){ return val; }, 11121 history_set = fn_retval, 11122 history_get = fn_retval; 11123 11124 // Start the polling loop. 11125 self.start = function() { 11126 timeout_id || poll(); 11127 }; 11128 11129 // Stop the polling loop. 11130 self.stop = function() { 11131 timeout_id && clearTimeout( timeout_id ); 11132 timeout_id = undefined; 11133 }; 11134 11135 // This polling loop checks every $.fn.hashchange.delay milliseconds to see 11136 // if location.hash has changed, and triggers the 'hashchange' event on 11137 // window when necessary. 11138 function poll() { 11139 var hash = get_fragment(), 11140 history_hash = history_get( last_hash ); 11141 11142 if ( hash !== last_hash ) { 11143 history_set( last_hash = hash, history_hash ); 11144 11145 $(window).trigger( str_hashchange ); 11146 11147 } else if ( history_hash !== last_hash ) { 11148 location.href = location.href.replace( /#.*/, '' ) + history_hash; 11149 } 11150 11151 timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); 11152 }; 11153 11154 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 11155 // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv 11156 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 11157 $.support.msie && !supports_onhashchange && (function(){ 11158 // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 11159 // when running in "IE7 compatibility" mode. 11160 11161 var iframe, 11162 iframe_src; 11163 11164 // When the event is bound and polling starts in IE 6/7, create a hidden 11165 // Iframe for history handling. 11166 self.start = function(){ 11167 if ( !iframe ) { 11168 iframe_src = $.fn[ str_hashchange ].src; 11169 iframe_src = iframe_src && iframe_src + get_fragment(); 11170 11171 // Create hidden Iframe. Attempt to make Iframe as hidden as possible 11172 // by using techniques from http://www.paciellogroup.com/blog/?p=604. 11173 iframe = $('<iframe tabindex="-1" title="empty"/>').hide() 11174 11175 // When Iframe has completely loaded, initialize the history and 11176 // start polling. 11177 .one( 'load', function(){ 11178 iframe_src || history_set( get_fragment() ); 11179 poll(); 11180 }) 11181 11182 // Load Iframe src if specified, otherwise nothing. 11183 .attr( 'src', iframe_src || 'javascript:0' ) 11184 11185 // Append Iframe after the end of the body to prevent unnecessary 11186 // initial page scrolling (yes, this works). 11187 .insertAfter( 'body' )[0].contentWindow; 11188 11189 // Whenever `document.title` changes, update the Iframe's title to 11190 // prettify the back/next history menu entries. Since IE sometimes 11191 // errors with "Unspecified error" the very first time this is set 11192 // (yes, very useful) wrap this with a try/catch block. 11193 doc.onpropertychange = function(){ 11194 try { 11195 if ( event.propertyName === 'title' ) { 11196 iframe.document.title = doc.title; 11197 } 11198 } catch(e) {} 11199 }; 11200 11201 } 11202 }; 11203 11204 // Override the "stop" method since an IE6/7 Iframe was created. Even 11205 // if there are no longer any bound event handlers, the polling loop 11206 // is still necessary for back/next to work at all! 11207 self.stop = fn_retval; 11208 11209 // Get history by looking at the hidden Iframe's location.hash. 11210 history_get = function() { 11211 return get_fragment( iframe.location.href ); 11212 }; 11213 11214 // Set a new history item by opening and then closing the Iframe 11215 // document, *then* setting its location.hash. If document.domain has 11216 // been set, update that as well. 11217 history_set = function( hash, history_hash ) { 11218 var iframe_doc = iframe.document, 11219 domain = $.fn[ str_hashchange ].domain; 11220 11221 if ( hash !== history_hash ) { 11222 // Update Iframe with any initial `document.title` that might be set. 11223 iframe_doc.title = doc.title; 11224 11225 // Opening the Iframe's document after it has been closed is what 11226 // actually adds a history entry. 11227 iframe_doc.open(); 11228 11229 // Set document.domain for the Iframe document as well, if necessary. 11230 domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' ); 11231 11232 iframe_doc.close(); 11233 11234 // Update the Iframe's hash, for great justice. 11235 iframe.location.hash = hash; 11236 } 11237 }; 11238 11239 })(); 11240 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 11241 // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^ 11242 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 11243 11244 return self; 11245 })(); 11246 11247})(jQuery,this);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.