1/******/ (function(modules) { // webpackBootstrap 2/******/ // The module cache 3/******/ var installedModules = {}; 4/******/ 5/******/ // The require function 6/******/ function __webpack_require__(moduleId) { 7/******/ 8/******/ // Check if module is in cache 9/******/ if(installedModules[moduleId]) { 10/******/ return installedModules[moduleId].exports; 11/******/ } 12/******/ // Create a new module (and put it into the cache) 13/******/ var module = installedModules[moduleId] = { 14/******/ i: moduleId, 15/******/ l: false, 16/******/ exports: {} 17/******/ }; 18/******/ 19/******/ // Execute the module function 20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21/******/ 22/******/ // Flag the module as loaded 23/******/ module.l = true; 24/******/ 25/******/ // Return the exports of the module 26/******/ return module.exports; 27/******/ } 28/******/ 29/******/ 30/******/ // expose the modules object (__webpack_modules__) 31/******/ __webpack_require__.m = modules; 32/******/ 33/******/ // expose the module cache 34/******/ __webpack_require__.c = installedModules; 35/******/ 36/******/ // define getter function for harmony exports 37/******/ __webpack_require__.d = function(exports, name, getter) { 38/******/ if(!__webpack_require__.o(exports, name)) { 39/******/ Object.defineProperty(exports, name, { 40/******/ configurable: false, 41/******/ enumerable: true, 42/******/ get: getter 43/******/ }); 44/******/ } 45/******/ }; 46/******/ 47/******/ // getDefaultExport function for compatibility with non-harmony modules 48/******/ __webpack_require__.n = function(module) { 49/******/ var getter = module && module.__esModule ? 50/******/ function getDefault() { return module['default']; } : 51/******/ function getModuleExports() { return module; }; 52/******/ __webpack_require__.d(getter, 'a', getter); 53/******/ return getter; 54/******/ }; 55/******/ 56/******/ // Object.prototype.hasOwnProperty.call 57/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 58/******/ 59/******/ // __webpack_public_path__ 60/******/ __webpack_require__.p = ""; 61/******/ 62/******/ // Load entry module and return exports 63/******/ return __webpack_require__(__webpack_require__.s = 2); 64/******/ }) 65/************************************************************************/ 66/******/ ([ 67/* 0 */ 68/***/ (function(module, exports, __webpack_require__) { 69 70/* WEBPACK VAR INJECTION */(function(global) {module.exports = global["jQuery"] = __webpack_require__(3); 71/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) 72 73/***/ }), 74/* 1 */ 75/***/ (function(module, exports) { 76 77var g; 78 79// This works in non-strict mode 80g = (function() { 81 return this; 82})(); 83 84try { 85 // This works if eval is allowed (see CSP) 86 g = g || Function("return this")() || (1,eval)("this"); 87} catch(e) { 88 // This works if the window reference is available 89 if(typeof window === "object") 90 g = window; 91} 92 93// g can still be undefined, but nothing to do about it... 94// We return undefined, instead of nothing here, so it's 95// easier to handle this case. if(!global) { ...} 96 97module.exports = g; 98 99 100/***/ }), 101/* 2 */ 102/***/ (function(module, exports, __webpack_require__) { 103 104"use strict"; 105/* WEBPACK VAR INJECTION */(function($) { 106 107__webpack_require__(4); 108 109var _aos = __webpack_require__(6); 110 111var _aos2 = _interopRequireDefault(_aos); 112 113function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 114 115var $win = $(window); 116var $doc = $(document); 117 118var $sliderIntro = $('.slider-intro'); 119var $body = $('body'); 120var $navTrigger = $('.nav-trigger'); 121var $close = $('.close'); 122var $navMenu = $('.nav-mobile'); 123var $header = $('.header'); 124 125$doc.ready(function () { 126 $('.collapsible').collapse(); 127 128 _aos2.default.init(); 129 130 131 132 var a = setInterval(function() { 133 if (document.readyState == "complete") { 134 // clear the interval 135 //insert code here 136 $('.owl-carousel').show(); 137 $sliderIntro.owlCarousel({ 138 loop: true, 139 items: 1, 140 autoplay: true 141 }); 142 clearInterval(a); 143 // finally your page is loaded. 144 } 145 }, 100); 146 147 148 $navTrigger.on('click', function () { 149 $navMenu.toggleClass('open'); 150 $body.toggleClass('overflow-hidden'); 151 }); 152 153 $close.on('click', function () { 154 $navMenu.toggleClass('open'); 155 $body.toggleClass('overflow-hidden'); 156 }); 157 158 $win.on('scroll', function () { 159 var scrolltop = $win.scrollTop(); 160 161 $header.toggleClass('scrolled', scrolltop > 0); 162 }); 163}); 164/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) 165 166/***/ }), 167/* 3 */ 168/***/ (function(module, exports, __webpack_require__) { 169 170var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 171 * jQuery JavaScript Library v3.2.1 172 * https://jquery.com/ 173 * 174 * Includes Sizzle.js 175 * https://sizzlejs.com/ 176 * 177 * Copyright JS Foundation and other contributors 178 * Released under the MIT license 179 * https://jquery.org/license 180 * 181 * Date: 2017-03-20T18:59Z 182 */ 183( function( global, factory ) { 184 185 "use strict"; 186 187 if ( typeof module === "object" && typeof module.exports === "object" ) { 188 189 // For CommonJS and CommonJS-like environments where a proper `window` 190 // is present, execute the factory and get jQuery. 191 // For environments that do not have a `window` with a `document` 192 // (such as Node.js), expose a factory as module.exports. 193 // This accentuates the need for the creation of a real `window`. 194 // e.g. var jQuery = require("jquery")(window); 195 // See ticket #14549 for more info. 196 module.exports = global.document ? 197 factory( global, true ) : 198 function( w ) { 199 if ( !w.document ) { 200 throw new Error( "jQuery requires a window with a document" ); 201 } 202 return factory( w ); 203 }; 204 } else { 205 factory( global ); 206 } 207 208// Pass this if window is not defined yet 209} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 210 211// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 212// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 213// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), str
vendor: 11,277 bytes, lines 213-700
213ict mode should be common 214// enough that all such attempts are guarded in a try block. 215"use strict"; 216 217var arr = []; 218 219var document = window.document; 220 221var getProto = Object.getPrototypeOf; 222 223var slice = arr.slice; 224 225var concat = arr.concat; 226 227var push = arr.push; 228 229var indexOf = arr.indexOf; 230 231var class2type = {}; 232 233var toString = class2type.toString; 234 235var hasOwn = class2type.hasOwnProperty; 236 237var fnToString = hasOwn.toString; 238 239var ObjectFunctionString = fnToString.call( Object ); 240 241var support = {}; 242 243 244 245 function DOMEval( code, doc ) { 246 doc = doc || document; 247 248 var script = doc.createElement( "script" ); 249 250 script.text = code; 251 doc.head.appendChild( script ).parentNode.removeChild( script ); 252 } 253/* global Symbol */ 254// Defining this global in .eslintrc.json would create a danger of using the global 255// unguarded in another place, it seems safer to define global only for this module 256 257 258 259var 260 version = "3.2.1", 261 262 // Define a local copy of jQuery 263 jQuery = function( selector, context ) { 264 265 // The jQuery object is actually just the init constructor 'enhanced' 266 // Need init if jQuery is called (just allow error to be thrown if not included) 267 return new jQuery.fn.init( selector, context ); 268 }, 269 270 // Support: Android <=4.0 only 271 // Make sure we trim BOM and NBSP 272 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 273 274 // Matches dashed string for camelizing 275 rmsPrefix = /^-ms-/, 276 rdashAlpha = /-([a-z])/g, 277 278 // Used by jQuery.camelCase as callback to replace() 279 fcamelCase = function( all, letter ) { 280 return letter.toUpperCase(); 281 }; 282 283jQuery.fn = jQuery.prototype = { 284 285 // The current version of jQuery being used 286 jquery: version, 287 288 constructor: jQuery, 289 290 // The default length of a jQuery object is 0 291 length: 0, 292 293 toArray: function() { 294 return slice.call( this ); 295 }, 296 297 // Get the Nth element in the matched element set OR 298 // Get the whole matched element set as a clean array 299 get: function( num ) { 300 301 // Return all the elements in a clean array 302 if ( num == null ) { 303 return slice.call( this ); 304 } 305 306 // Return just the one element from the set 307 return num < 0 ? this[ num + this.length ] : this[ num ]; 308 }, 309 310 // Take an array of elements and push it onto the stack 311 // (returning the new matched element set) 312 pushStack: function( elems ) { 313 314 // Build a new jQuery matched element set 315 var ret = jQuery.merge( this.constructor(), elems ); 316 317 // Add the old object onto the stack (as a reference) 318 ret.prevObject = this; 319 320 // Return the newly-formed element set 321 return ret; 322 }, 323 324 // Execute a callback for every element in the matched set. 325 each: function( callback ) { 326 return jQuery.each( this, callback ); 327 }, 328 329 map: function( callback ) { 330 return this.pushStack( jQuery.map( this, function( elem, i ) { 331 return callback.call( elem, i, elem ); 332 } ) ); 333 }, 334 335 slice: function() { 336 return this.pushStack( slice.apply( this, arguments ) ); 337 }, 338 339 first: function() { 340 return this.eq( 0 ); 341 }, 342 343 last: function() { 344 return this.eq( -1 ); 345 }, 346 347 eq: function( i ) { 348 var len = this.length, 349 j = +i + ( i < 0 ? len : 0 ); 350 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 351 }, 352 353 end: function() { 354 return this.prevObject || this.constructor(); 355 }, 356 357 // For internal use only. 358 // Behaves like an Array's method, not like a jQuery method. 359 push: push, 360 sort: arr.sort, 361 splice: arr.splice 362}; 363 364jQuery.extend = jQuery.fn.extend = function() { 365 var options, name, src, copy, copyIsArray, clone, 366 target = arguments[ 0 ] || {}, 367 i = 1, 368 length = arguments.length, 369 deep = false; 370 371 // Handle a deep copy situation 372 if ( typeof target === "boolean" ) { 373 deep = target; 374 375 // Skip the boolean and the target 376 target = arguments[ i ] || {}; 377 i++; 378 } 379 380 // Handle case when target is a string or something (possible in deep copy) 381 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { 382 target = {}; 383 } 384 385 // Extend jQuery itself if only one argument is passed 386 if ( i === length ) { 387 target = this; 388 i--; 389 } 390 391 for ( ; i < length; i++ ) { 392 393 // Only deal with non-null/undefined values 394 if ( ( options = arguments[ i ] ) != null ) { 395 396 // Extend the base object 397 for ( name in options ) { 398 src = target[ name ]; 399 copy = options[ name ]; 400 401 // Prevent never-ending loop 402 if ( target === copy ) { 403 continue; 404 } 405 406 // Recurse if we're merging plain objects or arrays 407 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 408 ( copyIsArray = Array.isArray( copy ) ) ) ) { 409 410 if ( copyIsArray ) { 411 copyIsArray = false; 412 clone = src && Array.isArray( src ) ? src : []; 413 414 } else { 415 clone = src && jQuery.isPlainObject( src ) ? src : {}; 416 } 417 418 // Never move original objects, clone them 419 target[ name ] = jQuery.extend( deep, clone, copy ); 420 421 // Don't bring in undefined values 422 } else if ( copy !== undefined ) { 423 target[ name ] = copy; 424 } 425 } 426 } 427 } 428 429 // Return the modified object 430 return target; 431}; 432 433jQuery.extend( { 434 435 // Unique for each copy of jQuery on the page 436 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 437 438 // Assume jQuery is ready without the ready module 439 isReady: true, 440 441 error: function( msg ) { 442 throw new Error( msg ); 443 }, 444 445 noop: function() {}, 446 447 isFunction: function( obj ) { 448 return jQuery.type( obj ) === "function"; 449 }, 450 451 isWindow: function( obj ) { 452 return obj != null && obj === obj.window; 453 }, 454 455 isNumeric: function( obj ) { 456 457 // As of jQuery 3.0, isNumeric is limited to 458 // strings and numbers (primitives or objects) 459 // that can be coerced to finite numbers (gh-2662) 460 var type = jQuery.type( obj ); 461 return ( type === "number" || type === "string" ) && 462 463 // parseFloat NaNs numeric-cast false positives ("") 464 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 465 // subtraction forces infinities to NaN 466 !isNaN( obj - parseFloat( obj ) ); 467 }, 468 469 isPlainObject: function( obj ) { 470 var proto, Ctor; 471 472 // Detect obvious negatives 473 // Use toString instead of jQuery.type to catch host objects 474 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 475 return false; 476 } 477 478 proto = getProto( obj ); 479 480 // Objects with no prototype (e.g., `Object.create( null )`) are plain 481 if ( !proto ) { 482 return true; 483 } 484 485 // Objects with prototype are plain iff they were constructed by a global Object function 486 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 487 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 488 }, 489 490 isEmptyObject: function( obj ) { 491 492 /* eslint-disable no-unused-vars */ 493 // See https://github.com/eslint/eslint/issues/6125 494 var name; 495 496 for ( name in obj ) { 497 return false; 498 } 499 return true; 500 }, 501 502 type: function( obj ) { 503 if ( obj == null ) { 504 return obj + ""; 505 } 506 507 // Support: Android <=2.3 only (functionish RegExp) 508 return typeof obj === "object" || typeof obj === "function" ? 509 class2type[ toString.call( obj ) ] || "object" : 510 typeof obj; 511 }, 512 513 // Evaluates a script in a global context 514 globalEval: function( code ) { 515 DOMEval( code ); 516 }, 517 518 // Convert dashed to camelCase; used by the css and data modules 519 // Support: IE <=9 - 11, Edge 12 - 13 520 // Microsoft forgot to hump their vendor prefix (#9572) 521 camelCase: function( string ) { 522 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 523 }, 524 525 each: function( obj, callback ) { 526 var length, i = 0; 527 528 if ( isArrayLike( obj ) ) { 529 length = obj.length; 530 for ( ; i < length; i++ ) { 531 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 532 break; 533 } 534 } 535 } else { 536 for ( i in obj ) { 537 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 538 break; 539 } 540 } 541 } 542 543 return obj; 544 }, 545 546 // Support: Android <=4.0 only 547 trim: function( text ) { 548 return text == null ? 549 "" : 550 ( text + "" ).replace( rtrim, "" ); 551 }, 552 553 // results is for internal usage only 554 makeArray: function( arr, results ) { 555 var ret = results || []; 556 557 if ( arr != null ) { 558 if ( isArrayLike( Object( arr ) ) ) { 559 jQuery.merge( ret, 560 typeof arr === "string" ? 561 [ arr ] : arr 562 ); 563 } else { 564 push.call( ret, arr ); 565 } 566 } 567 568 return ret; 569 }, 570 571 inArray: function( elem, arr, i ) { 572 return arr == null ? -1 : indexOf.call( arr, elem, i ); 573 }, 574 575 // Support: Android <=4.0 only, PhantomJS 1 only 576 // push.apply(_, arraylike) throws on ancient WebKit 577 merge: function( first, second ) { 578 var len = +second.length, 579 j = 0, 580 i = first.length; 581 582 for ( ; j < len; j++ ) { 583 first[ i++ ] = second[ j ]; 584 } 585 586 first.length = i; 587 588 return first; 589 }, 590 591 grep: function( elems, callback, invert ) { 592 var callbackInverse, 593 matches = [], 594 i = 0, 595 length = elems.length, 596 callbackExpect = !invert; 597 598 // Go through the array, only saving the items 599 // that pass the validator function 600 for ( ; i < length; i++ ) { 601 callbackInverse = !callback( elems[ i ], i ); 602 if ( callbackInverse !== callbackExpect ) { 603 matches.push( elems[ i ] ); 604 } 605 } 606 607 return matches; 608 }, 609 610 // arg is for internal usage only 611 map: function( elems, callback, arg ) { 612 var length, value, 613 i = 0, 614 ret = []; 615 616 // Go through the array, translating each of the items to their new values 617 if ( isArrayLike( elems ) ) { 618 length = elems.length; 619 for ( ; i < length; i++ ) { 620 value = callback( elems[ i ], i, arg ); 621 622 if ( value != null ) { 623 ret.push( value ); 624 } 625 } 626 627 // Go through every key on the object, 628 } else { 629 for ( i in elems ) { 630 value = callback( elems[ i ], i, arg ); 631 632 if ( value != null ) { 633 ret.push( value ); 634 } 635 } 636 } 637 638 // Flatten any nested arrays 639 return concat.apply( [], ret ); 640 }, 641 642 // A global GUID counter for objects 643 guid: 1, 644 645 // Bind a function to a context, optionally partially applying any 646 // arguments. 647 proxy: function( fn, context ) { 648 var tmp, args, proxy; 649 650 if ( typeof context === "string" ) { 651 tmp = fn[ context ]; 652 context = fn; 653 fn = tmp; 654 } 655 656 // Quick check to determine if target is callable, in the spec 657 // this throws a TypeError, but we will just return undefined. 658 if ( !jQuery.isFunction( fn ) ) { 659 return undefined; 660 } 661 662 // Simulated bind 663 args = slice.call( arguments, 2 ); 664 proxy = function() { 665 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 666 }; 667 668 // Set the guid of unique handler to the same of original handler, so it can be removed 669 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 670 671 return proxy; 672 }, 673 674 now: Date.now, 675 676 // jQuery.support is not used in Core but other projects attach their 677 // properties to it so it needs to exist. 678 support: support 679} ); 680 681if ( typeof Symbol === "function" ) { 682 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 683} 684 685// Populate the class2type map 686jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 687function( i, name ) { 688 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 689} ); 690 691function isArrayLike( obj ) { 692 693 // Support: real iOS 8.2 only (not reproducible in simulator) 694 // `in` check used to prevent JIT error (gh-2145) 695 // hasOwn isn't used here due to false negatives 696 // regarding Nodelist length in IE 697 var length = !!obj && "length" in obj && obj.length, 698 type = jQuery.type( obj ); 699 700 if ( type === "function" || jQuery.
vendor: 31,442 bytes, lines 700-1797
700isWindow( obj ) ) { 701 return false; 702 } 703 704 return type === "array" || length === 0 || 705 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 706} 707var Sizzle = 708/*! 709 * Sizzle CSS Selector Engine v2.3.3 710 * https://sizzlejs.com/ 711 * 712 * Copyright jQuery Foundation and other contributors 713 * Released under the MIT license 714 * http://jquery.org/license 715 * 716 * Date: 2016-08-08 717 */ 718(function( window ) { 719 720var i, 721 support, 722 Expr, 723 getText, 724 isXML, 725 tokenize, 726 compile, 727 select, 728 outermostContext, 729 sortInput, 730 hasDuplicate, 731 732 // Local document vars 733 setDocument, 734 document, 735 docElem, 736 documentIsHTML, 737 rbuggyQSA, 738 rbuggyMatches, 739 matches, 740 contains, 741 742 // Instance-specific data 743 expando = "sizzle" + 1 * new Date(), 744 preferredDoc = window.document, 745 dirruns = 0, 746 done = 0, 747 classCache = createCache(), 748 tokenCache = createCache(), 749 compilerCache = createCache(), 750 sortOrder = function( a, b ) { 751 if ( a === b ) { 752 hasDuplicate = true; 753 } 754 return 0; 755 }, 756 757 // Instance methods 758 hasOwn = ({}).hasOwnProperty, 759 arr = [], 760 pop = arr.pop, 761 push_native = arr.push, 762 push = arr.push, 763 slice = arr.slice, 764 // Use a stripped-down indexOf as it's faster than native 765 // https://jsperf.com/thor-indexof-vs-for/5 766 indexOf = function( list, elem ) { 767 var i = 0, 768 len = list.length; 769 for ( ; i < len; i++ ) { 770 if ( list[i] === elem ) { 771 return i; 772 } 773 } 774 return -1; 775 }, 776 777 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 778 779 // Regular expressions 780 781 // http://www.w3.org/TR/css3-selectors/#whitespace 782 whitespace = "[\\x20\\t\\r\\n\\f]", 783 784 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 785 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", 786 787 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 788 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 789 // Operator (capture 2) 790 "*([*^$|!~]?=)" + whitespace + 791 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 792 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + 793 "*\\]", 794 795 pseudos = ":(" + identifier + ")(?:\\((" + 796 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 797 // 1. quoted (capture 3; capture 4 or capture 5) 798 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 799 // 2. simple (capture 6) 800 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 801 // 3. anything else (capture 2) 802 ".*" + 803 ")\\)|)", 804 805 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 806 rwhitespace = new RegExp( whitespace + "+", "g" ), 807 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), 808 809 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 810 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), 811 812 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), 813 814 rpseudo = new RegExp( pseudos ), 815 ridentifier = new RegExp( "^" + identifier + "$" ), 816 817 matchExpr = { 818 "ID": new RegExp( "^#(" + identifier + ")" ), 819 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 820 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 821 "ATTR": new RegExp( "^" + attributes ), 822 "PSEUDO": new RegExp( "^" + pseudos ), 823 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + 824 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + 825 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 826 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 827 // For use in libraries implementing .is() 828 // We use this for POS matching in `select` 829 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + 830 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 831 }, 832 833 rinputs = /^(?:input|select|textarea|button)$/i, 834 rheader = /^h\d$/i, 835 836 rnative = /^[^{]+\{\s*\[native \w/, 837 838 // Easily-parseable/retrievable ID or TAG or CLASS selectors 839 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 840 841 rsibling = /[+~]/, 842 843 // CSS escapes 844 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 845 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), 846 funescape = function( _, escaped, escapedWhitespace ) { 847 var high = "0x" + escaped - 0x10000; 848 // NaN means non-codepoint 849 // Support: Firefox<24 850 // Workaround erroneous numeric interpretation of +"0x" 851 return high !== high || escapedWhitespace ? 852 escaped : 853 high < 0 ? 854 // BMP codepoint 855 String.fromCharCode( high + 0x10000 ) : 856 // Supplemental Plane codepoint (surrogate pair) 857 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 858 }, 859 860 // CSS string/identifier serialization 861 // https://drafts.csswg.org/cssom/#common-serializing-idioms 862 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, 863 fcssescape = function( ch, asCodePoint ) { 864 if ( asCodePoint ) { 865 866 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 867 if ( ch === "\0" ) { 868 return "\uFFFD"; 869 } 870 871 // Control characters and (dependent upon position) numbers get escaped as code points 872 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 873 } 874 875 // Other potentially-special ASCII characters get backslash-escaped 876 return "\\" + ch; 877 }, 878 879 // Used for iframes 880 // See setDocument() 881 // Removing the function wrapper causes a "Permission Denied" 882 // error in IE 883 unloadHandler = function() { 884 setDocument(); 885 }, 886 887 disabledAncestor = addCombinator( 888 function( elem ) { 889 return elem.disabled === true && ("form" in elem || "label" in elem); 890 }, 891 { dir: "parentNode", next: "legend" } 892 ); 893 894// Optimize for push.apply( _, NodeList ) 895try { 896 push.apply( 897 (arr = slice.call( preferredDoc.childNodes )), 898 preferredDoc.childNodes 899 ); 900 // Support: Android<4.0 901 // Detect silently failing push.apply 902 arr[ preferredDoc.childNodes.length ].nodeType; 903} catch ( e ) { 904 push = { apply: arr.length ? 905 906 // Leverage slice if possible 907 function( target, els ) { 908 push_native.apply( target, slice.call(els) ); 909 } : 910 911 // Support: IE<9 912 // Otherwise append directly 913 function( target, els ) { 914 var j = target.length, 915 i = 0; 916 // Can't trust NodeList.length 917 while ( (target[j++] = els[i++]) ) {} 918 target.length = j - 1; 919 } 920 }; 921} 922 923function Sizzle( selector, context, results, seed ) { 924 var m, i, elem, nid, match, groups, newSelector, 925 newContext = context && context.ownerDocument, 926 927 // nodeType defaults to 9, since context defaults to document 928 nodeType = context ? context.nodeType : 9; 929 930 results = results || []; 931 932 // Return early from calls with invalid selector or context 933 if ( typeof selector !== "string" || !selector || 934 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 935 936 return results; 937 } 938 939 // Try to shortcut find operations (as opposed to filters) in HTML documents 940 if ( !seed ) { 941 942 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { 943 setDocument( context ); 944 } 945 context = context || document; 946 947 if ( documentIsHTML ) { 948 949 // If the selector is sufficiently simple, try using a "get*By*" DOM method 950 // (excepting DocumentFragment context, where the methods don't exist) 951 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { 952 953 // ID selector 954 if ( (m = match[1]) ) { 955 956 // Document context 957 if ( nodeType === 9 ) { 958 if ( (elem = context.getElementById( m )) ) { 959 960 // Support: IE, Opera, Webkit 961 // TODO: identify versions 962 // getElementById can match elements by name instead of ID 963 if ( elem.id === m ) { 964 results.push( elem ); 965 return results; 966 } 967 } else { 968 return results; 969 } 970 971 // Element context 972 } else { 973 974 // Support: IE, Opera, Webkit 975 // TODO: identify versions 976 // getElementById can match elements by name instead of ID 977 if ( newContext && (elem = newContext.getElementById( m )) && 978 contains( context, elem ) && 979 elem.id === m ) { 980 981 results.push( elem ); 982 return results; 983 } 984 } 985 986 // Type selector 987 } else if ( match[2] ) { 988 push.apply( results, context.getElementsByTagName( selector ) ); 989 return results; 990 991 // Class selector 992 } else if ( (m = match[3]) && support.getElementsByClassName && 993 context.getElementsByClassName ) { 994 995 push.apply( results, context.getElementsByClassName( m ) ); 996 return results; 997 } 998 } 999 1000 // Take advantage of querySelectorAll 1001 if ( support.qsa && 1002 !compilerCache[ selector + " " ] && 1003 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { 1004 1005 if ( nodeType !== 1 ) { 1006 newContext = context; 1007 newSelector = selector; 1008 1009 // qSA looks outside Element context, which is not what we want 1010 // Thanks to Andrew Dupont for this workaround technique 1011 // Support: IE <=8 1012 // Exclude object elements 1013 } else if ( context.nodeName.toLowerCase() !== "object" ) { 1014 1015 // Capture the context ID, setting it first if necessary 1016 if ( (nid = context.getAttribute( "id" )) ) { 1017 nid = nid.replace( rcssescape, fcssescape ); 1018 } else { 1019 context.setAttribute( "id", (nid = expando) ); 1020 } 1021 1022 // Prefix every selector in the list 1023 groups = tokenize( selector ); 1024 i = groups.length; 1025 while ( i-- ) { 1026 groups[i] = "#" + nid + " " + toSelector( groups[i] ); 1027 } 1028 newSelector = groups.join( "," ); 1029 1030 // Expand context for sibling selectors 1031 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 1032 context; 1033 } 1034 1035 if ( newSelector ) { 1036 try { 1037 push.apply( results, 1038 newContext.querySelectorAll( newSelector ) 1039 ); 1040 return results; 1041 } catch ( qsaError ) { 1042 } finally { 1043 if ( nid === expando ) { 1044 context.removeAttribute( "id" ); 1045 } 1046 } 1047 } 1048 } 1049 } 1050 } 1051 1052 // All others 1053 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 1054} 1055 1056/** 1057 * Create key-value caches of limited size 1058 * @returns {function(string, object)} Returns the Object data after storing it on itself with 1059 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 1060 * deleting the oldest entry 1061 */ 1062function createCache() { 1063 var keys = []; 1064 1065 function cache( key, value ) { 1066 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 1067 if ( keys.push( key + " " ) > Expr.cacheLength ) { 1068 // Only keep the most recent entries 1069 delete cache[ keys.shift() ]; 1070 } 1071 return (cache[ key + " " ] = value); 1072 } 1073 return cache; 1074} 1075 1076/** 1077 * Mark a function for special use by Sizzle 1078 * @param {Function} fn The function to mark 1079 */ 1080function markFunction( fn ) { 1081 fn[ expando ] = true; 1082 return fn; 1083} 1084 1085/** 1086 * Support testing using an element 1087 * @param {Function} fn Passed the created element and returns a boolean result 1088 */ 1089function assert( fn ) { 1090 var el = document.createElement("fieldset"); 1091 1092 try { 1093 return !!fn( el ); 1094 } catch (e) { 1095 return false; 1096 } finally { 1097 // Remove from its parent by default 1098 if ( el.parentNode ) { 1099 el.parentNode.removeChild( el ); 1100 } 1101 // release memory in IE 1102 el = null; 1103 } 1104} 1105 1106/** 1107 * Adds the same handler for all of the specified attrs 1108 * @param {String} attrs Pipe-separated list of attributes 1109 * @param {Function} handler The method that will be applied 1110 */ 1111function addHandle( attrs, handler ) { 1112 var arr = attrs.split("|"), 1113 i = arr.length; 1114 1115 while ( i-- ) { 1116 Expr.attrHandle[ arr[i] ] = handler; 1117 } 1118} 1119 1120/** 1121 * Checks document order of two siblings 1122 * @param {Element} a 1123 * @param {Element} b 1124 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 1125 */ 1126function siblingCheck( a, b ) { 1127 var cur = b && a, 1128 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 1129 a.sourceIndex - b.sourceIndex; 1130 1131 // Use IE sourceIndex if available on both nodes 1132 if ( diff ) { 1133 return diff; 1134 } 1135 1136 // Check if b follows a 1137 if ( cur ) { 1138 while ( (cur = cur.nextSibling) ) { 1139 if ( cur === b ) { 1140 return -1; 1141 } 1142 } 1143 } 1144 1145 return a ? 1 : -1; 1146} 1147 1148/** 1149 * Returns a function to use in pseudos for input types 1150 * @param {String} type 1151 */ 1152function createInputPseudo( type ) { 1153 return function( elem ) { 1154 var name = elem.nodeName.toLowerCase(); 1155 return name === "input" && elem.type === type; 1156 }; 1157} 1158 1159/** 1160 * Returns a function to use in pseudos for buttons 1161 * @param {String} type 1162 */ 1163function createButtonPseudo( type ) { 1164 return function( elem ) { 1165 var name = elem.nodeName.toLowerCase(); 1166 return (name === "input" || name === "button") && elem.type === type; 1167 }; 1168} 1169 1170/** 1171 * Returns a function to use in pseudos for :enabled/:disabled 1172 * @param {Boolean} disabled true for :disabled; false for :enabled 1173 */ 1174function createDisabledPseudo( disabled ) { 1175 1176 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 1177 return function( elem ) { 1178 1179 // Only certain elements can match :enabled or :disabled 1180 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 1181 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 1182 if ( "form" in elem ) { 1183 1184 // Check for inherited disabledness on relevant non-disabled elements: 1185 // * listed form-associated elements in a disabled fieldset 1186 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 1187 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 1188 // * option elements in a disabled optgroup 1189 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 1190 // All such elements have a "form" property. 1191 if ( elem.parentNode && elem.disabled === false ) { 1192 1193 // Option elements defer to a parent optgroup if present 1194 if ( "label" in elem ) { 1195 if ( "label" in elem.parentNode ) { 1196 return elem.parentNode.disabled === disabled; 1197 } else { 1198 return elem.disabled === disabled; 1199 } 1200 } 1201 1202 // Support: IE 6 - 11 1203 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 1204 return elem.isDisabled === disabled || 1205 1206 // Where there is no isDisabled, check manually 1207 /* jshint -W018 */ 1208 elem.isDisabled !== !disabled && 1209 disabledAncestor( elem ) === disabled; 1210 } 1211 1212 return elem.disabled === disabled; 1213 1214 // Try to winnow out elements that can't be disabled before trusting the disabled property. 1215 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 1216 // even exist on them, let alone have a boolean value. 1217 } else if ( "label" in elem ) { 1218 return elem.disabled === disabled; 1219 } 1220 1221 // Remaining elements are neither :enabled nor :disabled 1222 return false; 1223 }; 1224} 1225 1226/** 1227 * Returns a function to use in pseudos for positionals 1228 * @param {Function} fn 1229 */ 1230function createPositionalPseudo( fn ) { 1231 return markFunction(function( argument ) { 1232 argument = +argument; 1233 return markFunction(function( seed, matches ) { 1234 var j, 1235 matchIndexes = fn( [], seed.length, argument ), 1236 i = matchIndexes.length; 1237 1238 // Match elements found at the specified indexes 1239 while ( i-- ) { 1240 if ( seed[ (j = matchIndexes[i]) ] ) { 1241 seed[j] = !(matches[j] = seed[j]); 1242 } 1243 } 1244 }); 1245 }); 1246} 1247 1248/** 1249 * Checks a node for validity as a Sizzle context 1250 * @param {Element|Object=} context 1251 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1252 */ 1253function testContext( context ) { 1254 return context && typeof context.getElementsByTagName !== "undefined" && context; 1255} 1256 1257// Expose support vars for convenience 1258support = Sizzle.support = {}; 1259 1260/** 1261 * Detects XML nodes 1262 * @param {Element|Object} elem An element or a document 1263 * @returns {Boolean} True iff elem is a non-HTML XML node 1264 */ 1265isXML = Sizzle.isXML = function( elem ) { 1266 // documentElement is verified for cases where it doesn't yet exist 1267 // (such as loading iframes in IE - #4833) 1268 var documentElement = elem && (elem.ownerDocument || elem).documentElement; 1269 return documentElement ? documentElement.nodeName !== "HTML" : false; 1270}; 1271 1272/** 1273 * Sets document-related variables once based on the current document 1274 * @param {Element|Object} [doc] An element or document object to use to set the document 1275 * @returns {Object} Returns the current document 1276 */ 1277setDocument = Sizzle.setDocument = function( node ) { 1278 var hasCompare, subWindow, 1279 doc = node ? node.ownerDocument || node : preferredDoc; 1280 1281 // Return early if doc is invalid or already selected 1282 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { 1283 return document; 1284 } 1285 1286 // Update global variables 1287 document = doc; 1288 docElem = document.documentElement; 1289 documentIsHTML = !isXML( document ); 1290 1291 // Support: IE 9-11, Edge 1292 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 1293 if ( preferredDoc !== document && 1294 (subWindow = document.defaultView) && subWindow.top !== subWindow ) { 1295 1296 // Support: IE 11, Edge 1297 if ( subWindow.addEventListener ) { 1298 subWindow.addEventListener( "unload", unloadHandler, false ); 1299 1300 // Support: IE 9 - 10 only 1301 } else if ( subWindow.attachEvent ) { 1302 subWindow.attachEvent( "onunload", unloadHandler ); 1303 } 1304 } 1305 1306 /* Attributes 1307 ---------------------------------------------------------------------- */ 1308 1309 // Support: IE<8 1310 // Verify that getAttribute really returns attributes and not properties 1311 // (excepting IE8 booleans) 1312 support.attributes = assert(function( el ) { 1313 el.className = "i"; 1314 return !el.getAttribute("className"); 1315 }); 1316 1317 /* getElement(s)By* 1318 ---------------------------------------------------------------------- */ 1319 1320 // Check if getElementsByTagName("*") returns only elements 1321 support.getElementsByTagName = assert(function( el ) { 1322 el.appendChild( document.createComment("") ); 1323 return !el.getElementsByTagName("*").length; 1324 }); 1325 1326 // Support: IE<9 1327 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 1328 1329 // Support: IE<10 1330 // Check if getElementById returns elements by name 1331 // The broken getElementById methods don't pick up programmatically-set names, 1332 // so use a roundabout getElementsByName test 1333 support.getById = assert(function( el ) { 1334 docElem.appendChild( el ).id = expando; 1335 return !document.getElementsByName || !document.getElementsByName( expando ).length; 1336 }); 1337 1338 // ID filter and find 1339 if ( support.getById ) { 1340 Expr.filter["ID"] = function( id ) { 1341 var attrId = id.replace( runescape, funescape ); 1342 return function( elem ) { 1343 return elem.getAttribute("id") === attrId; 1344 }; 1345 }; 1346 Expr.find["ID"] = function( id, context ) { 1347 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1348 var elem = context.getElementById( id ); 1349 return elem ? [ elem ] : []; 1350 } 1351 }; 1352 } else { 1353 Expr.filter["ID"] = function( id ) { 1354 var attrId = id.replace( runescape, funescape ); 1355 return function( elem ) { 1356 var node = typeof elem.getAttributeNode !== "undefined" && 1357 elem.getAttributeNode("id"); 1358 return node && node.value === attrId; 1359 }; 1360 }; 1361 1362 // Support: IE 6 - 7 only 1363 // getElementById is not reliable as a find shortcut 1364 Expr.find["ID"] = function( id, context ) { 1365 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1366 var node, i, elems, 1367 elem = context.getElementById( id ); 1368 1369 if ( elem ) { 1370 1371 // Verify the id attribute 1372 node = elem.getAttributeNode("id"); 1373 if ( node && node.value === id ) { 1374 return [ elem ]; 1375 } 1376 1377 // Fall back on getElementsByName 1378 elems = context.getElementsByName( id ); 1379 i = 0; 1380 while ( (elem = elems[i++]) ) { 1381 node = elem.getAttributeNode("id"); 1382 if ( node && node.value === id ) { 1383 return [ elem ]; 1384 } 1385 } 1386 } 1387 1388 return []; 1389 } 1390 }; 1391 } 1392 1393 // Tag 1394 Expr.find["TAG"] = support.getElementsByTagName ? 1395 function( tag, context ) { 1396 if ( typeof context.getElementsByTagName !== "undefined" ) { 1397 return context.getElementsByTagName( tag ); 1398 1399 // DocumentFragment nodes don't have gEBTN 1400 } else if ( support.qsa ) { 1401 return context.querySelectorAll( tag ); 1402 } 1403 } : 1404 1405 function( tag, context ) { 1406 var elem, 1407 tmp = [], 1408 i = 0, 1409 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 1410 results = context.getElementsByTagName( tag ); 1411 1412 // Filter out possible comments 1413 if ( tag === "*" ) { 1414 while ( (elem = results[i++]) ) { 1415 if ( elem.nodeType === 1 ) { 1416 tmp.push( elem ); 1417 } 1418 } 1419 1420 return tmp; 1421 } 1422 return results; 1423 }; 1424 1425 // Class 1426 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { 1427 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 1428 return context.getElementsByClassName( className ); 1429 } 1430 }; 1431 1432 /* QSA/matchesSelector 1433 ---------------------------------------------------------------------- */ 1434 1435 // QSA and matchesSelector support 1436 1437 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 1438 rbuggyMatches = []; 1439 1440 // qSa(:focus) reports false when true (Chrome 21) 1441 // We allow this because of a bug in IE8/9 that throws an error 1442 // whenever `document.activeElement` is accessed on an iframe 1443 // So, we allow :focus to pass through QSA all the time to avoid the IE error 1444 // See https://bugs.jquery.com/ticket/13378 1445 rbuggyQSA = []; 1446 1447 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { 1448 // Build QSA regex 1449 // Regex strategy adopted from Diego Perini 1450 assert(function( el ) { 1451 // Select is set to empty string on purpose 1452 // This is to test IE's treatment of not explicitly 1453 // setting a boolean content attribute, 1454 // since its presence should be enough 1455 // https://bugs.jquery.com/ticket/12359 1456 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + 1457 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 1458 "<option selected=''></option></select>"; 1459 1460 // Support: IE8, Opera 11-12.16 1461 // Nothing should be selected when empty strings follow ^= or $= or *= 1462 // The test attribute must be unknown in Opera but "safe" for WinRT 1463 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 1464 if ( el.querySelectorAll("[msallowcapture^='']").length ) { 1465 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 1466 } 1467 1468 // Support: IE8 1469 // Boolean attributes and "value" are not treated correctly 1470 if ( !el.querySelectorAll("[selected]").length ) { 1471 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 1472 } 1473 1474 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 1475 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 1476 rbuggyQSA.push("~="); 1477 } 1478 1479 // Webkit/Opera - :checked should return selected option elements 1480 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1481 // IE8 throws error here and will not see later tests 1482 if ( !el.querySelectorAll(":checked").length ) { 1483 rbuggyQSA.push(":checked"); 1484 } 1485 1486 // Support: Safari 8+, iOS 8+ 1487 // https://bugs.webkit.org/show_bug.cgi?id=136851 1488 // In-page `selector#id sibling-combinator selector` fails 1489 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 1490 rbuggyQSA.push(".#.+[+~]"); 1491 } 1492 }); 1493 1494 assert(function( el ) { 1495 el.innerHTML = "<a href='' disabled='disabled'></a>" + 1496 "<select disabled='disabled'><option/></select>"; 1497 1498 // Support: Windows 8 Native Apps 1499 // The type and name attributes are restricted during .innerHTML assignment 1500 var input = document.createElement("input"); 1501 input.setAttribute( "type", "hidden" ); 1502 el.appendChild( input ).setAttribute( "name", "D" ); 1503 1504 // Support: IE8 1505 // Enforce case-sensitivity of name attribute 1506 if ( el.querySelectorAll("[name=d]").length ) { 1507 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 1508 } 1509 1510 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 1511 // IE8 throws error here and will not see later tests 1512 if ( el.querySelectorAll(":enabled").length !== 2 ) { 1513 rbuggyQSA.push( ":enabled", ":disabled" ); 1514 } 1515 1516 // Support: IE9-11+ 1517 // IE's :disabled selector does not pick up the children of disabled fieldsets 1518 docElem.appendChild( el ).disabled = true; 1519 if ( el.querySelectorAll(":disabled").length !== 2 ) { 1520 rbuggyQSA.push( ":enabled", ":disabled" ); 1521 } 1522 1523 // Opera 10-11 does not throw on post-comma invalid pseudos 1524 el.querySelectorAll("*,:x"); 1525 rbuggyQSA.push(",.*:"); 1526 }); 1527 } 1528 1529 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || 1530 docElem.webkitMatchesSelector || 1531 docElem.mozMatchesSelector || 1532 docElem.oMatchesSelector || 1533 docElem.msMatchesSelector) )) ) { 1534 1535 assert(function( el ) { 1536 // Check to see if it's possible to do matchesSelector 1537 // on a disconnected node (IE 9) 1538 support.disconnectedMatch = matches.call( el, "*" ); 1539 1540 // This should fail with an exception 1541 // Gecko does not error, returns false instead 1542 matches.call( el, "[s!='']:x" ); 1543 rbuggyMatches.push( "!=", pseudos ); 1544 }); 1545 } 1546 1547 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); 1548 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); 1549 1550 /* Contains 1551 ---------------------------------------------------------------------- */ 1552 hasCompare = rnative.test( docElem.compareDocumentPosition ); 1553 1554 // Element contains another 1555 // Purposefully self-exclusive 1556 // As in, an element does not contain itself 1557 contains = hasCompare || rnative.test( docElem.contains ) ? 1558 function( a, b ) { 1559 var adown = a.nodeType === 9 ? a.documentElement : a, 1560 bup = b && b.parentNode; 1561 return a === bup || !!( bup && bup.nodeType === 1 && ( 1562 adown.contains ? 1563 adown.contains( bup ) : 1564 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 1565 )); 1566 } : 1567 function( a, b ) { 1568 if ( b ) { 1569 while ( (b = b.parentNode) ) { 1570 if ( b === a ) { 1571 return true; 1572 } 1573 } 1574 } 1575 return false; 1576 }; 1577 1578 /* Sorting 1579 ---------------------------------------------------------------------- */ 1580 1581 // Document order sorting 1582 sortOrder = hasCompare ? 1583 function( a, b ) { 1584 1585 // Flag for duplicate removal 1586 if ( a === b ) { 1587 hasDuplicate = true; 1588 return 0; 1589 } 1590 1591 // Sort on method existence if only one input has compareDocumentPosition 1592 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1593 if ( compare ) { 1594 return compare; 1595 } 1596 1597 // Calculate position if both inputs belong to the same document 1598 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? 1599 a.compareDocumentPosition( b ) : 1600 1601 // Otherwise we know they are disconnected 1602 1; 1603 1604 // Disconnected nodes 1605 if ( compare & 1 || 1606 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { 1607 1608 // Choose the first element that is related to our preferred document 1609 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { 1610 return -1; 1611 } 1612 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { 1613 return 1; 1614 } 1615 1616 // Maintain original order 1617 return sortInput ? 1618 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 1619 0; 1620 } 1621 1622 return compare & 4 ? -1 : 1; 1623 } : 1624 function( a, b ) { 1625 // Exit early if the nodes are identical 1626 if ( a === b ) { 1627 hasDuplicate = true; 1628 return 0; 1629 } 1630 1631 var cur, 1632 i = 0, 1633 aup = a.parentNode, 1634 bup = b.parentNode, 1635 ap = [ a ], 1636 bp = [ b ]; 1637 1638 // Parentless nodes are either documents or disconnected 1639 if ( !aup || !bup ) { 1640 return a === document ? -1 : 1641 b === document ? 1 : 1642 aup ? -1 : 1643 bup ? 1 : 1644 sortInput ? 1645 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 1646 0; 1647 1648 // If the nodes are siblings, we can do a quick check 1649 } else if ( aup === bup ) { 1650 return siblingCheck( a, b ); 1651 } 1652 1653 // Otherwise we need full lists of their ancestors for comparison 1654 cur = a; 1655 while ( (cur = cur.parentNode) ) { 1656 ap.unshift( cur ); 1657 } 1658 cur = b; 1659 while ( (cur = cur.parentNode) ) { 1660 bp.unshift( cur ); 1661 } 1662 1663 // Walk down the tree looking for a discrepancy 1664 while ( ap[i] === bp[i] ) { 1665 i++; 1666 } 1667 1668 return i ? 1669 // Do a sibling check if the nodes have a common ancestor 1670 siblingCheck( ap[i], bp[i] ) : 1671 1672 // Otherwise nodes in our document sort first 1673 ap[i] === preferredDoc ? -1 : 1674 bp[i] === preferredDoc ? 1 : 1675 0; 1676 }; 1677 1678 return document; 1679}; 1680 1681Sizzle.matches = function( expr, elements ) { 1682 return Sizzle( expr, null, null, elements ); 1683}; 1684 1685Sizzle.matchesSelector = function( elem, expr ) { 1686 // Set document vars if needed 1687 if ( ( elem.ownerDocument || elem ) !== document ) { 1688 setDocument( elem ); 1689 } 1690 1691 // Make sure that attribute selectors are quoted 1692 expr = expr.replace( rattributeQuotes, "='$1']" ); 1693 1694 if ( support.matchesSelector && documentIsHTML && 1695 !compilerCache[ expr + " " ] && 1696 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 1697 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 1698 1699 try { 1700 var ret = matches.call( elem, expr ); 1701 1702 // IE 9's matchesSelector returns false on disconnected nodes 1703 if ( ret || support.disconnectedMatch || 1704 // As well, disconnected nodes are said to be in a document 1705 // fragment in IE 9 1706 elem.document && elem.document.nodeType !== 11 ) { 1707 return ret; 1708 } 1709 } catch (e) {} 1710 } 1711 1712 return Sizzle( expr, document, null, [ elem ] ).length > 0; 1713}; 1714 1715Sizzle.contains = function( context, elem ) { 1716 // Set document vars if needed 1717 if ( ( context.ownerDocument || context ) !== document ) { 1718 setDocument( context ); 1719 } 1720 return contains( context, elem ); 1721}; 1722 1723Sizzle.attr = function( elem, name ) { 1724 // Set document vars if needed 1725 if ( ( elem.ownerDocument || elem ) !== document ) { 1726 setDocument( elem ); 1727 } 1728 1729 var fn = Expr.attrHandle[ name.toLowerCase() ], 1730 // Don't get fooled by Object.prototype properties (jQuery #13807) 1731 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 1732 fn( elem, name, !documentIsHTML ) : 1733 undefined; 1734 1735 return val !== undefined ? 1736 val : 1737 support.attributes || !documentIsHTML ? 1738 elem.getAttribute( name ) : 1739 (val = elem.getAttributeNode(name)) && val.specified ? 1740 val.value : 1741 null; 1742}; 1743 1744Sizzle.escape = function( sel ) { 1745 return (sel + "").replace( rcssescape, fcssescape ); 1746}; 1747 1748Sizzle.error = function( msg ) { 1749 throw new Error( "Syntax error, unrecognized expression: " + msg ); 1750}; 1751 1752/** 1753 * Document sorting and removing duplicates 1754 * @param {ArrayLike} results 1755 */ 1756Sizzle.uniqueSort = function( results ) { 1757 var elem, 1758 duplicates = [], 1759 j = 0, 1760 i = 0; 1761 1762 // Unless we *know* we can detect duplicates, assume their presence 1763 hasDuplicate = !support.detectDuplicates; 1764 sortInput = !support.sortStable && results.slice( 0 ); 1765 results.sort( sortOrder ); 1766 1767 if ( hasDuplicate ) { 1768 while ( (elem = results[i++]) ) { 1769 if ( elem === results[ i ] ) { 1770 j = duplicates.push( i ); 1771 } 1772 } 1773 while ( j-- ) { 1774 results.splice( duplicates[ j ], 1 ); 1775 } 1776 } 1777 1778 // Clear input after sorting to release objects 1779 // See https://github.com/jquery/sizzle/pull/225 1780 sortInput = null; 1781 1782 return results; 1783}; 1784 1785/** 1786 * Utility function for retrieving the text value of an array of DOM nodes 1787 * @param {Array|Element} elem 1788 */ 1789getText = Sizzle.getText = function( elem ) { 1790 var node, 1791 ret = "", 1792 i = 0, 1793 nodeType = elem.nodeType; 1794 1795 if ( !nodeType ) { 1796 // If no nodeType, this is expected to be an array 1797 while ( (node = elem[i++]) ) {
vendor: 11,976 bytes, lines 1798-2196
1798 // Do not traverse comment nodes 1799 ret += getText( node ); 1800 } 1801 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 1802 // Use textContent for elements 1803 // innerText usage removed for consistency of new lines (jQuery #11153) 1804 if ( typeof elem.textContent === "string" ) { 1805 return elem.textContent; 1806 } else { 1807 // Traverse its children 1808 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 1809 ret += getText( elem ); 1810 } 1811 } 1812 } else if ( nodeType === 3 || nodeType === 4 ) { 1813 return elem.nodeValue; 1814 } 1815 // Do not include comment or processing instruction nodes 1816 1817 return ret; 1818}; 1819 1820Expr = Sizzle.selectors = { 1821 1822 // Can be adjusted by the user 1823 cacheLength: 50, 1824 1825 createPseudo: markFunction, 1826 1827 match: matchExpr, 1828 1829 attrHandle: {}, 1830 1831 find: {}, 1832 1833 relative: { 1834 ">": { dir: "parentNode", first: true }, 1835 " ": { dir: "parentNode" }, 1836 "+": { dir: "previousSibling", first: true }, 1837 "~": { dir: "previousSibling" } 1838 }, 1839 1840 preFilter: { 1841 "ATTR": function( match ) { 1842 match[1] = match[1].replace( runescape, funescape ); 1843 1844 // Move the given value to match[3] whether quoted or unquoted 1845 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); 1846 1847 if ( match[2] === "~=" ) { 1848 match[3] = " " + match[3] + " "; 1849 } 1850 1851 return match.slice( 0, 4 ); 1852 }, 1853 1854 "CHILD": function( match ) { 1855 /* matches from matchExpr["CHILD"] 1856 1 type (only|nth|...) 1857 2 what (child|of-type) 1858 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 1859 4 xn-component of xn+y argument ([+-]?\d*n|) 1860 5 sign of xn-component 1861 6 x of xn-component 1862 7 sign of y-component 1863 8 y of y-component 1864 */ 1865 match[1] = match[1].toLowerCase(); 1866 1867 if ( match[1].slice( 0, 3 ) === "nth" ) { 1868 // nth-* requires argument 1869 if ( !match[3] ) { 1870 Sizzle.error( match[0] ); 1871 } 1872 1873 // numeric x and y parameters for Expr.filter.CHILD 1874 // remember that false/true cast respectively to 0/1 1875 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); 1876 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); 1877 1878 // other types prohibit arguments 1879 } else if ( match[3] ) { 1880 Sizzle.error( match[0] ); 1881 } 1882 1883 return match; 1884 }, 1885 1886 "PSEUDO": function( match ) { 1887 var excess, 1888 unquoted = !match[6] && match[2]; 1889 1890 if ( matchExpr["CHILD"].test( match[0] ) ) { 1891 return null; 1892 } 1893 1894 // Accept quoted arguments as-is 1895 if ( match[3] ) { 1896 match[2] = match[4] || match[5] || ""; 1897 1898 // Strip excess characters from unquoted arguments 1899 } else if ( unquoted && rpseudo.test( unquoted ) && 1900 // Get excess from tokenize (recursively) 1901 (excess = tokenize( unquoted, true )) && 1902 // advance to the next closing parenthesis 1903 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { 1904 1905 // excess is a negative index 1906 match[0] = match[0].slice( 0, excess ); 1907 match[2] = unquoted.slice( 0, excess ); 1908 } 1909 1910 // Return only captures needed by the pseudo filter method (type and argument) 1911 return match.slice( 0, 3 ); 1912 } 1913 }, 1914 1915 filter: { 1916 1917 "TAG": function( nodeNameSelector ) { 1918 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 1919 return nodeNameSelector === "*" ? 1920 function() { return true; } : 1921 function( elem ) { 1922 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 1923 }; 1924 }, 1925 1926 "CLASS": function( className ) { 1927 var pattern = classCache[ className + " " ]; 1928 1929 return pattern || 1930 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && 1931 classCache( className, function( elem ) { 1932 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); 1933 }); 1934 }, 1935 1936 "ATTR": function( name, operator, check ) { 1937 return function( elem ) { 1938 var result = Sizzle.attr( elem, name ); 1939 1940 if ( result == null ) { 1941 return operator === "!="; 1942 } 1943 if ( !operator ) { 1944 return true; 1945 } 1946 1947 result += ""; 1948 1949 return operator === "=" ? result === check : 1950 operator === "!=" ? result !== check : 1951 operator === "^=" ? check && result.indexOf( check ) === 0 : 1952 operator === "*=" ? check && result.indexOf( check ) > -1 : 1953 operator === "$=" ? check && result.slice( -check.length ) === check : 1954 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 1955 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 1956 false; 1957 }; 1958 }, 1959 1960 "CHILD": function( type, what, argument, first, last ) { 1961 var simple = type.slice( 0, 3 ) !== "nth", 1962 forward = type.slice( -4 ) !== "last", 1963 ofType = what === "of-type"; 1964 1965 return first === 1 && last === 0 ? 1966 1967 // Shortcut for :nth-*(n) 1968 function( elem ) { 1969 return !!elem.parentNode; 1970 } : 1971 1972 function( elem, context, xml ) { 1973 var cache, uniqueCache, outerCache, node, nodeIndex, start, 1974 dir = simple !== forward ? "nextSibling" : "previousSibling", 1975 parent = elem.parentNode, 1976 name = ofType && elem.nodeName.toLowerCase(), 1977 useCache = !xml && !ofType, 1978 diff = false; 1979 1980 if ( parent ) { 1981 1982 // :(first|last|only)-(child|of-type) 1983 if ( simple ) { 1984 while ( dir ) { 1985 node = elem; 1986 while ( (node = node[ dir ]) ) { 1987 if ( ofType ? 1988 node.nodeName.toLowerCase() === name : 1989 node.nodeType === 1 ) { 1990 1991 return false; 1992 } 1993 } 1994 // Reverse direction for :only-* (if we haven't yet done so) 1995 start = dir = type === "only" && !start && "nextSibling"; 1996 } 1997 return true; 1998 } 1999 2000 start = [ forward ? parent.firstChild : parent.lastChild ]; 2001 2002 // non-xml :nth-child(...) stores cache data on `parent` 2003 if ( forward && useCache ) { 2004 2005 // Seek `elem` from a previously-cached index 2006 2007 // ...in a gzip-friendly way 2008 node = parent; 2009 outerCache = node[ expando ] || (node[ expando ] = {}); 2010 2011 // Support: IE <9 only 2012 // Defend against cloned attroperties (jQuery gh-1709) 2013 uniqueCache = outerCache[ node.uniqueID ] || 2014 (outerCache[ node.uniqueID ] = {}); 2015 2016 cache = uniqueCache[ type ] || []; 2017 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 2018 diff = nodeIndex && cache[ 2 ]; 2019 node = nodeIndex && parent.childNodes[ nodeIndex ]; 2020 2021 while ( (node = ++nodeIndex && node && node[ dir ] || 2022 2023 // Fallback to seeking `elem` from the start 2024 (diff = nodeIndex = 0) || start.pop()) ) { 2025 2026 // When found, cache indexes on `parent` and break 2027 if ( node.nodeType === 1 && ++diff && node === elem ) { 2028 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 2029 break; 2030 } 2031 } 2032 2033 } else { 2034 // Use previously-cached element index if available 2035 if ( useCache ) { 2036 // ...in a gzip-friendly way 2037 node = elem; 2038 outerCache = node[ expando ] || (node[ expando ] = {}); 2039 2040 // Support: IE <9 only 2041 // Defend against cloned attroperties (jQuery gh-1709) 2042 uniqueCache = outerCache[ node.uniqueID ] || 2043 (outerCache[ node.uniqueID ] = {}); 2044 2045 cache = uniqueCache[ type ] || []; 2046 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 2047 diff = nodeIndex; 2048 } 2049 2050 // xml :nth-child(...) 2051 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 2052 if ( diff === false ) { 2053 // Use the same loop as above to seek `elem` from the start 2054 while ( (node = ++nodeIndex && node && node[ dir ] || 2055 (diff = nodeIndex = 0) || start.pop()) ) { 2056 2057 if ( ( ofType ? 2058 node.nodeName.toLowerCase() === name : 2059 node.nodeType === 1 ) && 2060 ++diff ) { 2061 2062 // Cache the index of each encountered element 2063 if ( useCache ) { 2064 outerCache = node[ expando ] || (node[ expando ] = {}); 2065 2066 // Support: IE <9 only 2067 // Defend against cloned attroperties (jQuery gh-1709) 2068 uniqueCache = outerCache[ node.uniqueID ] || 2069 (outerCache[ node.uniqueID ] = {}); 2070 2071 uniqueCache[ type ] = [ dirruns, diff ]; 2072 } 2073 2074 if ( node === elem ) { 2075 break; 2076 } 2077 } 2078 } 2079 } 2080 } 2081 2082 // Incorporate the offset, then check against cycle size 2083 diff -= last; 2084 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 2085 } 2086 }; 2087 }, 2088 2089 "PSEUDO": function( pseudo, argument ) { 2090 // pseudo-class names are case-insensitive 2091 // http://www.w3.org/TR/selectors/#pseudo-classes 2092 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 2093 // Remember that setFilters inherits from pseudos 2094 var args, 2095 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 2096 Sizzle.error( "unsupported pseudo: " + pseudo ); 2097 2098 // The user may use createPseudo to indicate that 2099 // arguments are needed to create the filter function 2100 // just as Sizzle does 2101 if ( fn[ expando ] ) { 2102 return fn( argument ); 2103 } 2104 2105 // But maintain support for old signatures 2106 if ( fn.length > 1 ) { 2107 args = [ pseudo, pseudo, "", argument ]; 2108 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 2109 markFunction(function( seed, matches ) { 2110 var idx, 2111 matched = fn( seed, argument ), 2112 i = matched.length; 2113 while ( i-- ) { 2114 idx = indexOf( seed, matched[i] ); 2115 seed[ idx ] = !( matches[ idx ] = matched[i] ); 2116 } 2117 }) : 2118 function( elem ) { 2119 return fn( elem, 0, args ); 2120 }; 2121 } 2122 2123 return fn; 2124 } 2125 }, 2126 2127 pseudos: { 2128 // Potentially complex pseudos 2129 "not": markFunction(function( selector ) { 2130 // Trim the selector passed to compile 2131 // to avoid treating leading and trailing 2132 // spaces as combinators 2133 var input = [], 2134 results = [], 2135 matcher = compile( selector.replace( rtrim, "$1" ) ); 2136 2137 return matcher[ expando ] ? 2138 markFunction(function( seed, matches, context, xml ) { 2139 var elem, 2140 unmatched = matcher( seed, null, xml, [] ), 2141 i = seed.length; 2142 2143 // Match elements unmatched by `matcher` 2144 while ( i-- ) { 2145 if ( (elem = unmatched[i]) ) { 2146 seed[i] = !(matches[i] = elem); 2147 } 2148 } 2149 }) : 2150 function( elem, context, xml ) { 2151 input[0] = elem; 2152 matcher( input, null, xml, results ); 2153 // Don't keep the element (issue #299) 2154 input[0] = null; 2155 return !results.pop(); 2156 }; 2157 }), 2158 2159 "has": markFunction(function( selector ) { 2160 return function( elem ) { 2161 return Sizzle( selector, elem ).length > 0; 2162 }; 2163 }), 2164 2165 "contains": markFunction(function( text ) { 2166 text = text.replace( runescape, funescape ); 2167 return function( elem ) { 2168 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; 2169 }; 2170 }), 2171 2172 // "Whether an element is represented by a :lang() selector 2173 // is based solely on the element's language value 2174 // being equal to the identifier C, 2175 // or beginning with the identifier C immediately followed by "-". 2176 // The matching of C against the element's language value is performed case-insensitively. 2177 // The identifier C does not have to be a valid language name." 2178 // http://www.w3.org/TR/selectors/#lang-pseudo 2179 "lang": markFunction( function( lang ) { 2180 // lang value must be a valid identifier 2181 if ( !ridentifier.test(lang || "") ) { 2182 Sizzle.error( "unsupported lang: " + lang ); 2183 } 2184 lang = lang.replace( runescape, funescape ).toLowerCase(); 2185 return function( elem ) { 2186 var elemLang; 2187 do { 2188 if ( (elemLang = documentIsHTML ? 2189 elem.lang : 2190 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { 2191 2192 elemLang = elemLang.toLowerCase(); 2193 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 2194 } 2195 } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); 2196 return false;
vendor: 22,724 bytes, lines 2197-3019
2197 }; 2198 }), 2199 2200 // Miscellaneous 2201 "target": function( elem ) { 2202 var hash = window.location && window.location.hash; 2203 return hash && hash.slice( 1 ) === elem.id; 2204 }, 2205 2206 "root": function( elem ) { 2207 return elem === docElem; 2208 }, 2209 2210 "focus": function( elem ) { 2211 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 2212 }, 2213 2214 // Boolean properties 2215 "enabled": createDisabledPseudo( false ), 2216 "disabled": createDisabledPseudo( true ), 2217 2218 "checked": function( elem ) { 2219 // In CSS3, :checked should return both checked and selected elements 2220 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 2221 var nodeName = elem.nodeName.toLowerCase(); 2222 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); 2223 }, 2224 2225 "selected": function( elem ) { 2226 // Accessing this property makes selected-by-default 2227 // options in Safari work properly 2228 if ( elem.parentNode ) { 2229 elem.parentNode.selectedIndex; 2230 } 2231 2232 return elem.selected === true; 2233 }, 2234 2235 // Contents 2236 "empty": function( elem ) { 2237 // http://www.w3.org/TR/selectors/#empty-pseudo 2238 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 2239 // but not by others (comment: 8; processing instruction: 7; etc.) 2240 // nodeType < 6 works because attributes (2) do not appear as children 2241 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 2242 if ( elem.nodeType < 6 ) { 2243 return false; 2244 } 2245 } 2246 return true; 2247 }, 2248 2249 "parent": function( elem ) { 2250 return !Expr.pseudos["empty"]( elem ); 2251 }, 2252 2253 // Element/input types 2254 "header": function( elem ) { 2255 return rheader.test( elem.nodeName ); 2256 }, 2257 2258 "input": function( elem ) { 2259 return rinputs.test( elem.nodeName ); 2260 }, 2261 2262 "button": function( elem ) { 2263 var name = elem.nodeName.toLowerCase(); 2264 return name === "input" && elem.type === "button" || name === "button"; 2265 }, 2266 2267 "text": function( elem ) { 2268 var attr; 2269 return elem.nodeName.toLowerCase() === "input" && 2270 elem.type === "text" && 2271 2272 // Support: IE<8 2273 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 2274 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); 2275 }, 2276 2277 // Position-in-collection 2278 "first": createPositionalPseudo(function() { 2279 return [ 0 ]; 2280 }), 2281 2282 "last": createPositionalPseudo(function( matchIndexes, length ) { 2283 return [ length - 1 ]; 2284 }), 2285 2286 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { 2287 return [ argument < 0 ? argument + length : argument ]; 2288 }), 2289 2290 "even": createPositionalPseudo(function( matchIndexes, length ) { 2291 var i = 0; 2292 for ( ; i < length; i += 2 ) { 2293 matchIndexes.push( i ); 2294 } 2295 return matchIndexes; 2296 }), 2297 2298 "odd": createPositionalPseudo(function( matchIndexes, length ) { 2299 var i = 1; 2300 for ( ; i < length; i += 2 ) { 2301 matchIndexes.push( i ); 2302 } 2303 return matchIndexes; 2304 }), 2305 2306 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2307 var i = argument < 0 ? argument + length : argument; 2308 for ( ; --i >= 0; ) { 2309 matchIndexes.push( i ); 2310 } 2311 return matchIndexes; 2312 }), 2313 2314 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2315 var i = argument < 0 ? argument + length : argument; 2316 for ( ; ++i < length; ) { 2317 matchIndexes.push( i ); 2318 } 2319 return matchIndexes; 2320 }) 2321 } 2322}; 2323 2324Expr.pseudos["nth"] = Expr.pseudos["eq"]; 2325 2326// Add button/input type pseudos 2327for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 2328 Expr.pseudos[ i ] = createInputPseudo( i ); 2329} 2330for ( i in { submit: true, reset: true } ) { 2331 Expr.pseudos[ i ] = createButtonPseudo( i ); 2332} 2333 2334// Easy API for creating new setFilters 2335function setFilters() {} 2336setFilters.prototype = Expr.filters = Expr.pseudos; 2337Expr.setFilters = new setFilters(); 2338 2339tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 2340 var matched, match, tokens, type, 2341 soFar, groups, preFilters, 2342 cached = tokenCache[ selector + " " ]; 2343 2344 if ( cached ) { 2345 return parseOnly ? 0 : cached.slice( 0 ); 2346 } 2347 2348 soFar = selector; 2349 groups = []; 2350 preFilters = Expr.preFilter; 2351 2352 while ( soFar ) { 2353 2354 // Comma and first run 2355 if ( !matched || (match = rcomma.exec( soFar )) ) { 2356 if ( match ) { 2357 // Don't consume trailing commas as valid 2358 soFar = soFar.slice( match[0].length ) || soFar; 2359 } 2360 groups.push( (tokens = []) ); 2361 } 2362 2363 matched = false; 2364 2365 // Combinators 2366 if ( (match = rcombinators.exec( soFar )) ) { 2367 matched = match.shift(); 2368 tokens.push({ 2369 value: matched, 2370 // Cast descendant combinators to space 2371 type: match[0].replace( rtrim, " " ) 2372 }); 2373 soFar = soFar.slice( matched.length ); 2374 } 2375 2376 // Filters 2377 for ( type in Expr.filter ) { 2378 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || 2379 (match = preFilters[ type ]( match ))) ) { 2380 matched = match.shift(); 2381 tokens.push({ 2382 value: matched, 2383 type: type, 2384 matches: match 2385 }); 2386 soFar = soFar.slice( matched.length ); 2387 } 2388 } 2389 2390 if ( !matched ) { 2391 break; 2392 } 2393 } 2394 2395 // Return the length of the invalid excess 2396 // if we're just parsing 2397 // Otherwise, throw an error or return tokens 2398 return parseOnly ? 2399 soFar.length : 2400 soFar ? 2401 Sizzle.error( selector ) : 2402 // Cache the tokens 2403 tokenCache( selector, groups ).slice( 0 ); 2404}; 2405 2406function toSelector( tokens ) { 2407 var i = 0, 2408 len = tokens.length, 2409 selector = ""; 2410 for ( ; i < len; i++ ) { 2411 selector += tokens[i].value; 2412 } 2413 return selector; 2414} 2415 2416function addCombinator( matcher, combinator, base ) { 2417 var dir = combinator.dir, 2418 skip = combinator.next, 2419 key = skip || dir, 2420 checkNonElements = base && key === "parentNode", 2421 doneName = done++; 2422 2423 return combinator.first ? 2424 // Check against closest ancestor/preceding element 2425 function( elem, context, xml ) { 2426 while ( (elem = elem[ dir ]) ) { 2427 if ( elem.nodeType === 1 || checkNonElements ) { 2428 return matcher( elem, context, xml ); 2429 } 2430 } 2431 return false; 2432 } : 2433 2434 // Check against all ancestor/preceding elements 2435 function( elem, context, xml ) { 2436 var oldCache, uniqueCache, outerCache, 2437 newCache = [ dirruns, doneName ]; 2438 2439 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2440 if ( xml ) { 2441 while ( (elem = elem[ dir ]) ) { 2442 if ( elem.nodeType === 1 || checkNonElements ) { 2443 if ( matcher( elem, context, xml ) ) { 2444 return true; 2445 } 2446 } 2447 } 2448 } else { 2449 while ( (elem = elem[ dir ]) ) { 2450 if ( elem.nodeType === 1 || checkNonElements ) { 2451 outerCache = elem[ expando ] || (elem[ expando ] = {}); 2452 2453 // Support: IE <9 only 2454 // Defend against cloned attroperties (jQuery gh-1709) 2455 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); 2456 2457 if ( skip && skip === elem.nodeName.toLowerCase() ) { 2458 elem = elem[ dir ] || elem; 2459 } else if ( (oldCache = uniqueCache[ key ]) && 2460 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 2461 2462 // Assign to newCache so results back-propagate to previous elements 2463 return (newCache[ 2 ] = oldCache[ 2 ]); 2464 } else { 2465 // Reuse newcache so results back-propagate to previous elements 2466 uniqueCache[ key ] = newCache; 2467 2468 // A match means we're done; a fail means we have to keep checking 2469 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { 2470 return true; 2471 } 2472 } 2473 } 2474 } 2475 } 2476 return false; 2477 }; 2478} 2479 2480function elementMatcher( matchers ) { 2481 return matchers.length > 1 ? 2482 function( elem, context, xml ) { 2483 var i = matchers.length; 2484 while ( i-- ) { 2485 if ( !matchers[i]( elem, context, xml ) ) { 2486 return false; 2487 } 2488 } 2489 return true; 2490 } : 2491 matchers[0]; 2492} 2493 2494function multipleContexts( selector, contexts, results ) { 2495 var i = 0, 2496 len = contexts.length; 2497 for ( ; i < len; i++ ) { 2498 Sizzle( selector, contexts[i], results ); 2499 } 2500 return results; 2501} 2502 2503function condense( unmatched, map, filter, context, xml ) { 2504 var elem, 2505 newUnmatched = [], 2506 i = 0, 2507 len = unmatched.length, 2508 mapped = map != null; 2509 2510 for ( ; i < len; i++ ) { 2511 if ( (elem = unmatched[i]) ) { 2512 if ( !filter || filter( elem, context, xml ) ) { 2513 newUnmatched.push( elem ); 2514 if ( mapped ) { 2515 map.push( i ); 2516 } 2517 } 2518 } 2519 } 2520 2521 return newUnmatched; 2522} 2523 2524function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 2525 if ( postFilter && !postFilter[ expando ] ) { 2526 postFilter = setMatcher( postFilter ); 2527 } 2528 if ( postFinder && !postFinder[ expando ] ) { 2529 postFinder = setMatcher( postFinder, postSelector ); 2530 } 2531 return markFunction(function( seed, results, context, xml ) { 2532 var temp, i, elem, 2533 preMap = [], 2534 postMap = [], 2535 preexisting = results.length, 2536 2537 // Get initial elements from seed or context 2538 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), 2539 2540 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2541 matcherIn = preFilter && ( seed || !selector ) ? 2542 condense( elems, preMap, preFilter, context, xml ) : 2543 elems, 2544 2545 matcherOut = matcher ? 2546 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 2547 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 2548 2549 // ...intermediate processing is necessary 2550 [] : 2551 2552 // ...otherwise use results directly 2553 results : 2554 matcherIn; 2555 2556 // Find primary matches 2557 if ( matcher ) { 2558 matcher( matcherIn, matcherOut, context, xml ); 2559 } 2560 2561 // Apply postFilter 2562 if ( postFilter ) { 2563 temp = condense( matcherOut, postMap ); 2564 postFilter( temp, [], context, xml ); 2565 2566 // Un-match failing elements by moving them back to matcherIn 2567 i = temp.length; 2568 while ( i-- ) { 2569 if ( (elem = temp[i]) ) { 2570 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); 2571 } 2572 } 2573 } 2574 2575 if ( seed ) { 2576 if ( postFinder || preFilter ) { 2577 if ( postFinder ) { 2578 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2579 temp = []; 2580 i = matcherOut.length; 2581 while ( i-- ) { 2582 if ( (elem = matcherOut[i]) ) { 2583 // Restore matcherIn since elem is not yet a final match 2584 temp.push( (matcherIn[i] = elem) ); 2585 } 2586 } 2587 postFinder( null, (matcherOut = []), temp, xml ); 2588 } 2589 2590 // Move matched elements from seed to results to keep them synchronized 2591 i = matcherOut.length; 2592 while ( i-- ) { 2593 if ( (elem = matcherOut[i]) && 2594 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { 2595 2596 seed[temp] = !(results[temp] = elem); 2597 } 2598 } 2599 } 2600 2601 // Add elements to results, through postFinder if defined 2602 } else { 2603 matcherOut = condense( 2604 matcherOut === results ? 2605 matcherOut.splice( preexisting, matcherOut.length ) : 2606 matcherOut 2607 ); 2608 if ( postFinder ) { 2609 postFinder( null, results, matcherOut, xml ); 2610 } else { 2611 push.apply( results, matcherOut ); 2612 } 2613 } 2614 }); 2615} 2616 2617function matcherFromTokens( tokens ) { 2618 var checkContext, matcher, j, 2619 len = tokens.length, 2620 leadingRelative = Expr.relative[ tokens[0].type ], 2621 implicitRelative = leadingRelative || Expr.relative[" "], 2622 i = leadingRelative ? 1 : 0, 2623 2624 // The foundational matcher ensures that elements are reachable from top-level context(s) 2625 matchContext = addCombinator( function( elem ) { 2626 return elem === checkContext; 2627 }, implicitRelative, true ), 2628 matchAnyContext = addCombinator( function( elem ) { 2629 return indexOf( checkContext, elem ) > -1; 2630 }, implicitRelative, true ), 2631 matchers = [ function( elem, context, xml ) { 2632 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 2633 (checkContext = context).nodeType ? 2634 matchContext( elem, context, xml ) : 2635 matchAnyContext( elem, context, xml ) ); 2636 // Avoid hanging onto element (issue #299) 2637 checkContext = null; 2638 return ret; 2639 } ]; 2640 2641 for ( ; i < len; i++ ) { 2642 if ( (matcher = Expr.relative[ tokens[i].type ]) ) { 2643 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; 2644 } else { 2645 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); 2646 2647 // Return special upon seeing a positional matcher 2648 if ( matcher[ expando ] ) { 2649 // Find the next relative operator (if any) for proper handling 2650 j = ++i; 2651 for ( ; j < len; j++ ) { 2652 if ( Expr.relative[ tokens[j].type ] ) { 2653 break; 2654 } 2655 } 2656 return setMatcher( 2657 i > 1 && elementMatcher( matchers ), 2658 i > 1 && toSelector( 2659 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 2660 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) 2661 ).replace( rtrim, "$1" ), 2662 matcher, 2663 i < j && matcherFromTokens( tokens.slice( i, j ) ), 2664 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), 2665 j < len && toSelector( tokens ) 2666 ); 2667 } 2668 matchers.push( matcher ); 2669 } 2670 } 2671 2672 return elementMatcher( matchers ); 2673} 2674 2675function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 2676 var bySet = setMatchers.length > 0, 2677 byElement = elementMatchers.length > 0, 2678 superMatcher = function( seed, context, xml, results, outermost ) { 2679 var elem, j, matcher, 2680 matchedCount = 0, 2681 i = "0", 2682 unmatched = seed && [], 2683 setMatched = [], 2684 contextBackup = outermostContext, 2685 // We must always have either seed elements or outermost context 2686 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), 2687 // Use integer dirruns iff this is the outermost matcher 2688 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), 2689 len = elems.length; 2690 2691 if ( outermost ) { 2692 outermostContext = context === document || context || outermost; 2693 } 2694 2695 // Add elements passing elementMatchers directly to results 2696 // Support: IE<9, Safari 2697 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 2698 for ( ; i !== len && (elem = elems[i]) != null; i++ ) { 2699 if ( byElement && elem ) { 2700 j = 0; 2701 if ( !context && elem.ownerDocument !== document ) { 2702 setDocument( elem ); 2703 xml = !documentIsHTML; 2704 } 2705 while ( (matcher = elementMatchers[j++]) ) { 2706 if ( matcher( elem, context || document, xml) ) { 2707 results.push( elem ); 2708 break; 2709 } 2710 } 2711 if ( outermost ) { 2712 dirruns = dirrunsUnique; 2713 } 2714 } 2715 2716 // Track unmatched elements for set filters 2717 if ( bySet ) { 2718 // They will have gone through all possible matchers 2719 if ( (elem = !matcher && elem) ) { 2720 matchedCount--; 2721 } 2722 2723 // Lengthen the array for every element, matched or not 2724 if ( seed ) { 2725 unmatched.push( elem ); 2726 } 2727 } 2728 } 2729 2730 // `i` is now the count of elements visited above, and adding it to `matchedCount` 2731 // makes the latter nonnegative. 2732 matchedCount += i; 2733 2734 // Apply set filters to unmatched elements 2735 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 2736 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 2737 // no element matchers and no seed. 2738 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 2739 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 2740 // numerically zero. 2741 if ( bySet && i !== matchedCount ) { 2742 j = 0; 2743 while ( (matcher = setMatchers[j++]) ) { 2744 matcher( unmatched, setMatched, context, xml ); 2745 } 2746 2747 if ( seed ) { 2748 // Reintegrate element matches to eliminate the need for sorting 2749 if ( matchedCount > 0 ) { 2750 while ( i-- ) { 2751 if ( !(unmatched[i] || setMatched[i]) ) { 2752 setMatched[i] = pop.call( results ); 2753 } 2754 } 2755 } 2756 2757 // Discard index placeholder values to get only actual matches 2758 setMatched = condense( setMatched ); 2759 } 2760 2761 // Add matches to results 2762 push.apply( results, setMatched ); 2763 2764 // Seedless set matches succeeding multiple successful matchers stipulate sorting 2765 if ( outermost && !seed && setMatched.length > 0 && 2766 ( matchedCount + setMatchers.length ) > 1 ) { 2767 2768 Sizzle.uniqueSort( results ); 2769 } 2770 } 2771 2772 // Override manipulation of globals by nested matchers 2773 if ( outermost ) { 2774 dirruns = dirrunsUnique; 2775 outermostContext = contextBackup; 2776 } 2777 2778 return unmatched; 2779 }; 2780 2781 return bySet ? 2782 markFunction( superMatcher ) : 2783 superMatcher; 2784} 2785 2786compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 2787 var i, 2788 setMatchers = [], 2789 elementMatchers = [], 2790 cached = compilerCache[ selector + " " ]; 2791 2792 if ( !cached ) { 2793 // Generate a function of recursive functions that can be used to check each element 2794 if ( !match ) { 2795 match = tokenize( selector ); 2796 } 2797 i = match.length; 2798 while ( i-- ) { 2799 cached = matcherFromTokens( match[i] ); 2800 if ( cached[ expando ] ) { 2801 setMatchers.push( cached ); 2802 } else { 2803 elementMatchers.push( cached ); 2804 } 2805 } 2806 2807 // Cache the compiled function 2808 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 2809 2810 // Save selector and tokenization 2811 cached.selector = selector; 2812 } 2813 return cached; 2814}; 2815 2816/** 2817 * A low-level selection function that works with Sizzle's compiled 2818 * selector functions 2819 * @param {String|Function} selector A selector or a pre-compiled 2820 * selector function built with Sizzle.compile 2821 * @param {Element} context 2822 * @param {Array} [results] 2823 * @param {Array} [seed] A set of elements to match against 2824 */ 2825select = Sizzle.select = function( selector, context, results, seed ) { 2826 var i, tokens, token, type, find, 2827 compiled = typeof selector === "function" && selector, 2828 match = !seed && tokenize( (selector = compiled.selector || selector) ); 2829 2830 results = results || []; 2831 2832 // Try to minimize operations if there is only one selector in the list and no seed 2833 // (the latter of which guarantees us context) 2834 if ( match.length === 1 ) { 2835 2836 // Reduce context if the leading compound selector is an ID 2837 tokens = match[0] = match[0].slice( 0 ); 2838 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && 2839 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { 2840 2841 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; 2842 if ( !context ) { 2843 return results; 2844 2845 // Precompiled matchers will still verify ancestry, so step up a level 2846 } else if ( compiled ) { 2847 context = context.parentNode; 2848 } 2849 2850 selector = selector.slice( tokens.shift().value.length ); 2851 } 2852 2853 // Fetch a seed set for right-to-left matching 2854 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; 2855 while ( i-- ) { 2856 token = tokens[i]; 2857 2858 // Abort if we hit a combinator 2859 if ( Expr.relative[ (type = token.type) ] ) { 2860 break; 2861 } 2862 if ( (find = Expr.find[ type ]) ) { 2863 // Search, expanding context for leading sibling combinators 2864 if ( (seed = find( 2865 token.matches[0].replace( runescape, funescape ), 2866 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context 2867 )) ) { 2868 2869 // If seed is empty or no tokens remain, we can return early 2870 tokens.splice( i, 1 ); 2871 selector = seed.length && toSelector( tokens ); 2872 if ( !selector ) { 2873 push.apply( results, seed ); 2874 return results; 2875 } 2876 2877 break; 2878 } 2879 } 2880 } 2881 } 2882 2883 // Compile and execute a filtering function if one is not provided 2884 // Provide `match` to avoid retokenization if we modified the selector above 2885 ( compiled || compile( selector, match ) )( 2886 seed, 2887 context, 2888 !documentIsHTML, 2889 results, 2890 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 2891 ); 2892 return results; 2893}; 2894 2895// One-time assignments 2896 2897// Sort stability 2898support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; 2899 2900// Support: Chrome 14-35+ 2901// Always assume duplicates if they aren't passed to the comparison function 2902support.detectDuplicates = !!hasDuplicate; 2903 2904// Initialize against the default document 2905setDocument(); 2906 2907// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 2908// Detached nodes confoundingly follow *each other* 2909support.sortDetached = assert(function( el ) { 2910 // Should return 1, but returns 4 (following) 2911 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; 2912}); 2913 2914// Support: IE<8 2915// Prevent attribute/property "interpolation" 2916// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 2917if ( !assert(function( el ) { 2918 el.innerHTML = "<a href='#'></a>"; 2919 return el.firstChild.getAttribute("href") === "#" ; 2920}) ) { 2921 addHandle( "type|href|height|width", function( elem, name, isXML ) { 2922 if ( !isXML ) { 2923 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 2924 } 2925 }); 2926} 2927 2928// Support: IE<9 2929// Use defaultValue in place of getAttribute("value") 2930if ( !support.attributes || !assert(function( el ) { 2931 el.innerHTML = "<input/>"; 2932 el.firstChild.setAttribute( "value", "" ); 2933 return el.firstChild.getAttribute( "value" ) === ""; 2934}) ) { 2935 addHandle( "value", function( elem, name, isXML ) { 2936 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 2937 return elem.defaultValue; 2938 } 2939 }); 2940} 2941 2942// Support: IE<9 2943// Use getAttributeNode to fetch booleans when getAttribute lies 2944if ( !assert(function( el ) { 2945 return el.getAttribute("disabled") == null; 2946}) ) { 2947 addHandle( booleans, function( elem, name, isXML ) { 2948 var val; 2949 if ( !isXML ) { 2950 return elem[ name ] === true ? name.toLowerCase() : 2951 (val = elem.getAttributeNode( name )) && val.specified ? 2952 val.value : 2953 null; 2954 } 2955 }); 2956} 2957 2958return Sizzle; 2959 2960})( window ); 2961 2962 2963 2964jQuery.find = Sizzle; 2965jQuery.expr = Sizzle.selectors; 2966 2967// Deprecated 2968jQuery.expr[ ":" ] = jQuery.expr.pseudos; 2969jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 2970jQuery.text = Sizzle.getText; 2971jQuery.isXMLDoc = Sizzle.isXML; 2972jQuery.contains = Sizzle.contains; 2973jQuery.escapeSelector = Sizzle.escape; 2974 2975 2976 2977 2978var dir = function( elem, dir, until ) { 2979 var matched = [], 2980 truncate = until !== undefined; 2981 2982 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 2983 if ( elem.nodeType === 1 ) { 2984 if ( truncate && jQuery( elem ).is( until ) ) { 2985 break; 2986 } 2987 matched.push( elem ); 2988 } 2989 } 2990 return matched; 2991}; 2992 2993 2994var siblings = function( n, elem ) { 2995 var matched = []; 2996 2997 for ( ; n; n = n.nextSibling ) { 2998 if ( n.nodeType === 1 && n !== elem ) { 2999 matched.push( n ); 3000 } 3001 } 3002 3003 return matched; 3004}; 3005 3006 3007var rneedsContext = jQuery.expr.match.needsContext; 3008 3009 3010 3011function nodeName( elem, name ) { 3012 3013 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 3014 3015}; 3016var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 3017 3018 3019
vendor: 1,441 bytes, lines 3020-3068
3020var risSimple = /^.[^:#\[\.,]*$/; 3021 3022// Implement the identical functionality for filter and not 3023function winnow( elements, qualifier, not ) { 3024 if ( jQuery.isFunction( qualifier ) ) { 3025 return jQuery.grep( elements, function( elem, i ) { 3026 return !!qualifier.call( elem, i, elem ) !== not; 3027 } ); 3028 } 3029 3030 // Single element 3031 if ( qualifier.nodeType ) { 3032 return jQuery.grep( elements, function( elem ) { 3033 return ( elem === qualifier ) !== not; 3034 } ); 3035 } 3036 3037 // Arraylike of elements (jQuery, arguments, Array) 3038 if ( typeof qualifier !== "string" ) { 3039 return jQuery.grep( elements, function( elem ) { 3040 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 3041 } ); 3042 } 3043 3044 // Simple selector that can be filtered directly, removing non-Elements 3045 if ( risSimple.test( qualifier ) ) { 3046 return jQuery.filter( qualifier, elements, not ); 3047 } 3048 3049 // Complex selector, compare the two sets, removing non-Elements 3050 qualifier = jQuery.filter( qualifier, elements ); 3051 return jQuery.grep( elements, function( elem ) { 3052 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; 3053 } ); 3054} 3055 3056jQuery.filter = function( expr, elems, not ) { 3057 var elem = elems[ 0 ]; 3058 3059 if ( not ) { 3060 expr = ":not(" + expr + ")"; 3061 } 3062 3063 if ( elems.length === 1 && elem.nodeType === 1 ) { 3064 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 3065 } 3066 3067 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 3068 return elem.nodeType === 1;
vendor: 4,831 bytes, lines 3069-3264
3069 } ) ); 3070}; 3071 3072jQuery.fn.extend( { 3073 find: function( selector ) { 3074 var i, ret, 3075 len = this.length, 3076 self = this; 3077 3078 if ( typeof selector !== "string" ) { 3079 return this.pushStack( jQuery( selector ).filter( function() { 3080 for ( i = 0; i < len; i++ ) { 3081 if ( jQuery.contains( self[ i ], this ) ) { 3082 return true; 3083 } 3084 } 3085 } ) ); 3086 } 3087 3088 ret = this.pushStack( [] ); 3089 3090 for ( i = 0; i < len; i++ ) { 3091 jQuery.find( selector, self[ i ], ret ); 3092 } 3093 3094 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 3095 }, 3096 filter: function( selector ) { 3097 return this.pushStack( winnow( this, selector || [], false ) ); 3098 }, 3099 not: function( selector ) { 3100 return this.pushStack( winnow( this, selector || [], true ) ); 3101 }, 3102 is: function( selector ) { 3103 return !!winnow( 3104 this, 3105 3106 // If this is a positional/relative selector, check membership in the returned set 3107 // so $("p:first").is("p:last") won't return true for a doc with two "p". 3108 typeof selector === "string" && rneedsContext.test( selector ) ? 3109 jQuery( selector ) : 3110 selector || [], 3111 false 3112 ).length; 3113 } 3114} ); 3115 3116 3117// Initialize a jQuery object 3118 3119 3120// A central reference to the root jQuery(document) 3121var rootjQuery, 3122 3123 // A simple way to check for HTML strings 3124 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 3125 // Strict HTML recognition (#11290: must start with <) 3126 // Shortcut simple #id case for speed 3127 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 3128 3129 init = jQuery.fn.init = function( selector, context, root ) { 3130 var match, elem; 3131 3132 // HANDLE: $(""), $(null), $(undefined), $(false) 3133 if ( !selector ) { 3134 return this; 3135 } 3136 3137 // Method init() accepts an alternate rootjQuery 3138 // so migrate can support jQuery.sub (gh-2101) 3139 root = root || rootjQuery; 3140 3141 // Handle HTML strings 3142 if ( typeof selector === "string" ) { 3143 if ( selector[ 0 ] === "<" && 3144 selector[ selector.length - 1 ] === ">" && 3145 selector.length >= 3 ) { 3146 3147 // Assume that strings that start and end with <> are HTML and skip the regex check 3148 match = [ null, selector, null ]; 3149 3150 } else { 3151 match = rquickExpr.exec( selector ); 3152 } 3153 3154 // Match html or make sure no context is specified for #id 3155 if ( match && ( match[ 1 ] || !context ) ) { 3156 3157 // HANDLE: $(html) -> $(array) 3158 if ( match[ 1 ] ) { 3159 context = context instanceof jQuery ? context[ 0 ] : context; 3160 3161 // Option to run scripts is true for back-compat 3162 // Intentionally let the error be thrown if parseHTML is not present 3163 jQuery.merge( this, jQuery.parseHTML( 3164 match[ 1 ], 3165 context && context.nodeType ? context.ownerDocument || context : document, 3166 true 3167 ) ); 3168 3169 // HANDLE: $(html, props) 3170 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 3171 for ( match in context ) { 3172 3173 // Properties of context are called as methods if possible 3174 if ( jQuery.isFunction( this[ match ] ) ) { 3175 this[ match ]( context[ match ] ); 3176 3177 // ...and otherwise set as attributes 3178 } else { 3179 this.attr( match, context[ match ] ); 3180 } 3181 } 3182 } 3183 3184 return this; 3185 3186 // HANDLE: $(#id) 3187 } else { 3188 elem = document.getElementById( match[ 2 ] ); 3189 3190 if ( elem ) { 3191 3192 // Inject the element directly into the jQuery object 3193 this[ 0 ] = elem; 3194 this.length = 1; 3195 } 3196 return this; 3197 } 3198 3199 // HANDLE: $(expr, $(...)) 3200 } else if ( !context || context.jquery ) { 3201 return ( context || root ).find( selector ); 3202 3203 // HANDLE: $(expr, context) 3204 // (which is just equivalent to: $(context).find(expr) 3205 } else { 3206 return this.constructor( context ).find( selector ); 3207 } 3208 3209 // HANDLE: $(DOMElement) 3210 } else if ( selector.nodeType ) { 3211 this[ 0 ] = selector; 3212 this.length = 1; 3213 return this; 3214 3215 // HANDLE: $(function) 3216 // Shortcut for document ready 3217 } else if ( jQuery.isFunction( selector ) ) { 3218 return root.ready !== undefined ? 3219 root.ready( selector ) : 3220 3221 // Execute immediately if ready is not present 3222 selector( jQuery ); 3223 } 3224 3225 return jQuery.makeArray( selector, this ); 3226 }; 3227 3228// Give the init function the jQuery prototype for later instantiation 3229init.prototype = jQuery.fn; 3230 3231// Initialize central reference 3232rootjQuery = jQuery( document ); 3233 3234 3235var rparentsprev = /^(?:parents|prev(?:Until|All))/, 3236 3237 // Methods guaranteed to produce a unique set when starting from a unique set 3238 guaranteedUnique = { 3239 children: true, 3240 contents: true, 3241 next: true, 3242 prev: true 3243 }; 3244 3245jQuery.fn.extend( { 3246 has: function( target ) { 3247 var targets = jQuery( target, this ), 3248 l = targets.length; 3249 3250 return this.filter( function() { 3251 var i = 0; 3252 for ( ; i < l; i++ ) { 3253 if ( jQuery.contains( this, targets[ i ] ) ) { 3254 return true; 3255 } 3256 } 3257 } ); 3258 }, 3259 3260 closest: function( selectors, context ) { 3261 var cur, 3262 i = 0, 3263 l = this.length, 3264 matched = [],
vendor: 6,797 bytes, lines 3265-3532
3265 targets = typeof selectors !== "string" && jQuery( selectors ); 3266 3267 // Positional selectors never match, since there's no _selection_ context 3268 if ( !rneedsContext.test( selectors ) ) { 3269 for ( ; i < l; i++ ) { 3270 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 3271 3272 // Always skip document fragments 3273 if ( cur.nodeType < 11 && ( targets ? 3274 targets.index( cur ) > -1 : 3275 3276 // Don't pass non-elements to Sizzle 3277 cur.nodeType === 1 && 3278 jQuery.find.matchesSelector( cur, selectors ) ) ) { 3279 3280 matched.push( cur ); 3281 break; 3282 } 3283 } 3284 } 3285 } 3286 3287 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 3288 }, 3289 3290 // Determine the position of an element within the set 3291 index: function( elem ) { 3292 3293 // No argument, return index in parent 3294 if ( !elem ) { 3295 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 3296 } 3297 3298 // Index in selector 3299 if ( typeof elem === "string" ) { 3300 return indexOf.call( jQuery( elem ), this[ 0 ] ); 3301 } 3302 3303 // Locate the position of the desired element 3304 return indexOf.call( this, 3305 3306 // If it receives a jQuery object, the first element is used 3307 elem.jquery ? elem[ 0 ] : elem 3308 ); 3309 }, 3310 3311 add: function( selector, context ) { 3312 return this.pushStack( 3313 jQuery.uniqueSort( 3314 jQuery.merge( this.get(), jQuery( selector, context ) ) 3315 ) 3316 ); 3317 }, 3318 3319 addBack: function( selector ) { 3320 return this.add( selector == null ? 3321 this.prevObject : this.prevObject.filter( selector ) 3322 ); 3323 } 3324} ); 3325 3326function sibling( cur, dir ) { 3327 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 3328 return cur; 3329} 3330 3331jQuery.each( { 3332 parent: function( elem ) { 3333 var parent = elem.parentNode; 3334 return parent && parent.nodeType !== 11 ? parent : null; 3335 }, 3336 parents: function( elem ) { 3337 return dir( elem, "parentNode" ); 3338 }, 3339 parentsUntil: function( elem, i, until ) { 3340 return dir( elem, "parentNode", until ); 3341 }, 3342 next: function( elem ) { 3343 return sibling( elem, "nextSibling" ); 3344 }, 3345 prev: function( elem ) { 3346 return sibling( elem, "previousSibling" ); 3347 }, 3348 nextAll: function( elem ) { 3349 return dir( elem, "nextSibling" ); 3350 }, 3351 prevAll: function( elem ) { 3352 return dir( elem, "previousSibling" ); 3353 }, 3354 nextUntil: function( elem, i, until ) { 3355 return dir( elem, "nextSibling", until ); 3356 }, 3357 prevUntil: function( elem, i, until ) { 3358 return dir( elem, "previousSibling", until ); 3359 }, 3360 siblings: function( elem ) { 3361 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 3362 }, 3363 children: function( elem ) { 3364 return siblings( elem.firstChild ); 3365 }, 3366 contents: function( elem ) { 3367 if ( nodeName( elem, "iframe" ) ) { 3368 return elem.contentDocument; 3369 } 3370 3371 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 3372 // Treat the template element as a regular one in browsers that 3373 // don't support it. 3374 if ( nodeName( elem, "template" ) ) { 3375 elem = elem.content || elem; 3376 } 3377 3378 return jQuery.merge( [], elem.childNodes ); 3379 } 3380}, function( name, fn ) { 3381 jQuery.fn[ name ] = function( until, selector ) { 3382 var matched = jQuery.map( this, fn, until ); 3383 3384 if ( name.slice( -5 ) !== "Until" ) { 3385 selector = until; 3386 } 3387 3388 if ( selector && typeof selector === "string" ) { 3389 matched = jQuery.filter( selector, matched ); 3390 } 3391 3392 if ( this.length > 1 ) { 3393 3394 // Remove duplicates 3395 if ( !guaranteedUnique[ name ] ) { 3396 jQuery.uniqueSort( matched ); 3397 } 3398 3399 // Reverse order for parents* and prev-derivatives 3400 if ( rparentsprev.test( name ) ) { 3401 matched.reverse(); 3402 } 3403 } 3404 3405 return this.pushStack( matched ); 3406 }; 3407} ); 3408var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 3409 3410 3411 3412// Convert String-formatted options into Object-formatted ones 3413function createOptions( options ) { 3414 var object = {}; 3415 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 3416 object[ flag ] = true; 3417 } ); 3418 return object; 3419} 3420 3421/* 3422 * Create a callback list using the following parameters: 3423 * 3424 * options: an optional list of space-separated options that will change how 3425 * the callback list behaves or a more traditional option object 3426 * 3427 * By default a callback list will act like an event callback list and can be 3428 * "fired" multiple times. 3429 * 3430 * Possible options: 3431 * 3432 * once: will ensure the callback list can only be fired once (like a Deferred) 3433 * 3434 * memory: will keep track of previous values and will call any callback added 3435 * after the list has been fired right away with the latest "memorized" 3436 * values (like a Deferred) 3437 * 3438 * unique: will ensure a callback can only be added once (no duplicate in the list) 3439 * 3440 * stopOnFalse: interrupt callings when a callback returns false 3441 * 3442 */ 3443jQuery.Callbacks = function( options ) { 3444 3445 // Convert options from String-formatted to Object-formatted if needed 3446 // (we check in cache first) 3447 options = typeof options === "string" ? 3448 createOptions( options ) : 3449 jQuery.extend( {}, options ); 3450 3451 var // Flag to know if list is currently firing 3452 firing, 3453 3454 // Last fire value for non-forgettable lists 3455 memory, 3456 3457 // Flag to know if list was already fired 3458 fired, 3459 3460 // Flag to prevent firing 3461 locked, 3462 3463 // Actual callback list 3464 list = [], 3465 3466 // Queue of execution data for repeatable lists 3467 queue = [], 3468 3469 // Index of currently firing callback (modified by add/remove as needed) 3470 firingIndex = -1, 3471 3472 // Fire callbacks 3473 fire = function() { 3474 3475 // Enforce single-firing 3476 locked = locked || options.once; 3477 3478 // Execute callbacks for all pending executions, 3479 // respecting firingIndex overrides and runtime changes 3480 fired = firing = true; 3481 for ( ; queue.length; firingIndex = -1 ) { 3482 memory = queue.shift(); 3483 while ( ++firingIndex < list.length ) { 3484 3485 // Run callback and check for early termination 3486 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 3487 options.stopOnFalse ) { 3488 3489 // Jump to end and forget the data so .add doesn't re-fire 3490 firingIndex = list.length; 3491 memory = false; 3492 } 3493 } 3494 } 3495 3496 // Forget the data if we're done with it 3497 if ( !options.memory ) { 3498 memory = false; 3499 } 3500 3501 firing = false; 3502 3503 // Clean up if we're done firing for good 3504 if ( locked ) { 3505 3506 // Keep an empty list if we have data for future add calls 3507 if ( memory ) { 3508 list = []; 3509 3510 // Otherwise, this object is spent 3511 } else { 3512 list = ""; 3513 } 3514 } 3515 }, 3516 3517 // Actual Callbacks object 3518 self = { 3519 3520 // Add a callback or a collection of callbacks to the list 3521 add: function() { 3522 if ( list ) { 3523 3524 // If we have memory from a past run, we should fire after adding 3525 if ( memory && !firing ) { 3526 firingIndex = list.length - 1; 3527 queue.push( memory ); 3528 } 3529 3530 ( function add( args ) { 3531 jQuery.each( args, function( _, arg ) { 3532 if (
vendor: 3,423 bytes, lines 3532-3674
3532jQuery.isFunction( arg ) ) { 3533 if ( !options.unique || !self.has( arg ) ) { 3534 list.push( arg ); 3535 } 3536 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { 3537 3538 // Inspect recursively 3539 add( arg ); 3540 } 3541 } ); 3542 } )( arguments ); 3543 3544 if ( memory && !firing ) { 3545 fire(); 3546 } 3547 } 3548 return this; 3549 }, 3550 3551 // Remove a callback from the list 3552 remove: function() { 3553 jQuery.each( arguments, function( _, arg ) { 3554 var index; 3555 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 3556 list.splice( index, 1 ); 3557 3558 // Handle firing indexes 3559 if ( index <= firingIndex ) { 3560 firingIndex--; 3561 } 3562 } 3563 } ); 3564 return this; 3565 }, 3566 3567 // Check if a given callback is in the list. 3568 // If no argument is given, return whether or not list has callbacks attached. 3569 has: function( fn ) { 3570 return fn ? 3571 jQuery.inArray( fn, list ) > -1 : 3572 list.length > 0; 3573 }, 3574 3575 // Remove all callbacks from the list 3576 empty: function() { 3577 if ( list ) { 3578 list = []; 3579 } 3580 return this; 3581 }, 3582 3583 // Disable .fire and .add 3584 // Abort any current/pending executions 3585 // Clear all callbacks and values 3586 disable: function() { 3587 locked = queue = []; 3588 list = memory = ""; 3589 return this; 3590 }, 3591 disabled: function() { 3592 return !list; 3593 }, 3594 3595 // Disable .fire 3596 // Also disable .add unless we have memory (since it would have no effect) 3597 // Abort any pending executions 3598 lock: function() { 3599 locked = queue = []; 3600 if ( !memory && !firing ) { 3601 list = memory = ""; 3602 } 3603 return this; 3604 }, 3605 locked: function() { 3606 return !!locked; 3607 }, 3608 3609 // Call all callbacks with the given context and arguments 3610 fireWith: function( context, args ) { 3611 if ( !locked ) { 3612 args = args || []; 3613 args = [ context, args.slice ? args.slice() : args ]; 3614 queue.push( args ); 3615 if ( !firing ) { 3616 fire(); 3617 } 3618 } 3619 return this; 3620 }, 3621 3622 // Call all the callbacks with the given arguments 3623 fire: function() { 3624 self.fireWith( this, arguments ); 3625 return this; 3626 }, 3627 3628 // To know if the callbacks have already been called at least once 3629 fired: function() { 3630 return !!fired; 3631 } 3632 }; 3633 3634 return self; 3635}; 3636 3637 3638function Identity( v ) { 3639 return v; 3640} 3641function Thrower( ex ) { 3642 throw ex; 3643} 3644 3645function adoptValue( value, resolve, reject, noValue ) { 3646 var method; 3647 3648 try { 3649 3650 // Check for promise aspect first to privilege synchronous behavior 3651 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { 3652 method.call( value ).done( resolve ).fail( reject ); 3653 3654 // Other thenables 3655 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { 3656 method.call( value, resolve, reject ); 3657 3658 // Other non-thenables 3659 } else { 3660 3661 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 3662 // * false: [ value ].slice( 0 ) => resolve( value ) 3663 // * true: [ value ].slice( 1 ) => resolve() 3664 resolve.apply( undefined, [ value ].slice( noValue ) ); 3665 } 3666 3667 // For Promises/A+, convert exceptions into rejections 3668 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 3669 // Deferred#then to conditionally suppress rejection. 3670 } catch ( value ) { 3671 3672 // Support: Android 4.0 only 3673 // Strict mode functions invoked without .call/.apply get global-object context 3674 reject.apply( undefined, [ value ]
vendor: 9,153 bytes, lines 3674-3999
3674 ); 3675 } 3676} 3677 3678jQuery.extend( { 3679 3680 Deferred: function( func ) { 3681 var tuples = [ 3682 3683 // action, add listener, callbacks, 3684 // ... .then handlers, argument index, [final state] 3685 [ "notify", "progress", jQuery.Callbacks( "memory" ), 3686 jQuery.Callbacks( "memory" ), 2 ], 3687 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 3688 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 3689 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 3690 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 3691 ], 3692 state = "pending", 3693 promise = { 3694 state: function() { 3695 return state; 3696 }, 3697 always: function() { 3698 deferred.done( arguments ).fail( arguments ); 3699 return this; 3700 }, 3701 "catch": function( fn ) { 3702 return promise.then( null, fn ); 3703 }, 3704 3705 // Keep pipe for back-compat 3706 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 3707 var fns = arguments; 3708 3709 return jQuery.Deferred( function( newDefer ) { 3710 jQuery.each( tuples, function( i, tuple ) { 3711 3712 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 3713 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 3714 3715 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 3716 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 3717 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 3718 deferred[ tuple[ 1 ] ]( function() { 3719 var returned = fn && fn.apply( this, arguments ); 3720 if ( returned && jQuery.isFunction( returned.promise ) ) { 3721 returned.promise() 3722 .progress( newDefer.notify ) 3723 .done( newDefer.resolve ) 3724 .fail( newDefer.reject ); 3725 } else { 3726 newDefer[ tuple[ 0 ] + "With" ]( 3727 this, 3728 fn ? [ returned ] : arguments 3729 ); 3730 } 3731 } ); 3732 } ); 3733 fns = null; 3734 } ).promise(); 3735 }, 3736 then: function( onFulfilled, onRejected, onProgress ) { 3737 var maxDepth = 0; 3738 function resolve( depth, deferred, handler, special ) { 3739 return function() { 3740 var that = this, 3741 args = arguments, 3742 mightThrow = function() { 3743 var returned, then; 3744 3745 // Support: Promises/A+ section 2.3.3.3.3 3746 // https://promisesaplus.com/#point-59 3747 // Ignore double-resolution attempts 3748 if ( depth < maxDepth ) { 3749 return; 3750 } 3751 3752 returned = handler.apply( that, args ); 3753 3754 // Support: Promises/A+ section 2.3.1 3755 // https://promisesaplus.com/#point-48 3756 if ( returned === deferred.promise() ) { 3757 throw new TypeError( "Thenable self-resolution" ); 3758 } 3759 3760 // Support: Promises/A+ sections 2.3.3.1, 3.5 3761 // https://promisesaplus.com/#point-54 3762 // https://promisesaplus.com/#point-75 3763 // Retrieve `then` only once 3764 then = returned && 3765 3766 // Support: Promises/A+ section 2.3.4 3767 // https://promisesaplus.com/#point-64 3768 // Only check objects and functions for thenability 3769 ( typeof returned === "object" || 3770 typeof returned === "function" ) && 3771 returned.then; 3772 3773 // Handle a returned thenable 3774 if ( jQuery.isFunction( then ) ) { 3775 3776 // Special processors (notify) just wait for resolution 3777 if ( special ) { 3778 then.call( 3779 returned, 3780 resolve( maxDepth, deferred, Identity, special ), 3781 resolve( maxDepth, deferred, Thrower, special ) 3782 ); 3783 3784 // Normal processors (resolve) also hook into progress 3785 } else { 3786 3787 // ...and disregard older resolution values 3788 maxDepth++; 3789 3790 then.call( 3791 returned, 3792 resolve( maxDepth, deferred, Identity, special ), 3793 resolve( maxDepth, deferred, Thrower, special ), 3794 resolve( maxDepth, deferred, Identity, 3795 deferred.notifyWith ) 3796 ); 3797 } 3798 3799 // Handle all other returned values 3800 } else { 3801 3802 // Only substitute handlers pass on context 3803 // and multiple values (non-spec behavior) 3804 if ( handler !== Identity ) { 3805 that = undefined; 3806 args = [ returned ]; 3807 } 3808 3809 // Process the value(s) 3810 // Default process is resolve 3811 ( special || deferred.resolveWith )( that, args ); 3812 } 3813 }, 3814 3815 // Only normal processors (resolve) catch and reject exceptions 3816 process = special ? 3817 mightThrow : 3818 function() { 3819 try { 3820 mightThrow(); 3821 } catch ( e ) { 3822 3823 if ( jQuery.Deferred.exceptionHook ) { 3824 jQuery.Deferred.exceptionHook( e, 3825 process.stackTrace ); 3826 } 3827 3828 // Support: Promises/A+ section 2.3.3.3.4.1 3829 // https://promisesaplus.com/#point-61 3830 // Ignore post-resolution exceptions 3831 if ( depth + 1 >= maxDepth ) { 3832 3833 // Only substitute handlers pass on context 3834 // and multiple values (non-spec behavior) 3835 if ( handler !== Thrower ) { 3836 that = undefined; 3837 args = [ e ]; 3838 } 3839 3840 deferred.rejectWith( that, args ); 3841 } 3842 } 3843 }; 3844 3845 // Support: Promises/A+ section 2.3.3.3.1 3846 // https://promisesaplus.com/#point-57 3847 // Re-resolve promises immediately to dodge false rejection from 3848 // subsequent errors 3849 if ( depth ) { 3850 process(); 3851 } else { 3852 3853 // Call an optional hook to record the stack, in case of exception 3854 // since it's otherwise lost when execution goes async 3855 if ( jQuery.Deferred.getStackHook ) { 3856 process.stackTrace = jQuery.Deferred.getStackHook(); 3857 } 3858 window.setTimeout( process ); 3859 } 3860 }; 3861 } 3862 3863 return jQuery.Deferred( function( newDefer ) { 3864 3865 // progress_handlers.add( ... ) 3866 tuples[ 0 ][ 3 ].add( 3867 resolve( 3868 0, 3869 newDefer, 3870 jQuery.isFunction( onProgress ) ? 3871 onProgress : 3872 Identity, 3873 newDefer.notifyWith 3874 ) 3875 ); 3876 3877 // fulfilled_handlers.add( ... ) 3878 tuples[ 1 ][ 3 ].add( 3879 resolve( 3880 0, 3881 newDefer, 3882 jQuery.isFunction( onFulfilled ) ? 3883 onFulfilled : 3884 Identity 3885 ) 3886 ); 3887 3888 // rejected_handlers.add( ... ) 3889 tuples[ 2 ][ 3 ].add( 3890 resolve( 3891 0, 3892 newDefer, 3893 jQuery.isFunction( onRejected ) ? 3894 onRejected : 3895 Thrower 3896 ) 3897 ); 3898 } ).promise(); 3899 }, 3900 3901 // Get a promise for this deferred 3902 // If obj is provided, the promise aspect is added to the object 3903 promise: function( obj ) { 3904 return obj != null ? jQuery.extend( obj, promise ) : promise; 3905 } 3906 }, 3907 deferred = {}; 3908 3909 // Add list-specific methods 3910 jQuery.each( tuples, function( i, tuple ) { 3911 var list = tuple[ 2 ], 3912 stateString = tuple[ 5 ]; 3913 3914 // promise.progress = list.add 3915 // promise.done = list.add 3916 // promise.fail = list.add 3917 promise[ tuple[ 1 ] ] = list.add; 3918 3919 // Handle state 3920 if ( stateString ) { 3921 list.add( 3922 function() { 3923 3924 // state = "resolved" (i.e., fulfilled) 3925 // state = "rejected" 3926 state = stateString; 3927 }, 3928 3929 // rejected_callbacks.disable 3930 // fulfilled_callbacks.disable 3931 tuples[ 3 - i ][ 2 ].disable, 3932 3933 // progress_callbacks.lock 3934 tuples[ 0 ][ 2 ].lock 3935 ); 3936 } 3937 3938 // progress_handlers.fire 3939 // fulfilled_handlers.fire 3940 // rejected_handlers.fire 3941 list.add( tuple[ 3 ].fire ); 3942 3943 // deferred.notify = function() { deferred.notifyWith(...) } 3944 // deferred.resolve = function() { deferred.resolveWith(...) } 3945 // deferred.reject = function() { deferred.rejectWith(...) } 3946 deferred[ tuple[ 0 ] ] = function() { 3947 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 3948 return this; 3949 }; 3950 3951 // deferred.notifyWith = list.fireWith 3952 // deferred.resolveWith = list.fireWith 3953 // deferred.rejectWith = list.fireWith 3954 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 3955 } ); 3956 3957 // Make the deferred a promise 3958 promise.promise( deferred ); 3959 3960 // Call given func if any 3961 if ( func ) { 3962 func.call( deferred, deferred ); 3963 } 3964 3965 // All done! 3966 return deferred; 3967 }, 3968 3969 // Deferred helper 3970 when: function( singleValue ) { 3971 var 3972 3973 // count of uncompleted subordinates 3974 remaining = arguments.length, 3975 3976 // count of unprocessed arguments 3977 i = remaining, 3978 3979 // subordinate fulfillment data 3980 resolveContexts = Array( i ), 3981 resolveValues = slice.call( arguments ), 3982 3983 // the master Deferred 3984 master = jQuery.Deferred(), 3985 3986 // subordinate callback factory 3987 updateFunc = function( i ) { 3988 return function( value ) { 3989 resolveContexts[ i ] = this; 3990 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 3991 if ( !( --remaining ) ) { 3992 master.resolveWith( resolveContexts, resolveValues ); 3993 } 3994 }; 3995 }; 3996 3997 // Single- and empty arguments are adopted like Promise.resolve 3998 if ( remaining <= 1 ) { 3999 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject
vendor: 2,079 bytes, lines 3999-4087
3999, 4000 !remaining ); 4001 4002 // Use .then() to unwrap secondary thenables (cf. gh-3000) 4003 if ( master.state() === "pending" || 4004 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 4005 4006 return master.then(); 4007 } 4008 } 4009 4010 // Multiple arguments are aggregated like Promise.all array elements 4011 while ( i-- ) { 4012 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); 4013 } 4014 4015 return master.promise(); 4016 } 4017} ); 4018 4019 4020// These usually indicate a programmer mistake during development, 4021// warn about them ASAP rather than swallowing them by default. 4022var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 4023 4024jQuery.Deferred.exceptionHook = function( error, stack ) { 4025 4026 // Support: IE 8 - 9 only 4027 // Console exists when dev tools are open, which can happen at any time 4028 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 4029 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 4030 } 4031}; 4032 4033 4034 4035 4036jQuery.readyException = function( error ) { 4037 window.setTimeout( function() { 4038 throw error; 4039 } ); 4040}; 4041 4042 4043 4044 4045// The deferred used on DOM ready 4046var readyList = jQuery.Deferred(); 4047 4048jQuery.fn.ready = function( fn ) { 4049 4050 readyList 4051 .then( fn ) 4052 4053 // Wrap jQuery.readyException in a function so that the lookup 4054 // happens at the time of error handling instead of callback 4055 // registration. 4056 .catch( function( error ) { 4057 jQuery.readyException( error ); 4058 } ); 4059 4060 return this; 4061}; 4062 4063jQuery.extend( { 4064 4065 // Is the DOM ready to be used? Set to true once it occurs. 4066 isReady: false, 4067 4068 // A counter to track how many items to wait for before 4069 // the ready event fires. See #6781 4070 readyWait: 1, 4071 4072 // Handle when the DOM is ready 4073 ready: function( wait ) { 4074 4075 // Abort if there are pending holds or we're already ready 4076 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 4077 return; 4078 } 4079 4080 // Remember that the DOM is ready 4081 jQuery.isReady = true; 4082 4083 // If a normal DOM Ready event fired, decrement, and wait if need be 4084 if ( wait !== true && --jQuery.readyWait > 0 ) { 4085 return; 4086 } 4087
vendor: 4,098 bytes, lines 4088-4269
4088 // If there are functions bound, to execute 4089 readyList.resolveWith( document, [ jQuery ] ); 4090 } 4091} ); 4092 4093jQuery.ready.then = readyList.then; 4094 4095// The ready event handler and self cleanup method 4096function completed() { 4097 document.removeEventListener( "DOMContentLoaded", completed ); 4098 window.removeEventListener( "load", completed ); 4099 jQuery.ready(); 4100} 4101 4102// Catch cases where $(document).ready() is called 4103// after the browser event has already occurred. 4104// Support: IE <=9 - 10 only 4105// Older IE sometimes signals "interactive" too soon 4106if ( document.readyState === "complete" || 4107 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 4108 4109 // Handle it asynchronously to allow scripts the opportunity to delay ready 4110 window.setTimeout( jQuery.ready ); 4111 4112} else { 4113 4114 // Use the handy event callback 4115 document.addEventListener( "DOMContentLoaded", completed ); 4116 4117 // A fallback to window.onload, that will always work 4118 window.addEventListener( "load", completed ); 4119} 4120 4121 4122 4123 4124// Multifunctional method to get and set values of a collection 4125// The value/s can optionally be executed if it's a function 4126var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 4127 var i = 0, 4128 len = elems.length, 4129 bulk = key == null; 4130 4131 // Sets many values 4132 if ( jQuery.type( key ) === "object" ) { 4133 chainable = true; 4134 for ( i in key ) { 4135 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 4136 } 4137 4138 // Sets one value 4139 } else if ( value !== undefined ) { 4140 chainable = true; 4141 4142 if ( !jQuery.isFunction( value ) ) { 4143 raw = true; 4144 } 4145 4146 if ( bulk ) { 4147 4148 // Bulk operations run against the entire set 4149 if ( raw ) { 4150 fn.call( elems, value ); 4151 fn = null; 4152 4153 // ...except when executing function values 4154 } else { 4155 bulk = fn; 4156 fn = function( elem, key, value ) { 4157 return bulk.call( jQuery( elem ), value ); 4158 }; 4159 } 4160 } 4161 4162 if ( fn ) { 4163 for ( ; i < len; i++ ) { 4164 fn( 4165 elems[ i ], key, raw ? 4166 value : 4167 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 4168 ); 4169 } 4170 } 4171 } 4172 4173 if ( chainable ) { 4174 return elems; 4175 } 4176 4177 // Gets 4178 if ( bulk ) { 4179 return fn.call( elems ); 4180 } 4181 4182 return len ? fn( elems[ 0 ], key ) : emptyGet; 4183}; 4184var acceptData = function( owner ) { 4185 4186 // Accepts only: 4187 // - Node 4188 // - Node.ELEMENT_NODE 4189 // - Node.DOCUMENT_NODE 4190 // - Object 4191 // - Any 4192 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 4193}; 4194 4195 4196 4197 4198function Data() { 4199 this.expando = jQuery.expando + Data.uid++; 4200} 4201 4202Data.uid = 1; 4203 4204Data.prototype = { 4205 4206 cache: function( owner ) { 4207 4208 // Check if the owner object already has a cache 4209 var value = owner[ this.expando ]; 4210 4211 // If not, create one 4212 if ( !value ) { 4213 value = {}; 4214 4215 // We can accept data for non-element nodes in modern browsers, 4216 // but we should not, see #8335. 4217 // Always return an empty object. 4218 if ( acceptData( owner ) ) { 4219 4220 // If it is a node unlikely to be stringify-ed or looped over 4221 // use plain assignment 4222 if ( owner.nodeType ) { 4223 owner[ this.expando ] = value; 4224 4225 // Otherwise secure it in a non-enumerable property 4226 // configurable must be true to allow the property to be 4227 // deleted when data is removed 4228 } else { 4229 Object.defineProperty( owner, this.expando, { 4230 value: value, 4231 configurable: true 4232 } ); 4233 } 4234 } 4235 } 4236 4237 return value; 4238 }, 4239 set: function( owner, data, value ) { 4240 var prop, 4241 cache = this.cache( owner ); 4242 4243 // Handle: [ owner, key, value ] args 4244 // Always use camelCase key (gh-2257) 4245 if ( typeof data === "string" ) { 4246 cache[ jQuery.camelCase( data ) ] = value; 4247 4248 // Handle: [ owner, { properties } ] args 4249 } else { 4250 4251 // Copy the properties one-by-one to the cache object 4252 for ( prop in data ) { 4253 cache[ jQuery.camelCase( prop ) ] = data[ prop ]; 4254 } 4255 } 4256 return cache; 4257 }, 4258 get: function( owner, key ) { 4259 return key === undefined ? 4260 this.cache( owner ) : 4261 4262 // Always use camelCase key (gh-2257) 4263 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; 4264 }, 4265 access: function( owner, key, value ) { 4266 4267 // In cases where either: 4268 // 4269 // 1. No key was specified
vendor: 4,593 bytes, lines 4270-4453
4270 // 2. A string key was specified, but no value provided 4271 // 4272 // Take the "read" path and allow the get method to determine 4273 // which value to return, respectively either: 4274 // 4275 // 1. The entire cache object 4276 // 2. The data stored at the key 4277 // 4278 if ( key === undefined || 4279 ( ( key && typeof key === "string" ) && value === undefined ) ) { 4280 4281 return this.get( owner, key ); 4282 } 4283 4284 // When the key is not a string, or both a key and value 4285 // are specified, set or extend (existing objects) with either: 4286 // 4287 // 1. An object of properties 4288 // 2. A key and value 4289 // 4290 this.set( owner, key, value ); 4291 4292 // Since the "set" path can have two possible entry points 4293 // return the expected data based on which path was taken[*] 4294 return value !== undefined ? value : key; 4295 }, 4296 remove: function( owner, key ) { 4297 var i, 4298 cache = owner[ this.expando ]; 4299 4300 if ( cache === undefined ) { 4301 return; 4302 } 4303 4304 if ( key !== undefined ) { 4305 4306 // Support array or space separated string of keys 4307 if ( Array.isArray( key ) ) { 4308 4309 // If key is an array of keys... 4310 // We always set camelCase keys, so remove that. 4311 key = key.map( jQuery.camelCase ); 4312 } else { 4313 key = jQuery.camelCase( key ); 4314 4315 // If a key with the spaces exists, use it. 4316 // Otherwise, create an array by matching non-whitespace 4317 key = key in cache ? 4318 [ key ] : 4319 ( key.match( rnothtmlwhite ) || [] ); 4320 } 4321 4322 i = key.length; 4323 4324 while ( i-- ) { 4325 delete cache[ key[ i ] ]; 4326 } 4327 } 4328 4329 // Remove the expando if there's no more data 4330 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 4331 4332 // Support: Chrome <=35 - 45 4333 // Webkit & Blink performance suffers when deleting properties 4334 // from DOM nodes, so set to undefined instead 4335 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 4336 if ( owner.nodeType ) { 4337 owner[ this.expando ] = undefined; 4338 } else { 4339 delete owner[ this.expando ]; 4340 } 4341 } 4342 }, 4343 hasData: function( owner ) { 4344 var cache = owner[ this.expando ]; 4345 return cache !== undefined && !jQuery.isEmptyObject( cache ); 4346 } 4347}; 4348var dataPriv = new Data(); 4349 4350var dataUser = new Data(); 4351 4352 4353 4354// Implementation Summary 4355// 4356// 1. Enforce API surface and semantic compatibility with 1.9.x branch 4357// 2. Improve the module's maintainability by reducing the storage 4358// paths to a single mechanism. 4359// 3. Use the same single mechanism to support "private" and "user" data. 4360// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 4361// 5. Avoid exposing implementation details on user objects (eg. expando properties) 4362// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 4363 4364var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4365 rmultiDash = /[A-Z]/g; 4366 4367function getData( data ) { 4368 if ( data === "true" ) { 4369 return true; 4370 } 4371 4372 if ( data === "false" ) { 4373 return false; 4374 } 4375 4376 if ( data === "null" ) { 4377 return null; 4378 } 4379 4380 // Only convert to a number if it doesn't change the string 4381 if ( data === +data + "" ) { 4382 return +data; 4383 } 4384 4385 if ( rbrace.test( data ) ) { 4386 return JSON.parse( data ); 4387 } 4388 4389 return data; 4390} 4391 4392function dataAttr( elem, key, data ) { 4393 var name; 4394 4395 // If nothing was found internally, try to fetch any 4396 // data from the HTML5 data-* attribute 4397 if ( data === undefined && elem.nodeType === 1 ) { 4398 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 4399 data = elem.getAttribute( name ); 4400 4401 if ( typeof data === "string" ) { 4402 try { 4403 data = getData( data ); 4404 } catch ( e ) {} 4405 4406 // Make sure we set the data so it isn't changed later 4407 dataUser.set( elem, key, data ); 4408 } else { 4409 data = undefined; 4410 } 4411 } 4412 return data; 4413} 4414 4415jQuery.extend( { 4416 hasData: function( elem ) { 4417 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 4418 }, 4419 4420 data: function( elem, name, data ) { 4421 return dataUser.access( elem, name, data ); 4422 }, 4423 4424 removeData: function( elem, name ) { 4425 dataUser.remove( elem, name ); 4426 }, 4427 4428 // TODO: Now that all calls to _data and _removeData have been replaced 4429 // with direct calls to dataPriv methods, these can be deprecated. 4430 _data: function( elem, name, data ) { 4431 return dataPriv.access( elem, name, data ); 4432 }, 4433 4434 _removeData: function( elem, name ) { 4435 dataPriv.remove( elem, name ); 4436 } 4437} ); 4438 4439jQuery.fn.extend( { 4440 data: function( key, value ) { 4441 var i, name, data, 4442 elem = this[ 0 ], 4443 attrs = elem && elem.attributes; 4444 4445 // Gets all values 4446 if ( key === undefined ) { 4447 if ( this.length ) { 4448 data = dataUser.get( elem ); 4449 4450 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 4451 i = attrs.length; 4452 while ( i-- ) { 4453
vendor: 7,789 bytes, lines 4454-4776
4454 // Support: IE 11 only 4455 // The attrs elements can be null (#14894) 4456 if ( attrs[ i ] ) { 4457 name = attrs[ i ].name; 4458 if ( name.indexOf( "data-" ) === 0 ) { 4459 name = jQuery.camelCase( name.slice( 5 ) ); 4460 dataAttr( elem, name, data[ name ] ); 4461 } 4462 } 4463 } 4464 dataPriv.set( elem, "hasDataAttrs", true ); 4465 } 4466 } 4467 4468 return data; 4469 } 4470 4471 // Sets multiple values 4472 if ( typeof key === "object" ) { 4473 return this.each( function() { 4474 dataUser.set( this, key ); 4475 } ); 4476 } 4477 4478 return access( this, function( value ) { 4479 var data; 4480 4481 // The calling jQuery object (element matches) is not empty 4482 // (and therefore has an element appears at this[ 0 ]) and the 4483 // `value` parameter was not undefined. An empty jQuery object 4484 // will result in `undefined` for elem = this[ 0 ] which will 4485 // throw an exception if an attempt to read a data cache is made. 4486 if ( elem && value === undefined ) { 4487 4488 // Attempt to get data from the cache 4489 // The key will always be camelCased in Data 4490 data = dataUser.get( elem, key ); 4491 if ( data !== undefined ) { 4492 return data; 4493 } 4494 4495 // Attempt to "discover" the data in 4496 // HTML5 custom data-* attrs 4497 data = dataAttr( elem, key ); 4498 if ( data !== undefined ) { 4499 return data; 4500 } 4501 4502 // We tried really hard, but the data doesn't exist. 4503 return; 4504 } 4505 4506 // Set the data... 4507 this.each( function() { 4508 4509 // We always store the camelCased key 4510 dataUser.set( this, key, value ); 4511 } ); 4512 }, null, value, arguments.length > 1, null, true ); 4513 }, 4514 4515 removeData: function( key ) { 4516 return this.each( function() { 4517 dataUser.remove( this, key ); 4518 } ); 4519 } 4520} ); 4521 4522 4523jQuery.extend( { 4524 queue: function( elem, type, data ) { 4525 var queue; 4526 4527 if ( elem ) { 4528 type = ( type || "fx" ) + "queue"; 4529 queue = dataPriv.get( elem, type ); 4530 4531 // Speed up dequeue by getting out quickly if this is just a lookup 4532 if ( data ) { 4533 if ( !queue || Array.isArray( data ) ) { 4534 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 4535 } else { 4536 queue.push( data ); 4537 } 4538 } 4539 return queue || []; 4540 } 4541 }, 4542 4543 dequeue: function( elem, type ) { 4544 type = type || "fx"; 4545 4546 var queue = jQuery.queue( elem, type ), 4547 startLength = queue.length, 4548 fn = queue.shift(), 4549 hooks = jQuery._queueHooks( elem, type ), 4550 next = function() { 4551 jQuery.dequeue( elem, type ); 4552 }; 4553 4554 // If the fx queue is dequeued, always remove the progress sentinel 4555 if ( fn === "inprogress" ) { 4556 fn = queue.shift(); 4557 startLength--; 4558 } 4559 4560 if ( fn ) { 4561 4562 // Add a progress sentinel to prevent the fx queue from being 4563 // automatically dequeued 4564 if ( type === "fx" ) { 4565 queue.unshift( "inprogress" ); 4566 } 4567 4568 // Clear up the last queue stop function 4569 delete hooks.stop; 4570 fn.call( elem, next, hooks ); 4571 } 4572 4573 if ( !startLength && hooks ) { 4574 hooks.empty.fire(); 4575 } 4576 }, 4577 4578 // Not public - generate a queueHooks object, or return the current one 4579 _queueHooks: function( elem, type ) { 4580 var key = type + "queueHooks"; 4581 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 4582 empty: jQuery.Callbacks( "once memory" ).add( function() { 4583 dataPriv.remove( elem, [ type + "queue", key ] ); 4584 } ) 4585 } ); 4586 } 4587} ); 4588 4589jQuery.fn.extend( { 4590 queue: function( type, data ) { 4591 var setter = 2; 4592 4593 if ( typeof type !== "string" ) { 4594 data = type; 4595 type = "fx"; 4596 setter--; 4597 } 4598 4599 if ( arguments.length < setter ) { 4600 return jQuery.queue( this[ 0 ], type ); 4601 } 4602 4603 return data === undefined ? 4604 this : 4605 this.each( function() { 4606 var queue = jQuery.queue( this, type, data ); 4607 4608 // Ensure a hooks for this queue 4609 jQuery._queueHooks( this, type ); 4610 4611 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 4612 jQuery.dequeue( this, type ); 4613 } 4614 } ); 4615 }, 4616 dequeue: function( type ) { 4617 return this.each( function() { 4618 jQuery.dequeue( this, type ); 4619 } ); 4620 }, 4621 clearQueue: function( type ) { 4622 return this.queue( type || "fx", [] ); 4623 }, 4624 4625 // Get a promise resolved when queues of a certain type 4626 // are emptied (fx is the type by default) 4627 promise: function( type, obj ) { 4628 var tmp, 4629 count = 1, 4630 defer = jQuery.Deferred(), 4631 elements = this, 4632 i = this.length, 4633 resolve = function() { 4634 if ( !( --count ) ) { 4635 defer.resolveWith( elements, [ elements ] ); 4636 } 4637 }; 4638 4639 if ( typeof type !== "string" ) { 4640 obj = type; 4641 type = undefined; 4642 } 4643 type = type || "fx"; 4644 4645 while ( i-- ) { 4646 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 4647 if ( tmp && tmp.empty ) { 4648 count++; 4649 tmp.empty.add( resolve ); 4650 } 4651 } 4652 resolve(); 4653 return defer.promise( obj ); 4654 } 4655} ); 4656var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 4657 4658var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 4659 4660 4661var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 4662 4663var isHiddenWithinTree = function( elem, el ) { 4664 4665 // isHiddenWithinTree might be called from jQuery#filter function; 4666 // in that case, element will be second argument 4667 elem = el || elem; 4668 4669 // Inline style trumps all 4670 return elem.style.display === "none" || 4671 elem.style.display === "" && 4672 4673 // Otherwise, check computed style 4674 // Support: Firefox <=43 - 45 4675 // Disconnected elements can have computed display: none, so first confirm that elem is 4676 // in the document. 4677 jQuery.contains( elem.ownerDocument, elem ) && 4678 4679 jQuery.css( elem, "display" ) === "none"; 4680 }; 4681 4682var swap = function( elem, options, callback, args ) { 4683 var ret, name, 4684 old = {}; 4685 4686 // Remember the old values, and insert the new ones 4687 for ( name in options ) { 4688 old[ name ] = elem.style[ name ]; 4689 elem.style[ name ] = options[ name ]; 4690 } 4691 4692 ret = callback.apply( elem, args || [] ); 4693 4694 // Revert the old values 4695 for ( name in options ) { 4696 elem.style[ name ] = old[ name ]; 4697 } 4698 4699 return ret; 4700}; 4701 4702 4703 4704 4705function adjustCSS( elem, prop, valueParts, tween ) { 4706 var adjusted, 4707 scale = 1, 4708 maxIterations = 20, 4709 currentValue = tween ? 4710 function() { 4711 return tween.cur(); 4712 } : 4713 function() { 4714 return jQuery.css( elem, prop, "" ); 4715 }, 4716 initial = currentValue(), 4717 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 4718 4719 // Starting value computation is required for potential unit mismatches 4720 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 4721 rcssNum.exec( jQuery.css( elem, prop ) ); 4722 4723 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 4724 4725 // Trust units reported by jQuery.css 4726 unit = unit || initialInUnit[ 3 ]; 4727 4728 // Make sure we update the tween properties later on 4729 valueParts = valueParts || []; 4730 4731 // Iteratively approximate from a nonzero starting point 4732 initialInUnit = +initial || 1; 4733 4734 do { 4735 4736 // If previous iteration zeroed out, double until we get *something*. 4737 // Use string for doubling so we don't accidentally see scale as unchanged below 4738 scale = scale || ".5"; 4739 4740 // Adjust and apply 4741 initialInUnit = initialInUnit / scale; 4742 jQuery.style( elem, prop, initialInUnit + unit ); 4743 4744 // Update scale, tolerating zero or NaN from tween.cur() 4745 // Break the loop if scale is unchanged or perfect, or if we've just had enough. 4746 } while ( 4747 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations 4748 ); 4749 } 4750 4751 if ( valueParts ) { 4752 initialInUnit = +initialInUnit || +initial || 0; 4753 4754 // Apply relative offset (+=/-=) if specified 4755 adjusted = valueParts[ 1 ] ? 4756 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 4757 +valueParts[ 2 ]; 4758 if ( tween ) { 4759 tween.unit = unit; 4760 tween.start = initialInUnit; 4761 tween.end = adjusted; 4762 } 4763 } 4764 return adjusted; 4765} 4766 4767 4768var defaultDisplayMap = {}; 4769 4770function getDefaultDisplay( elem ) { 4771 var temp, 4772 doc = elem.ownerDocument, 4773 nodeName = elem.nodeName, 4774 display = defaultDisplayMap[ nodeName ]; 4775 4776 if ( display ) {
vendor: 4,001 bytes, lines 4777-4948
4777 return display; 4778 } 4779 4780 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 4781 display = jQuery.css( temp, "display" ); 4782 4783 temp.parentNode.removeChild( temp ); 4784 4785 if ( display === "none" ) { 4786 display = "block"; 4787 } 4788 defaultDisplayMap[ nodeName ] = display; 4789 4790 return display; 4791} 4792 4793function showHide( elements, show ) { 4794 var display, elem, 4795 values = [], 4796 index = 0, 4797 length = elements.length; 4798 4799 // Determine new display value for elements that need to change 4800 for ( ; index < length; index++ ) { 4801 elem = elements[ index ]; 4802 if ( !elem.style ) { 4803 continue; 4804 } 4805 4806 display = elem.style.display; 4807 if ( show ) { 4808 4809 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 4810 // check is required in this first loop unless we have a nonempty display value (either 4811 // inline or about-to-be-restored) 4812 if ( display === "none" ) { 4813 values[ index ] = dataPriv.get( elem, "display" ) || null; 4814 if ( !values[ index ] ) { 4815 elem.style.display = ""; 4816 } 4817 } 4818 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 4819 values[ index ] = getDefaultDisplay( elem ); 4820 } 4821 } else { 4822 if ( display !== "none" ) { 4823 values[ index ] = "none"; 4824 4825 // Remember what we're overwriting 4826 dataPriv.set( elem, "display", display ); 4827 } 4828 } 4829 } 4830 4831 // Set the display of the elements in a second loop to avoid constant reflow 4832 for ( index = 0; index < length; index++ ) { 4833 if ( values[ index ] != null ) { 4834 elements[ index ].style.display = values[ index ]; 4835 } 4836 } 4837 4838 return elements; 4839} 4840 4841jQuery.fn.extend( { 4842 show: function() { 4843 return showHide( this, true ); 4844 }, 4845 hide: function() { 4846 return showHide( this ); 4847 }, 4848 toggle: function( state ) { 4849 if ( typeof state === "boolean" ) { 4850 return state ? this.show() : this.hide(); 4851 } 4852 4853 return this.each( function() { 4854 if ( isHiddenWithinTree( this ) ) { 4855 jQuery( this ).show(); 4856 } else { 4857 jQuery( this ).hide(); 4858 } 4859 } ); 4860 } 4861} ); 4862var rcheckableType = ( /^(?:checkbox|radio)$/i ); 4863 4864var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); 4865 4866var rscriptType = ( /^$|\/(?:java|ecma)script/i ); 4867 4868 4869 4870// We have to close these tags to support XHTML (#13200) 4871var wrapMap = { 4872 4873 // Support: IE <=9 only 4874 option: [ 1, "<select multiple='multiple'>", "</select>" ], 4875 4876 // XHTML parsers do not magically insert elements in the 4877 // same way that tag soup parsers do. So we cannot shorten 4878 // this by omitting <tbody> or other required elements. 4879 thead: [ 1, "<table>", "</table>" ], 4880 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 4881 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 4882 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 4883 4884 _default: [ 0, "", "" ] 4885}; 4886 4887// Support: IE <=9 only 4888wrapMap.optgroup = wrapMap.option; 4889 4890wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 4891wrapMap.th = wrapMap.td; 4892 4893 4894function getAll( context, tag ) { 4895 4896 // Support: IE <=9 - 11 only 4897 // Use typeof to avoid zero-argument method invocation on host objects (#15151) 4898 var ret; 4899 4900 if ( typeof context.getElementsByTagName !== "undefined" ) { 4901 ret = context.getElementsByTagName( tag || "*" ); 4902 4903 } else if ( typeof context.querySelectorAll !== "undefined" ) { 4904 ret = context.querySelectorAll( tag || "*" ); 4905 4906 } else { 4907 ret = []; 4908 } 4909 4910 if ( tag === undefined || tag && nodeName( context, tag ) ) { 4911 return jQuery.merge( [ context ], ret ); 4912 } 4913 4914 return ret; 4915} 4916 4917 4918// Mark scripts as having already been evaluated 4919function setGlobalEval( elems, refElements ) { 4920 var i = 0, 4921 l = elems.length; 4922 4923 for ( ; i < l; i++ ) { 4924 dataPriv.set( 4925 elems[ i ], 4926 "globalEval", 4927 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 4928 ); 4929 } 4930} 4931 4932 4933var rhtml = /<|&#?\w+;/; 4934 4935function buildFragment( elems, context, scripts, selection, ignored ) { 4936 var elem, tmp, tag, wrap, contains, j, 4937 fragment = context.createDocumentFragment(), 4938 nodes = [], 4939 i = 0, 4940 l = elems.length; 4941 4942 for ( ; i < l; i++ ) { 4943 elem = elems[ i ]; 4944 4945 if ( elem || elem === 0 ) { 4946 4947 // Add nodes directly 4948 if ( jQuery.t
vendor: 14,415 bytes, lines 4948-5458
4948ype( elem ) === "object" ) { 4949 4950 // Support: Android <=4.0 only, PhantomJS 1 only 4951 // push.apply(_, arraylike) throws on ancient WebKit 4952 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 4953 4954 // Convert non-html into a text node 4955 } else if ( !rhtml.test( elem ) ) { 4956 nodes.push( context.createTextNode( elem ) ); 4957 4958 // Convert html into DOM nodes 4959 } else { 4960 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 4961 4962 // Deserialize a standard representation 4963 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 4964 wrap = wrapMap[ tag ] || wrapMap._default; 4965 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 4966 4967 // Descend through wrappers to the right content 4968 j = wrap[ 0 ]; 4969 while ( j-- ) { 4970 tmp = tmp.lastChild; 4971 } 4972 4973 // Support: Android <=4.0 only, PhantomJS 1 only 4974 // push.apply(_, arraylike) throws on ancient WebKit 4975 jQuery.merge( nodes, tmp.childNodes ); 4976 4977 // Remember the top-level container 4978 tmp = fragment.firstChild; 4979 4980 // Ensure the created nodes are orphaned (#12392) 4981 tmp.textContent = ""; 4982 } 4983 } 4984 } 4985 4986 // Remove wrapper from fragment 4987 fragment.textContent = ""; 4988 4989 i = 0; 4990 while ( ( elem = nodes[ i++ ] ) ) { 4991 4992 // Skip elements already in the context collection (trac-4087) 4993 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 4994 if ( ignored ) { 4995 ignored.push( elem ); 4996 } 4997 continue; 4998 } 4999 5000 contains = jQuery.contains( elem.ownerDocument, elem ); 5001 5002 // Append to fragment 5003 tmp = getAll( fragment.appendChild( elem ), "script" ); 5004 5005 // Preserve script evaluation history 5006 if ( contains ) { 5007 setGlobalEval( tmp ); 5008 } 5009 5010 // Capture executables 5011 if ( scripts ) { 5012 j = 0; 5013 while ( ( elem = tmp[ j++ ] ) ) { 5014 if ( rscriptType.test( elem.type || "" ) ) { 5015 scripts.push( elem ); 5016 } 5017 } 5018 } 5019 } 5020 5021 return fragment; 5022} 5023 5024 5025( function() { 5026 var fragment = document.createDocumentFragment(), 5027 div = fragment.appendChild( document.createElement( "div" ) ), 5028 input = document.createElement( "input" ); 5029 5030 // Support: Android 4.0 - 4.3 only 5031 // Check state lost if the name is set (#11217) 5032 // Support: Windows Web Apps (WWA) 5033 // `name` and `type` must use .setAttribute for WWA (#14901) 5034 input.setAttribute( "type", "radio" ); 5035 input.setAttribute( "checked", "checked" ); 5036 input.setAttribute( "name", "t" ); 5037 5038 div.appendChild( input ); 5039 5040 // Support: Android <=4.1 only 5041 // Older WebKit doesn't clone checked state correctly in fragments 5042 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 5043 5044 // Support: IE <=11 only 5045 // Make sure textarea (and checkbox) defaultValue is properly cloned 5046 div.innerHTML = "<textarea>x</textarea>"; 5047 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 5048} )(); 5049var documentElement = document.documentElement; 5050 5051 5052 5053var 5054 rkeyEvent = /^key/, 5055 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 5056 rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 5057 5058function returnTrue() { 5059 return true; 5060} 5061 5062function returnFalse() { 5063 return false; 5064} 5065 5066// Support: IE <=9 only 5067// See #13393 for more info 5068function safeActiveElement() { 5069 try { 5070 return document.activeElement; 5071 } catch ( err ) { } 5072} 5073 5074function on( elem, types, selector, data, fn, one ) { 5075 var origFn, type; 5076 5077 // Types can be a map of types/handlers 5078 if ( typeof types === "object" ) { 5079 5080 // ( types-Object, selector, data ) 5081 if ( typeof selector !== "string" ) { 5082 5083 // ( types-Object, data ) 5084 data = data || selector; 5085 selector = undefined; 5086 } 5087 for ( type in types ) { 5088 on( elem, type, selector, data, types[ type ], one ); 5089 } 5090 return elem; 5091 } 5092 5093 if ( data == null && fn == null ) { 5094 5095 // ( types, fn ) 5096 fn = selector; 5097 data = selector = undefined; 5098 } else if ( fn == null ) { 5099 if ( typeof selector === "string" ) { 5100 5101 // ( types, selector, fn ) 5102 fn = data; 5103 data = undefined; 5104 } else { 5105 5106 // ( types, data, fn ) 5107 fn = data; 5108 data = selector; 5109 selector = undefined; 5110 } 5111 } 5112 if ( fn === false ) { 5113 fn = returnFalse; 5114 } else if ( !fn ) { 5115 return elem; 5116 } 5117 5118 if ( one === 1 ) { 5119 origFn = fn; 5120 fn = function( event ) { 5121 5122 // Can use an empty set, since event contains the info 5123 jQuery().off( event ); 5124 return origFn.apply( this, arguments ); 5125 }; 5126 5127 // Use same guid so caller can remove using origFn 5128 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 5129 } 5130 return elem.each( function() { 5131 jQuery.event.add( this, types, fn, data, selector ); 5132 } ); 5133} 5134 5135/* 5136 * Helper functions for managing events -- not part of the public interface. 5137 * Props to Dean Edwards' addEvent library for many of the ideas. 5138 */ 5139jQuery.event = { 5140 5141 global: {}, 5142 5143 add: function( elem, types, handler, data, selector ) { 5144 5145 var handleObjIn, eventHandle, tmp, 5146 events, t, handleObj, 5147 special, handlers, type, namespaces, origType, 5148 elemData = dataPriv.get( elem ); 5149 5150 // Don't attach events to noData or text/comment nodes (but allow plain objects) 5151 if ( !elemData ) { 5152 return; 5153 } 5154 5155 // Caller can pass in an object of custom data in lieu of the handler 5156 if ( handler.handler ) { 5157 handleObjIn = handler; 5158 handler = handleObjIn.handler; 5159 selector = handleObjIn.selector; 5160 } 5161 5162 // Ensure that invalid selectors throw exceptions at attach time 5163 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 5164 if ( selector ) { 5165 jQuery.find.matchesSelector( documentElement, selector ); 5166 } 5167 5168 // Make sure that the handler has a unique ID, used to find/remove it later 5169 if ( !handler.guid ) { 5170 handler.guid = jQuery.guid++; 5171 } 5172 5173 // Init the element's event structure and main handler, if this is the first 5174 if ( !( events = elemData.events ) ) { 5175 events = elemData.events = {}; 5176 } 5177 if ( !( eventHandle = elemData.handle ) ) { 5178 eventHandle = elemData.handle = function( e ) { 5179 5180 // Discard the second event of a jQuery.event.trigger() and 5181 // when an event is called after a page has unloaded 5182 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 5183 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 5184 }; 5185 } 5186 5187 // Handle multiple events separated by a space 5188 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5189 t = types.length; 5190 while ( t-- ) { 5191 tmp = rtypenamespace.exec( types[ t ] ) || []; 5192 type = origType = tmp[ 1 ]; 5193 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5194 5195 // There *must* be a type, no attaching namespace-only handlers 5196 if ( !type ) { 5197 continue; 5198 } 5199 5200 // If event changes its type, use the special event handlers for the changed type 5201 special = jQuery.event.special[ type ] || {}; 5202 5203 // If selector defined, determine special event api type, otherwise given type 5204 type = ( selector ? special.delegateType : special.bindType ) || type; 5205 5206 // Update special based on newly reset type 5207 special = jQuery.event.special[ type ] || {}; 5208 5209 // handleObj is passed to all event handlers 5210 handleObj = jQuery.extend( { 5211 type: type, 5212 origType: origType, 5213 data: data, 5214 handler: handler, 5215 guid: handler.guid, 5216 selector: selector, 5217 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 5218 namespace: namespaces.join( "." ) 5219 }, handleObjIn ); 5220 5221 // Init the event handler queue if we're the first 5222 if ( !( handlers = events[ type ] ) ) { 5223 handlers = events[ type ] = []; 5224 handlers.delegateCount = 0; 5225 5226 // Only use addEventListener if the special events handler returns false 5227 if ( !special.setup || 5228 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 5229 5230 if ( elem.addEventListener ) { 5231 elem.addEventListener( type, eventHandle ); 5232 } 5233 } 5234 } 5235 5236 if ( special.add ) { 5237 special.add.call( elem, handleObj ); 5238 5239 if ( !handleObj.handler.guid ) { 5240 handleObj.handler.guid = handler.guid; 5241 } 5242 } 5243 5244 // Add to the element's handler list, delegates in front 5245 if ( selector ) { 5246 handlers.splice( handlers.delegateCount++, 0, handleObj ); 5247 } else { 5248 handlers.push( handleObj ); 5249 } 5250 5251 // Keep track of which events have ever been used, for event optimization 5252 jQuery.event.global[ type ] = true; 5253 } 5254 5255 }, 5256 5257 // Detach an event or set of events from an element 5258 remove: function( elem, types, handler, selector, mappedTypes ) { 5259 5260 var j, origCount, tmp, 5261 events, t, handleObj, 5262 special, handlers, type, namespaces, origType, 5263 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 5264 5265 if ( !elemData || !( events = elemData.events ) ) { 5266 return; 5267 } 5268 5269 // Once for each type.namespace in types; type may be omitted 5270 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5271 t = types.length; 5272 while ( t-- ) { 5273 tmp = rtypenamespace.exec( types[ t ] ) || []; 5274 type = origType = tmp[ 1 ]; 5275 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5276 5277 // Unbind all events (on this namespace, if provided) for the element 5278 if ( !type ) { 5279 for ( type in events ) { 5280 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 5281 } 5282 continue; 5283 } 5284 5285 special = jQuery.event.special[ type ] || {}; 5286 type = ( selector ? special.delegateType : special.bindType ) || type; 5287 handlers = events[ type ] || []; 5288 tmp = tmp[ 2 ] && 5289 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 5290 5291 // Remove matching events 5292 origCount = j = handlers.length; 5293 while ( j-- ) { 5294 handleObj = handlers[ j ]; 5295 5296 if ( ( mappedTypes || origType === handleObj.origType ) && 5297 ( !handler || handler.guid === handleObj.guid ) && 5298 ( !tmp || tmp.test( handleObj.namespace ) ) && 5299 ( !selector || selector === handleObj.selector || 5300 selector === "**" && handleObj.selector ) ) { 5301 handlers.splice( j, 1 ); 5302 5303 if ( handleObj.selector ) { 5304 handlers.delegateCount--; 5305 } 5306 if ( special.remove ) { 5307 special.remove.call( elem, handleObj ); 5308 } 5309 } 5310 } 5311 5312 // Remove generic event handler if we removed something and no more handlers exist 5313 // (avoids potential for endless recursion during removal of special event handlers) 5314 if ( origCount && !handlers.length ) { 5315 if ( !special.teardown || 5316 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 5317 5318 jQuery.removeEvent( elem, type, elemData.handle ); 5319 } 5320 5321 delete events[ type ]; 5322 } 5323 } 5324 5325 // Remove data and the expando if it's no longer used 5326 if ( jQuery.isEmptyObject( events ) ) { 5327 dataPriv.remove( elem, "handle events" ); 5328 } 5329 }, 5330 5331 dispatch: function( nativeEvent ) { 5332 5333 // Make a writable jQuery.Event from the native event object 5334 var event = jQuery.event.fix( nativeEvent ); 5335 5336 var i, j, ret, matched, handleObj, handlerQueue, 5337 args = new Array( arguments.length ), 5338 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], 5339 special = jQuery.event.special[ event.type ] || {}; 5340 5341 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5342 args[ 0 ] = event; 5343 5344 for ( i = 1; i < arguments.length; i++ ) { 5345 args[ i ] = arguments[ i ]; 5346 } 5347 5348 event.delegateTarget = this; 5349 5350 // Call the preDispatch hook for the mapped type, and let it bail if desired 5351 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 5352 return; 5353 } 5354 5355 // Determine handlers 5356 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 5357 5358 // Run delegates first; they may want to stop propagation beneath us 5359 i = 0; 5360 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 5361 event.currentTarget = matched.elem; 5362 5363 j = 0; 5364 while ( ( handleObj = matched.handlers[ j++ ] ) && 5365 !event.isImmediatePropagationStopped() ) { 5366 5367 // Triggered event must either 1) have no namespace, or 2) have namespace(s) 5368 // a subset or equal to those in the bound event (both can have no namespace). 5369 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { 5370 5371 event.handleObj = handleObj; 5372 event.data = handleObj.data; 5373 5374 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 5375 handleObj.handler ).apply( matched.elem, args ); 5376 5377 if ( ret !== undefined ) { 5378 if ( ( event.result = ret ) === false ) { 5379 event.preventDefault(); 5380 event.stopPropagation(); 5381 } 5382 } 5383 } 5384 } 5385 } 5386 5387 // Call the postDispatch hook for the mapped type 5388 if ( special.postDispatch ) { 5389 special.postDispatch.call( this, event ); 5390 } 5391 5392 return event.result; 5393 }, 5394 5395 handlers: function( event, handlers ) { 5396 var i, handleObj, sel, matchedHandlers, matchedSelectors, 5397 handlerQueue = [], 5398 delegateCount = handlers.delegateCount, 5399 cur = event.target; 5400 5401 // Find delegate handlers 5402 if ( delegateCount && 5403 5404 // Support: IE <=9 5405 // Black-hole SVG <use> instance trees (trac-13180) 5406 cur.nodeType && 5407 5408 // Support: Firefox <=42 5409 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 5410 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 5411 // Support: IE 11 only 5412 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 5413 !( event.type === "click" && event.button >= 1 ) ) { 5414 5415 for ( ; cur !== this; cur = cur.parentNode || this ) { 5416 5417 // Don't check non-elements (#13208) 5418 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 5419 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 5420 matchedHandlers = []; 5421 matchedSelectors = {}; 5422 for ( i = 0; i < delegateCount; i++ ) { 5423 handleObj = handlers[ i ]; 5424 5425 // Don't conflict with Object.prototype properties (#13203) 5426 sel = handleObj.selector + " "; 5427 5428 if ( matchedSelectors[ sel ] === undefined ) { 5429 matchedSelectors[ sel ] = handleObj.needsContext ? 5430 jQuery( sel, this ).index( cur ) > -1 : 5431 jQuery.find( sel, this, null, [ cur ] ).length; 5432 } 5433 if ( matchedSelectors[ sel ] ) { 5434 matchedHandlers.push( handleObj ); 5435 } 5436 } 5437 if ( matchedHandlers.length ) { 5438 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 5439 } 5440 } 5441 } 5442 } 5443 5444 // Add the remaining (directly-bound) handlers 5445 cur = this; 5446 if ( delegateCount < handlers.length ) { 5447 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 5448 } 5449 5450 return handlerQueue; 5451 }, 5452 5453 addProp: function( name, hook ) { 5454 Object.defineProperty( jQuery.Event.prototype, name, { 5455 enumerable: true, 5456 configurable: true, 5457 5458 get:
vendor: 8,400 bytes, lines 5458-5807
5458jQuery.isFunction( hook ) ? 5459 function() { 5460 if ( this.originalEvent ) { 5461 return hook( this.originalEvent ); 5462 } 5463 } : 5464 function() { 5465 if ( this.originalEvent ) { 5466 return this.originalEvent[ name ]; 5467 } 5468 }, 5469 5470 set: function( value ) { 5471 Object.defineProperty( this, name, { 5472 enumerable: true, 5473 configurable: true, 5474 writable: true, 5475 value: value 5476 } ); 5477 } 5478 } ); 5479 }, 5480 5481 fix: function( originalEvent ) { 5482 return originalEvent[ jQuery.expando ] ? 5483 originalEvent : 5484 new jQuery.Event( originalEvent ); 5485 }, 5486 5487 special: { 5488 load: { 5489 5490 // Prevent triggered image.load events from bubbling to window.load 5491 noBubble: true 5492 }, 5493 focus: { 5494 5495 // Fire native event if possible so blur/focus sequence is correct 5496 trigger: function() { 5497 if ( this !== safeActiveElement() && this.focus ) { 5498 this.focus(); 5499 return false; 5500 } 5501 }, 5502 delegateType: "focusin" 5503 }, 5504 blur: { 5505 trigger: function() { 5506 if ( this === safeActiveElement() && this.blur ) { 5507 this.blur(); 5508 return false; 5509 } 5510 }, 5511 delegateType: "focusout" 5512 }, 5513 click: { 5514 5515 // For checkbox, fire native event so checked state will be right 5516 trigger: function() { 5517 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { 5518 this.click(); 5519 return false; 5520 } 5521 }, 5522 5523 // For cross-browser consistency, don't fire native .click() on links 5524 _default: function( event ) { 5525 return nodeName( event.target, "a" ); 5526 } 5527 }, 5528 5529 beforeunload: { 5530 postDispatch: function( event ) { 5531 5532 // Support: Firefox 20+ 5533 // Firefox doesn't alert if the returnValue field is not set. 5534 if ( event.result !== undefined && event.originalEvent ) { 5535 event.originalEvent.returnValue = event.result; 5536 } 5537 } 5538 } 5539 } 5540}; 5541 5542jQuery.removeEvent = function( elem, type, handle ) { 5543 5544 // This "if" is needed for plain objects 5545 if ( elem.removeEventListener ) { 5546 elem.removeEventListener( type, handle ); 5547 } 5548}; 5549 5550jQuery.Event = function( src, props ) { 5551 5552 // Allow instantiation without the 'new' keyword 5553 if ( !( this instanceof jQuery.Event ) ) { 5554 return new jQuery.Event( src, props ); 5555 } 5556 5557 // Event object 5558 if ( src && src.type ) { 5559 this.originalEvent = src; 5560 this.type = src.type; 5561 5562 // Events bubbling up the document may have been marked as prevented 5563 // by a handler lower down the tree; reflect the correct value. 5564 this.isDefaultPrevented = src.defaultPrevented || 5565 src.defaultPrevented === undefined && 5566 5567 // Support: Android <=2.3 only 5568 src.returnValue === false ? 5569 returnTrue : 5570 returnFalse; 5571 5572 // Create target properties 5573 // Support: Safari <=6 - 7 only 5574 // Target should not be a text node (#504, #13143) 5575 this.target = ( src.target && src.target.nodeType === 3 ) ? 5576 src.target.parentNode : 5577 src.target; 5578 5579 this.currentTarget = src.currentTarget; 5580 this.relatedTarget = src.relatedTarget; 5581 5582 // Event type 5583 } else { 5584 this.type = src; 5585 } 5586 5587 // Put explicitly provided properties onto the event object 5588 if ( props ) { 5589 jQuery.extend( this, props ); 5590 } 5591 5592 // Create a timestamp if incoming event doesn't have one 5593 this.timeStamp = src && src.timeStamp || jQuery.now(); 5594 5595 // Mark it as fixed 5596 this[ jQuery.expando ] = true; 5597}; 5598 5599// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 5600// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 5601jQuery.Event.prototype = { 5602 constructor: jQuery.Event, 5603 isDefaultPrevented: returnFalse, 5604 isPropagationStopped: returnFalse, 5605 isImmediatePropagationStopped: returnFalse, 5606 isSimulated: false, 5607 5608 preventDefault: function() { 5609 var e = this.originalEvent; 5610 5611 this.isDefaultPrevented = returnTrue; 5612 5613 if ( e && !this.isSimulated ) { 5614 e.preventDefault(); 5615 } 5616 }, 5617 stopPropagation: function() { 5618 var e = this.originalEvent; 5619 5620 this.isPropagationStopped = returnTrue; 5621 5622 if ( e && !this.isSimulated ) { 5623 e.stopPropagation(); 5624 } 5625 }, 5626 stopImmediatePropagation: function() { 5627 var e = this.originalEvent; 5628 5629 this.isImmediatePropagationStopped = returnTrue; 5630 5631 if ( e && !this.isSimulated ) { 5632 e.stopImmediatePropagation(); 5633 } 5634 5635 this.stopPropagation(); 5636 } 5637}; 5638 5639// Includes all common event props including KeyEvent and MouseEvent specific props 5640jQuery.each( { 5641 altKey: true, 5642 bubbles: true, 5643 cancelable: true, 5644 changedTouches: true, 5645 ctrlKey: true, 5646 detail: true, 5647 eventPhase: true, 5648 metaKey: true, 5649 pageX: true, 5650 pageY: true, 5651 shiftKey: true, 5652 view: true, 5653 "char": true, 5654 charCode: true, 5655 key: true, 5656 keyCode: true, 5657 button: true, 5658 buttons: true, 5659 clientX: true, 5660 clientY: true, 5661 offsetX: true, 5662 offsetY: true, 5663 pointerId: true, 5664 pointerType: true, 5665 screenX: true, 5666 screenY: true, 5667 targetTouches: true, 5668 toElement: true, 5669 touches: true, 5670 5671 which: function( event ) { 5672 var button = event.button; 5673 5674 // Add which for key events 5675 if ( event.which == null && rkeyEvent.test( event.type ) ) { 5676 return event.charCode != null ? event.charCode : event.keyCode; 5677 } 5678 5679 // Add which for click: 1 === left; 2 === middle; 3 === right 5680 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { 5681 if ( button & 1 ) { 5682 return 1; 5683 } 5684 5685 if ( button & 2 ) { 5686 return 3; 5687 } 5688 5689 if ( button & 4 ) { 5690 return 2; 5691 } 5692 5693 return 0; 5694 } 5695 5696 return event.which; 5697 } 5698}, jQuery.event.addProp ); 5699 5700// Create mouseenter/leave events using mouseover/out and event-time checks 5701// so that event delegation works in jQuery. 5702// Do the same for pointerenter/pointerleave and pointerover/pointerout 5703// 5704// Support: Safari 7 only 5705// Safari sends mouseenter too often; see: 5706// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 5707// for the description of the bug (it existed in older Chrome versions as well). 5708jQuery.each( { 5709 mouseenter: "mouseover", 5710 mouseleave: "mouseout", 5711 pointerenter: "pointerover", 5712 pointerleave: "pointerout" 5713}, function( orig, fix ) { 5714 jQuery.event.special[ orig ] = { 5715 delegateType: fix, 5716 bindType: fix, 5717 5718 handle: function( event ) { 5719 var ret, 5720 target = this, 5721 related = event.relatedTarget, 5722 handleObj = event.handleObj; 5723 5724 // For mouseenter/leave call the handler if related is outside the target. 5725 // NB: No relatedTarget if the mouse left/entered the browser window 5726 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 5727 event.type = handleObj.origType; 5728 ret = handleObj.handler.apply( this, arguments ); 5729 event.type = fix; 5730 } 5731 return ret; 5732 } 5733 }; 5734} ); 5735 5736jQuery.fn.extend( { 5737 5738 on: function( types, selector, data, fn ) { 5739 return on( this, types, selector, data, fn ); 5740 }, 5741 one: function( types, selector, data, fn ) { 5742 return on( this, types, selector, data, fn, 1 ); 5743 }, 5744 off: function( types, selector, fn ) { 5745 var handleObj, type; 5746 if ( types && types.preventDefault && types.handleObj ) { 5747 5748 // ( event ) dispatched jQuery.Event 5749 handleObj = types.handleObj; 5750 jQuery( types.delegateTarget ).off( 5751 handleObj.namespace ? 5752 handleObj.origType + "." + handleObj.namespace : 5753 handleObj.origType, 5754 handleObj.selector, 5755 handleObj.handler 5756 ); 5757 return this; 5758 } 5759 if ( typeof types === "object" ) { 5760 5761 // ( types-object [, selector] ) 5762 for ( type in types ) { 5763 this.off( type, selector, types[ type ] ); 5764 } 5765 return this; 5766 } 5767 if ( selector === false || typeof selector === "function" ) { 5768 5769 // ( types [, fn] ) 5770 fn = selector; 5771 selector = undefined; 5772 } 5773 if ( fn === false ) { 5774 fn = returnFalse; 5775 } 5776 return this.each( function() { 5777 jQuery.event.remove( this, types, fn, selector ); 5778 } ); 5779 } 5780} ); 5781 5782 5783var 5784 5785 /* eslint-disable max-len */ 5786 5787 // See https://github.com/eslint/eslint/issues/3229 5788 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, 5789 5790 /* eslint-enable */ 5791 5792 // Support: IE <=10 - 11, Edge 12 - 13 5793 // In IE/Edge using regex groups here causes severe slowdowns. 5794 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 5795 rnoInnerhtml = /<script|<style|<link/i, 5796 5797 // checked="checked" or checked 5798 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5799 rscriptTypeMasked = /^true\/(.*)/, 5800 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; 5801 5802// Prefer a tbody over its parent table for containing new rows 5803function manipulationTarget( elem, content ) { 5804 if ( nodeName( elem, "table" ) && 5805 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 5806 5807 return jQuery( ">tbody", elem
vendor: 6,531 bytes, lines 5807-6055
5807 )[ 0 ] || elem; 5808 } 5809 5810 return elem; 5811} 5812 5813// Replace/restore the type attribute of script elements for safe DOM manipulation 5814function disableScript( elem ) { 5815 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 5816 return elem; 5817} 5818function restoreScript( elem ) { 5819 var match = rscriptTypeMasked.exec( elem.type ); 5820 5821 if ( match ) { 5822 elem.type = match[ 1 ]; 5823 } else { 5824 elem.removeAttribute( "type" ); 5825 } 5826 5827 return elem; 5828} 5829 5830function cloneCopyEvent( src, dest ) { 5831 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; 5832 5833 if ( dest.nodeType !== 1 ) { 5834 return; 5835 } 5836 5837 // 1. Copy private data: events, handlers, etc. 5838 if ( dataPriv.hasData( src ) ) { 5839 pdataOld = dataPriv.access( src ); 5840 pdataCur = dataPriv.set( dest, pdataOld ); 5841 events = pdataOld.events; 5842 5843 if ( events ) { 5844 delete pdataCur.handle; 5845 pdataCur.events = {}; 5846 5847 for ( type in events ) { 5848 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 5849 jQuery.event.add( dest, type, events[ type ][ i ] ); 5850 } 5851 } 5852 } 5853 } 5854 5855 // 2. Copy user data 5856 if ( dataUser.hasData( src ) ) { 5857 udataOld = dataUser.access( src ); 5858 udataCur = jQuery.extend( {}, udataOld ); 5859 5860 dataUser.set( dest, udataCur ); 5861 } 5862} 5863 5864// Fix IE bugs, see support tests 5865function fixInput( src, dest ) { 5866 var nodeName = dest.nodeName.toLowerCase(); 5867 5868 // Fails to persist the checked state of a cloned checkbox or radio button. 5869 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 5870 dest.checked = src.checked; 5871 5872 // Fails to return the selected option to the default selected state when cloning options 5873 } else if ( nodeName === "input" || nodeName === "textarea" ) { 5874 dest.defaultValue = src.defaultValue; 5875 } 5876} 5877 5878function domManip( collection, args, callback, ignored ) { 5879 5880 // Flatten any nested arrays 5881 args = concat.apply( [], args ); 5882 5883 var fragment, first, scripts, hasScripts, node, doc, 5884 i = 0, 5885 l = collection.length, 5886 iNoClone = l - 1, 5887 value = args[ 0 ], 5888 isFunction = jQuery.isFunction( value ); 5889 5890 // We can't cloneNode fragments that contain checked, in WebKit 5891 if ( isFunction || 5892 ( l > 1 && typeof value === "string" && 5893 !support.checkClone && rchecked.test( value ) ) ) { 5894 return collection.each( function( index ) { 5895 var self = collection.eq( index ); 5896 if ( isFunction ) { 5897 args[ 0 ] = value.call( this, index, self.html() ); 5898 } 5899 domManip( self, args, callback, ignored ); 5900 } ); 5901 } 5902 5903 if ( l ) { 5904 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 5905 first = fragment.firstChild; 5906 5907 if ( fragment.childNodes.length === 1 ) { 5908 fragment = first; 5909 } 5910 5911 // Require either new content or an interest in ignored elements to invoke the callback 5912 if ( first || ignored ) { 5913 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 5914 hasScripts = scripts.length; 5915 5916 // Use the original fragment for the last item 5917 // instead of the first because it can end up 5918 // being emptied incorrectly in certain situations (#8070). 5919 for ( ; i < l; i++ ) { 5920 node = fragment; 5921 5922 if ( i !== iNoClone ) { 5923 node = jQuery.clone( node, true, true ); 5924 5925 // Keep references to cloned scripts for later restoration 5926 if ( hasScripts ) { 5927 5928 // Support: Android <=4.0 only, PhantomJS 1 only 5929 // push.apply(_, arraylike) throws on ancient WebKit 5930 jQuery.merge( scripts, getAll( node, "script" ) ); 5931 } 5932 } 5933 5934 callback.call( collection[ i ], node, i ); 5935 } 5936 5937 if ( hasScripts ) { 5938 doc = scripts[ scripts.length - 1 ].ownerDocument; 5939 5940 // Reenable scripts 5941 jQuery.map( scripts, restoreScript ); 5942 5943 // Evaluate executable scripts on first document insertion 5944 for ( i = 0; i < hasScripts; i++ ) { 5945 node = scripts[ i ]; 5946 if ( rscriptType.test( node.type || "" ) && 5947 !dataPriv.access( node, "globalEval" ) && 5948 jQuery.contains( doc, node ) ) { 5949 5950 if ( node.src ) { 5951 5952 // Optional AJAX dependency, but won't run scripts if not present 5953 if ( jQuery._evalUrl ) { 5954 jQuery._evalUrl( node.src ); 5955 } 5956 } else { 5957 DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); 5958 } 5959 } 5960 } 5961 } 5962 } 5963 } 5964 5965 return collection; 5966} 5967 5968function remove( elem, selector, keepData ) { 5969 var node, 5970 nodes = selector ? jQuery.filter( selector, elem ) : elem, 5971 i = 0; 5972 5973 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 5974 if ( !keepData && node.nodeType === 1 ) { 5975 jQuery.cleanData( getAll( node ) ); 5976 } 5977 5978 if ( node.parentNode ) { 5979 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { 5980 setGlobalEval( getAll( node, "script" ) ); 5981 } 5982 node.parentNode.removeChild( node ); 5983 } 5984 } 5985 5986 return elem; 5987} 5988 5989jQuery.extend( { 5990 htmlPrefilter: function( html ) { 5991 return html.replace( rxhtmlTag, "<$1></$2>" ); 5992 }, 5993 5994 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 5995 var i, l, srcElements, destElements, 5996 clone = elem.cloneNode( true ), 5997 inPage = jQuery.contains( elem.ownerDocument, elem ); 5998 5999 // Fix IE cloning issues 6000 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 6001 !jQuery.isXMLDoc( elem ) ) { 6002 6003 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 6004 destElements = getAll( clone ); 6005 srcElements = getAll( elem ); 6006 6007 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6008 fixInput( srcElements[ i ], destElements[ i ] ); 6009 } 6010 } 6011 6012 // Copy the events from the original to the clone 6013 if ( dataAndEvents ) { 6014 if ( deepDataAndEvents ) { 6015 srcElements = srcElements || getAll( elem ); 6016 destElements = destElements || getAll( clone ); 6017 6018 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6019 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 6020 } 6021 } else { 6022 cloneCopyEvent( elem, clone ); 6023 } 6024 } 6025 6026 // Preserve script evaluation history 6027 destElements = getAll( clone, "script" ); 6028 if ( destElements.length > 0 ) { 6029 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 6030 } 6031 6032 // Return the cloned set 6033 return clone; 6034 }, 6035 6036 cleanData: function( elems ) { 6037 var data, elem, type, 6038 special = jQuery.event.special, 6039 i = 0; 6040 6041 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 6042 if ( acceptData( elem ) ) { 6043 if ( ( data = elem[ dataPriv.expando ] ) ) { 6044 if ( data.events ) { 6045 for ( type in data.events ) { 6046 if ( special[ type ] ) { 6047 jQuery.event.remove( elem, type ); 6048 6049 // This is a shortcut to avoid jQuery.event.remove's overhead 6050 } else { 6051 jQuery.removeEvent( elem, type, data.handle ); 6052 } 6053 } 6054 } 6055
vendor: 1,119 bytes, lines 6056-6100
6056 // Support: Chrome <=35 - 45+ 6057 // Assign undefined instead of using delete, see Data#remove 6058 elem[ dataPriv.expando ] = undefined; 6059 } 6060 if ( elem[ dataUser.expando ] ) { 6061 6062 // Support: Chrome <=35 - 45+ 6063 // Assign undefined instead of using delete, see Data#remove 6064 elem[ dataUser.expando ] = undefined; 6065 } 6066 } 6067 } 6068 } 6069} ); 6070 6071jQuery.fn.extend( { 6072 detach: function( selector ) { 6073 return remove( this, selector, true ); 6074 }, 6075 6076 remove: function( selector ) { 6077 return remove( this, selector ); 6078 }, 6079 6080 text: function( value ) { 6081 return access( this, function( value ) { 6082 return value === undefined ? 6083 jQuery.text( this ) : 6084 this.empty().each( function() { 6085 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6086 this.textContent = value; 6087 } 6088 } ); 6089 }, null, value, arguments.length ); 6090 }, 6091 6092 append: function() { 6093 return domManip( this, arguments, function( elem ) { 6094 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6095 var target = manipulationTarget( this, elem ); 6096 target.appendChild( elem ); 6097 } 6098 } ); 6099 }, 6100
vendor: 6,076 bytes, lines 6101-6336
6101 prepend: function() { 6102 return domManip( this, arguments, function( elem ) { 6103 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6104 var target = manipulationTarget( this, elem ); 6105 target.insertBefore( elem, target.firstChild ); 6106 } 6107 } ); 6108 }, 6109 6110 before: function() { 6111 return domManip( this, arguments, function( elem ) { 6112 if ( this.parentNode ) { 6113 this.parentNode.insertBefore( elem, this ); 6114 } 6115 } ); 6116 }, 6117 6118 after: function() { 6119 return domManip( this, arguments, function( elem ) { 6120 if ( this.parentNode ) { 6121 this.parentNode.insertBefore( elem, this.nextSibling ); 6122 } 6123 } ); 6124 }, 6125 6126 empty: function() { 6127 var elem, 6128 i = 0; 6129 6130 for ( ; ( elem = this[ i ] ) != null; i++ ) { 6131 if ( elem.nodeType === 1 ) { 6132 6133 // Prevent memory leaks 6134 jQuery.cleanData( getAll( elem, false ) ); 6135 6136 // Remove any remaining nodes 6137 elem.textContent = ""; 6138 } 6139 } 6140 6141 return this; 6142 }, 6143 6144 clone: function( dataAndEvents, deepDataAndEvents ) { 6145 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 6146 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 6147 6148 return this.map( function() { 6149 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 6150 } ); 6151 }, 6152 6153 html: function( value ) { 6154 return access( this, function( value ) { 6155 var elem = this[ 0 ] || {}, 6156 i = 0, 6157 l = this.length; 6158 6159 if ( value === undefined && elem.nodeType === 1 ) { 6160 return elem.innerHTML; 6161 } 6162 6163 // See if we can take a shortcut and just use innerHTML 6164 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 6165 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 6166 6167 value = jQuery.htmlPrefilter( value ); 6168 6169 try { 6170 for ( ; i < l; i++ ) { 6171 elem = this[ i ] || {}; 6172 6173 // Remove element nodes and prevent memory leaks 6174 if ( elem.nodeType === 1 ) { 6175 jQuery.cleanData( getAll( elem, false ) ); 6176 elem.innerHTML = value; 6177 } 6178 } 6179 6180 elem = 0; 6181 6182 // If using innerHTML throws an exception, use the fallback method 6183 } catch ( e ) {} 6184 } 6185 6186 if ( elem ) { 6187 this.empty().append( value ); 6188 } 6189 }, null, value, arguments.length ); 6190 }, 6191 6192 replaceWith: function() { 6193 var ignored = []; 6194 6195 // Make the changes, replacing each non-ignored context element with the new content 6196 return domManip( this, arguments, function( elem ) { 6197 var parent = this.parentNode; 6198 6199 if ( jQuery.inArray( this, ignored ) < 0 ) { 6200 jQuery.cleanData( getAll( this ) ); 6201 if ( parent ) { 6202 parent.replaceChild( elem, this ); 6203 } 6204 } 6205 6206 // Force callback invocation 6207 }, ignored ); 6208 } 6209} ); 6210 6211jQuery.each( { 6212 appendTo: "append", 6213 prependTo: "prepend", 6214 insertBefore: "before", 6215 insertAfter: "after", 6216 replaceAll: "replaceWith" 6217}, function( name, original ) { 6218 jQuery.fn[ name ] = function( selector ) { 6219 var elems, 6220 ret = [], 6221 insert = jQuery( selector ), 6222 last = insert.length - 1, 6223 i = 0; 6224 6225 for ( ; i <= last; i++ ) { 6226 elems = i === last ? this : this.clone( true ); 6227 jQuery( insert[ i ] )[ original ]( elems ); 6228 6229 // Support: Android <=4.0 only, PhantomJS 1 only 6230 // .get() because push.apply(_, arraylike) throws on ancient WebKit 6231 push.apply( ret, elems.get() ); 6232 } 6233 6234 return this.pushStack( ret ); 6235 }; 6236} ); 6237var rmargin = ( /^margin/ ); 6238 6239var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 6240 6241var getStyles = function( elem ) { 6242 6243 // Support: IE <=11 only, Firefox <=30 (#15098, #14150) 6244 // IE throws on elements created in popups 6245 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6246 var view = elem.ownerDocument.defaultView; 6247 6248 if ( !view || !view.opener ) { 6249 view = window; 6250 } 6251 6252 return view.getComputedStyle( elem ); 6253 }; 6254 6255 6256 6257( function() { 6258 6259 // Executing both pixelPosition & boxSizingReliable tests require only one layout 6260 // so they're executed at the same time to save the second computation. 6261 function computeStyleTests() { 6262 6263 // This is a singleton, we need to execute it only once 6264 if ( !div ) { 6265 return; 6266 } 6267 6268 div.style.cssText = 6269 "box-sizing:border-box;" + 6270 "position:relative;display:block;" + 6271 "margin:auto;border:1px;padding:1px;" + 6272 "top:1%;width:50%"; 6273 div.innerHTML = ""; 6274 documentElement.appendChild( container ); 6275 6276 var divStyle = window.getComputedStyle( div ); 6277 pixelPositionVal = divStyle.top !== "1%"; 6278 6279 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 6280 reliableMarginLeftVal = divStyle.marginLeft === "2px"; 6281 boxSizingReliableVal = divStyle.width === "4px"; 6282 6283 // Support: Android 4.0 - 4.3 only 6284 // Some styles come back with percentage values, even though they shouldn't 6285 div.style.marginRight = "50%"; 6286 pixelMarginRightVal = divStyle.marginRight === "4px"; 6287 6288 documentElement.removeChild( container ); 6289 6290 // Nullify the div so it wouldn't be stored in the memory and 6291 // it will also be a sign that checks already performed 6292 div = null; 6293 } 6294 6295 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, 6296 container = document.createElement( "div" ), 6297 div = document.createElement( "div" ); 6298 6299 // Finish early in limited (non-browser) environments 6300 if ( !div.style ) { 6301 return; 6302 } 6303 6304 // Support: IE <=9 - 11 only 6305 // Style of cloned element affects source element cloned (#8908) 6306 div.style.backgroundClip = "content-box"; 6307 div.cloneNode( true ).style.backgroundClip = ""; 6308 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 6309 6310 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + 6311 "padding:0;margin-top:1px;position:absolute"; 6312 container.appendChild( div ); 6313 6314 jQuery.extend( support, { 6315 pixelPosition: function() { 6316 computeStyleTests(); 6317 return pixelPositionVal; 6318 }, 6319 boxSizingReliable: function() { 6320 computeStyleTests(); 6321 return boxSizingReliableVal; 6322 }, 6323 pixelMarginRight: function() { 6324 computeStyleTests(); 6325 return pixelMarginRightVal; 6326 }, 6327 reliableMarginLeft: function() { 6328 computeStyleTests(); 6329 return reliableMarginLeftVal; 6330 } 6331 } ); 6332} )(); 6333 6334 6335function curCSS( elem, name, computed ) { 6336 var width, minWidth, maxWidth, ret,
vendor: 8,366 bytes, lines 6337-6642
6337 6338 // Support: Firefox 51+ 6339 // Retrieving style before computed somehow 6340 // fixes an issue with getting wrong values 6341 // on detached elements 6342 style = elem.style; 6343 6344 computed = computed || getStyles( elem ); 6345 6346 // getPropertyValue is needed for: 6347 // .css('filter') (IE 9 only, #12537) 6348 // .css('--customProperty) (#3144) 6349 if ( computed ) { 6350 ret = computed.getPropertyValue( name ) || computed[ name ]; 6351 6352 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { 6353 ret = jQuery.style( elem, name ); 6354 } 6355 6356 // A tribute to the "awesome hack by Dean Edwards" 6357 // Android Browser returns percentage for some values, 6358 // but width seems to be reliably pixels. 6359 // This is against the CSSOM draft spec: 6360 // https://drafts.csswg.org/cssom/#resolved-values 6361 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { 6362 6363 // Remember the original values 6364 width = style.width; 6365 minWidth = style.minWidth; 6366 maxWidth = style.maxWidth; 6367 6368 // Put in the new values to get a computed value out 6369 style.minWidth = style.maxWidth = style.width = ret; 6370 ret = computed.width; 6371 6372 // Revert the changed values 6373 style.width = width; 6374 style.minWidth = minWidth; 6375 style.maxWidth = maxWidth; 6376 } 6377 } 6378 6379 return ret !== undefined ? 6380 6381 // Support: IE <=9 - 11 only 6382 // IE returns zIndex value as an integer. 6383 ret + "" : 6384 ret; 6385} 6386 6387 6388function addGetHookIf( conditionFn, hookFn ) { 6389 6390 // Define the hook, we'll check on the first run if it's really needed. 6391 return { 6392 get: function() { 6393 if ( conditionFn() ) { 6394 6395 // Hook not needed (or it's not possible to use it due 6396 // to missing dependency), remove it. 6397 delete this.get; 6398 return; 6399 } 6400 6401 // Hook needed; redefine it so that the support test is not executed again. 6402 return ( this.get = hookFn ).apply( this, arguments ); 6403 } 6404 }; 6405} 6406 6407 6408var 6409 6410 // Swappable if display is none or starts with table 6411 // except "table", "table-cell", or "table-caption" 6412 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 6413 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 6414 rcustomProp = /^--/, 6415 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 6416 cssNormalTransform = { 6417 letterSpacing: "0", 6418 fontWeight: "400" 6419 }, 6420 6421 cssPrefixes = [ "Webkit", "Moz", "ms" ], 6422 emptyStyle = document.createElement( "div" ).style; 6423 6424// Return a css property mapped to a potentially vendor prefixed property 6425function vendorPropName( name ) { 6426 6427 // Shortcut for names that are not vendor prefixed 6428 if ( name in emptyStyle ) { 6429 return name; 6430 } 6431 6432 // Check for vendor prefixed names 6433 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 6434 i = cssPrefixes.length; 6435 6436 while ( i-- ) { 6437 name = cssPrefixes[ i ] + capName; 6438 if ( name in emptyStyle ) { 6439 return name; 6440 } 6441 } 6442} 6443 6444// Return a property mapped along what jQuery.cssProps suggests or to 6445// a vendor prefixed property. 6446function finalPropName( name ) { 6447 var ret = jQuery.cssProps[ name ]; 6448 if ( !ret ) { 6449 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; 6450 } 6451 return ret; 6452} 6453 6454function setPositiveNumber( elem, value, subtract ) { 6455 6456 // Any relative (+/-) values have already been 6457 // normalized at this point 6458 var matches = rcssNum.exec( value ); 6459 return matches ? 6460 6461 // Guard against undefined "subtract", e.g., when used as in cssHooks 6462 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 6463 value; 6464} 6465 6466function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { 6467 var i, 6468 val = 0; 6469 6470 // If we already have the right measurement, avoid augmentation 6471 if ( extra === ( isBorderBox ? "border" : "content" ) ) { 6472 i = 4; 6473 6474 // Otherwise initialize for horizontal or vertical properties 6475 } else { 6476 i = name === "width" ? 1 : 0; 6477 } 6478 6479 for ( ; i < 4; i += 2 ) { 6480 6481 // Both box models exclude margin, so add it if we want it 6482 if ( extra === "margin" ) { 6483 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); 6484 } 6485 6486 if ( isBorderBox ) { 6487 6488 // border-box includes padding, so remove it if we want content 6489 if ( extra === "content" ) { 6490 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6491 } 6492 6493 // At this point, extra isn't border nor margin, so remove border 6494 if ( extra !== "margin" ) { 6495 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6496 } 6497 } else { 6498 6499 // At this point, extra isn't content, so add padding 6500 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6501 6502 // At this point, extra isn't content nor padding, so add border 6503 if ( extra !== "padding" ) { 6504 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6505 } 6506 } 6507 } 6508 6509 return val; 6510} 6511 6512function getWidthOrHeight( elem, name, extra ) { 6513 6514 // Start with computed style 6515 var valueIsBorderBox, 6516 styles = getStyles( elem ), 6517 val = curCSS( elem, name, styles ), 6518 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 6519 6520 // Computed unit is not pixels. Stop here and return. 6521 if ( rnumnonpx.test( val ) ) { 6522 return val; 6523 } 6524 6525 // Check for style in case a browser which returns unreliable values 6526 // for getComputedStyle silently falls back to the reliable elem.style 6527 valueIsBorderBox = isBorderBox && 6528 ( support.boxSizingReliable() || val === elem.style[ name ] ); 6529 6530 // Fall back to offsetWidth/Height when value is "auto" 6531 // This happens for inline elements with no explicit setting (gh-3571) 6532 if ( val === "auto" ) { 6533 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; 6534 } 6535 6536 // Normalize "", auto, and prepare for extra 6537 val = parseFloat( val ) || 0; 6538 6539 // Use the active box-sizing model to add/subtract irrelevant styles 6540 return ( val + 6541 augmentWidthOrHeight( 6542 elem, 6543 name, 6544 extra || ( isBorderBox ? "border" : "content" ), 6545 valueIsBorderBox, 6546 styles 6547 ) 6548 ) + "px"; 6549} 6550 6551jQuery.extend( { 6552 6553 // Add in style property hooks for overriding the default 6554 // behavior of getting and setting a style property 6555 cssHooks: { 6556 opacity: { 6557 get: function( elem, computed ) { 6558 if ( computed ) { 6559 6560 // We should always get a number back from opacity 6561 var ret = curCSS( elem, "opacity" ); 6562 return ret === "" ? "1" : ret; 6563 } 6564 } 6565 } 6566 }, 6567 6568 // Don't automatically add "px" to these possibly-unitless properties 6569 cssNumber: { 6570 "animationIterationCount": true, 6571 "columnCount": true, 6572 "fillOpacity": true, 6573 "flexGrow": true, 6574 "flexShrink": true, 6575 "fontWeight": true, 6576 "lineHeight": true, 6577 "opacity": true, 6578 "order": true, 6579 "orphans": true, 6580 "widows": true, 6581 "zIndex": true, 6582 "zoom": true 6583 }, 6584 6585 // Add in properties whose names you wish to fix before 6586 // setting or getting the value 6587 cssProps: { 6588 "float": "cssFloat" 6589 }, 6590 6591 // Get and set the style property on a DOM Node 6592 style: function( elem, name, value, extra ) { 6593 6594 // Don't set styles on text and comment nodes 6595 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 6596 return; 6597 } 6598 6599 // Make sure that we're working with the right name 6600 var ret, type, hooks, 6601 origName = jQuery.camelCase( name ), 6602 isCustomProp = rcustomProp.test( name ), 6603 style = elem.style; 6604 6605 // Make sure that we're working with the right name. We don't 6606 // want to query the value if it is a CSS custom property 6607 // since they are user-defined. 6608 if ( !isCustomProp ) { 6609 name = finalPropName( origName ); 6610 } 6611 6612 // Gets hook for the prefixed version, then unprefixed version 6613 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6614 6615 // Check if we're setting a value 6616 if ( value !== undefined ) { 6617 type = typeof value; 6618 6619 // Convert "+=" or "-=" to relative numbers (#7345) 6620 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 6621 value = adjustCSS( elem, name, ret ); 6622 6623 // Fixes bug #9237 6624 type = "number"; 6625 } 6626 6627 // Make sure that null and NaN values aren't set (#7116) 6628 if ( value == null || value !== value ) { 6629 return; 6630 } 6631 6632 // If a number was passed in, add the unit (except for certain CSS properties) 6633 if ( type === "number" ) { 6634 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 6635 } 6636 6637 // background-* props affect original clone's values 6638 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 6639 style[ name ] = "inherit"; 6640 } 6641 6642 // If a hook was provided, use that value, otherwise just set the specified value
vendor: 4,779 bytes, lines 6643-6825
6643 if ( !hooks || !( "set" in hooks ) || 6644 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 6645 6646 if ( isCustomProp ) { 6647 style.setProperty( name, value ); 6648 } else { 6649 style[ name ] = value; 6650 } 6651 } 6652 6653 } else { 6654 6655 // If a hook was provided get the non-computed value from there 6656 if ( hooks && "get" in hooks && 6657 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 6658 6659 return ret; 6660 } 6661 6662 // Otherwise just get the value from the style object 6663 return style[ name ]; 6664 } 6665 }, 6666 6667 css: function( elem, name, extra, styles ) { 6668 var val, num, hooks, 6669 origName = jQuery.camelCase( name ), 6670 isCustomProp = rcustomProp.test( name ); 6671 6672 // Make sure that we're working with the right name. We don't 6673 // want to modify the value if it is a CSS custom property 6674 // since they are user-defined. 6675 if ( !isCustomProp ) { 6676 name = finalPropName( origName ); 6677 } 6678 6679 // Try prefixed name followed by the unprefixed name 6680 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6681 6682 // If a hook was provided get the computed value from there 6683 if ( hooks && "get" in hooks ) { 6684 val = hooks.get( elem, true, extra ); 6685 } 6686 6687 // Otherwise, if a way to get the computed value exists, use that 6688 if ( val === undefined ) { 6689 val = curCSS( elem, name, styles ); 6690 } 6691 6692 // Convert "normal" to computed value 6693 if ( val === "normal" && name in cssNormalTransform ) { 6694 val = cssNormalTransform[ name ]; 6695 } 6696 6697 // Make numeric if forced or a qualifier was provided and val looks numeric 6698 if ( extra === "" || extra ) { 6699 num = parseFloat( val ); 6700 return extra === true || isFinite( num ) ? num || 0 : val; 6701 } 6702 6703 return val; 6704 } 6705} ); 6706 6707jQuery.each( [ "height", "width" ], function( i, name ) { 6708 jQuery.cssHooks[ name ] = { 6709 get: function( elem, computed, extra ) { 6710 if ( computed ) { 6711 6712 // Certain elements can have dimension info if we invisibly show them 6713 // but it must have a current display style that would benefit 6714 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 6715 6716 // Support: Safari 8+ 6717 // Table columns in Safari have non-zero offsetWidth & zero 6718 // getBoundingClientRect().width unless display is changed. 6719 // Support: IE <=11 only 6720 // Running getBoundingClientRect on a disconnected node 6721 // in IE throws an error. 6722 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 6723 swap( elem, cssShow, function() { 6724 return getWidthOrHeight( elem, name, extra ); 6725 } ) : 6726 getWidthOrHeight( elem, name, extra ); 6727 } 6728 }, 6729 6730 set: function( elem, value, extra ) { 6731 var matches, 6732 styles = extra && getStyles( elem ), 6733 subtract = extra && augmentWidthOrHeight( 6734 elem, 6735 name, 6736 extra, 6737 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 6738 styles 6739 ); 6740 6741 // Convert to pixels if value adjustment is needed 6742 if ( subtract && ( matches = rcssNum.exec( value ) ) && 6743 ( matches[ 3 ] || "px" ) !== "px" ) { 6744 6745 elem.style[ name ] = value; 6746 value = jQuery.css( elem, name ); 6747 } 6748 6749 return setPositiveNumber( elem, value, subtract ); 6750 } 6751 }; 6752} ); 6753 6754jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 6755 function( elem, computed ) { 6756 if ( computed ) { 6757 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 6758 elem.getBoundingClientRect().left - 6759 swap( elem, { marginLeft: 0 }, function() { 6760 return elem.getBoundingClientRect().left; 6761 } ) 6762 ) + "px"; 6763 } 6764 } 6765); 6766 6767// These hooks are used by animate to expand properties 6768jQuery.each( { 6769 margin: "", 6770 padding: "", 6771 border: "Width" 6772}, function( prefix, suffix ) { 6773 jQuery.cssHooks[ prefix + suffix ] = { 6774 expand: function( value ) { 6775 var i = 0, 6776 expanded = {}, 6777 6778 // Assumes a single number if not a string 6779 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 6780 6781 for ( ; i < 4; i++ ) { 6782 expanded[ prefix + cssExpand[ i ] + suffix ] = 6783 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 6784 } 6785 6786 return expanded; 6787 } 6788 }; 6789 6790 if ( !rmargin.test( prefix ) ) { 6791 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 6792 } 6793} ); 6794 6795jQuery.fn.extend( { 6796 css: function( name, value ) { 6797 return access( this, function( elem, name, value ) { 6798 var styles, len, 6799 map = {}, 6800 i = 0; 6801 6802 if ( Array.isArray( name ) ) { 6803 styles = getStyles( elem ); 6804 len = name.length; 6805 6806 for ( ; i < len; i++ ) { 6807 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 6808 } 6809 6810 return map; 6811 } 6812 6813 return value !== undefined ? 6814 jQuery.style( elem, name, value ) : 6815 jQuery.css( elem, name ); 6816 }, name, value, arguments.length > 1 ); 6817 } 6818} ); 6819 6820 6821function Tween( elem, options, prop, end, easing ) { 6822 return new Tween.prototype.init( elem, options, prop, end, easing ); 6823} 6824jQuery.Tween = Tween; 6825
vendor: 6,216 bytes, lines 6826-7064
6826Tween.prototype = { 6827 constructor: Tween, 6828 init: function( elem, options, prop, end, easing, unit ) { 6829 this.elem = elem; 6830 this.prop = prop; 6831 this.easing = easing || jQuery.easing._default; 6832 this.options = options; 6833 this.start = this.now = this.cur(); 6834 this.end = end; 6835 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 6836 }, 6837 cur: function() { 6838 var hooks = Tween.propHooks[ this.prop ]; 6839 6840 return hooks && hooks.get ? 6841 hooks.get( this ) : 6842 Tween.propHooks._default.get( this ); 6843 }, 6844 run: function( percent ) { 6845 var eased, 6846 hooks = Tween.propHooks[ this.prop ]; 6847 6848 if ( this.options.duration ) { 6849 this.pos = eased = jQuery.easing[ this.easing ]( 6850 percent, this.options.duration * percent, 0, 1, this.options.duration 6851 ); 6852 } else { 6853 this.pos = eased = percent; 6854 } 6855 this.now = ( this.end - this.start ) * eased + this.start; 6856 6857 if ( this.options.step ) { 6858 this.options.step.call( this.elem, this.now, this ); 6859 } 6860 6861 if ( hooks && hooks.set ) { 6862 hooks.set( this ); 6863 } else { 6864 Tween.propHooks._default.set( this ); 6865 } 6866 return this; 6867 } 6868}; 6869 6870Tween.prototype.init.prototype = Tween.prototype; 6871 6872Tween.propHooks = { 6873 _default: { 6874 get: function( tween ) { 6875 var result; 6876 6877 // Use a property on the element directly when it is not a DOM element, 6878 // or when there is no matching style property that exists. 6879 if ( tween.elem.nodeType !== 1 || 6880 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 6881 return tween.elem[ tween.prop ]; 6882 } 6883 6884 // Passing an empty string as a 3rd parameter to .css will automatically 6885 // attempt a parseFloat and fallback to a string if the parse fails. 6886 // Simple values such as "10px" are parsed to Float; 6887 // complex values such as "rotate(1rad)" are returned as-is. 6888 result = jQuery.css( tween.elem, tween.prop, "" ); 6889 6890 // Empty strings, null, undefined and "auto" are converted to 0. 6891 return !result || result === "auto" ? 0 : result; 6892 }, 6893 set: function( tween ) { 6894 6895 // Use step hook for back compat. 6896 // Use cssHook if its there. 6897 // Use .style if available and use plain properties where available. 6898 if ( jQuery.fx.step[ tween.prop ] ) { 6899 jQuery.fx.step[ tween.prop ]( tween ); 6900 } else if ( tween.elem.nodeType === 1 && 6901 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || 6902 jQuery.cssHooks[ tween.prop ] ) ) { 6903 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 6904 } else { 6905 tween.elem[ tween.prop ] = tween.now; 6906 } 6907 } 6908 } 6909}; 6910 6911// Support: IE <=9 only 6912// Panic based approach to setting things on disconnected nodes 6913Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 6914 set: function( tween ) { 6915 if ( tween.elem.nodeType && tween.elem.parentNode ) { 6916 tween.elem[ tween.prop ] = tween.now; 6917 } 6918 } 6919}; 6920 6921jQuery.easing = { 6922 linear: function( p ) { 6923 return p; 6924 }, 6925 swing: function( p ) { 6926 return 0.5 - Math.cos( p * Math.PI ) / 2; 6927 }, 6928 _default: "swing" 6929}; 6930 6931jQuery.fx = Tween.prototype.init; 6932 6933// Back compat <1.8 extension point 6934jQuery.fx.step = {}; 6935 6936 6937 6938 6939var 6940 fxNow, inProgress, 6941 rfxtypes = /^(?:toggle|show|hide)$/, 6942 rrun = /queueHooks$/; 6943 6944function schedule() { 6945 if ( inProgress ) { 6946 if ( document.hidden === false && window.requestAnimationFrame ) { 6947 window.requestAnimationFrame( schedule ); 6948 } else { 6949 window.setTimeout( schedule, jQuery.fx.interval ); 6950 } 6951 6952 jQuery.fx.tick(); 6953 } 6954} 6955 6956// Animations created synchronously will run synchronously 6957function createFxNow() { 6958 window.setTimeout( function() { 6959 fxNow = undefined; 6960 } ); 6961 return ( fxNow = jQuery.now() ); 6962} 6963 6964// Generate parameters to create a standard animation 6965function genFx( type, includeWidth ) { 6966 var which, 6967 i = 0, 6968 attrs = { height: type }; 6969 6970 // If we include width, step value is 1 to do all cssExpand values, 6971 // otherwise step value is 2 to skip over Left and Right 6972 includeWidth = includeWidth ? 1 : 0; 6973 for ( ; i < 4; i += 2 - includeWidth ) { 6974 which = cssExpand[ i ]; 6975 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 6976 } 6977 6978 if ( includeWidth ) { 6979 attrs.opacity = attrs.width = type; 6980 } 6981 6982 return attrs; 6983} 6984 6985function createTween( value, prop, animation ) { 6986 var tween, 6987 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 6988 index = 0, 6989 length = collection.length; 6990 for ( ; index < length; index++ ) { 6991 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 6992 6993 // We're done with this property 6994 return tween; 6995 } 6996 } 6997} 6998 6999function defaultPrefilter( elem, props, opts ) { 7000 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 7001 isBox = "width" in props || "height" in props, 7002 anim = this, 7003 orig = {}, 7004 style = elem.style, 7005 hidden = elem.nodeType && isHiddenWithinTree( elem ), 7006 dataShow = dataPriv.get( elem, "fxshow" ); 7007 7008 // Queue-skipping animations hijack the fx hooks 7009 if ( !opts.queue ) { 7010 hooks = jQuery._queueHooks( elem, "fx" ); 7011 if ( hooks.unqueued == null ) { 7012 hooks.unqueued = 0; 7013 oldfire = hooks.empty.fire; 7014 hooks.empty.fire = function() { 7015 if ( !hooks.unqueued ) { 7016 oldfire(); 7017 } 7018 }; 7019 } 7020 hooks.unqueued++; 7021 7022 anim.always( function() { 7023 7024 // Ensure the complete handler is called before this completes 7025 anim.always( function() { 7026 hooks.unqueued--; 7027 if ( !jQuery.queue( elem, "fx" ).length ) { 7028 hooks.empty.fire(); 7029 } 7030 } ); 7031 } ); 7032 } 7033 7034 // Detect show/hide animations 7035 for ( prop in props ) { 7036 value = props[ prop ]; 7037 if ( rfxtypes.test( value ) ) { 7038 delete props[ prop ]; 7039 toggle = toggle || value === "toggle"; 7040 if ( value === ( hidden ? "hide" : "show" ) ) { 7041 7042 // Pretend to be hidden if this is a "show" and 7043 // there is still data from a stopped show/hide 7044 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 7045 hidden = true; 7046 7047 // Ignore all other no-op show/hide data 7048 } else { 7049 continue; 7050 } 7051 } 7052 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 7053 } 7054 } 7055 7056 // Bail out if this is a no-op like .hide().hide() 7057 propTween = !jQuery.isEmptyObject( props ); 7058 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 7059 return; 7060 } 7061 7062 // Restrict "overflow" and "display" styles during box animations 7063 if ( isBox && elem.nodeType === 1 ) { 7064
vendor: 4,173 bytes, lines 7065-7223
7065 // Support: IE <=9 - 11, Edge 12 - 13 7066 // Record all 3 overflow attributes because IE does not infer the shorthand 7067 // from identically-valued overflowX and overflowY 7068 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 7069 7070 // Identify a display type, preferring old show/hide data over the CSS cascade 7071 restoreDisplay = dataShow && dataShow.display; 7072 if ( restoreDisplay == null ) { 7073 restoreDisplay = dataPriv.get( elem, "display" ); 7074 } 7075 display = jQuery.css( elem, "display" ); 7076 if ( display === "none" ) { 7077 if ( restoreDisplay ) { 7078 display = restoreDisplay; 7079 } else { 7080 7081 // Get nonempty value(s) by temporarily forcing visibility 7082 showHide( [ elem ], true ); 7083 restoreDisplay = elem.style.display || restoreDisplay; 7084 display = jQuery.css( elem, "display" ); 7085 showHide( [ elem ] ); 7086 } 7087 } 7088 7089 // Animate inline elements as inline-block 7090 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 7091 if ( jQuery.css( elem, "float" ) === "none" ) { 7092 7093 // Restore the original display value at the end of pure show/hide animations 7094 if ( !propTween ) { 7095 anim.done( function() { 7096 style.display = restoreDisplay; 7097 } ); 7098 if ( restoreDisplay == null ) { 7099 display = style.display; 7100 restoreDisplay = display === "none" ? "" : display; 7101 } 7102 } 7103 style.display = "inline-block"; 7104 } 7105 } 7106 } 7107 7108 if ( opts.overflow ) { 7109 style.overflow = "hidden"; 7110 anim.always( function() { 7111 style.overflow = opts.overflow[ 0 ]; 7112 style.overflowX = opts.overflow[ 1 ]; 7113 style.overflowY = opts.overflow[ 2 ]; 7114 } ); 7115 } 7116 7117 // Implement show/hide animations 7118 propTween = false; 7119 for ( prop in orig ) { 7120 7121 // General show/hide setup for this element animation 7122 if ( !propTween ) { 7123 if ( dataShow ) { 7124 if ( "hidden" in dataShow ) { 7125 hidden = dataShow.hidden; 7126 } 7127 } else { 7128 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 7129 } 7130 7131 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 7132 if ( toggle ) { 7133 dataShow.hidden = !hidden; 7134 } 7135 7136 // Show elements before animating them 7137 if ( hidden ) { 7138 showHide( [ elem ], true ); 7139 } 7140 7141 /* eslint-disable no-loop-func */ 7142 7143 anim.done( function() { 7144 7145 /* eslint-enable no-loop-func */ 7146 7147 // The final step of a "hide" animation is actually hiding the element 7148 if ( !hidden ) { 7149 showHide( [ elem ] ); 7150 } 7151 dataPriv.remove( elem, "fxshow" ); 7152 for ( prop in orig ) { 7153 jQuery.style( elem, prop, orig[ prop ] ); 7154 } 7155 } ); 7156 } 7157 7158 // Per-property setup 7159 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 7160 if ( !( prop in dataShow ) ) { 7161 dataShow[ prop ] = propTween.start; 7162 if ( hidden ) { 7163 propTween.end = propTween.start; 7164 propTween.start = 0; 7165 } 7166 } 7167 } 7168} 7169 7170function propFilter( props, specialEasing ) { 7171 var index, name, easing, value, hooks; 7172 7173 // camelCase, specialEasing and expand cssHook pass 7174 for ( index in props ) { 7175 name = jQuery.camelCase( index ); 7176 easing = specialEasing[ name ]; 7177 value = props[ index ]; 7178 if ( Array.isArray( value ) ) { 7179 easing = value[ 1 ]; 7180 value = props[ index ] = value[ 0 ]; 7181 } 7182 7183 if ( index !== name ) { 7184 props[ name ] = value; 7185 delete props[ index ]; 7186 } 7187 7188 hooks = jQuery.cssHooks[ name ]; 7189 if ( hooks && "expand" in hooks ) { 7190 value = hooks.expand( value ); 7191 delete props[ name ]; 7192 7193 // Not quite $.extend, this won't overwrite existing keys. 7194 // Reusing 'index' because we have the correct "name" 7195 for ( index in value ) { 7196 if ( !( index in props ) ) { 7197 props[ index ] = value[ index ]; 7198 specialEasing[ index ] = easing; 7199 } 7200 } 7201 } else { 7202 specialEasing[ name ] = easing; 7203 } 7204 } 7205} 7206 7207function Animation( elem, properties, options ) { 7208 var result, 7209 stopped, 7210 index = 0, 7211 length = Animation.prefilters.length, 7212 deferred = jQuery.Deferred().always( function() { 7213 7214 // Don't match elem in the :animated selector 7215 delete tick.elem; 7216 } ), 7217 tick = function() { 7218 if ( stopped ) { 7219 return false; 7220 } 7221 var currentTime = fxNow || createFxNow(), 7222 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 7223
vendor: 6,686 bytes, lines 7224-7483
7224 // Support: Android 2.3 only 7225 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 7226 temp = remaining / animation.duration || 0, 7227 percent = 1 - temp, 7228 index = 0, 7229 length = animation.tweens.length; 7230 7231 for ( ; index < length; index++ ) { 7232 animation.tweens[ index ].run( percent ); 7233 } 7234 7235 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 7236 7237 // If there's more to do, yield 7238 if ( percent < 1 && length ) { 7239 return remaining; 7240 } 7241 7242 // If this was an empty animation, synthesize a final progress notification 7243 if ( !length ) { 7244 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7245 } 7246 7247 // Resolve the animation and report its conclusion 7248 deferred.resolveWith( elem, [ animation ] ); 7249 return false; 7250 }, 7251 animation = deferred.promise( { 7252 elem: elem, 7253 props: jQuery.extend( {}, properties ), 7254 opts: jQuery.extend( true, { 7255 specialEasing: {}, 7256 easing: jQuery.easing._default 7257 }, options ), 7258 originalProperties: properties, 7259 originalOptions: options, 7260 startTime: fxNow || createFxNow(), 7261 duration: options.duration, 7262 tweens: [], 7263 createTween: function( prop, end ) { 7264 var tween = jQuery.Tween( elem, animation.opts, prop, end, 7265 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 7266 animation.tweens.push( tween ); 7267 return tween; 7268 }, 7269 stop: function( gotoEnd ) { 7270 var index = 0, 7271 7272 // If we are going to the end, we want to run all the tweens 7273 // otherwise we skip this part 7274 length = gotoEnd ? animation.tweens.length : 0; 7275 if ( stopped ) { 7276 return this; 7277 } 7278 stopped = true; 7279 for ( ; index < length; index++ ) { 7280 animation.tweens[ index ].run( 1 ); 7281 } 7282 7283 // Resolve when we played the last frame; otherwise, reject 7284 if ( gotoEnd ) { 7285 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7286 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 7287 } else { 7288 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 7289 } 7290 return this; 7291 } 7292 } ), 7293 props = animation.props; 7294 7295 propFilter( props, animation.opts.specialEasing ); 7296 7297 for ( ; index < length; index++ ) { 7298 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 7299 if ( result ) { 7300 if ( jQuery.isFunction( result.stop ) ) { 7301 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 7302 jQuery.proxy( result.stop, result ); 7303 } 7304 return result; 7305 } 7306 } 7307 7308 jQuery.map( props, createTween, animation ); 7309 7310 if ( jQuery.isFunction( animation.opts.start ) ) { 7311 animation.opts.start.call( elem, animation ); 7312 } 7313 7314 // Attach callbacks from options 7315 animation 7316 .progress( animation.opts.progress ) 7317 .done( animation.opts.done, animation.opts.complete ) 7318 .fail( animation.opts.fail ) 7319 .always( animation.opts.always ); 7320 7321 jQuery.fx.timer( 7322 jQuery.extend( tick, { 7323 elem: elem, 7324 anim: animation, 7325 queue: animation.opts.queue 7326 } ) 7327 ); 7328 7329 return animation; 7330} 7331 7332jQuery.Animation = jQuery.extend( Animation, { 7333 7334 tweeners: { 7335 "*": [ function( prop, value ) { 7336 var tween = this.createTween( prop, value ); 7337 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 7338 return tween; 7339 } ] 7340 }, 7341 7342 tweener: function( props, callback ) { 7343 if ( jQuery.isFunction( props ) ) { 7344 callback = props; 7345 props = [ "*" ]; 7346 } else { 7347 props = props.match( rnothtmlwhite ); 7348 } 7349 7350 var prop, 7351 index = 0, 7352 length = props.length; 7353 7354 for ( ; index < length; index++ ) { 7355 prop = props[ index ]; 7356 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 7357 Animation.tweeners[ prop ].unshift( callback ); 7358 } 7359 }, 7360 7361 prefilters: [ defaultPrefilter ], 7362 7363 prefilter: function( callback, prepend ) { 7364 if ( prepend ) { 7365 Animation.prefilters.unshift( callback ); 7366 } else { 7367 Animation.prefilters.push( callback ); 7368 } 7369 } 7370} ); 7371 7372jQuery.speed = function( speed, easing, fn ) { 7373 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 7374 complete: fn || !fn && easing || 7375 jQuery.isFunction( speed ) && speed, 7376 duration: speed, 7377 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing 7378 }; 7379 7380 // Go to the end state if fx are off 7381 if ( jQuery.fx.off ) { 7382 opt.duration = 0; 7383 7384 } else { 7385 if ( typeof opt.duration !== "number" ) { 7386 if ( opt.duration in jQuery.fx.speeds ) { 7387 opt.duration = jQuery.fx.speeds[ opt.duration ]; 7388 7389 } else { 7390 opt.duration = jQuery.fx.speeds._default; 7391 } 7392 } 7393 } 7394 7395 // Normalize opt.queue - true/undefined/null -> "fx" 7396 if ( opt.queue == null || opt.queue === true ) { 7397 opt.queue = "fx"; 7398 } 7399 7400 // Queueing 7401 opt.old = opt.complete; 7402 7403 opt.complete = function() { 7404 if ( jQuery.isFunction( opt.old ) ) { 7405 opt.old.call( this ); 7406 } 7407 7408 if ( opt.queue ) { 7409 jQuery.dequeue( this, opt.queue ); 7410 } 7411 }; 7412 7413 return opt; 7414}; 7415 7416jQuery.fn.extend( { 7417 fadeTo: function( speed, to, easing, callback ) { 7418 7419 // Show any hidden elements after setting opacity to 0 7420 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 7421 7422 // Animate to the value specified 7423 .end().animate( { opacity: to }, speed, easing, callback ); 7424 }, 7425 animate: function( prop, speed, easing, callback ) { 7426 var empty = jQuery.isEmptyObject( prop ), 7427 optall = jQuery.speed( speed, easing, callback ), 7428 doAnimation = function() { 7429 7430 // Operate on a copy of prop so per-property easing won't be lost 7431 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 7432 7433 // Empty animations, or finishing resolves immediately 7434 if ( empty || dataPriv.get( this, "finish" ) ) { 7435 anim.stop( true ); 7436 } 7437 }; 7438 doAnimation.finish = doAnimation; 7439 7440 return empty || optall.queue === false ? 7441 this.each( doAnimation ) : 7442 this.queue( optall.queue, doAnimation ); 7443 }, 7444 stop: function( type, clearQueue, gotoEnd ) { 7445 var stopQueue = function( hooks ) { 7446 var stop = hooks.stop; 7447 delete hooks.stop; 7448 stop( gotoEnd ); 7449 }; 7450 7451 if ( typeof type !== "string" ) { 7452 gotoEnd = clearQueue; 7453 clearQueue = type; 7454 type = undefined; 7455 } 7456 if ( clearQueue && type !== false ) { 7457 this.queue( type || "fx", [] ); 7458 } 7459 7460 return this.each( function() { 7461 var dequeue = true, 7462 index = type != null && type + "queueHooks", 7463 timers = jQuery.timers, 7464 data = dataPriv.get( this ); 7465 7466 if ( index ) { 7467 if ( data[ index ] && data[ index ].stop ) { 7468 stopQueue( data[ index ] ); 7469 } 7470 } else { 7471 for ( index in data ) { 7472 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 7473 stopQueue( data[ index ] ); 7474 } 7475 } 7476 } 7477 7478 for ( index = timers.length; index--; ) { 7479 if ( timers[ index ].elem === this && 7480 ( type == null || timers[ index ].queue === type ) ) { 7481 7482 timers[ index ].anim.stop( gotoEnd ); 7483 dequeue = false;
vendor: 2,199 bytes, lines 7484-7568
7484 timers.splice( index, 1 ); 7485 } 7486 } 7487 7488 // Start the next in the queue if the last step wasn't forced. 7489 // Timers currently will call their complete callbacks, which 7490 // will dequeue but only if they were gotoEnd. 7491 if ( dequeue || !gotoEnd ) { 7492 jQuery.dequeue( this, type ); 7493 } 7494 } ); 7495 }, 7496 finish: function( type ) { 7497 if ( type !== false ) { 7498 type = type || "fx"; 7499 } 7500 return this.each( function() { 7501 var index, 7502 data = dataPriv.get( this ), 7503 queue = data[ type + "queue" ], 7504 hooks = data[ type + "queueHooks" ], 7505 timers = jQuery.timers, 7506 length = queue ? queue.length : 0; 7507 7508 // Enable finishing flag on private data 7509 data.finish = true; 7510 7511 // Empty the queue first 7512 jQuery.queue( this, type, [] ); 7513 7514 if ( hooks && hooks.stop ) { 7515 hooks.stop.call( this, true ); 7516 } 7517 7518 // Look for any active animations, and finish them 7519 for ( index = timers.length; index--; ) { 7520 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 7521 timers[ index ].anim.stop( true ); 7522 timers.splice( index, 1 ); 7523 } 7524 } 7525 7526 // Look for any animations in the old queue and finish them 7527 for ( index = 0; index < length; index++ ) { 7528 if ( queue[ index ] && queue[ index ].finish ) { 7529 queue[ index ].finish.call( this ); 7530 } 7531 } 7532 7533 // Turn off finishing flag 7534 delete data.finish; 7535 } ); 7536 } 7537} ); 7538 7539jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { 7540 var cssFn = jQuery.fn[ name ]; 7541 jQuery.fn[ name ] = function( speed, easing, callback ) { 7542 return speed == null || typeof speed === "boolean" ? 7543 cssFn.apply( this, arguments ) : 7544 this.animate( genFx( name, true ), speed, easing, callback ); 7545 }; 7546} ); 7547 7548// Generate shortcuts for custom animations 7549jQuery.each( { 7550 slideDown: genFx( "show" ), 7551 slideUp: genFx( "hide" ), 7552 slideToggle: genFx( "toggle" ), 7553 fadeIn: { opacity: "show" }, 7554 fadeOut: { opacity: "hide" }, 7555 fadeToggle: { opacity: "toggle" } 7556}, function( name, props ) { 7557 jQuery.fn[ name ] = function( speed, easing, callback ) { 7558 return this.animate( props, speed, easing, callback ); 7559 }; 7560} ); 7561 7562jQuery.timers = []; 7563jQuery.fx.tick = function() { 7564 var timer, 7565 i = 0, 7566 timers = jQuery.timers; 7567 7568 fxNow = jQuery
vendor: 7,814 bytes, lines 7568-7921
7568.now(); 7569 7570 for ( ; i < timers.length; i++ ) { 7571 timer = timers[ i ]; 7572 7573 // Run the timer and safely remove it when done (allowing for external removal) 7574 if ( !timer() && timers[ i ] === timer ) { 7575 timers.splice( i--, 1 ); 7576 } 7577 } 7578 7579 if ( !timers.length ) { 7580 jQuery.fx.stop(); 7581 } 7582 fxNow = undefined; 7583}; 7584 7585jQuery.fx.timer = function( timer ) { 7586 jQuery.timers.push( timer ); 7587 jQuery.fx.start(); 7588}; 7589 7590jQuery.fx.interval = 13; 7591jQuery.fx.start = function() { 7592 if ( inProgress ) { 7593 return; 7594 } 7595 7596 inProgress = true; 7597 schedule(); 7598}; 7599 7600jQuery.fx.stop = function() { 7601 inProgress = null; 7602}; 7603 7604jQuery.fx.speeds = { 7605 slow: 600, 7606 fast: 200, 7607 7608 // Default speed 7609 _default: 400 7610}; 7611 7612 7613// Based off of the plugin by Clint Helfers, with permission. 7614// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ 7615jQuery.fn.delay = function( time, type ) { 7616 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 7617 type = type || "fx"; 7618 7619 return this.queue( type, function( next, hooks ) { 7620 var timeout = window.setTimeout( next, time ); 7621 hooks.stop = function() { 7622 window.clearTimeout( timeout ); 7623 }; 7624 } ); 7625}; 7626 7627 7628( function() { 7629 var input = document.createElement( "input" ), 7630 select = document.createElement( "select" ), 7631 opt = select.appendChild( document.createElement( "option" ) ); 7632 7633 input.type = "checkbox"; 7634 7635 // Support: Android <=4.3 only 7636 // Default value for a checkbox should be "on" 7637 support.checkOn = input.value !== ""; 7638 7639 // Support: IE <=11 only 7640 // Must access selectedIndex to make default options select 7641 support.optSelected = opt.selected; 7642 7643 // Support: IE <=11 only 7644 // An input loses its value after becoming a radio 7645 input = document.createElement( "input" ); 7646 input.value = "t"; 7647 input.type = "radio"; 7648 support.radioValue = input.value === "t"; 7649} )(); 7650 7651 7652var boolHook, 7653 attrHandle = jQuery.expr.attrHandle; 7654 7655jQuery.fn.extend( { 7656 attr: function( name, value ) { 7657 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 7658 }, 7659 7660 removeAttr: function( name ) { 7661 return this.each( function() { 7662 jQuery.removeAttr( this, name ); 7663 } ); 7664 } 7665} ); 7666 7667jQuery.extend( { 7668 attr: function( elem, name, value ) { 7669 var ret, hooks, 7670 nType = elem.nodeType; 7671 7672 // Don't get/set attributes on text, comment and attribute nodes 7673 if ( nType === 3 || nType === 8 || nType === 2 ) { 7674 return; 7675 } 7676 7677 // Fallback to prop when attributes are not supported 7678 if ( typeof elem.getAttribute === "undefined" ) { 7679 return jQuery.prop( elem, name, value ); 7680 } 7681 7682 // Attribute hooks are determined by the lowercase version 7683 // Grab necessary hook if one is defined 7684 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7685 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 7686 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 7687 } 7688 7689 if ( value !== undefined ) { 7690 if ( value === null ) { 7691 jQuery.removeAttr( elem, name ); 7692 return; 7693 } 7694 7695 if ( hooks && "set" in hooks && 7696 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7697 return ret; 7698 } 7699 7700 elem.setAttribute( name, value + "" ); 7701 return value; 7702 } 7703 7704 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7705 return ret; 7706 } 7707 7708 ret = jQuery.find.attr( elem, name ); 7709 7710 // Non-existent attributes return null, we normalize to undefined 7711 return ret == null ? undefined : ret; 7712 }, 7713 7714 attrHooks: { 7715 type: { 7716 set: function( elem, value ) { 7717 if ( !support.radioValue && value === "radio" && 7718 nodeName( elem, "input" ) ) { 7719 var val = elem.value; 7720 elem.setAttribute( "type", value ); 7721 if ( val ) { 7722 elem.value = val; 7723 } 7724 return value; 7725 } 7726 } 7727 } 7728 }, 7729 7730 removeAttr: function( elem, value ) { 7731 var name, 7732 i = 0, 7733 7734 // Attribute names can contain non-HTML whitespace characters 7735 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 7736 attrNames = value && value.match( rnothtmlwhite ); 7737 7738 if ( attrNames && elem.nodeType === 1 ) { 7739 while ( ( name = attrNames[ i++ ] ) ) { 7740 elem.removeAttribute( name ); 7741 } 7742 } 7743 } 7744} ); 7745 7746// Hooks for boolean attributes 7747boolHook = { 7748 set: function( elem, value, name ) { 7749 if ( value === false ) { 7750 7751 // Remove boolean attributes when set to false 7752 jQuery.removeAttr( elem, name ); 7753 } else { 7754 elem.setAttribute( name, name ); 7755 } 7756 return name; 7757 } 7758}; 7759 7760jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { 7761 var getter = attrHandle[ name ] || jQuery.find.attr; 7762 7763 attrHandle[ name ] = function( elem, name, isXML ) { 7764 var ret, handle, 7765 lowercaseName = name.toLowerCase(); 7766 7767 if ( !isXML ) { 7768 7769 // Avoid an infinite loop by temporarily removing this function from the getter 7770 handle = attrHandle[ lowercaseName ]; 7771 attrHandle[ lowercaseName ] = ret; 7772 ret = getter( elem, name, isXML ) != null ? 7773 lowercaseName : 7774 null; 7775 attrHandle[ lowercaseName ] = handle; 7776 } 7777 return ret; 7778 }; 7779} ); 7780 7781 7782 7783 7784var rfocusable = /^(?:input|select|textarea|button)$/i, 7785 rclickable = /^(?:a|area)$/i; 7786 7787jQuery.fn.extend( { 7788 prop: function( name, value ) { 7789 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 7790 }, 7791 7792 removeProp: function( name ) { 7793 return this.each( function() { 7794 delete this[ jQuery.propFix[ name ] || name ]; 7795 } ); 7796 } 7797} ); 7798 7799jQuery.extend( { 7800 prop: function( elem, name, value ) { 7801 var ret, hooks, 7802 nType = elem.nodeType; 7803 7804 // Don't get/set properties on text, comment and attribute nodes 7805 if ( nType === 3 || nType === 8 || nType === 2 ) { 7806 return; 7807 } 7808 7809 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7810 7811 // Fix name and attach hooks 7812 name = jQuery.propFix[ name ] || name; 7813 hooks = jQuery.propHooks[ name ]; 7814 } 7815 7816 if ( value !== undefined ) { 7817 if ( hooks && "set" in hooks && 7818 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7819 return ret; 7820 } 7821 7822 return ( elem[ name ] = value ); 7823 } 7824 7825 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7826 return ret; 7827 } 7828 7829 return elem[ name ]; 7830 }, 7831 7832 propHooks: { 7833 tabIndex: { 7834 get: function( elem ) { 7835 7836 // Support: IE <=9 - 11 only 7837 // elem.tabIndex doesn't always return the 7838 // correct value when it hasn't been explicitly set 7839 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 7840 // Use proper attribute retrieval(#12072) 7841 var tabindex = jQuery.find.attr( elem, "tabindex" ); 7842 7843 if ( tabindex ) { 7844 return parseInt( tabindex, 10 ); 7845 } 7846 7847 if ( 7848 rfocusable.test( elem.nodeName ) || 7849 rclickable.test( elem.nodeName ) && 7850 elem.href 7851 ) { 7852 return 0; 7853 } 7854 7855 return -1; 7856 } 7857 } 7858 }, 7859 7860 propFix: { 7861 "for": "htmlFor", 7862 "class": "className" 7863 } 7864} ); 7865 7866// Support: IE <=11 only 7867// Accessing the selectedIndex property 7868// forces the browser to respect setting selected 7869// on the option 7870// The getter ensures a default option is selected 7871// when in an optgroup 7872// eslint rule "no-unused-expressions" is disabled for this code 7873// since it considers such accessions noop 7874if ( !support.optSelected ) { 7875 jQuery.propHooks.selected = { 7876 get: function( elem ) { 7877 7878 /* eslint no-unused-expressions: "off" */ 7879 7880 var parent = elem.parentNode; 7881 if ( parent && parent.parentNode ) { 7882 parent.parentNode.selectedIndex; 7883 } 7884 return null; 7885 }, 7886 set: function( elem ) { 7887 7888 /* eslint no-unused-expressions: "off" */ 7889 7890 var parent = elem.parentNode; 7891 if ( parent ) { 7892 parent.selectedIndex; 7893 7894 if ( parent.parentNode ) { 7895 parent.parentNode.selectedIndex; 7896 } 7897 } 7898 } 7899 }; 7900} 7901 7902jQuery.each( [ 7903 "tabIndex", 7904 "readOnly", 7905 "maxLength", 7906 "cellSpacing", 7907 "cellPadding", 7908 "rowSpan", 7909 "colSpan", 7910 "useMap", 7911 "frameBorder", 7912 "contentEditable" 7913], function() { 7914 jQuery.propFix[ this.toLowerCase() ] = this; 7915} ); 7916 7917 7918 7919 7920 // Strip and collapse whitespace according to HTML spec 7921 // https://
vendor: 4,260 bytes, lines 7921-8087
7921html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace 7922 function stripAndCollapse( value ) { 7923 var tokens = value.match( rnothtmlwhite ) || []; 7924 return tokens.join( " " ); 7925 } 7926 7927 7928function getClass( elem ) { 7929 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 7930} 7931 7932jQuery.fn.extend( { 7933 addClass: function( value ) { 7934 var classes, elem, cur, curValue, clazz, j, finalValue, 7935 i = 0; 7936 7937 if ( jQuery.isFunction( value ) ) { 7938 return this.each( function( j ) { 7939 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 7940 } ); 7941 } 7942 7943 if ( typeof value === "string" && value ) { 7944 classes = value.match( rnothtmlwhite ) || []; 7945 7946 while ( ( elem = this[ i++ ] ) ) { 7947 curValue = getClass( elem ); 7948 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 7949 7950 if ( cur ) { 7951 j = 0; 7952 while ( ( clazz = classes[ j++ ] ) ) { 7953 if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 7954 cur += clazz + " "; 7955 } 7956 } 7957 7958 // Only assign if different to avoid unneeded rendering. 7959 finalValue = stripAndCollapse( cur ); 7960 if ( curValue !== finalValue ) { 7961 elem.setAttribute( "class", finalValue ); 7962 } 7963 } 7964 } 7965 } 7966 7967 return this; 7968 }, 7969 7970 removeClass: function( value ) { 7971 var classes, elem, cur, curValue, clazz, j, finalValue, 7972 i = 0; 7973 7974 if ( jQuery.isFunction( value ) ) { 7975 return this.each( function( j ) { 7976 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 7977 } ); 7978 } 7979 7980 if ( !arguments.length ) { 7981 return this.attr( "class", "" ); 7982 } 7983 7984 if ( typeof value === "string" && value ) { 7985 classes = value.match( rnothtmlwhite ) || []; 7986 7987 while ( ( elem = this[ i++ ] ) ) { 7988 curValue = getClass( elem ); 7989 7990 // This expression is here for better compressibility (see addClass) 7991 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 7992 7993 if ( cur ) { 7994 j = 0; 7995 while ( ( clazz = classes[ j++ ] ) ) { 7996 7997 // Remove *all* instances 7998 while ( cur.indexOf( " " + clazz + " " ) > -1 ) { 7999 cur = cur.replace( " " + clazz + " ", " " ); 8000 } 8001 } 8002 8003 // Only assign if different to avoid unneeded rendering. 8004 finalValue = stripAndCollapse( cur ); 8005 if ( curValue !== finalValue ) { 8006 elem.setAttribute( "class", finalValue ); 8007 } 8008 } 8009 } 8010 } 8011 8012 return this; 8013 }, 8014 8015 toggleClass: function( value, stateVal ) { 8016 var type = typeof value; 8017 8018 if ( typeof stateVal === "boolean" && type === "string" ) { 8019 return stateVal ? this.addClass( value ) : this.removeClass( value ); 8020 } 8021 8022 if ( jQuery.isFunction( value ) ) { 8023 return this.each( function( i ) { 8024 jQuery( this ).toggleClass( 8025 value.call( this, i, getClass( this ), stateVal ), 8026 stateVal 8027 ); 8028 } ); 8029 } 8030 8031 return this.each( function() { 8032 var className, i, self, classNames; 8033 8034 if ( type === "string" ) { 8035 8036 // Toggle individual class names 8037 i = 0; 8038 self = jQuery( this ); 8039 classNames = value.match( rnothtmlwhite ) || []; 8040 8041 while ( ( className = classNames[ i++ ] ) ) { 8042 8043 // Check each className given, space separated list 8044 if ( self.hasClass( className ) ) { 8045 self.removeClass( className ); 8046 } else { 8047 self.addClass( className ); 8048 } 8049 } 8050 8051 // Toggle whole class name 8052 } else if ( value === undefined || type === "boolean" ) { 8053 className = getClass( this ); 8054 if ( className ) { 8055 8056 // Store className if set 8057 dataPriv.set( this, "__className__", className ); 8058 } 8059 8060 // If the element has a class name or if we're passed `false`, 8061 // then remove the whole classname (if there was one, the above saved it). 8062 // Otherwise bring back whatever was previously saved (if anything), 8063 // falling back to the empty string if nothing was stored. 8064 if ( this.setAttribute ) { 8065 this.setAttribute( "class", 8066 className || value === false ? 8067 "" : 8068 dataPriv.get( this, "__className__" ) || "" 8069 ); 8070 } 8071 } 8072 } ); 8073 }, 8074 8075 hasClass: function( selector ) { 8076 var className, elem, 8077 i = 0; 8078 8079 className = " " + selector + " "; 8080 while ( ( elem = this[ i++ ] ) ) { 8081 if ( elem.nodeType === 1 && 8082 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 8083 return true; 8084 } 8085 } 8086 8087 return false;
vendor: 1,377 bytes, lines 8088-8157
8088 } 8089} ); 8090 8091 8092 8093 8094var rreturn = /\r/g; 8095 8096jQuery.fn.extend( { 8097 val: function( value ) { 8098 var hooks, ret, isFunction, 8099 elem = this[ 0 ]; 8100 8101 if ( !arguments.length ) { 8102 if ( elem ) { 8103 hooks = jQuery.valHooks[ elem.type ] || 8104 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 8105 8106 if ( hooks && 8107 "get" in hooks && 8108 ( ret = hooks.get( elem, "value" ) ) !== undefined 8109 ) { 8110 return ret; 8111 } 8112 8113 ret = elem.value; 8114 8115 // Handle most common string cases 8116 if ( typeof ret === "string" ) { 8117 return ret.replace( rreturn, "" ); 8118 } 8119 8120 // Handle cases where value is null/undef or number 8121 return ret == null ? "" : ret; 8122 } 8123 8124 return; 8125 } 8126 8127 isFunction = jQuery.isFunction( value ); 8128 8129 return this.each( function( i ) { 8130 var val; 8131 8132 if ( this.nodeType !== 1 ) { 8133 return; 8134 } 8135 8136 if ( isFunction ) { 8137 val = value.call( this, i, jQuery( this ).val() ); 8138 } else { 8139 val = value; 8140 } 8141 8142 // Treat null/undefined as ""; convert numbers to string 8143 if ( val == null ) { 8144 val = ""; 8145 8146 } else if ( typeof val === "number" ) { 8147 val += ""; 8148 8149 } else if ( Array.isArray( val ) ) { 8150 val = jQuery.map( val, function( value ) { 8151 return value == null ? "" : value + ""; 8152 } ); 8153 } 8154 8155 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 8156 8157 // If set returns undefined, fall back to normal setting
vendor: 8,160 bytes, lines 8158-8476
8158 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 8159 this.value = val; 8160 } 8161 } ); 8162 } 8163} ); 8164 8165jQuery.extend( { 8166 valHooks: { 8167 option: { 8168 get: function( elem ) { 8169 8170 var val = jQuery.find.attr( elem, "value" ); 8171 return val != null ? 8172 val : 8173 8174 // Support: IE <=10 - 11 only 8175 // option.text throws exceptions (#14686, #14858) 8176 // Strip and collapse whitespace 8177 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 8178 stripAndCollapse( jQuery.text( elem ) ); 8179 } 8180 }, 8181 select: { 8182 get: function( elem ) { 8183 var value, option, i, 8184 options = elem.options, 8185 index = elem.selectedIndex, 8186 one = elem.type === "select-one", 8187 values = one ? null : [], 8188 max = one ? index + 1 : options.length; 8189 8190 if ( index < 0 ) { 8191 i = max; 8192 8193 } else { 8194 i = one ? index : 0; 8195 } 8196 8197 // Loop through all the selected options 8198 for ( ; i < max; i++ ) { 8199 option = options[ i ]; 8200 8201 // Support: IE <=9 only 8202 // IE8-9 doesn't update selected after form reset (#2551) 8203 if ( ( option.selected || i === index ) && 8204 8205 // Don't return options that are disabled or in a disabled optgroup 8206 !option.disabled && 8207 ( !option.parentNode.disabled || 8208 !nodeName( option.parentNode, "optgroup" ) ) ) { 8209 8210 // Get the specific value for the option 8211 value = jQuery( option ).val(); 8212 8213 // We don't need an array for one selects 8214 if ( one ) { 8215 return value; 8216 } 8217 8218 // Multi-Selects return an array 8219 values.push( value ); 8220 } 8221 } 8222 8223 return values; 8224 }, 8225 8226 set: function( elem, value ) { 8227 var optionSet, option, 8228 options = elem.options, 8229 values = jQuery.makeArray( value ), 8230 i = options.length; 8231 8232 while ( i-- ) { 8233 option = options[ i ]; 8234 8235 /* eslint-disable no-cond-assign */ 8236 8237 if ( option.selected = 8238 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 8239 ) { 8240 optionSet = true; 8241 } 8242 8243 /* eslint-enable no-cond-assign */ 8244 } 8245 8246 // Force browsers to behave consistently when non-matching value is set 8247 if ( !optionSet ) { 8248 elem.selectedIndex = -1; 8249 } 8250 return values; 8251 } 8252 } 8253 } 8254} ); 8255 8256// Radios and checkboxes getter/setter 8257jQuery.each( [ "radio", "checkbox" ], function() { 8258 jQuery.valHooks[ this ] = { 8259 set: function( elem, value ) { 8260 if ( Array.isArray( value ) ) { 8261 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 8262 } 8263 } 8264 }; 8265 if ( !support.checkOn ) { 8266 jQuery.valHooks[ this ].get = function( elem ) { 8267 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 8268 }; 8269 } 8270} ); 8271 8272 8273 8274 8275// Return jQuery for attributes-only inclusion 8276 8277 8278var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; 8279 8280jQuery.extend( jQuery.event, { 8281 8282 trigger: function( event, data, elem, onlyHandlers ) { 8283 8284 var i, cur, tmp, bubbleType, ontype, handle, special, 8285 eventPath = [ elem || document ], 8286 type = hasOwn.call( event, "type" ) ? event.type : event, 8287 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 8288 8289 cur = tmp = elem = elem || document; 8290 8291 // Don't do events on text and comment nodes 8292 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 8293 return; 8294 } 8295 8296 // focus/blur morphs to focusin/out; ensure we're not firing them right now 8297 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 8298 return; 8299 } 8300 8301 if ( type.indexOf( "." ) > -1 ) { 8302 8303 // Namespaced trigger; create a regexp to match event type in handle() 8304 namespaces = type.split( "." ); 8305 type = namespaces.shift(); 8306 namespaces.sort(); 8307 } 8308 ontype = type.indexOf( ":" ) < 0 && "on" + type; 8309 8310 // Caller can pass in a jQuery.Event object, Object, or just an event type string 8311 event = event[ jQuery.expando ] ? 8312 event : 8313 new jQuery.Event( type, typeof event === "object" && event ); 8314 8315 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 8316 event.isTrigger = onlyHandlers ? 2 : 3; 8317 event.namespace = namespaces.join( "." ); 8318 event.rnamespace = event.namespace ? 8319 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 8320 null; 8321 8322 // Clean up the event in case it is being reused 8323 event.result = undefined; 8324 if ( !event.target ) { 8325 event.target = elem; 8326 } 8327 8328 // Clone any incoming data and prepend the event, creating the handler arg list 8329 data = data == null ? 8330 [ event ] : 8331 jQuery.makeArray( data, [ event ] ); 8332 8333 // Allow special events to draw outside the lines 8334 special = jQuery.event.special[ type ] || {}; 8335 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 8336 return; 8337 } 8338 8339 // Determine event propagation path in advance, per W3C events spec (#9951) 8340 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 8341 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { 8342 8343 bubbleType = special.delegateType || type; 8344 if ( !rfocusMorph.test( bubbleType + type ) ) { 8345 cur = cur.parentNode; 8346 } 8347 for ( ; cur; cur = cur.parentNode ) { 8348 eventPath.push( cur ); 8349 tmp = cur; 8350 } 8351 8352 // Only add window if we got to document (e.g., not plain obj or detached DOM) 8353 if ( tmp === ( elem.ownerDocument || document ) ) { 8354 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 8355 } 8356 } 8357 8358 // Fire handlers on the event path 8359 i = 0; 8360 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 8361 8362 event.type = i > 1 ? 8363 bubbleType : 8364 special.bindType || type; 8365 8366 // jQuery handler 8367 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && 8368 dataPriv.get( cur, "handle" ); 8369 if ( handle ) { 8370 handle.apply( cur, data ); 8371 } 8372 8373 // Native handler 8374 handle = ontype && cur[ ontype ]; 8375 if ( handle && handle.apply && acceptData( cur ) ) { 8376 event.result = handle.apply( cur, data ); 8377 if ( event.result === false ) { 8378 event.preventDefault(); 8379 } 8380 } 8381 } 8382 event.type = type; 8383 8384 // If nobody prevented the default action, do it now 8385 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 8386 8387 if ( ( !special._default || 8388 special._default.apply( eventPath.pop(), data ) === false ) && 8389 acceptData( elem ) ) { 8390 8391 // Call a native DOM method on the target with the same name as the event. 8392 // Don't do default actions on window, that's where global variables be (#6170) 8393 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { 8394 8395 // Don't re-trigger an onFOO event when we call its FOO() method 8396 tmp = elem[ ontype ]; 8397 8398 if ( tmp ) { 8399 elem[ ontype ] = null; 8400 } 8401 8402 // Prevent re-triggering of the same event, since we already bubbled it above 8403 jQuery.event.triggered = type; 8404 elem[ type ](); 8405 jQuery.event.triggered = undefined; 8406 8407 if ( tmp ) { 8408 elem[ ontype ] = tmp; 8409 } 8410 } 8411 } 8412 } 8413 8414 return event.result; 8415 }, 8416 8417 // Piggyback on a donor event to simulate a different one 8418 // Used only for `focus(in | out)` events 8419 simulate: function( type, elem, event ) { 8420 var e = jQuery.extend( 8421 new jQuery.Event(), 8422 event, 8423 { 8424 type: type, 8425 isSimulated: true 8426 } 8427 ); 8428 8429 jQuery.event.trigger( e, null, elem ); 8430 } 8431 8432} ); 8433 8434jQuery.fn.extend( { 8435 8436 trigger: function( type, data ) { 8437 return this.each( function() { 8438 jQuery.event.trigger( type, data, this ); 8439 } ); 8440 }, 8441 triggerHandler: function( type, data ) { 8442 var elem = this[ 0 ]; 8443 if ( elem ) { 8444 return jQuery.event.trigger( type, data, elem, true ); 8445 } 8446 } 8447} ); 8448 8449 8450jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + 8451 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 8452 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 8453 function( i, name ) { 8454 8455 // Handle event binding 8456 jQuery.fn[ name ] = function( data, fn ) { 8457 return arguments.length > 0 ? 8458 this.on( name, null, data, fn ) : 8459 this.trigger( name ); 8460 }; 8461} ); 8462 8463jQuery.fn.extend( { 8464 hover: function( fnOver, fnOut ) { 8465 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 8466 } 8467} ); 8468 8469 8470 8471 8472support.focusin = "onfocusin" in window; 8473 8474 8475// Support: Firefox <=44 8476// Firefox doesn't have focus(in | out) events
vendor: 4,174 bytes, lines 8477-8640
8477// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 8478// 8479// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 8480// focus(in | out) events fire after focus & blur events, 8481// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 8482// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 8483if ( !support.focusin ) { 8484 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 8485 8486 // Attach a single capturing handler on the document while someone wants focusin/focusout 8487 var handler = function( event ) { 8488 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 8489 }; 8490 8491 jQuery.event.special[ fix ] = { 8492 setup: function() { 8493 var doc = this.ownerDocument || this, 8494 attaches = dataPriv.access( doc, fix ); 8495 8496 if ( !attaches ) { 8497 doc.addEventListener( orig, handler, true ); 8498 } 8499 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 8500 }, 8501 teardown: function() { 8502 var doc = this.ownerDocument || this, 8503 attaches = dataPriv.access( doc, fix ) - 1; 8504 8505 if ( !attaches ) { 8506 doc.removeEventListener( orig, handler, true ); 8507 dataPriv.remove( doc, fix ); 8508 8509 } else { 8510 dataPriv.access( doc, fix, attaches ); 8511 } 8512 } 8513 }; 8514 } ); 8515} 8516var location = window.location; 8517 8518var nonce = jQuery.now(); 8519 8520var rquery = ( /\?/ ); 8521 8522 8523 8524// Cross-browser xml parsing 8525jQuery.parseXML = function( data ) { 8526 var xml; 8527 if ( !data || typeof data !== "string" ) { 8528 return null; 8529 } 8530 8531 // Support: IE 9 - 11 only 8532 // IE throws on parseFromString with invalid input. 8533 try { 8534 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 8535 } catch ( e ) { 8536 xml = undefined; 8537 } 8538 8539 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 8540 jQuery.error( "Invalid XML: " + data ); 8541 } 8542 return xml; 8543}; 8544 8545 8546var 8547 rbracket = /\[\]$/, 8548 rCRLF = /\r?\n/g, 8549 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 8550 rsubmittable = /^(?:input|select|textarea|keygen)/i; 8551 8552function buildParams( prefix, obj, traditional, add ) { 8553 var name; 8554 8555 if ( Array.isArray( obj ) ) { 8556 8557 // Serialize array item. 8558 jQuery.each( obj, function( i, v ) { 8559 if ( traditional || rbracket.test( prefix ) ) { 8560 8561 // Treat each array item as a scalar. 8562 add( prefix, v ); 8563 8564 } else { 8565 8566 // Item is non-scalar (array or object), encode its numeric index. 8567 buildParams( 8568 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 8569 v, 8570 traditional, 8571 add 8572 ); 8573 } 8574 } ); 8575 8576 } else if ( !traditional && jQuery.type( obj ) === "object" ) { 8577 8578 // Serialize object item. 8579 for ( name in obj ) { 8580 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 8581 } 8582 8583 } else { 8584 8585 // Serialize scalar item. 8586 add( prefix, obj ); 8587 } 8588} 8589 8590// Serialize an array of form elements or a set of 8591// key/values into a query string 8592jQuery.param = function( a, traditional ) { 8593 var prefix, 8594 s = [], 8595 add = function( key, valueOrFunction ) { 8596 8597 // If value is a function, invoke it and use its return value 8598 var value = jQuery.isFunction( valueOrFunction ) ? 8599 valueOrFunction() : 8600 valueOrFunction; 8601 8602 s[ s.length ] = encodeURIComponent( key ) + "=" + 8603 encodeURIComponent( value == null ? "" : value ); 8604 }; 8605 8606 // If an array was passed in, assume that it is an array of form elements. 8607 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 8608 8609 // Serialize the form elements 8610 jQuery.each( a, function() { 8611 add( this.name, this.value ); 8612 } ); 8613 8614 } else { 8615 8616 // If traditional, encode the "old" way (the way 1.3.2 or older 8617 // did it), otherwise encode params recursively. 8618 for ( prefix in a ) { 8619 buildParams( prefix, a[ prefix ], traditional, add ); 8620 } 8621 } 8622 8623 // Return the resulting serialization 8624 return s.join( "&" ); 8625}; 8626 8627jQuery.fn.extend( { 8628 serialize: function() { 8629 return jQuery.param( this.serializeArray() ); 8630 }, 8631 serializeArray: function() { 8632 return this.map( function() { 8633 8634 // Can add propHook for "elements" to filter or add form elements 8635 var elements = jQuery.prop( this, "elements" ); 8636 return elements ? jQuery.makeArray( elements ) : this; 8637 } ) 8638 .filter( function() { 8639 var type = this.type; 8640
vendor: 4,939 bytes, lines 8641-8813
8641 // Use .is( ":disabled" ) so that fieldset[disabled] works 8642 return this.name && !jQuery( this ).is( ":disabled" ) && 8643 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 8644 ( this.checked || !rcheckableType.test( type ) ); 8645 } ) 8646 .map( function( i, elem ) { 8647 var val = jQuery( this ).val(); 8648 8649 if ( val == null ) { 8650 return null; 8651 } 8652 8653 if ( Array.isArray( val ) ) { 8654 return jQuery.map( val, function( val ) { 8655 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8656 } ); 8657 } 8658 8659 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8660 } ).get(); 8661 } 8662} ); 8663 8664 8665var 8666 r20 = /%20/g, 8667 rhash = /#.*$/, 8668 rantiCache = /([?&])_=[^&]*/, 8669 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 8670 8671 // #7653, #8125, #8152: local protocol detection 8672 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 8673 rnoContent = /^(?:GET|HEAD)$/, 8674 rprotocol = /^\/\//, 8675 8676 /* Prefilters 8677 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 8678 * 2) These are called: 8679 * - BEFORE asking for a transport 8680 * - AFTER param serialization (s.data is a string if s.processData is true) 8681 * 3) key is the dataType 8682 * 4) the catchall symbol "*" can be used 8683 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 8684 */ 8685 prefilters = {}, 8686 8687 /* Transports bindings 8688 * 1) key is the dataType 8689 * 2) the catchall symbol "*" can be used 8690 * 3) selection will start with transport dataType and THEN go to "*" if needed 8691 */ 8692 transports = {}, 8693 8694 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 8695 allTypes = "*/".concat( "*" ), 8696 8697 // Anchor tag for parsing the document origin 8698 originAnchor = document.createElement( "a" ); 8699 originAnchor.href = location.href; 8700 8701// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 8702function addToPrefiltersOrTransports( structure ) { 8703 8704 // dataTypeExpression is optional and defaults to "*" 8705 return function( dataTypeExpression, func ) { 8706 8707 if ( typeof dataTypeExpression !== "string" ) { 8708 func = dataTypeExpression; 8709 dataTypeExpression = "*"; 8710 } 8711 8712 var dataType, 8713 i = 0, 8714 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 8715 8716 if ( jQuery.isFunction( func ) ) { 8717 8718 // For each dataType in the dataTypeExpression 8719 while ( ( dataType = dataTypes[ i++ ] ) ) { 8720 8721 // Prepend if requested 8722 if ( dataType[ 0 ] === "+" ) { 8723 dataType = dataType.slice( 1 ) || "*"; 8724 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 8725 8726 // Otherwise append 8727 } else { 8728 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 8729 } 8730 } 8731 } 8732 }; 8733} 8734 8735// Base inspection function for prefilters and transports 8736function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 8737 8738 var inspected = {}, 8739 seekingTransport = ( structure === transports ); 8740 8741 function inspect( dataType ) { 8742 var selected; 8743 inspected[ dataType ] = true; 8744 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 8745 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 8746 if ( typeof dataTypeOrTransport === "string" && 8747 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 8748 8749 options.dataTypes.unshift( dataTypeOrTransport ); 8750 inspect( dataTypeOrTransport ); 8751 return false; 8752 } else if ( seekingTransport ) { 8753 return !( selected = dataTypeOrTransport ); 8754 } 8755 } ); 8756 return selected; 8757 } 8758 8759 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 8760} 8761 8762// A special extend for ajax options 8763// that takes "flat" options (not to be deep extended) 8764// Fixes #9887 8765function ajaxExtend( target, src ) { 8766 var key, deep, 8767 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 8768 8769 for ( key in src ) { 8770 if ( src[ key ] !== undefined ) { 8771 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 8772 } 8773 } 8774 if ( deep ) { 8775 jQuery.extend( true, target, deep ); 8776 } 8777 8778 return target; 8779} 8780 8781/* Handles responses to an ajax request: 8782 * - finds the right dataType (mediates between content-type and expected dataType) 8783 * - returns the corresponding response 8784 */ 8785function ajaxHandleResponses( s, jqXHR, responses ) { 8786 8787 var ct, type, finalDataType, firstDataType, 8788 contents = s.contents, 8789 dataTypes = s.dataTypes; 8790 8791 // Remove auto dataType and get content-type in the process 8792 while ( dataTypes[ 0 ] === "*" ) { 8793 dataTypes.shift(); 8794 if ( ct === undefined ) { 8795 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 8796 } 8797 } 8798 8799 // Check if we're dealing with a known content-type 8800 if ( ct ) { 8801 for ( type in contents ) { 8802 if ( contents[ type ] && contents[ type ].test( ct ) ) { 8803 dataTypes.unshift( type ); 8804 break; 8805 } 8806 } 8807 } 8808 8809 // Check to see if we have a response for the expected dataType 8810 if ( dataTypes[ 0 ] in responses ) { 8811 finalDataType = dataTypes[ 0 ]; 8812 } else { 8813
vendor: 18,932 bytes, lines 8814-9571
8814 // Try convertible dataTypes 8815 for ( type in responses ) { 8816 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 8817 finalDataType = type; 8818 break; 8819 } 8820 if ( !firstDataType ) { 8821 firstDataType = type; 8822 } 8823 } 8824 8825 // Or just use first one 8826 finalDataType = finalDataType || firstDataType; 8827 } 8828 8829 // If we found a dataType 8830 // We add the dataType to the list if needed 8831 // and return the corresponding response 8832 if ( finalDataType ) { 8833 if ( finalDataType !== dataTypes[ 0 ] ) { 8834 dataTypes.unshift( finalDataType ); 8835 } 8836 return responses[ finalDataType ]; 8837 } 8838} 8839 8840/* Chain conversions given the request and the original response 8841 * Also sets the responseXXX fields on the jqXHR instance 8842 */ 8843function ajaxConvert( s, response, jqXHR, isSuccess ) { 8844 var conv2, current, conv, tmp, prev, 8845 converters = {}, 8846 8847 // Work with a copy of dataTypes in case we need to modify it for conversion 8848 dataTypes = s.dataTypes.slice(); 8849 8850 // Create converters map with lowercased keys 8851 if ( dataTypes[ 1 ] ) { 8852 for ( conv in s.converters ) { 8853 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 8854 } 8855 } 8856 8857 current = dataTypes.shift(); 8858 8859 // Convert to each sequential dataType 8860 while ( current ) { 8861 8862 if ( s.responseFields[ current ] ) { 8863 jqXHR[ s.responseFields[ current ] ] = response; 8864 } 8865 8866 // Apply the dataFilter if provided 8867 if ( !prev && isSuccess && s.dataFilter ) { 8868 response = s.dataFilter( response, s.dataType ); 8869 } 8870 8871 prev = current; 8872 current = dataTypes.shift(); 8873 8874 if ( current ) { 8875 8876 // There's only work to do if current dataType is non-auto 8877 if ( current === "*" ) { 8878 8879 current = prev; 8880 8881 // Convert response if prev dataType is non-auto and differs from current 8882 } else if ( prev !== "*" && prev !== current ) { 8883 8884 // Seek a direct converter 8885 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 8886 8887 // If none found, seek a pair 8888 if ( !conv ) { 8889 for ( conv2 in converters ) { 8890 8891 // If conv2 outputs current 8892 tmp = conv2.split( " " ); 8893 if ( tmp[ 1 ] === current ) { 8894 8895 // If prev can be converted to accepted input 8896 conv = converters[ prev + " " + tmp[ 0 ] ] || 8897 converters[ "* " + tmp[ 0 ] ]; 8898 if ( conv ) { 8899 8900 // Condense equivalence converters 8901 if ( conv === true ) { 8902 conv = converters[ conv2 ]; 8903 8904 // Otherwise, insert the intermediate dataType 8905 } else if ( converters[ conv2 ] !== true ) { 8906 current = tmp[ 0 ]; 8907 dataTypes.unshift( tmp[ 1 ] ); 8908 } 8909 break; 8910 } 8911 } 8912 } 8913 } 8914 8915 // Apply converter (if not an equivalence) 8916 if ( conv !== true ) { 8917 8918 // Unless errors are allowed to bubble, catch and return them 8919 if ( conv && s.throws ) { 8920 response = conv( response ); 8921 } else { 8922 try { 8923 response = conv( response ); 8924 } catch ( e ) { 8925 return { 8926 state: "parsererror", 8927 error: conv ? e : "No conversion from " + prev + " to " + current 8928 }; 8929 } 8930 } 8931 } 8932 } 8933 } 8934 } 8935 8936 return { state: "success", data: response }; 8937} 8938 8939jQuery.extend( { 8940 8941 // Counter for holding the number of active queries 8942 active: 0, 8943 8944 // Last-Modified header cache for next request 8945 lastModified: {}, 8946 etag: {}, 8947 8948 ajaxSettings: { 8949 url: location.href, 8950 type: "GET", 8951 isLocal: rlocalProtocol.test( location.protocol ), 8952 global: true, 8953 processData: true, 8954 async: true, 8955 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 8956 8957 /* 8958 timeout: 0, 8959 data: null, 8960 dataType: null, 8961 username: null, 8962 password: null, 8963 cache: null, 8964 throws: false, 8965 traditional: false, 8966 headers: {}, 8967 */ 8968 8969 accepts: { 8970 "*": allTypes, 8971 text: "text/plain", 8972 html: "text/html", 8973 xml: "application/xml, text/xml", 8974 json: "application/json, text/javascript" 8975 }, 8976 8977 contents: { 8978 xml: /\bxml\b/, 8979 html: /\bhtml/, 8980 json: /\bjson\b/ 8981 }, 8982 8983 responseFields: { 8984 xml: "responseXML", 8985 text: "responseText", 8986 json: "responseJSON" 8987 }, 8988 8989 // Data converters 8990 // Keys separate source (or catchall "*") and destination types with a single space 8991 converters: { 8992 8993 // Convert anything to text 8994 "* text": String, 8995 8996 // Text to html (true = no transformation) 8997 "text html": true, 8998 8999 // Evaluate text as a json expression 9000 "text json": JSON.parse, 9001 9002 // Parse text as xml 9003 "text xml": jQuery.parseXML 9004 }, 9005 9006 // For options that shouldn't be deep extended: 9007 // you can add your own custom options here if 9008 // and when you create one that shouldn't be 9009 // deep extended (see ajaxExtend) 9010 flatOptions: { 9011 url: true, 9012 context: true 9013 } 9014 }, 9015 9016 // Creates a full fledged settings object into target 9017 // with both ajaxSettings and settings fields. 9018 // If target is omitted, writes into ajaxSettings. 9019 ajaxSetup: function( target, settings ) { 9020 return settings ? 9021 9022 // Building a settings object 9023 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 9024 9025 // Extending ajaxSettings 9026 ajaxExtend( jQuery.ajaxSettings, target ); 9027 }, 9028 9029 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 9030 ajaxTransport: addToPrefiltersOrTransports( transports ), 9031 9032 // Main method 9033 ajax: function( url, options ) { 9034 9035 // If url is an object, simulate pre-1.5 signature 9036 if ( typeof url === "object" ) { 9037 options = url; 9038 url = undefined; 9039 } 9040 9041 // Force options to be an object 9042 options = options || {}; 9043 9044 var transport, 9045 9046 // URL without anti-cache param 9047 cacheURL, 9048 9049 // Response headers 9050 responseHeadersString, 9051 responseHeaders, 9052 9053 // timeout handle 9054 timeoutTimer, 9055 9056 // Url cleanup var 9057 urlAnchor, 9058 9059 // Request state (becomes false upon send and true upon completion) 9060 completed, 9061 9062 // To know if global events are to be dispatched 9063 fireGlobals, 9064 9065 // Loop variable 9066 i, 9067 9068 // uncached part of the url 9069 uncached, 9070 9071 // Create the final options object 9072 s = jQuery.ajaxSetup( {}, options ), 9073 9074 // Callbacks context 9075 callbackContext = s.context || s, 9076 9077 // Context for global events is callbackContext if it is a DOM node or jQuery collection 9078 globalEventContext = s.context && 9079 ( callbackContext.nodeType || callbackContext.jquery ) ? 9080 jQuery( callbackContext ) : 9081 jQuery.event, 9082 9083 // Deferreds 9084 deferred = jQuery.Deferred(), 9085 completeDeferred = jQuery.Callbacks( "once memory" ), 9086 9087 // Status-dependent callbacks 9088 statusCode = s.statusCode || {}, 9089 9090 // Headers (they are sent all at once) 9091 requestHeaders = {}, 9092 requestHeadersNames = {}, 9093 9094 // Default abort message 9095 strAbort = "canceled", 9096 9097 // Fake xhr 9098 jqXHR = { 9099 readyState: 0, 9100 9101 // Builds headers hashtable if needed 9102 getResponseHeader: function( key ) { 9103 var match; 9104 if ( completed ) { 9105 if ( !responseHeaders ) { 9106 responseHeaders = {}; 9107 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 9108 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; 9109 } 9110 } 9111 match = responseHeaders[ key.toLowerCase() ]; 9112 } 9113 return match == null ? null : match; 9114 }, 9115 9116 // Raw string 9117 getAllResponseHeaders: function() { 9118 return completed ? responseHeadersString : null; 9119 }, 9120 9121 // Caches the header 9122 setRequestHeader: function( name, value ) { 9123 if ( completed == null ) { 9124 name = requestHeadersNames[ name.toLowerCase() ] = 9125 requestHeadersNames[ name.toLowerCase() ] || name; 9126 requestHeaders[ name ] = value; 9127 } 9128 return this; 9129 }, 9130 9131 // Overrides response content-type header 9132 overrideMimeType: function( type ) { 9133 if ( completed == null ) { 9134 s.mimeType = type; 9135 } 9136 return this; 9137 }, 9138 9139 // Status-dependent callbacks 9140 statusCode: function( map ) { 9141 var code; 9142 if ( map ) { 9143 if ( completed ) { 9144 9145 // Execute the appropriate callbacks 9146 jqXHR.always( map[ jqXHR.status ] ); 9147 } else { 9148 9149 // Lazy-add the new callbacks in a way that preserves old ones 9150 for ( code in map ) { 9151 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 9152 } 9153 } 9154 } 9155 return this; 9156 }, 9157 9158 // Cancel the request 9159 abort: function( statusText ) { 9160 var finalText = statusText || strAbort; 9161 if ( transport ) { 9162 transport.abort( finalText ); 9163 } 9164 done( 0, finalText ); 9165 return this; 9166 } 9167 }; 9168 9169 // Attach deferreds 9170 deferred.promise( jqXHR ); 9171 9172 // Add protocol if not provided (prefilters might expect it) 9173 // Handle falsy url in the settings object (#10093: consistency with old signature) 9174 // We also use the url parameter if available 9175 s.url = ( ( url || s.url || location.href ) + "" ) 9176 .replace( rprotocol, location.protocol + "//" ); 9177 9178 // Alias method option to type as per ticket #12004 9179 s.type = options.method || options.type || s.method || s.type; 9180 9181 // Extract dataTypes list 9182 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 9183 9184 // A cross-domain request is in order when the origin doesn't match the current origin. 9185 if ( s.crossDomain == null ) { 9186 urlAnchor = document.createElement( "a" ); 9187 9188 // Support: IE <=8 - 11, Edge 12 - 13 9189 // IE throws exception on accessing the href property if url is malformed, 9190 // e.g. http://example.com:80x/ 9191 try { 9192 urlAnchor.href = s.url; 9193 9194 // Support: IE <=8 - 11 only 9195 // Anchor's host property isn't correctly set when s.url is relative 9196 urlAnchor.href = urlAnchor.href; 9197 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 9198 urlAnchor.protocol + "//" + urlAnchor.host; 9199 } catch ( e ) { 9200 9201 // If there is an error parsing the URL, assume it is crossDomain, 9202 // it can be rejected by the transport if it is invalid 9203 s.crossDomain = true; 9204 } 9205 } 9206 9207 // Convert data if not already a string 9208 if ( s.data && s.processData && typeof s.data !== "string" ) { 9209 s.data = jQuery.param( s.data, s.traditional ); 9210 } 9211 9212 // Apply prefilters 9213 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 9214 9215 // If request was aborted inside a prefilter, stop there 9216 if ( completed ) { 9217 return jqXHR; 9218 } 9219 9220 // We can fire global events as of now if asked to 9221 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 9222 fireGlobals = jQuery.event && s.global; 9223 9224 // Watch for a new set of requests 9225 if ( fireGlobals && jQuery.active++ === 0 ) { 9226 jQuery.event.trigger( "ajaxStart" ); 9227 } 9228 9229 // Uppercase the type 9230 s.type = s.type.toUpperCase(); 9231 9232 // Determine if request has content 9233 s.hasContent = !rnoContent.test( s.type ); 9234 9235 // Save the URL in case we're toying with the If-Modified-Since 9236 // and/or If-None-Match header later on 9237 // Remove hash to simplify url manipulation 9238 cacheURL = s.url.replace( rhash, "" ); 9239 9240 // More options handling for requests with no content 9241 if ( !s.hasContent ) { 9242 9243 // Remember the hash so we can put it back 9244 uncached = s.url.slice( cacheURL.length ); 9245 9246 // If data is available, append data to url 9247 if ( s.data ) { 9248 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 9249 9250 // #9682: remove data so that it's not used in an eventual retry 9251 delete s.data; 9252 } 9253 9254 // Add or update anti-cache param if needed 9255 if ( s.cache === false ) { 9256 cacheURL = cacheURL.replace( rantiCache, "$1" ); 9257 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; 9258 } 9259 9260 // Put hash and anti-cache on the URL that will be requested (gh-1732) 9261 s.url = cacheURL + uncached; 9262 9263 // Change '%20' to '+' if this is encoded form body content (gh-2658) 9264 } else if ( s.data && s.processData && 9265 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 9266 s.data = s.data.replace( r20, "+" ); 9267 } 9268 9269 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9270 if ( s.ifModified ) { 9271 if ( jQuery.lastModified[ cacheURL ] ) { 9272 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 9273 } 9274 if ( jQuery.etag[ cacheURL ] ) { 9275 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 9276 } 9277 } 9278 9279 // Set the correct header, if data is being sent 9280 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 9281 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 9282 } 9283 9284 // Set the Accepts header for the server, depending on the dataType 9285 jqXHR.setRequestHeader( 9286 "Accept", 9287 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 9288 s.accepts[ s.dataTypes[ 0 ] ] + 9289 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 9290 s.accepts[ "*" ] 9291 ); 9292 9293 // Check for headers option 9294 for ( i in s.headers ) { 9295 jqXHR.setRequestHeader( i, s.headers[ i ] ); 9296 } 9297 9298 // Allow custom headers/mimetypes and early abort 9299 if ( s.beforeSend && 9300 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 9301 9302 // Abort if not done already and return 9303 return jqXHR.abort(); 9304 } 9305 9306 // Aborting is no longer a cancellation 9307 strAbort = "abort"; 9308 9309 // Install callbacks on deferreds 9310 completeDeferred.add( s.complete ); 9311 jqXHR.done( s.success ); 9312 jqXHR.fail( s.error ); 9313 9314 // Get transport 9315 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 9316 9317 // If no transport, we auto-abort 9318 if ( !transport ) { 9319 done( -1, "No Transport" ); 9320 } else { 9321 jqXHR.readyState = 1; 9322 9323 // Send global event 9324 if ( fireGlobals ) { 9325 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 9326 } 9327 9328 // If request was aborted inside ajaxSend, stop there 9329 if ( completed ) { 9330 return jqXHR; 9331 } 9332 9333 // Timeout 9334 if ( s.async && s.timeout > 0 ) { 9335 timeoutTimer = window.setTimeout( function() { 9336 jqXHR.abort( "timeout" ); 9337 }, s.timeout ); 9338 } 9339 9340 try { 9341 completed = false; 9342 transport.send( requestHeaders, done ); 9343 } catch ( e ) { 9344 9345 // Rethrow post-completion exceptions 9346 if ( completed ) { 9347 throw e; 9348 } 9349 9350 // Propagate others as results 9351 done( -1, e ); 9352 } 9353 } 9354 9355 // Callback for when everything is done 9356 function done( status, nativeStatusText, responses, headers ) { 9357 var isSuccess, success, error, response, modified, 9358 statusText = nativeStatusText; 9359 9360 // Ignore repeat invocations 9361 if ( completed ) { 9362 return; 9363 } 9364 9365 completed = true; 9366 9367 // Clear timeout if it exists 9368 if ( timeoutTimer ) { 9369 window.clearTimeout( timeoutTimer ); 9370 } 9371 9372 // Dereference transport for early garbage collection 9373 // (no matter how long the jqXHR object will be used) 9374 transport = undefined; 9375 9376 // Cache response headers 9377 responseHeadersString = headers || ""; 9378 9379 // Set readyState 9380 jqXHR.readyState = status > 0 ? 4 : 0; 9381 9382 // Determine if successful 9383 isSuccess = status >= 200 && status < 300 || status === 304; 9384 9385 // Get response data 9386 if ( responses ) { 9387 response = ajaxHandleResponses( s, jqXHR, responses ); 9388 } 9389 9390 // Convert no matter what (that way responseXXX fields are always set) 9391 response = ajaxConvert( s, response, jqXHR, isSuccess ); 9392 9393 // If successful, handle type chaining 9394 if ( isSuccess ) { 9395 9396 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9397 if ( s.ifModified ) { 9398 modified = jqXHR.getResponseHeader( "Last-Modified" ); 9399 if ( modified ) { 9400 jQuery.lastModified[ cacheURL ] = modified; 9401 } 9402 modified = jqXHR.getResponseHeader( "etag" ); 9403 if ( modified ) { 9404 jQuery.etag[ cacheURL ] = modified; 9405 } 9406 } 9407 9408 // if no content 9409 if ( status === 204 || s.type === "HEAD" ) { 9410 statusText = "nocontent"; 9411 9412 // if not modified 9413 } else if ( status === 304 ) { 9414 statusText = "notmodified"; 9415 9416 // If we have data, let's convert it 9417 } else { 9418 statusText = response.state; 9419 success = response.data; 9420 error = response.error; 9421 isSuccess = !error; 9422 } 9423 } else { 9424 9425 // Extract error from statusText and normalize for non-aborts 9426 error = statusText; 9427 if ( status || !statusText ) { 9428 statusText = "error"; 9429 if ( status < 0 ) { 9430 status = 0; 9431 } 9432 } 9433 } 9434 9435 // Set data for the fake xhr object 9436 jqXHR.status = status; 9437 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 9438 9439 // Success/Error 9440 if ( isSuccess ) { 9441 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 9442 } else { 9443 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 9444 } 9445 9446 // Status-dependent callbacks 9447 jqXHR.statusCode( statusCode ); 9448 statusCode = undefined; 9449 9450 if ( fireGlobals ) { 9451 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 9452 [ jqXHR, s, isSuccess ? success : error ] ); 9453 } 9454 9455 // Complete 9456 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 9457 9458 if ( fireGlobals ) { 9459 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 9460 9461 // Handle the global AJAX counter 9462 if ( !( --jQuery.active ) ) { 9463 jQuery.event.trigger( "ajaxStop" ); 9464 } 9465 } 9466 } 9467 9468 return jqXHR; 9469 }, 9470 9471 getJSON: function( url, data, callback ) { 9472 return jQuery.get( url, data, callback, "json" ); 9473 }, 9474 9475 getScript: function( url, callback ) { 9476 return jQuery.get( url, undefined, callback, "script" ); 9477 } 9478} ); 9479 9480jQuery.each( [ "get", "post" ], function( i, method ) { 9481 jQuery[ method ] = function( url, data, callback, type ) { 9482 9483 // Shift arguments if data argument was omitted 9484 if ( jQuery.isFunction( data ) ) { 9485 type = type || callback; 9486 callback = data; 9487 data = undefined; 9488 } 9489 9490 // The url can be an options object (which then must have .url) 9491 return jQuery.ajax( jQuery.extend( { 9492 url: url, 9493 type: method, 9494 dataType: type, 9495 data: data, 9496 success: callback 9497 }, jQuery.isPlainObject( url ) && url ) ); 9498 }; 9499} ); 9500 9501 9502jQuery._evalUrl = function( url ) { 9503 return jQuery.ajax( { 9504 url: url, 9505 9506 // Make this explicit, since user can override this through ajaxSetup (#11264) 9507 type: "GET", 9508 dataType: "script", 9509 cache: true, 9510 async: false, 9511 global: false, 9512 "throws": true 9513 } ); 9514}; 9515 9516 9517jQuery.fn.extend( { 9518 wrapAll: function( html ) { 9519 var wrap; 9520 9521 if ( this[ 0 ] ) { 9522 if ( jQuery.isFunction( html ) ) { 9523 html = html.call( this[ 0 ] ); 9524 } 9525 9526 // The elements to wrap the target around 9527 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 9528 9529 if ( this[ 0 ].parentNode ) { 9530 wrap.insertBefore( this[ 0 ] ); 9531 } 9532 9533 wrap.map( function() { 9534 var elem = this; 9535 9536 while ( elem.firstElementChild ) { 9537 elem = elem.firstElementChild; 9538 } 9539 9540 return elem; 9541 } ).append( this ); 9542 } 9543 9544 return this; 9545 }, 9546 9547 wrapInner: function( html ) { 9548 if ( jQuery.isFunction( html ) ) { 9549 return this.each( function( i ) { 9550 jQuery( this ).wrapInner( html.call( this, i ) ); 9551 } ); 9552 } 9553 9554 return this.each( function() { 9555 var self = jQuery( this ), 9556 contents = self.contents(); 9557 9558 if ( contents.length ) { 9559 contents.wrapAll( html ); 9560 9561 } else { 9562 self.append( html ); 9563 } 9564 } ); 9565 }, 9566 9567 wrap: function( html ) { 9568 var isFunction = jQuery.isFunction( html ); 9569 9570 return this.each( function( i ) { 9571 jQuery( this ).wrapAll( i
vendor: 2,399 bytes, lines 9571-9663
9571sFunction ? html.call( this, i ) : html ); 9572 } ); 9573 }, 9574 9575 unwrap: function( selector ) { 9576 this.parent( selector ).not( "body" ).each( function() { 9577 jQuery( this ).replaceWith( this.childNodes ); 9578 } ); 9579 return this; 9580 } 9581} ); 9582 9583 9584jQuery.expr.pseudos.hidden = function( elem ) { 9585 return !jQuery.expr.pseudos.visible( elem ); 9586}; 9587jQuery.expr.pseudos.visible = function( elem ) { 9588 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 9589}; 9590 9591 9592 9593 9594jQuery.ajaxSettings.xhr = function() { 9595 try { 9596 return new window.XMLHttpRequest(); 9597 } catch ( e ) {} 9598}; 9599 9600var xhrSuccessStatus = { 9601 9602 // File protocol always yields status code 0, assume 200 9603 0: 200, 9604 9605 // Support: IE <=9 only 9606 // #1450: sometimes IE returns 1223 when it should be 204 9607 1223: 204 9608 }, 9609 xhrSupported = jQuery.ajaxSettings.xhr(); 9610 9611support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 9612support.ajax = xhrSupported = !!xhrSupported; 9613 9614jQuery.ajaxTransport( function( options ) { 9615 var callback, errorCallback; 9616 9617 // Cross domain only allowed if supported through XMLHttpRequest 9618 if ( support.cors || xhrSupported && !options.crossDomain ) { 9619 return { 9620 send: function( headers, complete ) { 9621 var i, 9622 xhr = options.xhr(); 9623 9624 xhr.open( 9625 options.type, 9626 options.url, 9627 options.async, 9628 options.username, 9629 options.password 9630 ); 9631 9632 // Apply custom fields if provided 9633 if ( options.xhrFields ) { 9634 for ( i in options.xhrFields ) { 9635 xhr[ i ] = options.xhrFields[ i ]; 9636 } 9637 } 9638 9639 // Override mime type if needed 9640 if ( options.mimeType && xhr.overrideMimeType ) { 9641 xhr.overrideMimeType( options.mimeType ); 9642 } 9643 9644 // X-Requested-With header 9645 // For cross-domain requests, seeing as conditions for a preflight are 9646 // akin to a jigsaw puzzle, we simply never set it to be sure. 9647 // (it can always be set on a per-request basis or even using ajaxSetup) 9648 // For same-domain requests, won't change header if already provided. 9649 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 9650 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 9651 } 9652 9653 // Set headers 9654 for ( i in headers ) { 9655 xhr.setRequestHeader( i, headers[ i ] ); 9656 } 9657 9658 // Callback 9659 callback = function( type ) { 9660 return function() { 9661 if ( callback ) { 9662 callback = errorCallback = xhr.onload = 9663 xhr.onerror = xhr.onabort = xhr.on
vendor: 5,102 bytes, lines 9663-9868
9663readystatechange = null; 9664 9665 if ( type === "abort" ) { 9666 xhr.abort(); 9667 } else if ( type === "error" ) { 9668 9669 // Support: IE <=9 only 9670 // On a manual native abort, IE9 throws 9671 // errors on any property access that is not readyState 9672 if ( typeof xhr.status !== "number" ) { 9673 complete( 0, "error" ); 9674 } else { 9675 complete( 9676 9677 // File: protocol always yields status 0; see #8605, #14207 9678 xhr.status, 9679 xhr.statusText 9680 ); 9681 } 9682 } else { 9683 complete( 9684 xhrSuccessStatus[ xhr.status ] || xhr.status, 9685 xhr.statusText, 9686 9687 // Support: IE <=9 only 9688 // IE9 has no XHR2 but throws on binary (trac-11426) 9689 // For XHR2 non-text, let the caller handle it (gh-2498) 9690 ( xhr.responseType || "text" ) !== "text" || 9691 typeof xhr.responseText !== "string" ? 9692 { binary: xhr.response } : 9693 { text: xhr.responseText }, 9694 xhr.getAllResponseHeaders() 9695 ); 9696 } 9697 } 9698 }; 9699 }; 9700 9701 // Listen to events 9702 xhr.onload = callback(); 9703 errorCallback = xhr.onerror = callback( "error" ); 9704 9705 // Support: IE 9 only 9706 // Use onreadystatechange to replace onabort 9707 // to handle uncaught aborts 9708 if ( xhr.onabort !== undefined ) { 9709 xhr.onabort = errorCallback; 9710 } else { 9711 xhr.onreadystatechange = function() { 9712 9713 // Check readyState before timeout as it changes 9714 if ( xhr.readyState === 4 ) { 9715 9716 // Allow onerror to be called first, 9717 // but that will not handle a native abort 9718 // Also, save errorCallback to a variable 9719 // as xhr.onerror cannot be accessed 9720 window.setTimeout( function() { 9721 if ( callback ) { 9722 errorCallback(); 9723 } 9724 } ); 9725 } 9726 }; 9727 } 9728 9729 // Create the abort callback 9730 callback = callback( "abort" ); 9731 9732 try { 9733 9734 // Do send the request (this may raise an exception) 9735 xhr.send( options.hasContent && options.data || null ); 9736 } catch ( e ) { 9737 9738 // #14683: Only rethrow if this hasn't been notified as an error yet 9739 if ( callback ) { 9740 throw e; 9741 } 9742 } 9743 }, 9744 9745 abort: function() { 9746 if ( callback ) { 9747 callback(); 9748 } 9749 } 9750 }; 9751 } 9752} ); 9753 9754 9755 9756 9757// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 9758jQuery.ajaxPrefilter( function( s ) { 9759 if ( s.crossDomain ) { 9760 s.contents.script = false; 9761 } 9762} ); 9763 9764// Install script dataType 9765jQuery.ajaxSetup( { 9766 accepts: { 9767 script: "text/javascript, application/javascript, " + 9768 "application/ecmascript, application/x-ecmascript" 9769 }, 9770 contents: { 9771 script: /\b(?:java|ecma)script\b/ 9772 }, 9773 converters: { 9774 "text script": function( text ) { 9775 jQuery.globalEval( text ); 9776 return text; 9777 } 9778 } 9779} ); 9780 9781// Handle cache's special case and crossDomain 9782jQuery.ajaxPrefilter( "script", function( s ) { 9783 if ( s.cache === undefined ) { 9784 s.cache = false; 9785 } 9786 if ( s.crossDomain ) { 9787 s.type = "GET"; 9788 } 9789} ); 9790 9791// Bind script tag hack transport 9792jQuery.ajaxTransport( "script", function( s ) { 9793 9794 // This transport only deals with cross domain requests 9795 if ( s.crossDomain ) { 9796 var script, callback; 9797 return { 9798 send: function( _, complete ) { 9799 script = jQuery( "<script>" ).prop( { 9800 charset: s.scriptCharset, 9801 src: s.url 9802 } ).on( 9803 "load error", 9804 callback = function( evt ) { 9805 script.remove(); 9806 callback = null; 9807 if ( evt ) { 9808 complete( evt.type === "error" ? 404 : 200, evt.type ); 9809 } 9810 } 9811 ); 9812 9813 // Use native DOM manipulation to avoid our domManip AJAX trickery 9814 document.head.appendChild( script[ 0 ] ); 9815 }, 9816 abort: function() { 9817 if ( callback ) { 9818 callback(); 9819 } 9820 } 9821 }; 9822 } 9823} ); 9824 9825 9826 9827 9828var oldCallbacks = [], 9829 rjsonp = /(=)\?(?=&|$)|\?\?/; 9830 9831// Default jsonp settings 9832jQuery.ajaxSetup( { 9833 jsonp: "callback", 9834 jsonpCallback: function() { 9835 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 9836 this[ callback ] = true; 9837 return callback; 9838 } 9839} ); 9840 9841// Detect, normalize options and install callbacks for jsonp requests 9842jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 9843 9844 var callbackName, overwritten, responseContainer, 9845 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 9846 "url" : 9847 typeof s.data === "string" && 9848 ( s.contentType || "" ) 9849 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 9850 rjsonp.test( s.data ) && "data" 9851 ); 9852 9853 // Handle iff the expected data type is "jsonp" or we have a parameter to set 9854 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 9855 9856 // Get callback name, remembering preexisting value associated with it 9857 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? 9858 s.jsonpCallback() : 9859 s.jsonpCallback; 9860 9861 // Insert callback into url or form data 9862 if ( jsonProp ) { 9863 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 9864 } else if ( s.jsonp !== false ) { 9865 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 9866 } 9867 9868 // Use data converter to retrieve json after script execution
vendor: 2,994 bytes, lines 9869-9978
9869 s.converters[ "script json" ] = function() { 9870 if ( !responseContainer ) { 9871 jQuery.error( callbackName + " was not called" ); 9872 } 9873 return responseContainer[ 0 ]; 9874 }; 9875 9876 // Force json dataType 9877 s.dataTypes[ 0 ] = "json"; 9878 9879 // Install callback 9880 overwritten = window[ callbackName ]; 9881 window[ callbackName ] = function() { 9882 responseContainer = arguments; 9883 }; 9884 9885 // Clean-up function (fires after converters) 9886 jqXHR.always( function() { 9887 9888 // If previous value didn't exist - remove it 9889 if ( overwritten === undefined ) { 9890 jQuery( window ).removeProp( callbackName ); 9891 9892 // Otherwise restore preexisting value 9893 } else { 9894 window[ callbackName ] = overwritten; 9895 } 9896 9897 // Save back as free 9898 if ( s[ callbackName ] ) { 9899 9900 // Make sure that re-using the options doesn't screw things around 9901 s.jsonpCallback = originalSettings.jsonpCallback; 9902 9903 // Save the callback name for future use 9904 oldCallbacks.push( callbackName ); 9905 } 9906 9907 // Call if it was a function and we have a response 9908 if ( responseContainer && jQuery.isFunction( overwritten ) ) { 9909 overwritten( responseContainer[ 0 ] ); 9910 } 9911 9912 responseContainer = overwritten = undefined; 9913 } ); 9914 9915 // Delegate to script 9916 return "script"; 9917 } 9918} ); 9919 9920 9921 9922 9923// Support: Safari 8 only 9924// In Safari 8 documents created via document.implementation.createHTMLDocument 9925// collapse sibling forms: the second one becomes a child of the first one. 9926// Because of that, this security measure has to be disabled in Safari 8. 9927// https://bugs.webkit.org/show_bug.cgi?id=137337 9928support.createHTMLDocument = ( function() { 9929 var body = document.implementation.createHTMLDocument( "" ).body; 9930 body.innerHTML = "<form></form><form></form>"; 9931 return body.childNodes.length === 2; 9932} )(); 9933 9934 9935// Argument "data" should be string of html 9936// context (optional): If specified, the fragment will be created in this context, 9937// defaults to document 9938// keepScripts (optional): If true, will include scripts passed in the html string 9939jQuery.parseHTML = function( data, context, keepScripts ) { 9940 if ( typeof data !== "string" ) { 9941 return []; 9942 } 9943 if ( typeof context === "boolean" ) { 9944 keepScripts = context; 9945 context = false; 9946 } 9947 9948 var base, parsed, scripts; 9949 9950 if ( !context ) { 9951 9952 // Stop scripts or inline event handlers from being executed immediately 9953 // by using document.implementation 9954 if ( support.createHTMLDocument ) { 9955 context = document.implementation.createHTMLDocument( "" ); 9956 9957 // Set the base href for the created document 9958 // so any parsed elements with URLs 9959 // are based on the document's URL (gh-2965) 9960 base = context.createElement( "base" ); 9961 base.href = document.location.href; 9962 context.head.appendChild( base ); 9963 } else { 9964 context = document; 9965 } 9966 } 9967 9968 parsed = rsingleTag.exec( data ); 9969 scripts = !keepScripts && []; 9970 9971 // Single tag 9972 if ( parsed ) { 9973 return [ context.createElement( parsed[ 1 ] ) ]; 9974 } 9975 9976 parsed = buildFragment( [ data ], context, scripts ); 9977 9978 if ( scripts && scripts.length ) {
vendor: 4,095 bytes, lines 9979-10149
9979 jQuery( scripts ).remove(); 9980 } 9981 9982 return jQuery.merge( [], parsed.childNodes ); 9983}; 9984 9985 9986/** 9987 * Load a url into a page 9988 */ 9989jQuery.fn.load = function( url, params, callback ) { 9990 var selector, type, response, 9991 self = this, 9992 off = url.indexOf( " " ); 9993 9994 if ( off > -1 ) { 9995 selector = stripAndCollapse( url.slice( off ) ); 9996 url = url.slice( 0, off ); 9997 } 9998 9999 // If it's a function 10000 if ( jQuery.isFunction( params ) ) { 10001 10002 // We assume that it's the callback 10003 callback = params; 10004 params = undefined; 10005 10006 // Otherwise, build a param string 10007 } else if ( params && typeof params === "object" ) { 10008 type = "POST"; 10009 } 10010 10011 // If we have elements to modify, make the request 10012 if ( self.length > 0 ) { 10013 jQuery.ajax( { 10014 url: url, 10015 10016 // If "type" variable is undefined, then "GET" method will be used. 10017 // Make value of this field explicit since 10018 // user can override it through ajaxSetup method 10019 type: type || "GET", 10020 dataType: "html", 10021 data: params 10022 } ).done( function( responseText ) { 10023 10024 // Save response for use in complete callback 10025 response = arguments; 10026 10027 self.html( selector ? 10028 10029 // If a selector was specified, locate the right elements in a dummy div 10030 // Exclude scripts to avoid IE 'Permission Denied' errors 10031 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 10032 10033 // Otherwise use the full result 10034 responseText ); 10035 10036 // If the request succeeds, this function gets "data", "status", "jqXHR" 10037 // but they are ignored because response was set above. 10038 // If it fails, this function gets "jqXHR", "status", "error" 10039 } ).always( callback && function( jqXHR, status ) { 10040 self.each( function() { 10041 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 10042 } ); 10043 } ); 10044 } 10045 10046 return this; 10047}; 10048 10049 10050 10051 10052// Attach a bunch of functions for handling common AJAX events 10053jQuery.each( [ 10054 "ajaxStart", 10055 "ajaxStop", 10056 "ajaxComplete", 10057 "ajaxError", 10058 "ajaxSuccess", 10059 "ajaxSend" 10060], function( i, type ) { 10061 jQuery.fn[ type ] = function( fn ) { 10062 return this.on( type, fn ); 10063 }; 10064} ); 10065 10066 10067 10068 10069jQuery.expr.pseudos.animated = function( elem ) { 10070 return jQuery.grep( jQuery.timers, function( fn ) { 10071 return elem === fn.elem; 10072 } ).length; 10073}; 10074 10075 10076 10077 10078jQuery.offset = { 10079 setOffset: function( elem, options, i ) { 10080 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 10081 position = jQuery.css( elem, "position" ), 10082 curElem = jQuery( elem ), 10083 props = {}; 10084 10085 // Set position first, in-case top/left are set even on static elem 10086 if ( position === "static" ) { 10087 elem.style.position = "relative"; 10088 } 10089 10090 curOffset = curElem.offset(); 10091 curCSSTop = jQuery.css( elem, "top" ); 10092 curCSSLeft = jQuery.css( elem, "left" ); 10093 calculatePosition = ( position === "absolute" || position === "fixed" ) && 10094 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 10095 10096 // Need to be able to calculate position if either 10097 // top or left is auto and position is either absolute or fixed 10098 if ( calculatePosition ) { 10099 curPosition = curElem.position(); 10100 curTop = curPosition.top; 10101 curLeft = curPosition.left; 10102 10103 } else { 10104 curTop = parseFloat( curCSSTop ) || 0; 10105 curLeft = parseFloat( curCSSLeft ) || 0; 10106 } 10107 10108 if ( jQuery.isFunction( options ) ) { 10109 10110 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 10111 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 10112 } 10113 10114 if ( options.top != null ) { 10115 props.top = ( options.top - curOffset.top ) + curTop; 10116 } 10117 if ( options.left != null ) { 10118 props.left = ( options.left - curOffset.left ) + curLeft; 10119 } 10120 10121 if ( "using" in options ) { 10122 options.using.call( elem, props ); 10123 10124 } else { 10125 curElem.css( props ); 10126 } 10127 } 10128}; 10129 10130jQuery.fn.extend( { 10131 offset: function( options ) { 10132 10133 // Preserve chaining for setter 10134 if ( arguments.length ) { 10135 return options === undefined ? 10136 this : 10137 this.each( function( i ) { 10138 jQuery.offset.setOffset( this, options, i ); 10139 } ); 10140 } 10141 10142 var doc, docElem, rect, win, 10143 elem = this[ 0 ]; 10144 10145 if ( !elem ) { 10146 return; 10147 } 10148 10149 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
vendor: 4,119 bytes, lines 10150-10288
10150 // Support: IE <=11 only 10151 // Running getBoundingClientRect on a 10152 // disconnected node in IE throws an error 10153 if ( !elem.getClientRects().length ) { 10154 return { top: 0, left: 0 }; 10155 } 10156 10157 rect = elem.getBoundingClientRect(); 10158 10159 doc = elem.ownerDocument; 10160 docElem = doc.documentElement; 10161 win = doc.defaultView; 10162 10163 return { 10164 top: rect.top + win.pageYOffset - docElem.clientTop, 10165 left: rect.left + win.pageXOffset - docElem.clientLeft 10166 }; 10167 }, 10168 10169 position: function() { 10170 if ( !this[ 0 ] ) { 10171 return; 10172 } 10173 10174 var offsetParent, offset, 10175 elem = this[ 0 ], 10176 parentOffset = { top: 0, left: 0 }; 10177 10178 // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, 10179 // because it is its only offset parent 10180 if ( jQuery.css( elem, "position" ) === "fixed" ) { 10181 10182 // Assume getBoundingClientRect is there when computed position is fixed 10183 offset = elem.getBoundingClientRect(); 10184 10185 } else { 10186 10187 // Get *real* offsetParent 10188 offsetParent = this.offsetParent(); 10189 10190 // Get correct offsets 10191 offset = this.offset(); 10192 if ( !nodeName( offsetParent[ 0 ], "html" ) ) { 10193 parentOffset = offsetParent.offset(); 10194 } 10195 10196 // Add offsetParent borders 10197 parentOffset = { 10198 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ), 10199 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) 10200 }; 10201 } 10202 10203 // Subtract parent offsets and element margins 10204 return { 10205 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 10206 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 10207 }; 10208 }, 10209 10210 // This method will return documentElement in the following cases: 10211 // 1) For the element inside the iframe without offsetParent, this method will return 10212 // documentElement of the parent window 10213 // 2) For the hidden or detached element 10214 // 3) For body or html element, i.e. in case of the html node - it will return itself 10215 // 10216 // but those exceptions were never presented as a real life use-cases 10217 // and might be considered as more preferable results. 10218 // 10219 // This logic, however, is not guaranteed and can change at any point in the future 10220 offsetParent: function() { 10221 return this.map( function() { 10222 var offsetParent = this.offsetParent; 10223 10224 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 10225 offsetParent = offsetParent.offsetParent; 10226 } 10227 10228 return offsetParent || documentElement; 10229 } ); 10230 } 10231} ); 10232 10233// Create scrollLeft and scrollTop methods 10234jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 10235 var top = "pageYOffset" === prop; 10236 10237 jQuery.fn[ method ] = function( val ) { 10238 return access( this, function( elem, method, val ) { 10239 10240 // Coalesce documents and windows 10241 var win; 10242 if ( jQuery.isWindow( elem ) ) { 10243 win = elem; 10244 } else if ( elem.nodeType === 9 ) { 10245 win = elem.defaultView; 10246 } 10247 10248 if ( val === undefined ) { 10249 return win ? win[ prop ] : elem[ method ]; 10250 } 10251 10252 if ( win ) { 10253 win.scrollTo( 10254 !top ? val : win.pageXOffset, 10255 top ? val : win.pageYOffset 10256 ); 10257 10258 } else { 10259 elem[ method ] = val; 10260 } 10261 }, method, val, arguments.length ); 10262 }; 10263} ); 10264 10265// Support: Safari <=7 - 9.1, Chrome <=37 - 49 10266// Add the top/left cssHooks using jQuery.fn.position 10267// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 10268// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 10269// getComputedStyle returns percent when specified for top/left/bottom/right; 10270// rather than make the css module depend on the offset module, just check for it here 10271jQuery.each( [ "top", "left" ], function( i, prop ) { 10272 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 10273 function( elem, computed ) { 10274 if ( computed ) { 10275 computed = curCSS( elem, prop ); 10276 10277 // If curCSS returns percentage, fallback to offset 10278 return rnumnonpx.test( computed ) ? 10279 jQuery( elem ).position()[ prop ] + "px" : 10280 computed; 10281 } 10282 } 10283 ); 10284} ); 10285 10286 10287// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 10288jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
10289 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, 10290 function( defaultExtra, funcName ) { 10291 10292 // Margin is only for outerHeight, outerWidth 10293 jQuery.fn[ funcName ] = function( margin, value ) { 10294 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 10295 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 10296 10297 return access( this, function( elem, type, value ) { 10298 var doc; 10299 10300 if ( jQuery.isWindow( elem ) ) { 10301 10302 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 10303 return funcName.indexOf( "outer" ) === 0 ? 10304 elem[ "inner" + name ] : 10305 elem.document.documentElement[ "client" + name ]; 10306 } 10307 10308 // Get document width or height 10309 if ( elem.nodeType === 9 ) { 10310 doc = elem.documentElement; 10311 10312 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 10313 // whichever is greatest 10314 return Math.max( 10315 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 10316 elem.body[ "offset" + name ], doc[ "offset" + name ], 10317 doc[ "client" + name ] 10318 ); 10319 } 10320 10321 return value === undefined ? 10322 10323 // Get width or height on the element, requesting but not forcing parseFloat 10324 jQuery.css( elem, type, extra ) : 10325 10326 // Set width or height on the element 10327 jQuery.style( elem, type, value, extra ); 10328 }, type, chainable ? margin : undefined, chainable ); 10329 }; 10330 } ); 10331} ); 10332 10333 10334jQuery.fn.extend( { 10335 10336 bind: function( types, data, fn ) { 10337 return this.on( types, null, data, fn ); 10338 }, 10339 unbind: function( types, fn ) { 10340 return this.off( types, null, fn ); 10341 }, 10342 10343 delegate: function( selector, types, data, fn ) { 10344 return this.on( types, selector, data, fn ); 10345 }, 10346 undelegate: function( selector, types, fn ) { 10347 10348 // ( namespace ) or ( selector, types [, fn] ) 10349 return arguments.length === 1 ? 10350 this.off( selector, "**" ) : 10351 this.off( types, selector || "**", fn ); 10352 } 10353} ); 10354 10355jQuery.holdReady = function( hold ) { 10356 if ( hold ) { 10357 jQuery.readyWait++; 10358 } else { 10359 jQuery.ready( true ); 10360 } 10361}; 10362jQuery.isArray = Array.isArray; 10363jQuery.parseJSON = JSON.parse; 10364jQuery.nodeName = nodeName; 10365 10366 10367 10368 10369// Register as a named AMD module, since jQuery can be concatenated with other 10370// files that may use define, but not via a proper concatenation script that 10371// understands anonymous AMD modules. A named AMD is safest and most robust 10372// way to register. Lowercase jquery is used because AMD module names are 10373// derived from file names, and jQuery is normally delivered in a lowercase 10374// file name. Do this after creating the global so that if an AMD module wants 10375// to call noConflict to hide this version of jQuery, it will work. 10376 10377// Note that for maximum portability, libraries that are not jQuery should 10378// declare themselves as anonymous modules, and avoid setting a global if an 10379// AMD loader is present. jQuery is a special case. For more information, see 10380// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 10381 10382if ( true ) { 10383 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 10384 return jQuery; 10385 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 10386 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 10387} 10388 10389 10390 10391 10392var 10393 10394 // Map over jQuery in case of overwrite 10395 _jQuery = window.jQuery, 10396 10397 // Map over the $ in case of overwrite 10398 _$ = window.$; 10399 10400jQuery.noConflict = function( deep ) { 10401 if ( window.$ === jQuery ) { 10402 window.$ = _$; 10403 } 10404 10405 if ( deep && window.jQuery === jQuery ) { 10406 window.jQuery = _jQuery; 10407 } 10408 10409 return jQuery; 10410}; 10411 10412// Expose jQuery and $ identifiers, even in AMD 10413// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 10414// and CommonJS for browser emulators (#13566) 10415if ( !noGlobal ) { 10416 window.jQuery = window.$ = jQuery; 10417} 10418 10419 10420 10421 10422return jQuery; 10423} ); 10424 10425 10426/***/ }), 10427/* 4 */ 10428/***/ (function(module, exports, __webpack_require__) { 10429 10430/*! 10431 * Bootstrap v4.1.3 (https://getbootstrap.com/) 10432 * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 10433 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 10434 */ 10435(function (global, factory) { 10436 true ? factory(exports, __webpack_require__(0), __webpack_require__(5)) : 10437 typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : 10438 (factory((global.bootstrap = {}),global.jQuery,global.Popper)); 10439}(this, (function (exports,$,Popper) { 'use strict'; 10440 10441 $ = $ && $.hasOwnProperty('default') ? $['default'] : $; 10442 Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; 10443 10444 function _defineProperties(target, props) { 10445 for (var i = 0; i < props.length; i++) { 10446 var descriptor = props[i]; 10447 descriptor.enumerable = descriptor.enumerable || false; 10448 descriptor.configurable = true; 10449 if ("value" in descriptor) descriptor.writable = true; 10450 Object.defineProperty(target, descriptor.key, descriptor); 10451 } 10452 } 10453 10454 function _createClass(Constructor, protoProps, staticProps) { 10455 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 10456 if (staticProps) _defineProperties(Constructor, staticProps); 10457 return Constructor; 10458 } 10459 10460 function _defineProperty(obj, key, value) { 10461 if (key in obj) { 10462 Object.defineProperty(obj, key, { 10463 value: value, 10464 enumerable: true, 10465 configurable: true, 10466 writable: true 10467 }); 10468 } else { 10469 obj[key] = value; 10470 } 10471 10472 return obj; 10473 } 10474 10475 function _objectSpread(target) { 10476 for (var i = 1; i < arguments.length; i++) { 10477 var source = arguments[i] != null ? arguments[i] : {}; 10478 var ownKeys = Object.keys(source); 10479 10480 if (typeof Object.getOwnPropertySymbols === 'function') { 10481 ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { 10482 return Object.getOwnPropertyDescriptor(source, sym).enumerable; 10483 })); 10484 } 10485 10486 ownKeys.forEach(function (key) { 10487 _defineProperty(target, key, source[key]); 10488 }); 10489 } 10490 10491 return target; 10492 } 10493 10494 function _inheritsLoose(subClass, superClass) { 10495 subClass.prototype = Object.create(superClass.prototype); 10496 subClass.prototype.constructor = subClass; 10497 subClass.__proto__ = superClass; 10498 } 10499 10500 /** 10501 * -------------------------------------------------------------------------- 10502 * Bootstrap (v4.1.3): util.js 10503 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 10504 * -------------------------------------------------------------------------- 10505 */ 10506 10507 var Util = function ($$$1) { 10508 /** 10509 * ------------------------------------------------------------------------ 10510 * Private TransitionEnd Helpers 10511 * ------------------------------------------------------------------------ 10512 */ 10513 var TRANSITION_END = 'transitionend'; 10514 var MAX_UID = 1000000; 10515 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 10516 10517 function toType(obj) { 10518 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 10519 } 10520 10521 function getSpecialTransitionEndEvent() { 10522 return { 10523 bindType: TRANSITION_END, 10524 delegateType: TRANSITION_END, 10525 handle: function handle(event) { 10526 if ($$$1(event.target).is(this)) { 10527 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 10528 } 10529 10530 return undefined; // eslint-disable-line no-undefined 10531 } 10532 }; 10533 } 10534 10535 function transitionEndEmulator(duration) { 10536 var _this = this; 10537 10538 var called = false;
10539 $$$1(this).one(Util.TRANSITION_END, function () { 10540 called = true; 10541 }); 10542 setTimeout(function () { 10543 if (!called) { 10544 Util.triggerTransitionEnd(_this); 10545 } 10546 }, duration); 10547 return this; 10548 } 10549 10550 function setTransitionEndSupport() { 10551 $$$1.fn.emulateTransitionEnd = transitionEndEmulator; 10552 $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 10553 } 10554 /** 10555 * -------------------------------------------------------------------------- 10556 * Public Util Api 10557 * -------------------------------------------------------------------------- 10558 */ 10559 10560 10561 var Util = { 10562 TRANSITION_END: 'bsTransitionEnd', 10563 getUID: function getUID(prefix) { 10564 do { 10565 // eslint-disable-next-line no-bitwise 10566 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 10567 } while (document.getElementById(prefix)); 10568 10569 return prefix; 10570 }, 10571 getSelectorFromElement: function getSelectorFromElement(element) { 10572 var selector = element.getAttribute('data-target'); 10573 10574 if (!selector || selector === '#') { 10575 selector = element.getAttribute('href') || ''; 10576 } 10577 10578 try { 10579 return document.querySelector(selector) ? selector : null; 10580 } catch (err) { 10581 return null; 10582 } 10583 }, 10584 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 10585 if (!element) { 10586 return 0; 10587 } // Get transition-duration of the element 10588 10589 10590 var transitionDuration = $$$1(element).css('transition-duration'); 10591 var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found 10592 10593 if (!floatTransitionDuration) { 10594 return 0; 10595 } // If multiple durations are defined, take the first 10596 10597 10598 transitionDuration = transitionDuration.split(',')[0]; 10599 return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; 10600 }, 10601 reflow: function reflow(element) { 10602 return element.offsetHeight; 10603 }, 10604 triggerTransitionEnd: function triggerTransitionEnd(element) { 10605 $$$1(element).trigger(TRANSITION_END); 10606 }, 10607 // TODO: Remove in v5 10608 supportsTransitionEnd: function supportsTransitionEnd() { 10609 return Boolean(TRANSITION_END); 10610 }, 10611 isElement: function isElement(obj) { 10612 return (obj[0] || obj).nodeType; 10613 }, 10614 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 10615 for (var property in configTypes) { 10616 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 10617 var expectedTypes = configTypes[property]; 10618 var value = config[property]; 10619 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 10620 10621 if (!new RegExp(expectedTypes).test(valueType)) { 10622 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 10623 } 10624 } 10625 } 10626 } 10627 }; 10628 setTransitionEndSupport(); 10629 return Util; 10630 }($); 10631 10632 /** 10633 * -------------------------------------------------------------------------- 10634 * Bootstrap (v4.1.3): alert.js 10635 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 10636 * -------------------------------------------------------------------------- 10637 */ 10638 10639 var Alert = function ($$$1) { 10640 /** 10641 * ------------------------------------------------------------------------ 10642 * Constants 10643 * ------------------------------------------------------------------------ 10644 */ 10645 var NAME = 'alert'; 10646 var VERSION = '4.1.3'; 10647 var DATA_KEY = 'bs.alert'; 10648 var EVENT_KEY = "." + DATA_KEY; 10649 var DATA_API_KEY = '.data-api'; 10650 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 10651 var Selector = { 10652 DISMISS: '[data-dismiss="alert"]' 10653 }; 10654 var Event = { 10655 CLOSE: "close" + EVENT_KEY, 10656 CLOSED: "closed" + EVENT_KEY, 10657 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 10658 }; 10659 var ClassName = { 10660 ALERT: 'alert', 10661 FADE: 'fade', 10662 SHOW: 'show' 10663 /** 10664 * ------------------------------------------------------------------------ 10665 * Class Definition 10666 * ------------------------------------------------------------------------ 10667 */ 10668 10669 }; 10670 10671 var Alert = 10672 /*#__PURE__*/ 10673 function () { 10674 function Alert(element) { 10675 this._element = element; 10676 } // Getters 10677 10678 10679 var _proto = Alert.prototype; 10680 10681 // Public 10682 _proto.close = function close(element) { 10683 var rootElement = this._element; 10684 10685 if (element) { 10686 rootElement = this._getRootElement(element); 10687 } 10688 10689 var customEvent = this._triggerCloseEvent(rootElement); 10690 10691 if (customEvent.isDefaultPrevented()) { 10692 return; 10693 } 10694 10695 this._removeElement(rootElement); 10696 }; 10697 10698 _proto.dispose = function dispose() { 10699 $$$1.removeData(this._element, DATA_KEY); 10700 this._element = null; 10701 }; // Private 10702 10703 10704 _proto._getRootElement = function _getRootElement(element) { 10705 var selector = Util.getSelectorFromElement(element); 10706 var parent = false;
10707 10708 if (selector) { 10709 parent = document.querySelector(selector); 10710 } 10711 10712 if (!parent) { 10713 parent = $$$1(element).closest("." + ClassName.ALERT)[0]; 10714 } 10715 10716 return parent; 10717 }; 10718 10719 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 10720 var closeEvent = $$$1.Event(Event.CLOSE); 10721 $$$1(element).trigger(closeEvent); 10722 return closeEvent; 10723 }; 10724 10725 _proto._removeElement = function _removeElement(element) { 10726 var _this = this; 10727 10728 $$$1(element).removeClass(ClassName.SHOW); 10729 10730 if (!$$$1(element).hasClass(ClassName.FADE)) { 10731 this._destroyElement(element); 10732 10733 return; 10734 } 10735 10736 var transitionDuration = Util.getTransitionDurationFromElement(element); 10737 $$$1(element).one(Util.TRANSITION_END, function (event) { 10738 return _this._destroyElement(element, event); 10739 }).emulateTransitionEnd(transitionDuration); 10740 }; 10741 10742 _proto._destroyElement = function _destroyElement(element) { 10743 $$$1(element).detach().trigger(Event.CLOSED).remove(); 10744 }; // Static 10745 10746 10747 Alert._jQueryInterface = function _jQueryInterface(config) { 10748 return this.each(function () { 10749 var $element = $$$1(this); 10750 var data = $element.data(DATA_KEY); 10751 10752 if (!data) { 10753 data = new Alert(this); 10754 $element.data(DATA_KEY, data); 10755 } 10756 10757 if (config === 'close') { 10758 data[config](this); 10759 } 10760 }); 10761 }; 10762 10763 Alert._handleDismiss = function _handleDismiss(alertInstance) { 10764 return function (event) { 10765 if (event) { 10766 event.preventDefault(); 10767 } 10768 10769 alertInstance.close(this); 10770 }; 10771 }; 10772 10773 _createClass(Alert, null, [{ 10774 key: "VERSION", 10775 get: function get() { 10776 return VERSION; 10777 } 10778 }]); 10779 10780 return Alert; 10781 }(); 10782 /** 10783 * ------------------------------------------------------------------------ 10784 * Data Api implementation 10785 * ------------------------------------------------------------------------ 10786 */ 10787 10788 10789 $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); 10790 /** 10791 * ------------------------------------------------------------------------ 10792 * jQuery 10793 * ------------------------------------------------------------------------ 10794 */ 10795 10796 $$$1.fn[NAME] = Alert._jQueryInterface; 10797 $$$1.fn[NAME].Constructor = Alert; 10798 10799 $$$1.fn[NAME].noConflict = function () { 10800 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 10801 return Alert._jQueryInterface; 10802 }; 10803 10804 return Alert; 10805 }($); 10806 10807 /** 10808 * -------------------------------------------------------------------------- 10809 * Bootstrap (v4.1.3): button.js 10810 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 10811 * -------------------------------------------------------------------------- 10812 */ 10813 10814 var Button = function ($$$1) { 10815 /** 10816 * ------------------------------------------------------------------------ 10817 * Constants 10818 * ------------------------------------------------------------------------ 10819 */ 10820 var NAME = 'button'; 10821 var VERSION = '4.1.3'; 10822 var DATA_KEY = 'bs.button'; 10823 var EVENT_KEY = "." + DATA_KEY; 10824 var DATA_API_KEY = '.data-api'; 10825 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 10826 var ClassName = { 10827 ACTIVE: 'active', 10828 BUTTON: 'btn', 10829 FOCUS: 'focus' 10830 }; 10831 var Selector = { 10832 DATA_TOGGLE_CARROT: '[data-toggle^="button"]', 10833 DATA_TOGGLE: '[data-toggle="buttons"]', 10834 INPUT: 'input', 10835 ACTIVE: '.active', 10836 BUTTON: '.btn' 10837 }; 10838 var Event = { 10839 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, 10840 FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) 10841 /** 10842 * ------------------------------------------------------------------------ 10843 * Class Definition 10844 * ------------------------------------------------------------------------ 10845 */ 10846 10847 }; 10848 10849 var Button = 10850 /*#__PURE__*/ 10851 function () { 10852 function Button(element) { 10853 this._element = element; 10854 } // Getters 10855 10856 10857 var _proto = Button.prototype; 10858 10859 // Public
vendor: 5,671 bytes, lines 10860-11041
10860 _proto.toggle = function toggle() { 10861 var triggerChangeEvent = true; 10862 var addAriaPressed = true; 10863 var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; 10864 10865 if (rootElement) { 10866 var input = this._element.querySelector(Selector.INPUT); 10867 10868 if (input) { 10869 if (input.type === 'radio') { 10870 if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) { 10871 triggerChangeEvent = false; 10872 } else { 10873 var activeElement = rootElement.querySelector(Selector.ACTIVE); 10874 10875 if (activeElement) { 10876 $$$1(activeElement).removeClass(ClassName.ACTIVE); 10877 } 10878 } 10879 } 10880 10881 if (triggerChangeEvent) { 10882 if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { 10883 return; 10884 } 10885 10886 input.checked = !this._element.classList.contains(ClassName.ACTIVE); 10887 $$$1(input).trigger('change'); 10888 } 10889 10890 input.focus(); 10891 addAriaPressed = false; 10892 } 10893 } 10894 10895 if (addAriaPressed) { 10896 this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE)); 10897 } 10898 10899 if (triggerChangeEvent) { 10900 $$$1(this._element).toggleClass(ClassName.ACTIVE); 10901 } 10902 }; 10903 10904 _proto.dispose = function dispose() { 10905 $$$1.removeData(this._element, DATA_KEY); 10906 this._element = null; 10907 }; // Static 10908 10909 10910 Button._jQueryInterface = function _jQueryInterface(config) { 10911 return this.each(function () { 10912 var data = $$$1(this).data(DATA_KEY); 10913 10914 if (!data) { 10915 data = new Button(this); 10916 $$$1(this).data(DATA_KEY, data); 10917 } 10918 10919 if (config === 'toggle') { 10920 data[config](); 10921 } 10922 }); 10923 }; 10924 10925 _createClass(Button, null, [{ 10926 key: "VERSION", 10927 get: function get() { 10928 return VERSION; 10929 } 10930 }]); 10931 10932 return Button; 10933 }(); 10934 /** 10935 * ------------------------------------------------------------------------ 10936 * Data Api implementation 10937 * ------------------------------------------------------------------------ 10938 */ 10939 10940 10941 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { 10942 event.preventDefault(); 10943 var button = event.target; 10944 10945 if (!$$$1(button).hasClass(ClassName.BUTTON)) { 10946 button = $$$1(button).closest(Selector.BUTTON); 10947 } 10948 10949 Button._jQueryInterface.call($$$1(button), 'toggle'); 10950 }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { 10951 var button = $$$1(event.target).closest(Selector.BUTTON)[0]; 10952 $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); 10953 }); 10954 /** 10955 * ------------------------------------------------------------------------ 10956 * jQuery 10957 * ------------------------------------------------------------------------ 10958 */ 10959 10960 $$$1.fn[NAME] = Button._jQueryInterface; 10961 $$$1.fn[NAME].Constructor = Button; 10962 10963 $$$1.fn[NAME].noConflict = function () { 10964 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 10965 return Button._jQueryInterface; 10966 }; 10967 10968 return Button; 10969 }($); 10970 10971 /** 10972 * -------------------------------------------------------------------------- 10973 * Bootstrap (v4.1.3): carousel.js 10974 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 10975 * -------------------------------------------------------------------------- 10976 */ 10977 10978 var Carousel = function ($$$1) { 10979 /** 10980 * ------------------------------------------------------------------------ 10981 * Constants 10982 * ------------------------------------------------------------------------ 10983 */ 10984 var NAME = 'carousel'; 10985 var VERSION = '4.1.3'; 10986 var DATA_KEY = 'bs.carousel'; 10987 var EVENT_KEY = "." + DATA_KEY; 10988 var DATA_API_KEY = '.data-api'; 10989 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 10990 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 10991 10992 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 10993 10994 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 10995 10996 var Default = { 10997 interval: 5000, 10998 keyboard: true, 10999 slide: false, 11000 pause: 'hover', 11001 wrap: true 11002 }; 11003 var DefaultType = { 11004 interval: '(number|boolean)', 11005 keyboard: 'boolean', 11006 slide: '(boolean|string)', 11007 pause: '(string|boolean)', 11008 wrap: 'boolean' 11009 }; 11010 var Direction = { 11011 NEXT: 'next', 11012 PREV: 'prev', 11013 LEFT: 'left', 11014 RIGHT: 'right' 11015 }; 11016 var Event = { 11017 SLIDE: "slide" + EVENT_KEY, 11018 SLID: "slid" + EVENT_KEY, 11019 KEYDOWN: "keydown" + EVENT_KEY, 11020 MOUSEENTER: "mouseenter" + EVENT_KEY, 11021 MOUSELEAVE: "mouseleave" + EVENT_KEY, 11022 TOUCHEND: "touchend" + EVENT_KEY, 11023 LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, 11024 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 11025 }; 11026 var ClassName = { 11027 CAROUSEL: 'carousel', 11028 ACTIVE: 'active', 11029 SLIDE: 'slide', 11030 RIGHT: 'carousel-item-right', 11031 LEFT: 'carousel-item-left', 11032 NEXT: 'carousel-item-next', 11033 PREV: 'carousel-item-prev', 11034 ITEM: 'carousel-item' 11035 }; 11036 var Selector = { 11037 ACTIVE: '.active', 11038 ACTIVE_ITEM: '.active.carousel-item', 11039 ITEM: '.carousel-item', 11040 NEXT_PREV: '.carousel-item-next, .carousel-item-prev', 11041 INDICATORS: '.carousel-indicators',
11042 DATA_SLIDE: '[data-slide], [data-slide-to]', 11043 DATA_RIDE: '[data-ride="carousel"]' 11044 /** 11045 * ------------------------------------------------------------------------ 11046 * Class Definition 11047 * ------------------------------------------------------------------------ 11048 */ 11049 11050 }; 11051 11052 var Carousel = 11053 /*#__PURE__*/ 11054 function () { 11055 function Carousel(element, config) { 11056 this._items = null; 11057 this._interval = null; 11058 this._activeElement = null; 11059 this._isPaused = false; 11060 this._isSliding = false; 11061 this.touchTimeout = null; 11062 this._config = this._getConfig(config); 11063 this._element = $$$1(element)[0]; 11064 this._indicatorsElement = this._element.querySelector(Selector.INDICATORS); 11065 11066 this._addEventListeners(); 11067 } // Getters 11068 11069 11070 var _proto = Carousel.prototype; 11071 11072 // Public 11073 _proto.next = function next() { 11074 if (!this._isSliding) { 11075 this._slide(Direction.NEXT); 11076 } 11077 }; 11078 11079 _proto.nextWhenVisible = function nextWhenVisible() { 11080 // Don't call next when the page isn't visible 11081 // or the carousel or its parent isn't visible 11082 if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { 11083 this.next(); 11084 } 11085 }; 11086 11087 _proto.prev = function prev() { 11088 if (!this._isSliding) { 11089 this._slide(Direction.PREV); 11090 } 11091 }; 11092 11093 _proto.pause = function pause(event) { 11094 if (!event) { 11095 this._isPaused = true; 11096 } 11097 11098 if (this._element.querySelector(Selector.NEXT_PREV)) { 11099 Util.triggerTransitionEnd(this._element); 11100 this.cycle(true); 11101 } 11102 11103 clearInterval(this._interval); 11104 this._interval = null; 11105 }; 11106 11107 _proto.cycle = function cycle(event) { 11108 if (!event) { 11109 this._isPaused = false; 11110 } 11111 11112 if (this._interval) { 11113 clearInterval(this._interval); 11114 this._interval = null; 11115 } 11116 11117 if (this._config.interval && !this._isPaused) { 11118 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 11119 } 11120 }; 11121 11122 _proto.to = function to(index) { 11123 var _this = this; 11124 11125 this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); 11126 11127 var activeIndex = this._getItemIndex(this._activeElement); 11128 11129 if (index > this._items.length - 1 || index < 0) { 11130 return; 11131 } 11132 11133 if (this._isSliding) { 11134 $$$1(this._element).one(Event.SLID, function () { 11135 return _this.to(index); 11136 }); 11137 return; 11138 } 11139 11140 if (activeIndex === index) { 11141 this.pause(); 11142 this.cycle(); 11143 return; 11144 } 11145 11146 var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; 11147 11148 this._slide(direction, this._items[index]); 11149 }; 11150 11151 _proto.dispose = function dispose() { 11152 $$$1(this._element).off(EVENT_KEY); 11153 $$$1.removeData(this._element, DATA_KEY); 11154 this._items = null; 11155 this._config = null; 11156 this._element = null; 11157 this._interval = null; 11158 this._isPaused = null; 11159 this._isSliding = null; 11160 this._activeElement = null; 11161 this._indicatorsElement = null; 11162 }; // Private 11163 11164 11165 _proto._getConfig = function _getConfig(config) { 11166 config = _objectSpread({}, Default, config); 11167 Util.typeCheckConfig(NAME, config, DefaultType); 11168 return config; 11169 }; 11170 11171 _proto._addEventListeners = function _addEventListeners() { 11172 var _this2 = this; 11173 11174 if (this._config.keyboard) { 11175 $$$1(this._element).on(Event.KEYDOWN, function (event) { 11176 return _this2._keydown(event); 11177 }); 11178 } 11179 11180 if (this._config.pause === 'hover') { 11181 $$$1(this._element).on(Event.MOUSEENTER, function (event) { 11182 return _this2.pause(event); 11183 }).on(Event.MOUSELEAVE, function (event) { 11184 return _this2.cycle(event); 11185 }); 11186 11187 if ('ontouchstart' in document.documentElement) {
11188 // If it's a touch-enabled device, mouseenter/leave are fired as 11189 // part of the mouse compatibility events on first tap - the carousel 11190 // would stop cycling until user tapped out of it; 11191 // here, we listen for touchend, explicitly pause the carousel 11192 // (as if it's the second time we tap on it, mouseenter compat event 11193 // is NOT fired) and after a timeout (to allow for mouse compatibility 11194 // events to fire) we explicitly restart cycling 11195 $$$1(this._element).on(Event.TOUCHEND, function () { 11196 _this2.pause(); 11197 11198 if (_this2.touchTimeout) { 11199 clearTimeout(_this2.touchTimeout); 11200 } 11201 11202 _this2.touchTimeout = setTimeout(function (event) { 11203 return _this2.cycle(event); 11204 }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); 11205 }); 11206 } 11207 } 11208 }; 11209 11210 _proto._keydown = function _keydown(event) { 11211 if (/input|textarea/i.test(event.target.tagName)) { 11212 return; 11213 } 11214 11215 switch (event.which) { 11216 case ARROW_LEFT_KEYCODE: 11217 event.preventDefault(); 11218 this.prev(); 11219 break; 11220 11221 case ARROW_RIGHT_KEYCODE: 11222 event.preventDefault(); 11223 this.next(); 11224 break; 11225 11226 default: 11227 } 11228 }; 11229 11230 _proto._getItemIndex = function _getItemIndex(element) { 11231 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : []; 11232 return this._items.indexOf(element); 11233 }; 11234 11235 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 11236 var isNextDirection = direction === Direction.NEXT; 11237 var isPrevDirection = direction === Direction.PREV; 11238 11239 var activeIndex = this._getItemIndex(activeElement); 11240 11241 var lastItemIndex = this._items.length - 1; 11242 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 11243 11244 if (isGoingToWrap && !this._config.wrap) { 11245 return activeElement; 11246 } 11247 11248 var delta = direction === Direction.PREV ? -1 : 1; 11249 var itemIndex = (activeIndex + delta) % this._items.length; 11250 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 11251 }; 11252 11253 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 11254 var targetIndex = this._getItemIndex(relatedTarget); 11255 11256 var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)); 11257 11258 var slideEvent = $$$1.Event(Event.SLIDE, { 11259 relatedTarget: relatedTarget, 11260 direction: eventDirectionName, 11261 from: fromIndex, 11262 to: targetIndex 11263 }); 11264 $$$1(this._element).trigger(slideEvent); 11265 return slideEvent; 11266 }; 11267 11268 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 11269 if (this._indicatorsElement) { 11270 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)); 11271 $$$1(indicators).removeClass(ClassName.ACTIVE); 11272 11273 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 11274 11275 if (nextIndicator) { 11276 $$$1(nextIndicator).addClass(ClassName.ACTIVE); 11277 } 11278 } 11279 }; 11280 11281 _proto._slide = function _slide(direction, element) { 11282 var _this3 = this; 11283 11284 var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); 11285 11286 var activeElementIndex = this._getItemIndex(activeElement); 11287 11288 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 11289 11290 var nextElementIndex = this._getItemIndex(nextElement); 11291 11292 var isCycling = Boolean(this._interval); 11293 var directionalClassName; 11294 var orderClassName; 11295 var eventDirectionName; 11296 11297 if (direction === Direction.NEXT) { 11298 directionalClassName = ClassName.LEFT; 11299 orderClassName = ClassName.NEXT; 11300 eventDirectionName = Direction.LEFT; 11301 } else { 11302 directionalClassName = ClassName.RIGHT; 11303 orderClassName = ClassName.PREV; 11304 eventDirectionName = Direction.RIGHT; 11305 } 11306 11307 if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { 11308 this._isSliding = false;
11309 return; 11310 } 11311 11312 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 11313 11314 if (slideEvent.isDefaultPrevented()) { 11315 return; 11316 } 11317 11318 if (!activeElement || !nextElement) { 11319 // Some weirdness is happening, so we bail 11320 return; 11321 } 11322 11323 this._isSliding = true; 11324 11325 if (isCycling) { 11326 this.pause(); 11327 } 11328 11329 this._setActiveIndicatorElement(nextElement); 11330 11331 var slidEvent = $$$1.Event(Event.SLID, { 11332 relatedTarget: nextElement, 11333 direction: eventDirectionName, 11334 from: activeElementIndex, 11335 to: nextElementIndex 11336 }); 11337 11338 if ($$$1(this._element).hasClass(ClassName.SLIDE)) { 11339 $$$1(nextElement).addClass(orderClassName); 11340 Util.reflow(nextElement); 11341 $$$1(activeElement).addClass(directionalClassName); 11342 $$$1(nextElement).addClass(directionalClassName); 11343 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 11344 $$$1(activeElement).one(Util.TRANSITION_END, function () { 11345 $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); 11346 $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); 11347 _this3._isSliding = false; 11348 setTimeout(function () { 11349 return $$$1(_this3._element).trigger(slidEvent); 11350 }, 0); 11351 }).emulateTransitionEnd(transitionDuration); 11352 } else { 11353 $$$1(activeElement).removeClass(ClassName.ACTIVE); 11354 $$$1(nextElement).addClass(ClassName.ACTIVE); 11355 this._isSliding = false; 11356 $$$1(this._element).trigger(slidEvent); 11357 } 11358 11359 if (isCycling) { 11360 this.cycle(); 11361 } 11362 }; // Static 11363 11364 11365 Carousel._jQueryInterface = function _jQueryInterface(config) { 11366 return this.each(function () { 11367 var data = $$$1(this).data(DATA_KEY); 11368 11369 var _config = _objectSpread({}, Default, $$$1(this).data()); 11370 11371 if (typeof config === 'object') { 11372 _config = _objectSpread({}, _config, config); 11373 } 11374 11375 var action = typeof config === 'string' ? config : _config.slide; 11376 11377 if (!data) { 11378 data = new Carousel(this, _config); 11379 $$$1(this).data(DATA_KEY, data); 11380 } 11381 11382 if (typeof config === 'number') { 11383 data.to(config); 11384 } else if (typeof action === 'string') { 11385 if (typeof data[action] === 'undefined') { 11386 throw new TypeError("No method named \"" + action + "\""); 11387 } 11388 11389 data[action](); 11390 } else if (_config.interval) { 11391 data.pause(); 11392 data.cycle(); 11393 } 11394 }); 11395 }; 11396 11397 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 11398 var selector = Util.getSelectorFromElement(this); 11399 11400 if (!selector) { 11401 return; 11402 } 11403 11404 var target = $$$1(selector)[0]; 11405 11406 if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { 11407 return; 11408 } 11409 11410 var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); 11411 11412 var slideIndex = this.getAttribute('data-slide-to'); 11413 11414 if (slideIndex) { 11415 config.interval = false; 11416 } 11417 11418 Carousel._jQueryInterface.call($$$1(target), config); 11419 11420 if (slideIndex) { 11421 $$$1(target).data(DATA_KEY).to(slideIndex); 11422 } 11423 11424 event.preventDefault(); 11425 }; 11426 11427 _createClass(Carousel, null, [{ 11428 key: "VERSION", 11429 get: function get() { 11430 return VERSION; 11431 } 11432 }, { 11433 key: "Default", 11434 get: function get() { 11435 return Default; 11436 } 11437 }]); 11438 11439 return Carousel; 11440 }(); 11441 /** 11442 * ------------------------------------------------------------------------ 11443 * Data Api implementation 11444 * ------------------------------------------------------------------------ 11445 */ 11446 11447 11448 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); 11449 $$$1(window).on(Event.LOAD_DATA_API, function () { 11450 var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)); 11451 11452 for (var i = 0, len = carousels.length; i < len; i++) { 11453 var $carousel = $$$1(carousels[i]); 11454
11455 Carousel._jQueryInterface.call($carousel, $carousel.data()); 11456 } 11457 }); 11458 /** 11459 * ------------------------------------------------------------------------ 11460 * jQuery 11461 * ------------------------------------------------------------------------ 11462 */ 11463 11464 $$$1.fn[NAME] = Carousel._jQueryInterface; 11465 $$$1.fn[NAME].Constructor = Carousel; 11466 11467 $$$1.fn[NAME].noConflict = function () { 11468 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 11469 return Carousel._jQueryInterface; 11470 }; 11471 11472 return Carousel; 11473 }($); 11474 11475 /** 11476 * -------------------------------------------------------------------------- 11477 * Bootstrap (v4.1.3): collapse.js 11478 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 11479 * -------------------------------------------------------------------------- 11480 */ 11481 11482 var Collapse = function ($$$1) { 11483 /** 11484 * ------------------------------------------------------------------------ 11485 * Constants 11486 * ------------------------------------------------------------------------ 11487 */ 11488 var NAME = 'collapse'; 11489 var VERSION = '4.1.3'; 11490 var DATA_KEY = 'bs.collapse'; 11491 var EVENT_KEY = "." + DATA_KEY; 11492 var DATA_API_KEY = '.data-api'; 11493 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 11494 var Default = { 11495 toggle: true, 11496 parent: '' 11497 }; 11498 var DefaultType = { 11499 toggle: 'boolean', 11500 parent: '(string|element)' 11501 }; 11502 var Event = { 11503 SHOW: "show" + EVENT_KEY, 11504 SHOWN: "shown" + EVENT_KEY, 11505 HIDE: "hide" + EVENT_KEY, 11506 HIDDEN: "hidden" + EVENT_KEY, 11507 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 11508 }; 11509 var ClassName = { 11510 SHOW: 'show', 11511 COLLAPSE: 'collapse', 11512 COLLAPSING: 'collapsing', 11513 COLLAPSED: 'collapsed' 11514 }; 11515 var Dimension = { 11516 WIDTH: 'width', 11517 HEIGHT: 'height' 11518 }; 11519 var Selector = { 11520 ACTIVES: '.show, .collapsing', 11521 DATA_TOGGLE: '[data-toggle="collapse"]' 11522 /** 11523 * ------------------------------------------------------------------------ 11524 * Class Definition 11525 * ------------------------------------------------------------------------ 11526 */ 11527 11528 }; 11529 11530 var Collapse = 11531 /*#__PURE__*/ 11532 function () { 11533 function Collapse(element, config) { 11534 this._isTransitioning = false; 11535 this._element = element; 11536 this._config = this._getConfig(config); 11537 this._triggerArray = $$$1.makeArray(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 11538 var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); 11539 11540 for (var i = 0, len = toggleList.length; i < len; i++) { 11541 var elem = toggleList[i]; 11542 var selector = Util.getSelectorFromElement(elem); 11543 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 11544 return foundElem === element; 11545 }); 11546 11547 if (selector !== null && filterElement.length > 0) { 11548 this._selector = selector; 11549 11550 this._triggerArray.push(elem); 11551 } 11552 } 11553 11554 this._parent = this._config.parent ? this._getParent() : null; 11555 11556 if (!this._config.parent) { 11557 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 11558 } 11559 11560 if (this._config.toggle) { 11561 this.toggle(); 11562 } 11563 } // Getters 11564 11565 11566 var _proto = Collapse.prototype; 11567 11568 // Public 11569 _proto.toggle = function toggle() { 11570 if ($$$1(this._element).hasClass(ClassName.SHOW)) { 11571 this.hide(); 11572 } else { 11573 this.show(); 11574 } 11575 }; 11576 11577 _proto.show = function show() { 11578 var _this = this; 11579 11580 if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { 11581 return; 11582 } 11583 11584 var actives; 11585 var activesData; 11586 11587 if (this._parent) { 11588 actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) { 11589 return elem.getAttribute('data-parent') === _this._config.parent; 11590 }); 11591 11592 if (actives.length === 0) { 11593 actives = null; 11594 } 11595 } 11596 11597 if (actives) { 11598 activesData = $$$1(actives).not(this._selector).data(DATA_KEY); 11599 11600 if (activesData && activesData._isTransitioning) { 11601 return; 11602 } 11603 } 11604 11605 var startEvent = $$$1.Event(Event.SHOW); 11606 $$$1(this._element).trigger(startEvent); 11607 11608 if (startEvent.isDefaultPrevented()) { 11609 return; 11610 } 11611 11612 if (actives) { 11613 Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); 11614 11615 if (!activesData) { 11616 $$$1(actives).data(DATA_KEY, null); 11617 } 11618 } 11619 11620 var dimension = this._getDimension(); 11621 11622 $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); 11623 this._element.style[dimension] = 0; 11624 11625 if (this._triggerArray.length) { 11626 $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); 11627 } 11628 11629 this.setTransitioning(true); 11630 11631 var complete = function complete() { 11632 $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); 11633 _this._element.style[dimension] = ''; 11634 11635 _this.setTransitioning(false); 11636 11637 $$$1(_this._element).trigger(Event.SHOWN); 11638 }; 11639 11640 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 11641 var scrollSize = "scroll" + capitalizedDimension; 11642 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 11643 $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 11644 this._element.style[dimension] = this._element[scrollSize] + "px"; 11645 }; 11646 11647 _proto.hide = function hide() { 11648 var _this2 = this; 11649 11650 if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { 11651 return; 11652 } 11653 11654 var startEvent = $$$1.Event(Event.HIDE); 11655 $$$1(this._element).trigger(startEvent); 11656 11657 if (startEvent.isDefaultPrevented()) { 11658 return; 11659 } 11660 11661 var dimension = this._getDimension(); 11662 11663 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 11664 Util.reflow(this._element); 11665 $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); 11666 var triggerArrayLength = this._triggerArray.length; 11667 11668 if (triggerArrayLength > 0) { 11669 for (var i = 0; i < triggerArrayLength; i++) { 11670 var trigger = this._triggerArray[i]; 11671 var selector = Util.getSelectorFromElement(trigger); 11672 11673 if (selector !== null) { 11674 var $elem = $$$1([].slice.call(document.querySelectorAll(selector))); 11675 11676 if (!$elem.hasClass(ClassName.SHOW)) { 11677 $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); 11678 } 11679 } 11680 } 11681 } 11682 11683 this.setTransitioning(true); 11684 11685 var complete = function complete() { 11686 _this2.setTransitioning(false); 11687 11688 $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); 11689 }; 11690 11691 this._element.style[dimension] = ''; 11692 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 11693 $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 11694 }; 11695 11696 _proto.setTransitioning = function setTransitioning(isTransitioning) { 11697 this._isTransitioning = isTransitioning; 11698 }; 11699 11700 _proto.dispose = function dispose() { 11701 $$$1.removeData(this._element, DATA_KEY); 11702 this._config = null; 11703 this._parent = null; 11704 this._element = null; 11705 this._triggerArray = null; 11706 this._isTransitioning = null; 11707 }; // Private 11708 11709 11710 _proto._getConfig = function _getConfig(config) { 11711 config = _objectSpread({}, Default, config); 11712 config.toggle = Boolean(config.toggle); // Coerce string values 11713 11714 Util.typeCheckConfig(NAME, config, DefaultType); 11715 return config; 11716 }; 11717 11718 _proto._getDimension = function _getDimension() { 11719 var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); 11720 return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; 11721 }; 11722 11723 _proto._getParent = function _getParent() { 11724 var _this3 = this; 11725 11726 var parent = null; 11727 11728 if (Util.isElement(this._config.parent)) { 11729 parent = this._config.parent; // It's a jQuery object 11730 11731 if (typeof this._config.parent.jquery !== 'undefined') { 11732 parent = this._config.parent[0]; 11733 } 11734 } else { 11735 parent = document.querySelector(this._config.parent); 11736 } 11737 11738 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 11739 var children = [].slice.call(parent.querySelectorAll(selector)); 11740 $$$1(children).each(function (i, element) { 11741 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 11742 }); 11743 return parent; 11744 }; 11745 11746 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 11747 if (element) { 11748 var isOpen = $$$1(element).hasClass(ClassName.SHOW); 11749 11750 if (triggerArray.length) { 11751 $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 11752 } 11753 } 11754 }; // Static 11755 11756 11757 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 11758 var selector = Util.getSelectorFromElement(element); 11759 return selector ? document.querySelector(selector) : null; 11760 }; 11761 11762 Collapse._jQueryInterface = function _jQueryInterface(config) { 11763 return this.each(function () { 11764 var $this = $$$1(this); 11765 var data = $this.data(DATA_KEY); 11766 11767 var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); 11768 11769 if (!data && _config.toggle && /show|hide/.test(config)) { 11770 _config.toggle = false;
vendor: 5,451 bytes, lines 11771-11949
11771 } 11772 11773 if (!data) { 11774 data = new Collapse(this, _config); 11775 $this.data(DATA_KEY, data); 11776 } 11777 11778 if (typeof config === 'string') { 11779 if (typeof data[config] === 'undefined') { 11780 throw new TypeError("No method named \"" + config + "\""); 11781 } 11782 11783 data[config](); 11784 } 11785 }); 11786 }; 11787 11788 _createClass(Collapse, null, [{ 11789 key: "VERSION", 11790 get: function get() { 11791 return VERSION; 11792 } 11793 }, { 11794 key: "Default", 11795 get: function get() { 11796 return Default; 11797 } 11798 }]); 11799 11800 return Collapse; 11801 }(); 11802 /** 11803 * ------------------------------------------------------------------------ 11804 * Data Api implementation 11805 * ------------------------------------------------------------------------ 11806 */ 11807 11808 11809 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 11810 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 11811 if (event.currentTarget.tagName === 'A') { 11812 event.preventDefault(); 11813 } 11814 11815 var $trigger = $$$1(this); 11816 var selector = Util.getSelectorFromElement(this); 11817 var selectors = [].slice.call(document.querySelectorAll(selector)); 11818 $$$1(selectors).each(function () { 11819 var $target = $$$1(this); 11820 var data = $target.data(DATA_KEY); 11821 var config = data ? 'toggle' : $trigger.data(); 11822 11823 Collapse._jQueryInterface.call($target, config); 11824 }); 11825 }); 11826 /** 11827 * ------------------------------------------------------------------------ 11828 * jQuery 11829 * ------------------------------------------------------------------------ 11830 */ 11831 11832 $$$1.fn[NAME] = Collapse._jQueryInterface; 11833 $$$1.fn[NAME].Constructor = Collapse; 11834 11835 $$$1.fn[NAME].noConflict = function () { 11836 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 11837 return Collapse._jQueryInterface; 11838 }; 11839 11840 return Collapse; 11841 }($); 11842 11843 /** 11844 * -------------------------------------------------------------------------- 11845 * Bootstrap (v4.1.3): dropdown.js 11846 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 11847 * -------------------------------------------------------------------------- 11848 */ 11849 11850 var Dropdown = function ($$$1) { 11851 /** 11852 * ------------------------------------------------------------------------ 11853 * Constants 11854 * ------------------------------------------------------------------------ 11855 */ 11856 var NAME = 'dropdown'; 11857 var VERSION = '4.1.3'; 11858 var DATA_KEY = 'bs.dropdown'; 11859 var EVENT_KEY = "." + DATA_KEY; 11860 var DATA_API_KEY = '.data-api'; 11861 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 11862 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 11863 11864 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 11865 11866 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 11867 11868 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 11869 11870 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 11871 11872 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 11873 11874 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); 11875 var Event = { 11876 HIDE: "hide" + EVENT_KEY, 11877 HIDDEN: "hidden" + EVENT_KEY, 11878 SHOW: "show" + EVENT_KEY, 11879 SHOWN: "shown" + EVENT_KEY, 11880 CLICK: "click" + EVENT_KEY, 11881 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, 11882 KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, 11883 KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY 11884 }; 11885 var ClassName = { 11886 DISABLED: 'disabled', 11887 SHOW: 'show', 11888 DROPUP: 'dropup', 11889 DROPRIGHT: 'dropright', 11890 DROPLEFT: 'dropleft', 11891 MENURIGHT: 'dropdown-menu-right', 11892 MENULEFT: 'dropdown-menu-left', 11893 POSITION_STATIC: 'position-static' 11894 }; 11895 var Selector = { 11896 DATA_TOGGLE: '[data-toggle="dropdown"]', 11897 FORM_CHILD: '.dropdown form', 11898 MENU: '.dropdown-menu', 11899 NAVBAR_NAV: '.navbar-nav', 11900 VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' 11901 }; 11902 var AttachmentMap = { 11903 TOP: 'top-start', 11904 TOPEND: 'top-end', 11905 BOTTOM: 'bottom-start', 11906 BOTTOMEND: 'bottom-end', 11907 RIGHT: 'right-start', 11908 RIGHTEND: 'right-end', 11909 LEFT: 'left-start', 11910 LEFTEND: 'left-end' 11911 }; 11912 var Default = { 11913 offset: 0, 11914 flip: true, 11915 boundary: 'scrollParent', 11916 reference: 'toggle', 11917 display: 'dynamic' 11918 }; 11919 var DefaultType = { 11920 offset: '(number|string|function)', 11921 flip: 'boolean', 11922 boundary: '(string|element)', 11923 reference: '(string|element)', 11924 display: 'string' 11925 /** 11926 * ------------------------------------------------------------------------ 11927 * Class Definition 11928 * ------------------------------------------------------------------------ 11929 */ 11930 11931 }; 11932 11933 var Dropdown = 11934 /*#__PURE__*/ 11935 function () { 11936 function Dropdown(element, config) { 11937 this._element = element; 11938 this._popper = null; 11939 this._config = this._getConfig(config); 11940 this._menu = this._getMenuElement(); 11941 this._inNavbar = this._detectNavbar(); 11942 11943 this._addEventListeners(); 11944 } // Getters 11945 11946 11947 var _proto = Dropdown.prototype; 11948 11949 // Public
11950 _proto.toggle = function toggle() { 11951 if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { 11952 return; 11953 } 11954 11955 var parent = Dropdown._getParentFromElement(this._element); 11956 11957 var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); 11958 11959 Dropdown._clearMenus(); 11960 11961 if (isActive) { 11962 return; 11963 } 11964 11965 var relatedTarget = { 11966 relatedTarget: this._element 11967 }; 11968 var showEvent = $$$1.Event(Event.SHOW, relatedTarget); 11969 $$$1(parent).trigger(showEvent); 11970 11971 if (showEvent.isDefaultPrevented()) { 11972 return; 11973 } // Disable totally Popper.js for Dropdown in Navbar 11974 11975 11976 if (!this._inNavbar) { 11977 /** 11978 * Check for Popper dependency 11979 * Popper - https://popper.js.org 11980 */ 11981 if (typeof Popper === 'undefined') { 11982 throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); 11983 } 11984 11985 var referenceElement = this._element; 11986 11987 if (this._config.reference === 'parent') { 11988 referenceElement = parent; 11989 } else if (Util.isElement(this._config.reference)) { 11990 referenceElement = this._config.reference; // Check if it's jQuery element 11991 11992 if (typeof this._config.reference.jquery !== 'undefined') { 11993 referenceElement = this._config.reference[0]; 11994 } 11995 } // If boundary is not `scrollParent`, then set position to `static` 11996 // to allow the menu to "escape" the scroll parent's boundaries 11997 // https://github.com/twbs/bootstrap/issues/24251 11998 11999 12000 if (this._config.boundary !== 'scrollParent') { 12001 $$$1(parent).addClass(ClassName.POSITION_STATIC); 12002 } 12003 12004 this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); 12005 } // If this is a touch-enabled device we add extra 12006 // empty mouseover listeners to the body's immediate children; 12007 // only needed because of broken event delegation on iOS 12008 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 12009 12010 12011 if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { 12012 $$$1(document.body).children().on('mouseover', null, $$$1.noop); 12013 } 12014 12015 this._element.focus(); 12016 12017 this._element.setAttribute('aria-expanded', true); 12018 12019 $$$1(this._menu).toggleClass(ClassName.SHOW); 12020 $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); 12021 }; 12022 12023 _proto.dispose = function dispose() { 12024 $$$1.removeData(this._element, DATA_KEY); 12025 $$$1(this._element).off(EVENT_KEY); 12026 this._element = null; 12027 this._menu = null; 12028 12029 if (this._popper !== null) { 12030 this._popper.destroy(); 12031 12032 this._popper = null; 12033 } 12034 }; 12035 12036 _proto.update = function update() { 12037 this._inNavbar = this._detectNavbar(); 12038 12039 if (this._popper !== null) { 12040 this._popper.scheduleUpdate(); 12041 } 12042 }; // Private 12043 12044 12045 _proto._addEventListeners = function _addEventListeners() { 12046 var _this = this; 12047 12048 $$$1(this._element).on(Event.CLICK, function (event) { 12049 event.preventDefault(); 12050 event.stopPropagation(); 12051 12052 _this.toggle(); 12053 }); 12054 }; 12055 12056 _proto._getConfig = function _getConfig(config) { 12057 config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); 12058 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 12059 return config; 12060 }; 12061 12062 _proto._getMenuElement = function _getMenuElement() { 12063 if (!this._menu) { 12064 var parent = Dropdown._getParentFromElement(this._element); 12065 12066 if (parent) { 12067 this._menu = parent.querySelector(Selector.MENU); 12068 } 12069 } 12070 12071 return this._menu; 12072 }; 12073 12074 _proto._getPlacement = function _getPlacement() { 12075 var $parentDropdown = $$$1(this._element.parentNode); 12076 var placement = AttachmentMap.BOTTOM; // Handle dropup 12077 12078 if ($parentDropdown.hasClass(ClassName.DROPUP)) { 12079 placement = AttachmentMap.TOP; 12080 12081 if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 12082 placement = AttachmentMap.TOPEND; 12083 } 12084 } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { 12085 placement = AttachmentMap.RIGHT; 12086 } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { 12087 placement = AttachmentMap.LEFT; 12088 } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 12089 placement = AttachmentMap.BOTTOMEND; 12090 } 12091 12092 return placement; 12093 }; 12094 12095 _proto._detectNavbar = function _detectNavbar() { 12096 return $$$1(this._element).closest('.navbar').length > 0; 12097 }; 12098 12099 _proto._getPopperConfig = function _getPopperConfig() { 12100 var _this2 = this; 12101 12102 var offsetConf = {}; 12103 12104 if (typeof this._config.offset === 'function') { 12105 offsetConf.fn = function (data) { 12106 data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); 12107 return data; 12108 }; 12109 } else { 12110 offsetConf.offset = this._config.offset; 12111 } 12112 12113 var popperConfig = { 12114 placement: this._getPlacement(), 12115 modifiers: { 12116 offset: offsetConf, 12117 flip: { 12118 enabled: this._config.flip 12119 }, 12120 preventOverflow: {
vendor: 8,256 bytes, lines 12121-12377
12121 boundariesElement: this._config.boundary 12122 } 12123 } // Disable Popper.js if we have a static display 12124 12125 }; 12126 12127 if (this._config.display === 'static') { 12128 popperConfig.modifiers.applyStyle = { 12129 enabled: false 12130 }; 12131 } 12132 12133 return popperConfig; 12134 }; // Static 12135 12136 12137 Dropdown._jQueryInterface = function _jQueryInterface(config) { 12138 return this.each(function () { 12139 var data = $$$1(this).data(DATA_KEY); 12140 12141 var _config = typeof config === 'object' ? config : null; 12142 12143 if (!data) { 12144 data = new Dropdown(this, _config); 12145 $$$1(this).data(DATA_KEY, data); 12146 } 12147 12148 if (typeof config === 'string') { 12149 if (typeof data[config] === 'undefined') { 12150 throw new TypeError("No method named \"" + config + "\""); 12151 } 12152 12153 data[config](); 12154 } 12155 }); 12156 }; 12157 12158 Dropdown._clearMenus = function _clearMenus(event) { 12159 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 12160 return; 12161 } 12162 12163 var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); 12164 12165 for (var i = 0, len = toggles.length; i < len; i++) { 12166 var parent = Dropdown._getParentFromElement(toggles[i]); 12167 12168 var context = $$$1(toggles[i]).data(DATA_KEY); 12169 var relatedTarget = { 12170 relatedTarget: toggles[i] 12171 }; 12172 12173 if (event && event.type === 'click') { 12174 relatedTarget.clickEvent = event; 12175 } 12176 12177 if (!context) { 12178 continue; 12179 } 12180 12181 var dropdownMenu = context._menu; 12182 12183 if (!$$$1(parent).hasClass(ClassName.SHOW)) { 12184 continue; 12185 } 12186 12187 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { 12188 continue; 12189 } 12190 12191 var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); 12192 $$$1(parent).trigger(hideEvent); 12193 12194 if (hideEvent.isDefaultPrevented()) { 12195 continue; 12196 } // If this is a touch-enabled device we remove the extra 12197 // empty mouseover listeners we added for iOS support 12198 12199 12200 if ('ontouchstart' in document.documentElement) { 12201 $$$1(document.body).children().off('mouseover', null, $$$1.noop); 12202 } 12203 12204 toggles[i].setAttribute('aria-expanded', 'false'); 12205 $$$1(dropdownMenu).removeClass(ClassName.SHOW); 12206 $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); 12207 } 12208 }; 12209 12210 Dropdown._getParentFromElement = function _getParentFromElement(element) { 12211 var parent; 12212 var selector = Util.getSelectorFromElement(element); 12213 12214 if (selector) { 12215 parent = document.querySelector(selector); 12216 } 12217 12218 return parent || element.parentNode; 12219 }; // eslint-disable-next-line complexity 12220 12221 12222 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 12223 // If not input/textarea: 12224 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 12225 // If input/textarea: 12226 // - If space key => not a dropdown command 12227 // - If key is other than escape 12228 // - If key is not up or down => not a dropdown command 12229 // - If trigger inside the menu => not a dropdown command 12230 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 12231 return; 12232 } 12233 12234 event.preventDefault(); 12235 event.stopPropagation(); 12236 12237 if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { 12238 return; 12239 } 12240 12241 var parent = Dropdown._getParentFromElement(this); 12242 12243 var isActive = $$$1(parent).hasClass(ClassName.SHOW); 12244 12245 if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { 12246 if (event.which === ESCAPE_KEYCODE) { 12247 var toggle = parent.querySelector(Selector.DATA_TOGGLE); 12248 $$$1(toggle).trigger('focus'); 12249 } 12250 12251 $$$1(this).trigger('click'); 12252 return; 12253 } 12254 12255 var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)); 12256 12257 if (items.length === 0) { 12258 return; 12259 } 12260 12261 var index = items.indexOf(event.target); 12262 12263 if (event.which === ARROW_UP_KEYCODE && index > 0) { 12264 // Up 12265 index--; 12266 } 12267 12268 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 12269 // Down 12270 index++; 12271 } 12272 12273 if (index < 0) { 12274 index = 0; 12275 } 12276 12277 items[index].focus(); 12278 }; 12279 12280 _createClass(Dropdown, null, [{ 12281 key: "VERSION", 12282 get: function get() { 12283 return VERSION; 12284 } 12285 }, { 12286 key: "Default", 12287 get: function get() { 12288 return Default; 12289 } 12290 }, { 12291 key: "DefaultType", 12292 get: function get() { 12293 return DefaultType; 12294 } 12295 }]); 12296 12297 return Dropdown; 12298 }(); 12299 /** 12300 * ------------------------------------------------------------------------ 12301 * Data Api implementation 12302 * ------------------------------------------------------------------------ 12303 */ 12304 12305 12306 $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 12307 event.preventDefault(); 12308 event.stopPropagation(); 12309 12310 Dropdown._jQueryInterface.call($$$1(this), 'toggle'); 12311 }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { 12312 e.stopPropagation(); 12313 }); 12314 /** 12315 * ------------------------------------------------------------------------ 12316 * jQuery 12317 * ------------------------------------------------------------------------ 12318 */ 12319 12320 $$$1.fn[NAME] = Dropdown._jQueryInterface; 12321 $$$1.fn[NAME].Constructor = Dropdown; 12322 12323 $$$1.fn[NAME].noConflict = function () { 12324 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 12325 return Dropdown._jQueryInterface; 12326 }; 12327 12328 return Dropdown; 12329 }($, Popper); 12330 12331 /** 12332 * -------------------------------------------------------------------------- 12333 * Bootstrap (v4.1.3): modal.js 12334 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 12335 * -------------------------------------------------------------------------- 12336 */ 12337 12338 var Modal = function ($$$1) { 12339 /** 12340 * ------------------------------------------------------------------------ 12341 * Constants 12342 * ------------------------------------------------------------------------ 12343 */ 12344 var NAME = 'modal'; 12345 var VERSION = '4.1.3'; 12346 var DATA_KEY = 'bs.modal'; 12347 var EVENT_KEY = "." + DATA_KEY; 12348 var DATA_API_KEY = '.data-api'; 12349 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 12350 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 12351 12352 var Default = { 12353 backdrop: true, 12354 keyboard: true, 12355 focus: true, 12356 show: true 12357 }; 12358 var DefaultType = { 12359 backdrop: '(boolean|string)', 12360 keyboard: 'boolean', 12361 focus: 'boolean', 12362 show: 'boolean' 12363 }; 12364 var Event = { 12365 HIDE: "hide" + EVENT_KEY, 12366 HIDDEN: "hidden" + EVENT_KEY, 12367 SHOW: "show" + EVENT_KEY, 12368 SHOWN: "shown" + EVENT_KEY, 12369 FOCUSIN: "focusin" + EVENT_KEY, 12370 RESIZE: "resize" + EVENT_KEY, 12371 CLICK_DISMISS: "click.dismiss" + EVENT_KEY, 12372 KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, 12373 MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, 12374 MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, 12375 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 12376 }; 12377 var ClassName = {
12378 SCROLLBAR_MEASURER: 'modal-scrollbar-measure', 12379 BACKDROP: 'modal-backdrop', 12380 OPEN: 'modal-open', 12381 FADE: 'fade', 12382 SHOW: 'show' 12383 }; 12384 var Selector = { 12385 DIALOG: '.modal-dialog', 12386 DATA_TOGGLE: '[data-toggle="modal"]', 12387 DATA_DISMISS: '[data-dismiss="modal"]', 12388 FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', 12389 STICKY_CONTENT: '.sticky-top' 12390 /** 12391 * ------------------------------------------------------------------------ 12392 * Class Definition 12393 * ------------------------------------------------------------------------ 12394 */ 12395 12396 }; 12397 12398 var Modal = 12399 /*#__PURE__*/ 12400 function () { 12401 function Modal(element, config) { 12402 this._config = this._getConfig(config); 12403 this._element = element; 12404 this._dialog = element.querySelector(Selector.DIALOG); 12405 this._backdrop = null; 12406 this._isShown = false; 12407 this._isBodyOverflowing = false; 12408 this._ignoreBackdropClick = false; 12409 this._scrollbarWidth = 0; 12410 } // Getters 12411 12412 12413 var _proto = Modal.prototype; 12414 12415 // Public 12416 _proto.toggle = function toggle(relatedTarget) { 12417 return this._isShown ? this.hide() : this.show(relatedTarget); 12418 }; 12419 12420 _proto.show = function show(relatedTarget) { 12421 var _this = this; 12422 12423 if (this._isTransitioning || this._isShown) { 12424 return; 12425 } 12426 12427 if ($$$1(this._element).hasClass(ClassName.FADE)) { 12428 this._isTransitioning = true; 12429 } 12430 12431 var showEvent = $$$1.Event(Event.SHOW, { 12432 relatedTarget: relatedTarget 12433 }); 12434 $$$1(this._element).trigger(showEvent); 12435 12436 if (this._isShown || showEvent.isDefaultPrevented()) { 12437 return; 12438 } 12439 12440 this._isShown = true; 12441 12442 this._checkScrollbar(); 12443 12444 this._setScrollbar(); 12445 12446 this._adjustDialog(); 12447 12448 $$$1(document.body).addClass(ClassName.OPEN); 12449 12450 this._setEscapeEvent(); 12451 12452 this._setResizeEvent(); 12453 12454 $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { 12455 return _this.hide(event); 12456 }); 12457 $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { 12458 $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { 12459 if ($$$1(event.target).is(_this._element)) { 12460 _this._ignoreBackdropClick = true; 12461 } 12462 }); 12463 }); 12464 12465 this._showBackdrop(function () { 12466 return _this._showElement(relatedTarget); 12467 }); 12468 }; 12469 12470 _proto.hide = function hide(event) { 12471 var _this2 = this; 12472 12473 if (event) { 12474 event.preventDefault(); 12475 } 12476 12477 if (this._isTransitioning || !this._isShown) { 12478 return; 12479 } 12480 12481 var hideEvent = $$$1.Event(Event.HIDE); 12482 $$$1(this._element).trigger(hideEvent); 12483 12484 if (!this._isShown || hideEvent.isDefaultPrevented()) { 12485 return; 12486 } 12487 12488 this._isShown = false; 12489 var transition = $$$1(this._element).hasClass(ClassName.FADE); 12490 12491 if (transition) { 12492 this._isTransitioning = true; 12493 } 12494 12495 this._setEscapeEvent(); 12496 12497 this._setResizeEvent(); 12498 12499 $$$1(document).off(Event.FOCUSIN); 12500 $$$1(this._element).removeClass(ClassName.SHOW); 12501 $$$1(this._element).off(Event.CLICK_DISMISS); 12502 $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); 12503 12504 if (transition) { 12505 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 12506 $$$1(this._element).one(Util.TRANSITION_END, function (event) { 12507 return _this2._hideModal(event); 12508 }).emulateTransitionEnd(transitionDuration); 12509 } else { 12510 this._hideModal(); 12511 } 12512 }; 12513 12514 _proto.dispose = function dispose() { 12515 $$$1.removeData(this._element, DATA_KEY); 12516 $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); 12517 this._config = null; 12518 this._element = null; 12519 this._dialog = null; 12520 this._backdrop = null; 12521 this._isShown = null; 12522 this._isBodyOverflowing = null; 12523 this._ignoreBackdropClick = null; 12524 this._scrollbarWidth = null; 12525 }; 12526 12527 _proto.handleUpdate = function handleUpdate() { 12528 this._adjustDialog(); 12529 }; // Private 12530 12531 12532 _proto._getConfig = function _getConfig(config) { 12533 config = _objectSpread({}, Default, config); 12534 Util.typeCheckConfig(NAME, config, DefaultType); 12535 return config; 12536 }; 12537 12538 _proto._showElement = function _showElement(relatedTarget) { 12539 var _this3 = this; 12540 12541 var transition = $$$1(this._element).hasClass(ClassName.FADE); 12542 12543 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 12544 // Don't move modal's DOM position 12545 document.body.appendChild(this._element); 12546 } 12547 12548 this._element.style.display = 'block'; 12549 12550 this._element.removeAttribute('aria-hidden'); 12551 12552 this._element.scrollTop = 0; 12553 12554 if (transition) { 12555 Util.reflow(this._element); 12556 } 12557 12558 $$$1(this._element).addClass(ClassName.SHOW); 12559 12560 if (this._config.focus) { 12561 this._enforceFocus(); 12562 } 12563 12564 var shownEvent = $$$1.Event(Event.SHOWN, { 12565 relatedTarget: relatedTarget 12566 }); 12567 12568 var transitionComplete = function transitionComplete() { 12569 if (_this3._config.focus) { 12570 _this3._element.focus(); 12571 } 12572 12573 _this3._isTransitioning = false;
12574 $$$1(_this3._element).trigger(shownEvent); 12575 }; 12576 12577 if (transition) { 12578 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 12579 $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 12580 } else { 12581 transitionComplete(); 12582 } 12583 }; 12584 12585 _proto._enforceFocus = function _enforceFocus() { 12586 var _this4 = this; 12587 12588 $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop 12589 .on(Event.FOCUSIN, function (event) { 12590 if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { 12591 _this4._element.focus(); 12592 } 12593 }); 12594 }; 12595 12596 _proto._setEscapeEvent = function _setEscapeEvent() { 12597 var _this5 = this; 12598 12599 if (this._isShown && this._config.keyboard) { 12600 $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { 12601 if (event.which === ESCAPE_KEYCODE) { 12602 event.preventDefault(); 12603 12604 _this5.hide(); 12605 } 12606 }); 12607 } else if (!this._isShown) { 12608 $$$1(this._element).off(Event.KEYDOWN_DISMISS); 12609 } 12610 }; 12611 12612 _proto._setResizeEvent = function _setResizeEvent() { 12613 var _this6 = this; 12614 12615 if (this._isShown) { 12616 $$$1(window).on(Event.RESIZE, function (event) { 12617 return _this6.handleUpdate(event); 12618 }); 12619 } else { 12620 $$$1(window).off(Event.RESIZE); 12621 } 12622 }; 12623 12624 _proto._hideModal = function _hideModal() { 12625 var _this7 = this; 12626 12627 this._element.style.display = 'none'; 12628 12629 this._element.setAttribute('aria-hidden', true); 12630 12631 this._isTransitioning = false; 12632 12633 this._showBackdrop(function () { 12634 $$$1(document.body).removeClass(ClassName.OPEN); 12635 12636 _this7._resetAdjustments(); 12637 12638 _this7._resetScrollbar(); 12639 12640 $$$1(_this7._element).trigger(Event.HIDDEN); 12641 }); 12642 }; 12643 12644 _proto._removeBackdrop = function _removeBackdrop() { 12645 if (this._backdrop) { 12646 $$$1(this._backdrop).remove(); 12647 this._backdrop = null; 12648 } 12649 }; 12650 12651 _proto._showBackdrop = function _showBackdrop(callback) { 12652 var _this8 = this; 12653 12654 var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; 12655 12656 if (this._isShown && this._config.backdrop) { 12657 this._backdrop = document.createElement('div'); 12658 this._backdrop.className = ClassName.BACKDROP; 12659 12660 if (animate) { 12661 this._backdrop.classList.add(animate); 12662 } 12663 12664 $$$1(this._backdrop).appendTo(document.body); 12665 $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { 12666 if (_this8._ignoreBackdropClick) { 12667 _this8._ignoreBackdropClick = false; 12668 return; 12669 } 12670 12671 if (event.target !== event.currentTarget) { 12672 return; 12673 } 12674 12675 if (_this8._config.backdrop === 'static') { 12676 _this8._element.focus(); 12677 } else { 12678 _this8.hide(); 12679 } 12680 }); 12681 12682 if (animate) { 12683 Util.reflow(this._backdrop); 12684 } 12685 12686 $$$1(this._backdrop).addClass(ClassName.SHOW); 12687 12688 if (!callback) { 12689 return; 12690 } 12691 12692 if (!animate) { 12693 callback(); 12694 return; 12695 } 12696 12697 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 12698 $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 12699 } else if (!this._isShown && this._backdrop) { 12700 $$$1(this._backdrop).removeClass(ClassName.SHOW); 12701 12702 var callbackRemove = function callbackRemove() { 12703 _this8._removeBackdrop(); 12704 12705 if (callback) { 12706 callback(); 12707 } 12708 }; 12709 12710 if ($$$1(this._element).hasClass(ClassName.FADE)) { 12711 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 12712 12713 $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 12714 } else { 12715 callbackRemove(); 12716 } 12717 } else if (callback) { 12718 callback(); 12719 } 12720 }; // ---------------------------------------------------------------------- 12721 // the following methods are used to handle overflowing modals 12722 // todo (fat): these should probably be refactored out of modal.js 12723 // ---------------------------------------------------------------------- 12724 12725
12726 _proto._adjustDialog = function _adjustDialog() { 12727 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 12728 12729 if (!this._isBodyOverflowing && isModalOverflowing) { 12730 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 12731 } 12732 12733 if (this._isBodyOverflowing && !isModalOverflowing) { 12734 this._element.style.paddingRight = this._scrollbarWidth + "px"; 12735 } 12736 }; 12737 12738 _proto._resetAdjustments = function _resetAdjustments() { 12739 this._element.style.paddingLeft = ''; 12740 this._element.style.paddingRight = ''; 12741 }; 12742 12743 _proto._checkScrollbar = function _checkScrollbar() { 12744 var rect = document.body.getBoundingClientRect(); 12745 this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; 12746 this._scrollbarWidth = this._getScrollbarWidth(); 12747 }; 12748 12749 _proto._setScrollbar = function _setScrollbar() { 12750 var _this9 = this; 12751 12752 if (this._isBodyOverflowing) { 12753 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 12754 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 12755 var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); 12756 var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding 12757 12758 $$$1(fixedContent).each(function (index, element) { 12759 var actualPadding = element.style.paddingRight; 12760 var calculatedPadding = $$$1(element).css('padding-right'); 12761 $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); 12762 }); // Adjust sticky content margin 12763 12764 $$$1(stickyContent).each(function (index, element) { 12765 var actualMargin = element.style.marginRight; 12766 var calculatedMargin = $$$1(element).css('margin-right'); 12767 $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); 12768 }); // Adjust body padding 12769 12770 var actualPadding = document.body.style.paddingRight; 12771 var calculatedPadding = $$$1(document.body).css('padding-right'); 12772 $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 12773 } 12774 }; 12775 12776 _proto._resetScrollbar = function _resetScrollbar() { 12777 // Restore fixed content padding 12778 var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); 12779 $$$1(fixedContent).each(function (index, element) { 12780 var padding = $$$1(element).data('padding-right'); 12781 $$$1(element).removeData('padding-right'); 12782 element.style.paddingRight = padding ? padding : ''; 12783 }); // Restore sticky content 12784 12785 var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); 12786 $$$1(elements).each(function (index, element) { 12787 var margin = $$$1(element).data('margin-right'); 12788 12789 if (typeof margin !== 'undefined') { 12790 $$$1(element).css('margin-right', margin).removeData('margin-right'); 12791 } 12792 }); // Restore body padding 12793 12794 var padding = $$$1(document.body).data('padding-right'); 12795 $$$1(document.body).removeData('padding-right'); 12796 document.body.style.paddingRight = padding ? padding : ''; 12797 }; 12798 12799 _proto._getScrollbarWidth = function _getScrollbarWidth() { 12800 // thx d.walsh 12801 var scrollDiv = document.createElement('div'); 12802 scrollDiv.className = ClassName.SCROLLBAR_MEASURER; 12803 document.body.appendChild(scrollDiv); 12804 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 12805 document.body.removeChild(scrollDiv); 12806 return scrollbarWidth; 12807 }; // Static 12808 12809 12810 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 12811 return this.each(function () { 12812 var data = $$$1(this).data(DATA_KEY); 12813 12814 var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {}); 12815 12816 if (!data) { 12817 data = new Modal(this, _config); 12818 $$$1(this).data(DATA_KEY, data); 12819 } 12820 12821 if (typeof config === 'string') { 12822 if (typeof data[config] === 'undefined') {
12823 throw new TypeError("No method named \"" + config + "\""); 12824 } 12825 12826 data[config](relatedTarget); 12827 } else if (_config.show) { 12828 data.show(relatedTarget); 12829 } 12830 }); 12831 }; 12832 12833 _createClass(Modal, null, [{ 12834 key: "VERSION", 12835 get: function get() { 12836 return VERSION; 12837 } 12838 }, { 12839 key: "Default", 12840 get: function get() { 12841 return Default; 12842 } 12843 }]); 12844 12845 return Modal; 12846 }(); 12847 /** 12848 * ------------------------------------------------------------------------ 12849 * Data Api implementation 12850 * ------------------------------------------------------------------------ 12851 */ 12852 12853 12854 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 12855 var _this10 = this; 12856 12857 var target; 12858 var selector = Util.getSelectorFromElement(this); 12859 12860 if (selector) { 12861 target = document.querySelector(selector); 12862 } 12863 12864 var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data()); 12865 12866 if (this.tagName === 'A' || this.tagName === 'AREA') { 12867 event.preventDefault(); 12868 } 12869 12870 var $target = $$$1(target).one(Event.SHOW, function (showEvent) { 12871 if (showEvent.isDefaultPrevented()) { 12872 // Only register focus restorer if modal will actually get shown 12873 return; 12874 } 12875 12876 $target.one(Event.HIDDEN, function () { 12877 if ($$$1(_this10).is(':visible')) { 12878 _this10.focus(); 12879 } 12880 }); 12881 }); 12882 12883 Modal._jQueryInterface.call($$$1(target), config, this); 12884 }); 12885 /** 12886 * ------------------------------------------------------------------------ 12887 * jQuery 12888 * ------------------------------------------------------------------------ 12889 */ 12890 12891 $$$1.fn[NAME] = Modal._jQueryInterface; 12892 $$$1.fn[NAME].Constructor = Modal; 12893 12894 $$$1.fn[NAME].noConflict = function () { 12895 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 12896 return Modal._jQueryInterface; 12897 }; 12898 12899 return Modal; 12900 }($); 12901 12902 /** 12903 * -------------------------------------------------------------------------- 12904 * Bootstrap (v4.1.3): tooltip.js 12905 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 12906 * -------------------------------------------------------------------------- 12907 */ 12908 12909 var Tooltip = function ($$$1) { 12910 /** 12911 * ------------------------------------------------------------------------ 12912 * Constants 12913 * ------------------------------------------------------------------------ 12914 */ 12915 var NAME = 'tooltip'; 12916 var VERSION = '4.1.3'; 12917 var DATA_KEY = 'bs.tooltip'; 12918 var EVENT_KEY = "." + DATA_KEY; 12919 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 12920 var CLASS_PREFIX = 'bs-tooltip'; 12921 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 12922 var DefaultType = { 12923 animation: 'boolean', 12924 template: 'string', 12925 title: '(string|element|function)', 12926 trigger: 'string', 12927 delay: '(number|object)', 12928 html: 'boolean', 12929 selector: '(string|boolean)', 12930 placement: '(string|function)', 12931 offset: '(number|string)', 12932 container: '(string|element|boolean)', 12933 fallbackPlacement: '(string|array)', 12934 boundary: '(string|element)' 12935 }; 12936 var AttachmentMap = { 12937 AUTO: 'auto', 12938 TOP: 'top', 12939 RIGHT: 'right', 12940 BOTTOM: 'bottom', 12941 LEFT: 'left' 12942 }; 12943 var Default = { 12944 animation: true, 12945 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 12946 trigger: 'hover focus', 12947 title: '', 12948 delay: 0, 12949 html: false, 12950 selector: false, 12951 placement: 'top', 12952 offset: 0, 12953 container: false, 12954 fallbackPlacement: 'flip', 12955 boundary: 'scrollParent' 12956 }; 12957 var HoverState = { 12958 SHOW: 'show', 12959 OUT: 'out' 12960 }; 12961 var Event = { 12962 HIDE: "hide" + EVENT_KEY, 12963 HIDDEN: "hidden" + EVENT_KEY, 12964 SHOW: "show" + EVENT_KEY, 12965 SHOWN: "shown" + EVENT_KEY, 12966 INSERTED: "inserted" + EVENT_KEY, 12967 CLICK: "click" + EVENT_KEY, 12968 FOCUSIN: "focusin" + EVENT_KEY, 12969 FOCUSOUT: "focusout" + EVENT_KEY, 12970 MOUSEENTER: "mouseenter" + EVENT_KEY, 12971 MOUSELEAVE: "mouseleave" + EVENT_KEY 12972 }; 12973 var ClassName = { 12974 FADE: 'fade', 12975 SHOW: 'show' 12976 }; 12977 var Selector = { 12978 TOOLTIP: '.tooltip', 12979 TOOLTIP_INNER: '.tooltip-inner', 12980 ARROW: '.arrow' 12981 }; 12982 var Trigger = {
12983 HOVER: 'hover', 12984 FOCUS: 'focus', 12985 CLICK: 'click', 12986 MANUAL: 'manual' 12987 /** 12988 * ------------------------------------------------------------------------ 12989 * Class Definition 12990 * ------------------------------------------------------------------------ 12991 */ 12992 12993 }; 12994 12995 var Tooltip = 12996 /*#__PURE__*/ 12997 function () { 12998 function Tooltip(element, config) { 12999 /** 13000 * Check for Popper dependency 13001 * Popper - https://popper.js.org 13002 */ 13003 if (typeof Popper === 'undefined') { 13004 throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); 13005 } // private 13006 13007 13008 this._isEnabled = true; 13009 this._timeout = 0; 13010 this._hoverState = ''; 13011 this._activeTrigger = {}; 13012 this._popper = null; // Protected 13013 13014 this.element = element; 13015 this.config = this._getConfig(config); 13016 this.tip = null; 13017 13018 this._setListeners(); 13019 } // Getters 13020 13021 13022 var _proto = Tooltip.prototype; 13023 13024 // Public 13025 _proto.enable = function enable() { 13026 this._isEnabled = true; 13027 }; 13028 13029 _proto.disable = function disable() { 13030 this._isEnabled = false; 13031 }; 13032 13033 _proto.toggleEnabled = function toggleEnabled() { 13034 this._isEnabled = !this._isEnabled; 13035 }; 13036 13037 _proto.toggle = function toggle(event) { 13038 if (!this._isEnabled) { 13039 return; 13040 } 13041 13042 if (event) { 13043 var dataKey = this.constructor.DATA_KEY; 13044 var context = $$$1(event.currentTarget).data(dataKey); 13045 13046 if (!context) { 13047 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 13048 $$$1(event.currentTarget).data(dataKey, context); 13049 } 13050 13051 context._activeTrigger.click = !context._activeTrigger.click; 13052 13053 if (context._isWithActiveTrigger()) { 13054 context._enter(null, context); 13055 } else { 13056 context._leave(null, context); 13057 } 13058 } else { 13059 if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { 13060 this._leave(null, this); 13061 13062 return; 13063 } 13064 13065 this._enter(null, this); 13066 } 13067 }; 13068 13069 _proto.dispose = function dispose() { 13070 clearTimeout(this._timeout); 13071 $$$1.removeData(this.element, this.constructor.DATA_KEY); 13072 $$$1(this.element).off(this.constructor.EVENT_KEY); 13073 $$$1(this.element).closest('.modal').off('hide.bs.modal'); 13074 13075 if (this.tip) { 13076 $$$1(this.tip).remove(); 13077 } 13078 13079 this._isEnabled = null; 13080 this._timeout = null; 13081 this._hoverState = null; 13082 this._activeTrigger = null; 13083 13084 if (this._popper !== null) { 13085 this._popper.destroy(); 13086 } 13087 13088 this._popper = null; 13089 this.element = null; 13090 this.config = null; 13091 this.tip = null; 13092 }; 13093 13094 _proto.show = function show() { 13095 var _this = this; 13096 13097 if ($$$1(this.element).css('display') === 'none') { 13098 throw new Error('Please use show on visible elements'); 13099 } 13100 13101 var showEvent = $$$1.Event(this.constructor.Event.SHOW); 13102 13103 if (this.isWithContent() && this._isEnabled) { 13104 $$$1(this.element).trigger(showEvent); 13105 var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); 13106 13107 if (showEvent.isDefaultPrevented() || !isInTheDom) { 13108 return; 13109 } 13110 13111 var tip = this.getTipElement(); 13112 var tipId = Util.getUID(this.constructor.NAME);
13113 tip.setAttribute('id', tipId); 13114 this.element.setAttribute('aria-describedby', tipId); 13115 this.setContent(); 13116 13117 if (this.config.animation) { 13118 $$$1(tip).addClass(ClassName.FADE); 13119 } 13120 13121 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 13122 13123 var attachment = this._getAttachment(placement); 13124 13125 this.addAttachmentClass(attachment); 13126 var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container); 13127 $$$1(tip).data(this.constructor.DATA_KEY, this); 13128 13129 if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { 13130 $$$1(tip).appendTo(container); 13131 } 13132 13133 $$$1(this.element).trigger(this.constructor.Event.INSERTED); 13134 this._popper = new Popper(this.element, tip, { 13135 placement: attachment, 13136 modifiers: { 13137 offset: { 13138 offset: this.config.offset 13139 }, 13140 flip: { 13141 behavior: this.config.fallbackPlacement 13142 }, 13143 arrow: { 13144 element: Selector.ARROW 13145 }, 13146 preventOverflow: { 13147 boundariesElement: this.config.boundary 13148 } 13149 }, 13150 onCreate: function onCreate(data) { 13151 if (data.originalPlacement !== data.placement) { 13152 _this._handlePopperPlacementChange(data); 13153 } 13154 }, 13155 onUpdate: function onUpdate(data) { 13156 _this._handlePopperPlacementChange(data); 13157 } 13158 }); 13159 $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra 13160 // empty mouseover listeners to the body's immediate children; 13161 // only needed because of broken event delegation on iOS 13162 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 13163 13164 if ('ontouchstart' in document.documentElement) { 13165 $$$1(document.body).children().on('mouseover', null, $$$1.noop); 13166 } 13167 13168 var complete = function complete() { 13169 if (_this.config.animation) { 13170 _this._fixTransition(); 13171 } 13172 13173 var prevHoverState = _this._hoverState; 13174 _this._hoverState = null; 13175 $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); 13176 13177 if (prevHoverState === HoverState.OUT) { 13178 _this._leave(null, _this); 13179 } 13180 }; 13181 13182 if ($$$1(this.tip).hasClass(ClassName.FADE)) { 13183 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 13184 $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 13185 } else { 13186 complete(); 13187 } 13188 } 13189 }; 13190 13191 _proto.hide = function hide(callback) { 13192 var _this2 = this; 13193 13194 var tip = this.getTipElement(); 13195 var hideEvent = $$$1.Event(this.constructor.Event.HIDE); 13196 13197 var complete = function complete() { 13198 if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { 13199 tip.parentNode.removeChild(tip); 13200 } 13201 13202 _this2._cleanTipClass(); 13203 13204 _this2.element.removeAttribute('aria-describedby'); 13205 13206 $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); 13207 13208 if (_this2._popper !== null) { 13209 _this2._popper.destroy(); 13210 } 13211 13212 if (callback) { 13213 callback(); 13214 } 13215 }; 13216 13217 $$$1(this.element).trigger(hideEvent); 13218 13219 if (hideEvent.isDefaultPrevented()) { 13220 return; 13221 } 13222 13223 $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra 13224 // empty mouseover listeners we added for iOS support 13225 13226 if ('ontouchstart' in document.documentElement) { 13227 $$$1(document.body).children().off('mouseover', null, $$$1.noop); 13228 } 13229 13230 this._activeTrigger[Trigger.CLICK] = false;
13231 this._activeTrigger[Trigger.FOCUS] = false; 13232 this._activeTrigger[Trigger.HOVER] = false; 13233 13234 if ($$$1(this.tip).hasClass(ClassName.FADE)) { 13235 var transitionDuration = Util.getTransitionDurationFromElement(tip); 13236 $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 13237 } else { 13238 complete(); 13239 } 13240 13241 this._hoverState = ''; 13242 }; 13243 13244 _proto.update = function update() { 13245 if (this._popper !== null) { 13246 this._popper.scheduleUpdate(); 13247 } 13248 }; // Protected 13249 13250 13251 _proto.isWithContent = function isWithContent() { 13252 return Boolean(this.getTitle()); 13253 }; 13254 13255 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 13256 $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 13257 }; 13258 13259 _proto.getTipElement = function getTipElement() { 13260 this.tip = this.tip || $$$1(this.config.template)[0]; 13261 return this.tip; 13262 }; 13263 13264 _proto.setContent = function setContent() { 13265 var tip = this.getTipElement(); 13266 this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()); 13267 $$$1(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW); 13268 }; 13269 13270 _proto.setElementContent = function setElementContent($element, content) { 13271 var html = this.config.html; 13272 13273 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 13274 // Content is a DOM node or a jQuery 13275 if (html) { 13276 if (!$$$1(content).parent().is($element)) { 13277 $element.empty().append(content); 13278 } 13279 } else { 13280 $element.text($$$1(content).text()); 13281 } 13282 } else { 13283 $element[html ? 'html' : 'text'](content); 13284 } 13285 }; 13286 13287 _proto.getTitle = function getTitle() { 13288 var title = this.element.getAttribute('data-original-title'); 13289 13290 if (!title) { 13291 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 13292 } 13293 13294 return title; 13295 }; // Private 13296 13297 13298 _proto._getAttachment = function _getAttachment(placement) { 13299 return AttachmentMap[placement.toUpperCase()]; 13300 }; 13301 13302 _proto._setListeners = function _setListeners() { 13303 var _this3 = this; 13304 13305 var triggers = this.config.trigger.split(' '); 13306 triggers.forEach(function (trigger) { 13307 if (trigger === 'click') { 13308 $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { 13309 return _this3.toggle(event); 13310 }); 13311 } else if (trigger !== Trigger.MANUAL) { 13312 var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; 13313 var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; 13314 $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { 13315 return _this3._enter(event); 13316 }).on(eventOut, _this3.config.selector, function (event) { 13317 return _this3._leave(event); 13318 }); 13319 } 13320 13321 $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { 13322 return _this3.hide(); 13323 }); 13324 }); 13325 13326 if (this.config.selector) { 13327 this.config = _objectSpread({}, this.config, { 13328 trigger: 'manual', 13329 selector: '' 13330 }); 13331 } else { 13332 this._fixTitle(); 13333 } 13334 }; 13335 13336 _proto._fixTitle = function _fixTitle() { 13337 var titleType = typeof this.element.getAttribute('data-original-title'); 13338 13339 if (this.element.getAttribute('title') || titleType !== 'string') { 13340 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 13341 this.element.setAttribute('title', ''); 13342 } 13343 }; 13344 13345 _proto._enter = function _enter(event, context) { 13346 var dataKey = this.constructor.DATA_KEY; 13347 context = context || $$$1(event.currentTarget).data(dataKey); 13348 13349 if (!context) { 13350 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 13351 $$$1(event.currentTarget).data(dataKey, context); 13352 } 13353 13354 if (event) { 13355 context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; 13356 } 13357 13358 if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { 13359 context._hoverState = HoverState.SHOW; 13360 return; 13361 } 13362 13363 clearTimeout(context._timeout); 13364 context._hoverState = HoverState.SHOW; 13365 13366 if (!context.config.delay || !context.config.delay.show) { 13367 context.show(); 13368 return; 13369 } 13370 13371 context._timeout = setTimeout(function () { 13372 if (context._hoverState === HoverState.SHOW) { 13373 context.show(); 13374 } 13375 }, context.config.delay.show); 13376 }; 13377 13378 _proto._leave = function _leave(event, context) { 13379 var dataKey = this.constructor.DATA_KEY; 13380 context = context || $$$1(event.currentTarget).data(dataKey); 13381 13382 if (!context) { 13383 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 13384 $$$1(event.currentTarget).data(dataKey, context); 13385 } 13386 13387 if (event) { 13388 context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
vendor: 11,435 bytes, lines 13389-13803
13389 } 13390 13391 if (context._isWithActiveTrigger()) { 13392 return; 13393 } 13394 13395 clearTimeout(context._timeout); 13396 context._hoverState = HoverState.OUT; 13397 13398 if (!context.config.delay || !context.config.delay.hide) { 13399 context.hide(); 13400 return; 13401 } 13402 13403 context._timeout = setTimeout(function () { 13404 if (context._hoverState === HoverState.OUT) { 13405 context.hide(); 13406 } 13407 }, context.config.delay.hide); 13408 }; 13409 13410 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 13411 for (var trigger in this._activeTrigger) { 13412 if (this._activeTrigger[trigger]) { 13413 return true; 13414 } 13415 } 13416 13417 return false; 13418 }; 13419 13420 _proto._getConfig = function _getConfig(config) { 13421 config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {}); 13422 13423 if (typeof config.delay === 'number') { 13424 config.delay = { 13425 show: config.delay, 13426 hide: config.delay 13427 }; 13428 } 13429 13430 if (typeof config.title === 'number') { 13431 config.title = config.title.toString(); 13432 } 13433 13434 if (typeof config.content === 'number') { 13435 config.content = config.content.toString(); 13436 } 13437 13438 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 13439 return config; 13440 }; 13441 13442 _proto._getDelegateConfig = function _getDelegateConfig() { 13443 var config = {}; 13444 13445 if (this.config) { 13446 for (var key in this.config) { 13447 if (this.constructor.Default[key] !== this.config[key]) { 13448 config[key] = this.config[key]; 13449 } 13450 } 13451 } 13452 13453 return config; 13454 }; 13455 13456 _proto._cleanTipClass = function _cleanTipClass() { 13457 var $tip = $$$1(this.getTipElement()); 13458 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 13459 13460 if (tabClass !== null && tabClass.length) { 13461 $tip.removeClass(tabClass.join('')); 13462 } 13463 }; 13464 13465 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 13466 var popperInstance = popperData.instance; 13467 this.tip = popperInstance.popper; 13468 13469 this._cleanTipClass(); 13470 13471 this.addAttachmentClass(this._getAttachment(popperData.placement)); 13472 }; 13473 13474 _proto._fixTransition = function _fixTransition() { 13475 var tip = this.getTipElement(); 13476 var initConfigAnimation = this.config.animation; 13477 13478 if (tip.getAttribute('x-placement') !== null) { 13479 return; 13480 } 13481 13482 $$$1(tip).removeClass(ClassName.FADE); 13483 this.config.animation = false; 13484 this.hide(); 13485 this.show(); 13486 this.config.animation = initConfigAnimation; 13487 }; // Static 13488 13489 13490 Tooltip._jQueryInterface = function _jQueryInterface(config) { 13491 return this.each(function () { 13492 var data = $$$1(this).data(DATA_KEY); 13493 13494 var _config = typeof config === 'object' && config; 13495 13496 if (!data && /dispose|hide/.test(config)) { 13497 return; 13498 } 13499 13500 if (!data) { 13501 data = new Tooltip(this, _config); 13502 $$$1(this).data(DATA_KEY, data); 13503 } 13504 13505 if (typeof config === 'string') { 13506 if (typeof data[config] === 'undefined') { 13507 throw new TypeError("No method named \"" + config + "\""); 13508 } 13509 13510 data[config](); 13511 } 13512 }); 13513 }; 13514 13515 _createClass(Tooltip, null, [{ 13516 key: "VERSION", 13517 get: function get() { 13518 return VERSION; 13519 } 13520 }, { 13521 key: "Default", 13522 get: function get() { 13523 return Default; 13524 } 13525 }, { 13526 key: "NAME", 13527 get: function get() { 13528 return NAME; 13529 } 13530 }, { 13531 key: "DATA_KEY", 13532 get: function get() { 13533 return DATA_KEY; 13534 } 13535 }, { 13536 key: "Event", 13537 get: function get() { 13538 return Event; 13539 } 13540 }, { 13541 key: "EVENT_KEY", 13542 get: function get() { 13543 return EVENT_KEY; 13544 } 13545 }, { 13546 key: "DefaultType", 13547 get: function get() { 13548 return DefaultType; 13549 } 13550 }]); 13551 13552 return Tooltip; 13553 }(); 13554 /** 13555 * ------------------------------------------------------------------------ 13556 * jQuery 13557 * ------------------------------------------------------------------------ 13558 */ 13559 13560 13561 $$$1.fn[NAME] = Tooltip._jQueryInterface; 13562 $$$1.fn[NAME].Constructor = Tooltip; 13563 13564 $$$1.fn[NAME].noConflict = function () { 13565 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 13566 return Tooltip._jQueryInterface; 13567 }; 13568 13569 return Tooltip; 13570 }($, Popper); 13571 13572 /** 13573 * -------------------------------------------------------------------------- 13574 * Bootstrap (v4.1.3): popover.js 13575 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 13576 * -------------------------------------------------------------------------- 13577 */ 13578 13579 var Popover = function ($$$1) { 13580 /** 13581 * ------------------------------------------------------------------------ 13582 * Constants 13583 * ------------------------------------------------------------------------ 13584 */ 13585 var NAME = 'popover'; 13586 var VERSION = '4.1.3'; 13587 var DATA_KEY = 'bs.popover'; 13588 var EVENT_KEY = "." + DATA_KEY; 13589 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 13590 var CLASS_PREFIX = 'bs-popover'; 13591 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 13592 13593 var Default = _objectSpread({}, Tooltip.Default, { 13594 placement: 'right', 13595 trigger: 'click', 13596 content: '', 13597 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 13598 }); 13599 13600 var DefaultType = _objectSpread({}, Tooltip.DefaultType, { 13601 content: '(string|element|function)' 13602 }); 13603 13604 var ClassName = { 13605 FADE: 'fade', 13606 SHOW: 'show' 13607 }; 13608 var Selector = { 13609 TITLE: '.popover-header', 13610 CONTENT: '.popover-body' 13611 }; 13612 var Event = { 13613 HIDE: "hide" + EVENT_KEY, 13614 HIDDEN: "hidden" + EVENT_KEY, 13615 SHOW: "show" + EVENT_KEY, 13616 SHOWN: "shown" + EVENT_KEY, 13617 INSERTED: "inserted" + EVENT_KEY, 13618 CLICK: "click" + EVENT_KEY, 13619 FOCUSIN: "focusin" + EVENT_KEY, 13620 FOCUSOUT: "focusout" + EVENT_KEY, 13621 MOUSEENTER: "mouseenter" + EVENT_KEY, 13622 MOUSELEAVE: "mouseleave" + EVENT_KEY 13623 /** 13624 * ------------------------------------------------------------------------ 13625 * Class Definition 13626 * ------------------------------------------------------------------------ 13627 */ 13628 13629 }; 13630 13631 var Popover = 13632 /*#__PURE__*/ 13633 function (_Tooltip) { 13634 _inheritsLoose(Popover, _Tooltip); 13635 13636 function Popover() { 13637 return _Tooltip.apply(this, arguments) || this; 13638 } 13639 13640 var _proto = Popover.prototype; 13641 13642 // Overrides 13643 _proto.isWithContent = function isWithContent() { 13644 return this.getTitle() || this._getContent(); 13645 }; 13646 13647 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 13648 $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 13649 }; 13650 13651 _proto.getTipElement = function getTipElement() { 13652 this.tip = this.tip || $$$1(this.config.template)[0]; 13653 return this.tip; 13654 }; 13655 13656 _proto.setContent = function setContent() { 13657 var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events 13658 13659 this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); 13660 13661 var content = this._getContent(); 13662 13663 if (typeof content === 'function') { 13664 content = content.call(this.element); 13665 } 13666 13667 this.setElementContent($tip.find(Selector.CONTENT), content); 13668 $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); 13669 }; // Private 13670 13671 13672 _proto._getContent = function _getContent() { 13673 return this.element.getAttribute('data-content') || this.config.content; 13674 }; 13675 13676 _proto._cleanTipClass = function _cleanTipClass() { 13677 var $tip = $$$1(this.getTipElement()); 13678 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 13679 13680 if (tabClass !== null && tabClass.length > 0) { 13681 $tip.removeClass(tabClass.join('')); 13682 } 13683 }; // Static 13684 13685 13686 Popover._jQueryInterface = function _jQueryInterface(config) { 13687 return this.each(function () { 13688 var data = $$$1(this).data(DATA_KEY); 13689 13690 var _config = typeof config === 'object' ? config : null; 13691 13692 if (!data && /destroy|hide/.test(config)) { 13693 return; 13694 } 13695 13696 if (!data) { 13697 data = new Popover(this, _config); 13698 $$$1(this).data(DATA_KEY, data); 13699 } 13700 13701 if (typeof config === 'string') { 13702 if (typeof data[config] === 'undefined') { 13703 throw new TypeError("No method named \"" + config + "\""); 13704 } 13705 13706 data[config](); 13707 } 13708 }); 13709 }; 13710 13711 _createClass(Popover, null, [{ 13712 key: "VERSION", 13713 // Getters 13714 get: function get() { 13715 return VERSION; 13716 } 13717 }, { 13718 key: "Default", 13719 get: function get() { 13720 return Default; 13721 } 13722 }, { 13723 key: "NAME", 13724 get: function get() { 13725 return NAME; 13726 } 13727 }, { 13728 key: "DATA_KEY", 13729 get: function get() { 13730 return DATA_KEY; 13731 } 13732 }, { 13733 key: "Event", 13734 get: function get() { 13735 return Event; 13736 } 13737 }, { 13738 key: "EVENT_KEY", 13739 get: function get() { 13740 return EVENT_KEY; 13741 } 13742 }, { 13743 key: "DefaultType", 13744 get: function get() { 13745 return DefaultType; 13746 } 13747 }]); 13748 13749 return Popover; 13750 }(Tooltip); 13751 /** 13752 * ------------------------------------------------------------------------ 13753 * jQuery 13754 * ------------------------------------------------------------------------ 13755 */ 13756 13757 13758 $$$1.fn[NAME] = Popover._jQueryInterface; 13759 $$$1.fn[NAME].Constructor = Popover; 13760 13761 $$$1.fn[NAME].noConflict = function () { 13762 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 13763 return Popover._jQueryInterface; 13764 }; 13765 13766 return Popover; 13767 }($); 13768 13769 /** 13770 * -------------------------------------------------------------------------- 13771 * Bootstrap (v4.1.3): scrollspy.js 13772 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 13773 * -------------------------------------------------------------------------- 13774 */ 13775 13776 var ScrollSpy = function ($$$1) { 13777 /** 13778 * ------------------------------------------------------------------------ 13779 * Constants 13780 * ------------------------------------------------------------------------ 13781 */ 13782 var NAME = 'scrollspy'; 13783 var VERSION = '4.1.3'; 13784 var DATA_KEY = 'bs.scrollspy'; 13785 var EVENT_KEY = "." + DATA_KEY; 13786 var DATA_API_KEY = '.data-api'; 13787 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 13788 var Default = { 13789 offset: 10, 13790 method: 'auto', 13791 target: '' 13792 }; 13793 var DefaultType = { 13794 offset: 'number', 13795 method: 'string', 13796 target: '(string|element)' 13797 }; 13798 var Event = { 13799 ACTIVATE: "activate" + EVENT_KEY, 13800 SCROLL: "scroll" + EVENT_KEY, 13801 LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY 13802 }; 13803 var ClassName = {
13804 DROPDOWN_ITEM: 'dropdown-item', 13805 DROPDOWN_MENU: 'dropdown-menu', 13806 ACTIVE: 'active' 13807 }; 13808 var Selector = { 13809 DATA_SPY: '[data-spy="scroll"]', 13810 ACTIVE: '.active', 13811 NAV_LIST_GROUP: '.nav, .list-group', 13812 NAV_LINKS: '.nav-link', 13813 NAV_ITEMS: '.nav-item', 13814 LIST_ITEMS: '.list-group-item', 13815 DROPDOWN: '.dropdown', 13816 DROPDOWN_ITEMS: '.dropdown-item', 13817 DROPDOWN_TOGGLE: '.dropdown-toggle' 13818 }; 13819 var OffsetMethod = { 13820 OFFSET: 'offset', 13821 POSITION: 'position' 13822 /** 13823 * ------------------------------------------------------------------------ 13824 * Class Definition 13825 * ------------------------------------------------------------------------ 13826 */ 13827 13828 }; 13829 13830 var ScrollSpy = 13831 /*#__PURE__*/ 13832 function () { 13833 function ScrollSpy(element, config) { 13834 var _this = this; 13835 13836 this._element = element; 13837 this._scrollElement = element.tagName === 'BODY' ? window : element; 13838 this._config = this._getConfig(config); 13839 this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); 13840 this._offsets = []; 13841 this._targets = []; 13842 this._activeTarget = null; 13843 this._scrollHeight = 0; 13844 $$$1(this._scrollElement).on(Event.SCROLL, function (event) { 13845 return _this._process(event); 13846 }); 13847 this.refresh(); 13848 13849 this._process(); 13850 } // Getters 13851 13852 13853 var _proto = ScrollSpy.prototype; 13854 13855 // Public 13856 _proto.refresh = function refresh() { 13857 var _this2 = this; 13858 13859 var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; 13860 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 13861 var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; 13862 this._offsets = []; 13863 this._targets = []; 13864 this._scrollHeight = this._getScrollHeight(); 13865 var targets = [].slice.call(document.querySelectorAll(this._selector)); 13866 targets.map(function (element) { 13867 var target; 13868 var targetSelector = Util.getSelectorFromElement(element); 13869 13870 if (targetSelector) { 13871 target = document.querySelector(targetSelector); 13872 } 13873 13874 if (target) { 13875 var targetBCR = target.getBoundingClientRect(); 13876 13877 if (targetBCR.width || targetBCR.height) { 13878 // TODO (fat): remove sketch reliance on jQuery position/offset 13879 return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; 13880 } 13881 } 13882 13883 return null; 13884 }).filter(function (item) { 13885 return item; 13886 }).sort(function (a, b) { 13887 return a[0] - b[0]; 13888 }
vendor: 3,602 bytes, lines 13888-13997
13888).forEach(function (item) { 13889 _this2._offsets.push(item[0]); 13890 13891 _this2._targets.push(item[1]); 13892 }); 13893 }; 13894 13895 _proto.dispose = function dispose() { 13896 $$$1.removeData(this._element, DATA_KEY); 13897 $$$1(this._scrollElement).off(EVENT_KEY); 13898 this._element = null; 13899 this._scrollElement = null; 13900 this._config = null; 13901 this._selector = null; 13902 this._offsets = null; 13903 this._targets = null; 13904 this._activeTarget = null; 13905 this._scrollHeight = null; 13906 }; // Private 13907 13908 13909 _proto._getConfig = function _getConfig(config) { 13910 config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {}); 13911 13912 if (typeof config.target !== 'string') { 13913 var id = $$$1(config.target).attr('id'); 13914 13915 if (!id) { 13916 id = Util.getUID(NAME); 13917 $$$1(config.target).attr('id', id); 13918 } 13919 13920 config.target = "#" + id; 13921 } 13922 13923 Util.typeCheckConfig(NAME, config, DefaultType); 13924 return config; 13925 }; 13926 13927 _proto._getScrollTop = function _getScrollTop() { 13928 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 13929 }; 13930 13931 _proto._getScrollHeight = function _getScrollHeight() { 13932 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 13933 }; 13934 13935 _proto._getOffsetHeight = function _getOffsetHeight() { 13936 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 13937 }; 13938 13939 _proto._process = function _process() { 13940 var scrollTop = this._getScrollTop() + this._config.offset; 13941 13942 var scrollHeight = this._getScrollHeight(); 13943 13944 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 13945 13946 if (this._scrollHeight !== scrollHeight) { 13947 this.refresh(); 13948 } 13949 13950 if (scrollTop >= maxScroll) { 13951 var target = this._targets[this._targets.length - 1]; 13952 13953 if (this._activeTarget !== target) { 13954 this._activate(target); 13955 } 13956 13957 return; 13958 } 13959 13960 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 13961 this._activeTarget = null; 13962 13963 this._clear(); 13964 13965 return; 13966 } 13967 13968 var offsetLength = this._offsets.length; 13969 13970 for (var i = offsetLength; i--;) { 13971 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 13972 13973 if (isActiveTarget) { 13974 this._activate(this._targets[i]); 13975 } 13976 } 13977 }; 13978 13979 _proto._activate = function _activate(target) { 13980 this._activeTarget = target; 13981 13982 this._clear(); 13983 13984 var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style 13985 13986 13987 queries = queries.map(function (selector) { 13988 return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); 13989 }); 13990 var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(',')))); 13991 13992 if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { 13993 $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); 13994 $link.addClass(ClassName.ACTIVE); 13995 } else { 13996 // Set triggered link as active 13997 $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
13998 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 13999 14000 $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item 14001 14002 $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); 14003 } 14004 14005 $$$1(this._scrollElement).trigger(Event.ACTIVATE, { 14006 relatedTarget: target 14007 }); 14008 }; 14009 14010 _proto._clear = function _clear() { 14011 var nodes = [].slice.call(document.querySelectorAll(this._selector)); 14012 $$$1(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); 14013 }; // Static 14014 14015 14016 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 14017 return this.each(function () { 14018 var data = $$$1(this).data(DATA_KEY); 14019 14020 var _config = typeof config === 'object' && config; 14021 14022 if (!data) { 14023 data = new ScrollSpy(this, _config); 14024 $$$1(this).data(DATA_KEY, data); 14025 } 14026 14027 if (typeof config === 'string') { 14028 if (typeof data[config] === 'undefined') { 14029 throw new TypeError("No method named \"" + config + "\""); 14030 } 14031 14032 data[config](); 14033 } 14034 }); 14035 }; 14036 14037 _createClass(ScrollSpy, null, [{ 14038 key: "VERSION", 14039 get: function get() { 14040 return VERSION; 14041 } 14042 }, { 14043 key: "Default", 14044 get: function get() { 14045 return Default; 14046 } 14047 }]); 14048 14049 return ScrollSpy; 14050 }(); 14051 /** 14052 * ------------------------------------------------------------------------ 14053 * Data Api implementation 14054 * ------------------------------------------------------------------------ 14055 */ 14056 14057 14058 $$$1(window).on(Event.LOAD_DATA_API, function () { 14059 var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)); 14060 var scrollSpysLength = scrollSpys.length; 14061 14062 for (var i = scrollSpysLength; i--;) { 14063 var $spy = $$$1(scrollSpys[i]); 14064 14065 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 14066 } 14067 }); 14068 /** 14069 * ------------------------------------------------------------------------ 14070 * jQuery 14071 * ------------------------------------------------------------------------ 14072 */ 14073 14074 $$$1.fn[NAME] = ScrollSpy._jQueryInterface; 14075 $$$1.fn[NAME].Constructor = ScrollSpy; 14076 14077 $$$1.fn[NAME].noConflict = function () { 14078 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 14079 return ScrollSpy._jQueryInterface; 14080 }; 14081 14082 return ScrollSpy; 14083 }($); 14084 14085 /** 14086 * -------------------------------------------------------------------------- 14087 * Bootstrap (v4.1.3): tab.js 14088 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 14089 * -------------------------------------------------------------------------- 14090 */ 14091 14092 var Tab = function ($$$1) { 14093 /** 14094 * ------------------------------------------------------------------------ 14095 * Constants 14096 * ------------------------------------------------------------------------ 14097 */ 14098 var NAME = 'tab'; 14099 var VERSION = '4.1.3'; 14100 var DATA_KEY = 'bs.tab'; 14101 var EVENT_KEY = "." + DATA_KEY; 14102 var DATA_API_KEY = '.data-api'; 14103 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 14104 var Event = { 14105 HIDE: "hide" + EVENT_KEY, 14106 HIDDEN: "hidden" + EVENT_KEY, 14107 SHOW: "show" + EVENT_KEY, 14108 SHOWN: "shown" + EVENT_KEY, 14109 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 14110 }; 14111 var ClassName = { 14112 DROPDOWN_MENU: 'dropdown-menu', 14113 ACTIVE: 'active', 14114 DISABLED: 'disabled', 14115 FADE: 'fade', 14116 SHOW: 'show' 14117 }; 14118 var Selector = { 14119 DROPDOWN: '.dropdown', 14120 NAV_LIST_GROUP: '.nav, .list-group', 14121 ACTIVE: '.active', 14122 ACTIVE_UL: '> li > .active', 14123 DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', 14124 DROPDOWN_TOGGLE: '.dropdown-toggle', 14125 DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' 14126 /** 14127 * ------------------------------------------------------------------------ 14128 * Class Definition 14129 * ------------------------------------------------------------------------ 14130 */ 14131 14132 }; 14133 14134 var Tab = 14135 /*#__PURE__*/ 14136 function () { 14137 function Tab(element) { 14138 this._element = element; 14139 } // Getters 14140 14141 14142 var _proto = Tab.prototype; 14143 14144 // Public 14145 _proto.show = function show() { 14146 var _this = this; 14147 14148 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) { 14149 return; 14150 } 14151 14152 var target; 14153 var previous; 14154 var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0]; 14155 var selector = Util.getSelectorFromElement(this._element); 14156 14157 if (listElement) { 14158 var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE; 14159 previous = $$$1.makeArray($$$1(listElement).find(itemSelector)); 14160 previous = previous[previous.length - 1]; 14161 } 14162 14163 var hideEvent = $$$1.Event(Event.HIDE, { 14164 relatedTarget: this._element 14165 }); 14166 var showEvent = $$$1.Event(Event.SHOW, { 14167 relatedTarget: previous 14168 }); 14169 14170 if (previous) { 14171 $$$1(previous).trigger(hideEvent); 14172 } 14173 14174 $$$1(this._element).trigger(showEvent); 14175 14176 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 14177 return; 14178 } 14179 14180 if (selector) { 14181 target = document.querySelector(selector); 14182 } 14183 14184 this._activate(this._element, listElement); 14185 14186 var complete = function complete() { 14187 var hiddenEvent = $$$1.Event(Event.HIDDEN, { 14188 relatedTarget: _this._element 14189 }); 14190 var shownEvent = $$$1.Event(Event.SHOWN, { 14191 relatedTarget: previous 14192 }); 14193 $$$1(previous).trigger(hiddenEvent); 14194 $$$1(_this._element).trigger(shownEvent); 14195 }; 14196 14197 if (target) { 14198 this._activate(target, target.parentNode, complete); 14199 } else { 14200 complete(); 14201 } 14202 }; 14203 14204 _proto.dispose = function dispose() { 14205 $$$1.removeData(this._element, DATA_KEY); 14206 this._element = null; 14207 }; // Private 14208 14209 14210 _proto._activate = function _activate(element, container, callback) { 14211 var _this2 = this; 14212 14213 var activeElements; 14214 14215 if (container.nodeName === 'UL') { 14216 activeElements = $$$1(container).find(Selector.ACTIVE_UL); 14217 } else { 14218 activeElements = $$$1(container).children(Selector.ACTIVE); 14219 } 14220 14221 var active = activeElements[0]; 14222 var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE); 14223 14224 var complete = function complete() { 14225 return _this2._transitionComplete(element, active, callback); 14226 }; 14227 14228 if (active && isTransitioning) { 14229 var transitionDuration = Util.getTransitionDurationFromElement(active); 14230 $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 14231 } else { 14232 complete(); 14233 } 14234 }; 14235 14236 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 14237 if (active) { 14238 $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
14239 var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; 14240 14241 if (dropdownChild) { 14242 $$$1(dropdownChild).removeClass(ClassName.ACTIVE); 14243 } 14244 14245 if (active.getAttribute('role') === 'tab') { 14246 active.setAttribute('aria-selected', false); 14247 } 14248 } 14249 14250 $$$1(element).addClass(ClassName.ACTIVE); 14251 14252 if (element.getAttribute('role') === 'tab') { 14253 element.setAttribute('aria-selected', true); 14254 } 14255 14256 Util.reflow(element); 14257 $$$1(element).addClass(ClassName.SHOW); 14258 14259 if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { 14260 var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0]; 14261 14262 if (dropdownElement) { 14263 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)); 14264 $$$1(dropdownToggleList).addClass(ClassName.ACTIVE); 14265 } 14266 14267 element.setAttribute('aria-expanded', true); 14268 } 14269 14270 if (callback) { 14271 callback(); 14272 } 14273 }; // Static 14274 14275 14276 Tab._jQueryInterface = function _jQueryInterface(config) { 14277 return this.each(function () { 14278 var $this = $$$1(this); 14279 var data = $this.data(DATA_KEY); 14280 14281 if (!data) { 14282 data = new Tab(this); 14283 $this.data(DATA_KEY, data); 14284 } 14285 14286 if (typeof config === 'string') { 14287 if (typeof data[config] === 'undefined') { 14288 throw new TypeError("No method named \"" + config + "\""); 14289 } 14290 14291 data[config](); 14292 } 14293 }); 14294 }; 14295 14296 _createClass(Tab, null, [{ 14297 key: "VERSION", 14298 get: function get() { 14299 return VERSION; 14300 } 14301 }]); 14302 14303 return Tab; 14304 }(); 14305 /** 14306 * ------------------------------------------------------------------------ 14307 * Data Api implementation 14308 * ------------------------------------------------------------------------ 14309 */ 14310 14311 14312 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 14313 event.preventDefault(); 14314 14315 Tab._jQueryInterface.call($$$1(this), 'show'); 14316 }); 14317 /** 14318 * ------------------------------------------------------------------------ 14319 * jQuery 14320 * ------------------------------------------------------------------------ 14321 */ 14322 14323 $$$1.fn[NAME] = Tab._jQueryInterface; 14324 $$$1.fn[NAME].Constructor = Tab; 14325 14326 $$$1.fn[NAME].noConflict = function () { 14327 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 14328 return Tab._jQueryInterface; 14329 }; 14330 14331 return Tab; 14332 }($); 14333 14334 /** 14335 * -------------------------------------------------------------------------- 14336 * Bootstrap (v4.1.3): index.js 14337 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 14338 * -------------------------------------------------------------------------- 14339 */ 14340 14341 (function ($$$1) { 14342 if (typeof $$$1 === 'undefined') { 14343 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 14344 } 14345 14346 var version = $$$1.fn.jquery.split(' ')[0].split('.'); 14347 var minMajor = 1; 14348 var ltMajor = 2; 14349 var minMinor = 9; 14350 var minPatch = 1; 14351 var maxMajor = 4; 14352 14353 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 14354 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 14355 } 14356 })($); 14357 14358 exports.Util = Util; 14359 exports.Alert = Alert; 14360 exports.Button = Button; 14361 exports.Carousel = Carousel; 14362 exports.Collapse = Collapse; 14363 exports.Dropdown = Dropdown; 14364 exports.Modal = Modal; 14365 exports.Popover = Popover; 14366 exports.Scrollspy = ScrollSpy; 14367 exports.Tab = Tab; 14368 exports.Tooltip = Tooltip; 14369 14370 Object.defineProperty(exports, '__esModule', { value: true }); 14371 14372}))); 14373//# sourceMappingURL=bootstrap.js.map 14374 14375 14376/***/ }), 14377/* 5 */ 14378/***/ (function(module, __webpack_exports__, __webpack_require__) { 14379 14380"use strict"; 14381Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); 14382/* WEBPACK VAR INJECTION */(function(global) {/**! 14383 * @fileOverview Kickass library to create and place poppers near their reference elements. 14384 * @version 1.14.4 14385 * @license 14386 * Copyright (c) 2016 Federico Zivolo and contributors 14387 * 14388 * Permission is hereby granted, free of charge, to any person obtaining a copy 14389 * of this software and associated documentation files (the "Software"), to deal 14390 * in the Software without restriction, including without limitation the rights 14391 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14392 * copies of the Software, and to permit persons to whom the Software is 14393 * furnished to do so, subject to the following conditions: 14394 * 14395 * The above copyright notice and this permission notice shall be included in all 14396 * copies or substantial portions of the Software. 14397 * 14398 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14399 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14400 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14401 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 14402 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 14403 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 14404 * SOFTWARE. 14405 */ 14406var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; 14407 14408var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; 14409var timeoutDuration = 0; 14410for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { 14411 if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { 14412 timeoutDuration = 1; 14413 break; 14414 } 14415} 14416 14417function microtaskDebounce(fn) { 14418 var called = false;
vendor: 4,080 bytes, lines 14419-14582
14419 return function () { 14420 if (called) { 14421 return; 14422 } 14423 called = true; 14424 window.Promise.resolve().then(function () { 14425 called = false; 14426 fn(); 14427 }); 14428 }; 14429} 14430 14431function taskDebounce(fn) { 14432 var scheduled = false; 14433 return function () { 14434 if (!scheduled) { 14435 scheduled = true; 14436 setTimeout(function () { 14437 scheduled = false; 14438 fn(); 14439 }, timeoutDuration); 14440 } 14441 }; 14442} 14443 14444var supportsMicroTasks = isBrowser && window.Promise; 14445 14446/** 14447* Create a debounced version of a method, that's asynchronously deferred 14448* but called in the minimum time possible. 14449* 14450* @method 14451* @memberof Popper.Utils 14452* @argument {Function} fn 14453* @returns {Function} 14454*/ 14455var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; 14456 14457/** 14458 * Check if the given variable is a function 14459 * @method 14460 * @memberof Popper.Utils 14461 * @argument {Any} functionToCheck - variable to check 14462 * @returns {Boolean} answer to: is a function? 14463 */ 14464function isFunction(functionToCheck) { 14465 var getType = {}; 14466 return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 14467} 14468 14469/** 14470 * Get CSS computed property of the given element 14471 * @method 14472 * @memberof Popper.Utils 14473 * @argument {Eement} element 14474 * @argument {String} property 14475 */ 14476function getStyleComputedProperty(element, property) { 14477 if (element.nodeType !== 1) { 14478 return []; 14479 } 14480 // NOTE: 1 DOM access here 14481 var css = getComputedStyle(element, null); 14482 return property ? css[property] : css; 14483} 14484 14485/** 14486 * Returns the parentNode or the host of the element 14487 * @method 14488 * @memberof Popper.Utils 14489 * @argument {Element} element 14490 * @returns {Element} parent 14491 */ 14492function getParentNode(element) { 14493 if (element.nodeName === 'HTML') { 14494 return element; 14495 } 14496 return element.parentNode || element.host; 14497} 14498 14499/** 14500 * Returns the scrolling parent of the given element 14501 * @method 14502 * @memberof Popper.Utils 14503 * @argument {Element} element 14504 * @returns {Element} scroll parent 14505 */ 14506function getScrollParent(element) { 14507 // Return body, `getScroll` will take care to get the correct `scrollTop` from it 14508 if (!element) { 14509 return document.body; 14510 } 14511 14512 switch (element.nodeName) { 14513 case 'HTML': 14514 case 'BODY': 14515 return element.ownerDocument.body; 14516 case '#document': 14517 return element.body; 14518 } 14519 14520 // Firefox want us to check `-x` and `-y` variations as well 14521 14522 var _getStyleComputedProp = getStyleComputedProperty(element), 14523 overflow = _getStyleComputedProp.overflow, 14524 overflowX = _getStyleComputedProp.overflowX, 14525 overflowY = _getStyleComputedProp.overflowY; 14526 14527 if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { 14528 return element; 14529 } 14530 14531 return getScrollParent(getParentNode(element)); 14532} 14533 14534var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); 14535var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); 14536 14537/** 14538 * Determines if the browser is Internet Explorer 14539 * @method 14540 * @memberof Popper.Utils 14541 * @param {Number} version to check 14542 * @returns {Boolean} isIE 14543 */ 14544function isIE(version) { 14545 if (version === 11) { 14546 return isIE11; 14547 } 14548 if (version === 10) { 14549 return isIE10; 14550 } 14551 return isIE11 || isIE10; 14552} 14553 14554/** 14555 * Returns the offset parent of the given element 14556 * @method 14557 * @memberof Popper.Utils 14558 * @argument {Element} element 14559 * @returns {Element} offset parent 14560 */ 14561function getOffsetParent(element) { 14562 if (!element) { 14563 return document.documentElement; 14564 } 14565 14566 var noOffsetParent = isIE(10) ? document.body : null; 14567 14568 // NOTE: 1 DOM access here 14569 var offsetParent = element.offsetParent; 14570 // Skip hidden elements which don't have an offsetParent 14571 while (offsetParent === noOffsetParent && element.nextElementSibling) { 14572 offsetParent = (element = element.nextElementSibling).offsetParent; 14573 } 14574 14575 var nodeName = offsetParent && offsetParent.nodeName; 14576 14577 if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { 14578 return element ? element.ownerDocument.documentElement : document.documentElement; 14579 } 14580 14581 // .offsetParent will return the closest TD or TABLE in case 14582 // no offsetParent is present, I hate this job...
14583 if ([
vendor: 11,763 bytes, lines 14583-14951
14583'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { 14584 return getOffsetParent(offsetParent); 14585 } 14586 14587 return offsetParent; 14588} 14589 14590function isOffsetContainer(element) { 14591 var nodeName = element.nodeName; 14592 14593 if (nodeName === 'BODY') { 14594 return false; 14595 } 14596 return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; 14597} 14598 14599/** 14600 * Finds the root node (document, shadowDOM root) of the given element 14601 * @method 14602 * @memberof Popper.Utils 14603 * @argument {Element} node 14604 * @returns {Element} root node 14605 */ 14606function getRoot(node) { 14607 if (node.parentNode !== null) { 14608 return getRoot(node.parentNode); 14609 } 14610 14611 return node; 14612} 14613 14614/** 14615 * Finds the offset parent common to the two provided nodes 14616 * @method 14617 * @memberof Popper.Utils 14618 * @argument {Element} element1 14619 * @argument {Element} element2 14620 * @returns {Element} common offset parent 14621 */ 14622function findCommonOffsetParent(element1, element2) { 14623 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 14624 if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { 14625 return document.documentElement; 14626 } 14627 14628 // Here we make sure to give as "start" the element that comes first in the DOM 14629 var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; 14630 var start = order ? element1 : element2; 14631 var end = order ? element2 : element1; 14632 14633 // Get common ancestor container 14634 var range = document.createRange(); 14635 range.setStart(start, 0); 14636 range.setEnd(end, 0); 14637 var commonAncestorContainer = range.commonAncestorContainer; 14638 14639 // Both nodes are inside #document 14640 14641 if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { 14642 if (isOffsetContainer(commonAncestorContainer)) { 14643 return commonAncestorContainer; 14644 } 14645 14646 return getOffsetParent(commonAncestorContainer); 14647 } 14648 14649 // one of the nodes is inside shadowDOM, find which one 14650 var element1root = getRoot(element1); 14651 if (element1root.host) { 14652 return findCommonOffsetParent(element1root.host, element2); 14653 } else { 14654 return findCommonOffsetParent(element1, getRoot(element2).host); 14655 } 14656} 14657 14658/** 14659 * Gets the scroll value of the given element in the given side (top and left) 14660 * @method 14661 * @memberof Popper.Utils 14662 * @argument {Element} element 14663 * @argument {String} side `top` or `left` 14664 * @returns {number} amount of scrolled pixels 14665 */ 14666function getScroll(element) { 14667 var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; 14668 14669 var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; 14670 var nodeName = element.nodeName; 14671 14672 if (nodeName === 'BODY' || nodeName === 'HTML') { 14673 var html = element.ownerDocument.documentElement; 14674 var scrollingElement = element.ownerDocument.scrollingElement || html; 14675 return scrollingElement[upperSide]; 14676 } 14677 14678 return element[upperSide]; 14679} 14680 14681/* 14682 * Sum or subtract the element scroll values (left and top) from a given rect object 14683 * @method 14684 * @memberof Popper.Utils 14685 * @param {Object} rect - Rect object you want to change 14686 * @param {HTMLElement} element - The element from the function reads the scroll values 14687 * @param {Boolean} subtract - set to true if you want to subtract the scroll values 14688 * @return {Object} rect - The modifier rect object 14689 */ 14690function includeScroll(rect, element) { 14691 var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 14692 14693 var scrollTop = getScroll(element, 'top'); 14694 var scrollLeft = getScroll(element, 'left'); 14695 var modifier = subtract ? -1 : 1; 14696 rect.top += scrollTop * modifier; 14697 rect.bottom += scrollTop * modifier; 14698 rect.left += scrollLeft * modifier; 14699 rect.right += scrollLeft * modifier; 14700 return rect; 14701} 14702 14703/* 14704 * Helper to detect borders of a given element 14705 * @method 14706 * @memberof Popper.Utils 14707 * @param {CSSStyleDeclaration} styles 14708 * Result of `getStyleComputedProperty` on the given element 14709 * @param {String} axis - `x` or `y` 14710 * @return {number} borders - The borders size of the given axis 14711 */ 14712 14713function getBordersSize(styles, axis) { 14714 var sideA = axis === 'x' ? 'Left' : 'Top'; 14715 var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; 14716 14717 return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); 14718} 14719 14720function getSize(axis, body, html, computedStyle) { 14721 return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); 14722} 14723 14724function getWindowSizes(document) { 14725 var body = document.body; 14726 var html = document.documentElement; 14727 var computedStyle = isIE(10) && getComputedStyle(html); 14728 14729 return { 14730 height: getSize('Height', body, html, computedStyle), 14731 width: getSize('Width', body, html, computedStyle) 14732 }; 14733} 14734 14735var classCallCheck = function (instance, Constructor) { 14736 if (!(instance instanceof Constructor)) { 14737 throw new TypeError("Cannot call a class as a function"); 14738 } 14739}; 14740 14741var createClass = function () { 14742 function defineProperties(target, props) { 14743 for (var i = 0; i < props.length; i++) { 14744 var descriptor = props[i]; 14745 descriptor.enumerable = descriptor.enumerable || false; 14746 descriptor.configurable = true; 14747 if ("value" in descriptor) descriptor.writable = true; 14748 Object.defineProperty(target, descriptor.key, descriptor); 14749 } 14750 } 14751 14752 return function (Constructor, protoProps, staticProps) { 14753 if (protoProps) defineProperties(Constructor.prototype, protoProps); 14754 if (staticProps) defineProperties(Constructor, staticProps); 14755 return Constructor; 14756 }; 14757}(); 14758 14759 14760 14761 14762 14763var defineProperty = function (obj, key, value) { 14764 if (key in obj) { 14765 Object.defineProperty(obj, key, { 14766 value: value, 14767 enumerable: true, 14768 configurable: true, 14769 writable: true 14770 }); 14771 } else { 14772 obj[key] = value; 14773 } 14774 14775 return obj; 14776}; 14777 14778var _extends = Object.assign || function (target) { 14779 for (var i = 1; i < arguments.length; i++) { 14780 var source = arguments[i]; 14781 14782 for (var key in source) { 14783 if (Object.prototype.hasOwnProperty.call(source, key)) { 14784 target[key] = source[key]; 14785 } 14786 } 14787 } 14788 14789 return target; 14790}; 14791 14792/** 14793 * Given element offsets, generate an output similar to getBoundingClientRect 14794 * @method 14795 * @memberof Popper.Utils 14796 * @argument {Object} offsets 14797 * @returns {Object} ClientRect like output 14798 */ 14799function getClientRect(offsets) { 14800 return _extends({}, offsets, { 14801 right: offsets.left + offsets.width, 14802 bottom: offsets.top + offsets.height 14803 }); 14804} 14805 14806/** 14807 * Get bounding client rect of given element 14808 * @method 14809 * @memberof Popper.Utils 14810 * @param {HTMLElement} element 14811 * @return {Object} client rect 14812 */ 14813function getBoundingClientRect(element) { 14814 var rect = {}; 14815 14816 // IE10 10 FIX: Please, don't ask, the element isn't 14817 // considered in DOM in some circumstances... 14818 // This isn't reproducible in IE10 compatibility mode of IE11 14819 try { 14820 if (isIE(10)) { 14821 rect = element.getBoundingClientRect(); 14822 var scrollTop = getScroll(element, 'top'); 14823 var scrollLeft = getScroll(element, 'left'); 14824 rect.top += scrollTop; 14825 rect.left += scrollLeft; 14826 rect.bottom += scrollTop; 14827 rect.right += scrollLeft; 14828 } else { 14829 rect = element.getBoundingClientRect(); 14830 } 14831 } catch (e) {} 14832 14833 var result = { 14834 left: rect.left, 14835 top: rect.top, 14836 width: rect.right - rect.left, 14837 height: rect.bottom - rect.top 14838 }; 14839 14840 // subtract scrollbar size from sizes 14841 var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; 14842 var width = sizes.width || element.clientWidth || result.right - result.left; 14843 var height = sizes.height || element.clientHeight || result.bottom - result.top; 14844 14845 var horizScrollbar = element.offsetWidth - width; 14846 var vertScrollbar = element.offsetHeight - height; 14847 14848 // if an hypothetical scrollbar is detected, we must be sure it's not a `border` 14849 // we make this check conditional for performance reasons 14850 if (horizScrollbar || vertScrollbar) { 14851 var styles = getStyleComputedProperty(element); 14852 horizScrollbar -= getBordersSize(styles, 'x'); 14853 vertScrollbar -= getBordersSize(styles, 'y'); 14854 14855 result.width -= horizScrollbar; 14856 result.height -= vertScrollbar; 14857 } 14858 14859 return getClientRect(result); 14860} 14861 14862function getOffsetRectRelativeToArbitraryNode(children, parent) { 14863 var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 14864 14865 var isIE10 = isIE(10); 14866 var isHTML = parent.nodeName === 'HTML'; 14867 var childrenRect = getBoundingClientRect(children); 14868 var parentRect = getBoundingClientRect(parent); 14869 var scrollParent = getScrollParent(children); 14870 14871 var styles = getStyleComputedProperty(parent); 14872 var borderTopWidth = parseFloat(styles.borderTopWidth, 10); 14873 var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); 14874 14875 // In cases where the parent is fixed, we must ignore negative scroll in offset calc 14876 if (fixedPosition && isHTML) { 14877 parentRect.top = Math.max(parentRect.top, 0); 14878 parentRect.left = Math.max(parentRect.left, 0); 14879 } 14880 var offsets = getClientRect({ 14881 top: childrenRect.top - parentRect.top - borderTopWidth, 14882 left: childrenRect.left - parentRect.left - borderLeftWidth, 14883 width: childrenRect.width, 14884 height: childrenRect.height 14885 }); 14886 offsets.marginTop = 0; 14887 offsets.marginLeft = 0; 14888 14889 // Subtract margins of documentElement in case it's being used as parent 14890 // we do this only on HTML because it's the only element that behaves 14891 // differently when margins are applied to it. The margins are included in 14892 // the box of the documentElement, in the other cases not. 14893 if (!isIE10 && isHTML) { 14894 var marginTop = parseFloat(styles.marginTop, 10); 14895 var marginLeft = parseFloat(styles.marginLeft, 10); 14896 14897 offsets.top -= borderTopWidth - marginTop; 14898 offsets.bottom -= borderTopWidth - marginTop; 14899 offsets.left -= borderLeftWidth - marginLeft; 14900 offsets.right -= borderLeftWidth - marginLeft; 14901 14902 // Attach marginTop and marginLeft because in some circumstances we may need them 14903 offsets.marginTop = marginTop; 14904 offsets.marginLeft = marginLeft; 14905 } 14906 14907 if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { 14908 offsets = includeScroll(offsets, parent); 14909 } 14910 14911 return offsets; 14912} 14913 14914function getViewportOffsetRectRelativeToArtbitraryNode(element) { 14915 var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 14916 14917 var html = element.ownerDocument.documentElement; 14918 var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); 14919 var width = Math.max(html.clientWidth, window.innerWidth || 0); 14920 var height = Math.max(html.clientHeight, window.innerHeight || 0); 14921 14922 var scrollTop = !excludeScroll ? getScroll(html) : 0; 14923 var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; 14924 14925 var offset = { 14926 top: scrollTop - relativeOffset.top + relativeOffset.marginTop, 14927 left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, 14928 width: width, 14929 height: height 14930 }; 14931 14932 return getClientRect(offset); 14933} 14934 14935/** 14936 * Check if the given element is fixed or is inside a fixed parent 14937 * @method 14938 * @memberof Popper.Utils 14939 * @argument {Element} element 14940 * @argument {Element} customContainer 14941 * @returns {Boolean} answer to "isFixed?" 14942 */ 14943function isFixed(element) { 14944 var nodeName = element.nodeName; 14945 if (nodeName === 'BODY' || nodeName === 'HTML') { 14946 return false; 14947 } 14948 if (getStyleComputedProperty(element, 'position') === 'fixed') { 14949 return true; 14950 } 14951
vendor: 5,350 bytes, lines 14951-15114
14951return isFixed(getParentNode(element)); 14952} 14953 14954/** 14955 * Finds the first parent of an element that has a transformed property defined 14956 * @method 14957 * @memberof Popper.Utils 14958 * @argument {Element} element 14959 * @returns {Element} first transformed parent or documentElement 14960 */ 14961 14962function getFixedPositionOffsetParent(element) { 14963 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 14964 if (!element || !element.parentElement || isIE()) { 14965 return document.documentElement; 14966 } 14967 var el = element.parentElement; 14968 while (el && getStyleComputedProperty(el, 'transform') === 'none') { 14969 el = el.parentElement; 14970 } 14971 return el || document.documentElement; 14972} 14973 14974/** 14975 * Computed the boundaries limits and return them 14976 * @method 14977 * @memberof Popper.Utils 14978 * @param {HTMLElement} popper 14979 * @param {HTMLElement} reference 14980 * @param {number} padding 14981 * @param {HTMLElement} boundariesElement - Element used to define the boundaries 14982 * @param {Boolean} fixedPosition - Is in fixed position mode 14983 * @returns {Object} Coordinates of the boundaries 14984 */ 14985function getBoundaries(popper, reference, padding, boundariesElement) { 14986 var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; 14987 14988 // NOTE: 1 DOM access here 14989 14990 var boundaries = { top: 0, left: 0 }; 14991 var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); 14992 14993 // Handle viewport case 14994 if (boundariesElement === 'viewport') { 14995 boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); 14996 } else { 14997 // Handle other cases based on DOM element used as boundaries 14998 var boundariesNode = void 0; 14999 if (boundariesElement === 'scrollParent') { 15000 boundariesNode = getScrollParent(getParentNode(reference)); 15001 if (boundariesNode.nodeName === 'BODY') { 15002 boundariesNode = popper.ownerDocument.documentElement; 15003 } 15004 } else if (boundariesElement === 'window') { 15005 boundariesNode = popper.ownerDocument.documentElement; 15006 } else { 15007 boundariesNode = boundariesElement; 15008 } 15009 15010 var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); 15011 15012 // In case of HTML, we need a different computation 15013 if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { 15014 var _getWindowSizes = getWindowSizes(popper.ownerDocument), 15015 height = _getWindowSizes.height, 15016 width = _getWindowSizes.width; 15017 15018 boundaries.top += offsets.top - offsets.marginTop; 15019 boundaries.bottom = height + offsets.top; 15020 boundaries.left += offsets.left - offsets.marginLeft; 15021 boundaries.right = width + offsets.left; 15022 } else { 15023 // for all the other DOM elements, this one is good 15024 boundaries = offsets; 15025 } 15026 } 15027 15028 // Add paddings 15029 padding = padding || 0; 15030 var isPaddingNumber = typeof padding === 'number'; 15031 boundaries.left += isPaddingNumber ? padding : padding.left || 0; 15032 boundaries.top += isPaddingNumber ? padding : padding.top || 0; 15033 boundaries.right -= isPaddingNumber ? padding : padding.right || 0; 15034 boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; 15035 15036 return boundaries; 15037} 15038 15039function getArea(_ref) { 15040 var width = _ref.width, 15041 height = _ref.height; 15042 15043 return width * height; 15044} 15045 15046/** 15047 * Utility used to transform the `auto` placement to the placement with more 15048 * available space. 15049 * @method 15050 * @memberof Popper.Utils 15051 * @argument {Object} data - The data object generated by update method 15052 * @argument {Object} options - Modifiers configuration and options 15053 * @returns {Object} The data object, properly modified 15054 */ 15055function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { 15056 var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; 15057 15058 if (placement.indexOf('auto') === -1) { 15059 return placement; 15060 } 15061 15062 var boundaries = getBoundaries(popper, reference, padding, boundariesElement); 15063 15064 var rects = { 15065 top: { 15066 width: boundaries.width, 15067 height: refRect.top - boundaries.top 15068 }, 15069 right: { 15070 width: boundaries.right - refRect.right, 15071 height: boundaries.height 15072 }, 15073 bottom: { 15074 width: boundaries.width, 15075 height: boundaries.bottom - refRect.bottom 15076 }, 15077 left: { 15078 width: refRect.left - boundaries.left, 15079 height: boundaries.height 15080 } 15081 }; 15082 15083 var sortedAreas = Object.keys(rects).map(function (key) { 15084 return _extends({ 15085 key: key 15086 }, rects[key], { 15087 area: getArea(rects[key]) 15088 }); 15089 }).sort(function (a, b) { 15090 return b.area - a.area; 15091 }); 15092 15093 var filteredAreas = sortedAreas.filter(function (_ref2) { 15094 var width = _ref2.width, 15095 height = _ref2.height; 15096 return width >= popper.clientWidth && height >= popper.clientHeight; 15097 }); 15098 15099 var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; 15100 15101 var variation = placement.split('-')[1]; 15102 15103 return computedPlacement + (variation ? '-' + variation : ''); 15104} 15105 15106/** 15107 * Get offsets to the reference element 15108 * @method 15109 * @memberof Popper.Utils 15110 * @param {Object} state 15111 * @param {Element} popper - the popper element 15112 * @param {Element} reference - the reference element (the popper will be relative to this) 15113 * @param {Element} fixedPosition - is in fixed position mode 15114 * @returns {Object}
15114 An object containing the offsets which will be applied to the popper 15115 */ 15116function getReferenceOffsets(state, popper, reference) { 15117 var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 15118 15119 var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); 15120 return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); 15121} 15122 15123/** 15124 * Get the outer sizes of the given element (offset size + margins) 15125 * @method 15126 * @memberof Popper.Utils 15127 * @argument {Element} element 15128 * @returns {Object} object containing width and height properties 15129 */ 15130function getOuterSizes(element) { 15131 var styles = getComputedStyle(element); 15132 var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom); 15133 var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight
vendor: 14,252 bytes, lines 15133-15585
15133); 15134 var result = { 15135 width: element.offsetWidth + y, 15136 height: element.offsetHeight + x 15137 }; 15138 return result; 15139} 15140 15141/** 15142 * Get the opposite placement of the given one 15143 * @method 15144 * @memberof Popper.Utils 15145 * @argument {String} placement 15146 * @returns {String} flipped placement 15147 */ 15148function getOppositePlacement(placement) { 15149 var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; 15150 return placement.replace(/left|right|bottom|top/g, function (matched) { 15151 return hash[matched]; 15152 }); 15153} 15154 15155/** 15156 * Get offsets to the popper 15157 * @method 15158 * @memberof Popper.Utils 15159 * @param {Object} position - CSS position the Popper will get applied 15160 * @param {HTMLElement} popper - the popper element 15161 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) 15162 * @param {String} placement - one of the valid placement options 15163 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper 15164 */ 15165function getPopperOffsets(popper, referenceOffsets, placement) { 15166 placement = placement.split('-')[0]; 15167 15168 // Get popper node sizes 15169 var popperRect = getOuterSizes(popper); 15170 15171 // Add position, width and height to our offsets object 15172 var popperOffsets = { 15173 width: popperRect.width, 15174 height: popperRect.height 15175 }; 15176 15177 // depending by the popper placement we have to compute its offsets slightly differently 15178 var isHoriz = ['right', 'left'].indexOf(placement) !== -1; 15179 var mainSide = isHoriz ? 'top' : 'left'; 15180 var secondarySide = isHoriz ? 'left' : 'top'; 15181 var measurement = isHoriz ? 'height' : 'width'; 15182 var secondaryMeasurement = !isHoriz ? 'height' : 'width'; 15183 15184 popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; 15185 if (placement === secondarySide) { 15186 popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; 15187 } else { 15188 popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; 15189 } 15190 15191 return popperOffsets; 15192} 15193 15194/** 15195 * Mimics the `find` method of Array 15196 * @method 15197 * @memberof Popper.Utils 15198 * @argument {Array} arr 15199 * @argument prop 15200 * @argument value 15201 * @returns index or -1 15202 */ 15203function find(arr, check) { 15204 // use native find if supported 15205 if (Array.prototype.find) { 15206 return arr.find(check); 15207 } 15208 15209 // use `filter` to obtain the same behavior of `find` 15210 return arr.filter(check)[0]; 15211} 15212 15213/** 15214 * Return the index of the matching object 15215 * @method 15216 * @memberof Popper.Utils 15217 * @argument {Array} arr 15218 * @argument prop 15219 * @argument value 15220 * @returns index or -1 15221 */ 15222function findIndex(arr, prop, value) { 15223 // use native findIndex if supported 15224 if (Array.prototype.findIndex) { 15225 return arr.findIndex(function (cur) { 15226 return cur[prop] === value; 15227 }); 15228 } 15229 15230 // use `find` + `indexOf` if `findIndex` isn't supported 15231 var match = find(arr, function (obj) { 15232 return obj[prop] === value; 15233 }); 15234 return arr.indexOf(match); 15235} 15236 15237/** 15238 * Loop trough the list of modifiers and run them in order, 15239 * each of them will then edit the data object. 15240 * @method 15241 * @memberof Popper.Utils 15242 * @param {dataObject} data 15243 * @param {Array} modifiers 15244 * @param {String} ends - Optional modifier name used as stopper 15245 * @returns {dataObject} 15246 */ 15247function runModifiers(modifiers, data, ends) { 15248 var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); 15249 15250 modifiersToRun.forEach(function (modifier) { 15251 if (modifier['function']) { 15252 // eslint-disable-line dot-notation 15253 console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); 15254 } 15255 var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation 15256 if (modifier.enabled && isFunction(fn)) { 15257 // Add properties to offsets to make them a complete clientRect object 15258 // we do this before each modifier to make sure the previous one doesn't 15259 // mess with these values 15260 data.offsets.popper = getClientRect(data.offsets.popper); 15261 data.offsets.reference = getClientRect(data.offsets.reference); 15262 15263 data = fn(data, modifier); 15264 } 15265 }); 15266 15267 return data; 15268} 15269 15270/** 15271 * Updates the position of the popper, computing the new offsets and applying 15272 * the new style.<br /> 15273 * Prefer `scheduleUpdate` over `update` because of performance reasons. 15274 * @method 15275 * @memberof Popper 15276 */ 15277function update() { 15278 // if popper is destroyed, don't perform any further update 15279 if (this.state.isDestroyed) { 15280 return; 15281 } 15282 15283 var data = { 15284 instance: this, 15285 styles: {}, 15286 arrowStyles: {}, 15287 attributes: {}, 15288 flipped: false, 15289 offsets: {} 15290 }; 15291 15292 // compute reference element offsets 15293 data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); 15294 15295 // compute auto placement, store placement inside the data object, 15296 // modifiers will be able to edit `placement` if needed 15297 // and refer to originalPlacement to know the original value 15298 data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); 15299 15300 // store the computed placement inside `originalPlacement` 15301 data.originalPlacement = data.placement; 15302 15303 data.positionFixed = this.options.positionFixed; 15304 15305 // compute the popper offsets 15306 data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); 15307 15308 data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; 15309 15310 // run the modifiers 15311 data = runModifiers(this.modifiers, data); 15312 15313 // the first `update` will call `onCreate` callback 15314 // the other ones will call `onUpdate` callback 15315 if (!this.state.isCreated) { 15316 this.state.isCreated = true; 15317 this.options.onCreate(data); 15318 } else { 15319 this.options.onUpdate(data); 15320 } 15321} 15322 15323/** 15324 * Helper used to know if the given modifier is enabled. 15325 * @method 15326 * @memberof Popper.Utils 15327 * @returns {Boolean} 15328 */ 15329function isModifierEnabled(modifiers, modifierName) { 15330 return modifiers.some(function (_ref) { 15331 var name = _ref.name, 15332 enabled = _ref.enabled; 15333 return enabled && name === modifierName; 15334 }); 15335} 15336 15337/** 15338 * Get the prefixed supported property name 15339 * @method 15340 * @memberof Popper.Utils 15341 * @argument {String} property (camelCase) 15342 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) 15343 */ 15344function getSupportedPropertyName(property) { 15345 var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; 15346 var upperProp = property.charAt(0).toUpperCase() + property.slice(1); 15347 15348 for (var i = 0; i < prefixes.length; i++) { 15349 var prefix = prefixes[i]; 15350 var toCheck = prefix ? '' + prefix + upperProp : property; 15351 if (typeof document.body.style[toCheck] !== 'undefined') { 15352 return toCheck; 15353 } 15354 } 15355 return null; 15356} 15357 15358/** 15359 * Destroys the popper. 15360 * @method 15361 * @memberof Popper 15362 */ 15363function destroy() { 15364 this.state.isDestroyed = true; 15365 15366 // touch DOM only if `applyStyle` modifier is enabled 15367 if (isModifierEnabled(this.modifiers, 'applyStyle')) { 15368 this.popper.removeAttribute('x-placement'); 15369 this.popper.style.position = ''; 15370 this.popper.style.top = ''; 15371 this.popper.style.left = ''; 15372 this.popper.style.right = ''; 15373 this.popper.style.bottom = ''; 15374 this.popper.style.willChange = ''; 15375 this.popper.style[getSupportedPropertyName('transform')] = ''; 15376 } 15377 15378 this.disableEventListeners(); 15379 15380 // remove the popper if user explicity asked for the deletion on destroy 15381 // do not use `remove` because IE11 doesn't support it 15382 if (this.options.removeOnDestroy) { 15383 this.popper.parentNode.removeChild(this.popper); 15384 } 15385 return this; 15386} 15387 15388/** 15389 * Get the window associated with the element 15390 * @argument {Element} element 15391 * @returns {Window} 15392 */ 15393function getWindow(element) { 15394 var ownerDocument = element.ownerDocument; 15395 return ownerDocument ? ownerDocument.defaultView : window; 15396} 15397 15398function attachToScrollParents(scrollParent, event, callback, scrollParents) { 15399 var isBody = scrollParent.nodeName === 'BODY'; 15400 var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; 15401 target.addEventListener(event, callback, { passive: true }); 15402 15403 if (!isBody) { 15404 attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); 15405 } 15406 scrollParents.push(target); 15407} 15408 15409/** 15410 * Setup needed event listeners used to update the popper position 15411 * @method 15412 * @memberof Popper.Utils 15413 * @private 15414 */ 15415function setupEventListeners(reference, options, state, updateBound) { 15416 // Resize event listener on window 15417 state.updateBound = updateBound; 15418 getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); 15419 15420 // Scroll event listener on scroll parents 15421 var scrollElement = getScrollParent(reference); 15422 attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); 15423 state.scrollElement = scrollElement; 15424 state.eventsEnabled = true; 15425 15426 return state; 15427} 15428 15429/** 15430 * It will add resize/scroll events and start recalculating 15431 * position of the popper element when they are triggered. 15432 * @method 15433 * @memberof Popper 15434 */ 15435function enableEventListeners() { 15436 if (!this.state.eventsEnabled) { 15437 this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); 15438 } 15439} 15440 15441/** 15442 * Remove event listeners used to update the popper position 15443 * @method 15444 * @memberof Popper.Utils 15445 * @private 15446 */ 15447function removeEventListeners(reference, state) { 15448 // Remove resize event listener on window 15449 getWindow(reference).removeEventListener('resize', state.updateBound); 15450 15451 // Remove scroll event listener on scroll parents 15452 state.scrollParents.forEach(function (target) { 15453 target.removeEventListener('scroll', state.updateBound); 15454 }); 15455 15456 // Reset state 15457 state.updateBound = null; 15458 state.scrollParents = []; 15459 state.scrollElement = null; 15460 state.eventsEnabled = false; 15461 return state; 15462} 15463 15464/** 15465 * It will remove resize/scroll events and won't recalculate popper position 15466 * when they are triggered. It also won't trigger `onUpdate` callback anymore, 15467 * unless you call `update` method manually. 15468 * @method 15469 * @memberof Popper 15470 */ 15471function disableEventListeners() { 15472 if (this.state.eventsEnabled) { 15473 cancelAnimationFrame(this.scheduleUpdate); 15474 this.state = removeEventListeners(this.reference, this.state); 15475 } 15476} 15477 15478/** 15479 * Tells if a given input is a number 15480 * @method 15481 * @memberof Popper.Utils 15482 * @param {*} input to check 15483 * @return {Boolean} 15484 */ 15485function isNumeric(n) { 15486 return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); 15487} 15488 15489/** 15490 * Set the style to the given popper 15491 * @method 15492 * @memberof Popper.Utils 15493 * @argument {Element} element - Element to apply the style to 15494 * @argument {Object} styles 15495 * Object with a list of properties and values which will be applied to the element 15496 */ 15497function setStyles(element, styles) { 15498 Object.keys(styles).forEach(function (prop) { 15499 var unit = ''; 15500 // add unit if the value is numeric and is one of the following 15501 if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { 15502 unit = 'px'; 15503 } 15504 element.style[prop] = styles[prop] + unit; 15505 }); 15506} 15507 15508/** 15509 * Set the attributes to the given popper 15510 * @method 15511 * @memberof Popper.Utils 15512 * @argument {Element} element - Element to apply the attributes to 15513 * @argument {Object} styles 15514 * Object with a list of properties and values which will be applied to the element 15515 */ 15516function setAttributes(element, attributes) { 15517 Object.keys(attributes).forEach(function (prop) { 15518 var value = attributes[prop]; 15519 if (value !== false) { 15520 element.setAttribute(prop, attributes[prop]); 15521 } else { 15522 element.removeAttribute(prop); 15523 } 15524 }); 15525} 15526 15527/** 15528 * @function 15529 * @memberof Modifiers 15530 * @argument {Object} data - The data object generated by `update` method 15531 * @argument {Object} data.styles - List of style properties - values to apply to popper element 15532 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element 15533 * @argument {Object} options - Modifiers configuration and options 15534 * @returns {Object} The same data object 15535 */ 15536function applyStyle(data) { 15537 // any property present in `data.styles` will be applied to the popper, 15538 // in this way we can make the 3rd party modifiers add custom styles to it 15539 // Be aware, modifiers could override the properties defined in the previous 15540 // lines of this modifier! 15541 setStyles(data.instance.popper, data.styles); 15542 15543 // any property present in `data.attributes` will be applied to the popper, 15544 // they will be set as HTML attributes of the element 15545 setAttributes(data.instance.popper, data.attributes); 15546 15547 // if arrowElement is defined and arrowStyles has some properties 15548 if (data.arrowElement && Object.keys(data.arrowStyles).length) { 15549 setStyles(data.arrowElement, data.arrowStyles); 15550 } 15551 15552 return data; 15553} 15554 15555/** 15556 * Set the x-placement attribute before everything else because it could be used 15557 * to add margins to the popper margins needs to be calculated to get the 15558 * correct popper offsets. 15559 * @method 15560 * @memberof Popper.modifiers 15561 * @param {HTMLElement} reference - The reference element used to position the popper 15562 * @param {HTMLElement} popper - The HTML element used as popper 15563 * @param {Object} options - Popper.js options 15564 */ 15565function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { 15566 // compute reference element offsets 15567 var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); 15568 15569 // compute auto placement, store placement inside the data object, 15570 // modifiers will be able to edit `placement` if needed 15571 // and refer to originalPlacement to know the original value 15572 var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); 15573 15574 popper.setAttribute('x-placement', placement); 15575 15576 // Apply `position` to popper before anything else because 15577 // without the position applied we can't guarantee correct computations 15578 setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); 15579 15580 return options; 15581} 15582 15583/** 15584 * @function 15585 * @memberof
15585Modifiers 15586 * @argument {Object} data - The data object generated by `update` method 15587 * @argument {Object} options - Modifiers configuration and options 15588 * @returns {Object} The data object, properly modified 15589 */ 15590function computeStyle(data, options) { 15591 var x = options.x, 15592 y = options.y; 15593 var popper = data.offsets.popper; 15594 15595 // Remove this legacy support in Popper.js v2 15596 15597 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { 15598 return modifier.name === 'applyStyle'; 15599 }).gpuAcceleration; 15600 if (legacyGpuAccelerationOption !== undefined) { 15601 console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); 15602 } 15603 var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; 15604 15605 var offsetParent = getOffsetParent(data.instance.popper); 15606 var offsetParentRect = getBoundingClientRect(offsetParent); 15607 15608 // Styles 15609 var styles = { 15610 position: popper.position 15611 }; 15612 15613 // Avoid blurry text by using full pixel integers. 15614 // For pixel-perfect positioning, top/bottom prefers rounded 15615 // values, while left/right prefers floored values. 15616 var offsets = { 15617 left: Math.floor(popper.left), 15618 top: Math.round(popper.top), 15619 bottom: Math.round(popper.bottom), 15620 right: Math.floor(popper.right) 15621 }; 15622 15623 var sideA = x === 'bottom' ? 'top' : 'bottom'; 15624 var sideB = y === 'right' ? 'left' : 'right'; 15625 15626 // if gpuAcceleration is set to `true` and transform is supported, 15627 // we use `translate3d` to apply the position to the popper we 15628 // automatically use the supported prefixed version if needed 15629 var prefixedProperty = getSupportedPropertyName('transform'); 15630 15631 // now, let's make a step back and look at this code closely (wtf?) 15632 // If the content of the popper grows once it's been positioned, it 15633 // may happen that the popper gets misplaced because of the new content 15634 // overflowing its reference element 15635 // To avoid this problem, we provide two options (x and y), which allow 15636 // the consumer to define the offset origin. 15637 // If we position a popper on top of a reference element, we can set 15638 // `x` to `top` to make the popper grow towards its top instead of 15639 // its bottom. 15640 var left = void 0, 15641 top = void 0; 15642 if (sideA === 'bottom') { 15643 // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar) 15644 // and not the bottom of the html element 15645 if (offsetParent.nodeName === 'HTML') { 15646 top = -offsetParent.clientHeight + offsets.bottom; 15647 } else { 15648 top = -offsetParentRect.height + offsets.bottom; 15649 } 15650 } else { 15651 top = offsets.top; 15652 } 15653 if (sideB === 'right') {
vendor: 5,843 bytes, lines 15654-15825
15654 if (offsetParent.nodeName === 'HTML') { 15655 left = -offsetParent.clientWidth + offsets.right; 15656 } else { 15657 left = -offsetParentRect.width + offsets.right; 15658 } 15659 } else { 15660 left = offsets.left; 15661 } 15662 if (gpuAcceleration && prefixedProperty) { 15663 styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; 15664 styles[sideA] = 0; 15665 styles[sideB] = 0; 15666 styles.willChange = 'transform'; 15667 } else { 15668 // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties 15669 var invertTop = sideA === 'bottom' ? -1 : 1; 15670 var invertLeft = sideB === 'right' ? -1 : 1; 15671 styles[sideA] = top * invertTop; 15672 styles[sideB] = left * invertLeft; 15673 styles.willChange = sideA + ', ' + sideB; 15674 } 15675 15676 // Attributes 15677 var attributes = { 15678 'x-placement': data.placement 15679 }; 15680 15681 // Update `data` attributes, styles and arrowStyles 15682 data.attributes = _extends({}, attributes, data.attributes); 15683 data.styles = _extends({}, styles, data.styles); 15684 data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); 15685 15686 return data; 15687} 15688 15689/** 15690 * Helper used to know if the given modifier depends from another one.<br /> 15691 * It checks if the needed modifier is listed and enabled. 15692 * @method 15693 * @memberof Popper.Utils 15694 * @param {Array} modifiers - list of modifiers 15695 * @param {String} requestingName - name of requesting modifier 15696 * @param {String} requestedName - name of requested modifier 15697 * @returns {Boolean} 15698 */ 15699function isModifierRequired(modifiers, requestingName, requestedName) { 15700 var requesting = find(modifiers, function (_ref) { 15701 var name = _ref.name; 15702 return name === requestingName; 15703 }); 15704 15705 var isRequired = !!requesting && modifiers.some(function (modifier) { 15706 return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; 15707 }); 15708 15709 if (!isRequired) { 15710 var _requesting = '`' + requestingName + '`'; 15711 var requested = '`' + requestedName + '`'; 15712 console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); 15713 } 15714 return isRequired; 15715} 15716 15717/** 15718 * @function 15719 * @memberof Modifiers 15720 * @argument {Object} data - The data object generated by update method 15721 * @argument {Object} options - Modifiers configuration and options 15722 * @returns {Object} The data object, properly modified 15723 */ 15724function arrow(data, options) { 15725 var _data$offsets$arrow; 15726 15727 // arrow depends on keepTogether in order to work 15728 if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { 15729 return data; 15730 } 15731 15732 var arrowElement = options.element; 15733 15734 // if arrowElement is a string, suppose it's a CSS selector 15735 if (typeof arrowElement === 'string') { 15736 arrowElement = data.instance.popper.querySelector(arrowElement); 15737 15738 // if arrowElement is not found, don't run the modifier 15739 if (!arrowElement) { 15740 return data; 15741 } 15742 } else { 15743 // if the arrowElement isn't a query selector we must check that the 15744 // provided DOM node is child of its popper node 15745 if (!data.instance.popper.contains(arrowElement)) { 15746 console.warn('WARNING: `arrow.element` must be child of its popper element!'); 15747 return data; 15748 } 15749 } 15750 15751 var placement = data.placement.split('-')[0]; 15752 var _data$offsets = data.offsets, 15753 popper = _data$offsets.popper, 15754 reference = _data$offsets.reference; 15755 15756 var isVertical = ['left', 'right'].indexOf(placement) !== -1; 15757 15758 var len = isVertical ? 'height' : 'width'; 15759 var sideCapitalized = isVertical ? 'Top' : 'Left'; 15760 var side = sideCapitalized.toLowerCase(); 15761 var altSide = isVertical ? 'left' : 'top'; 15762 var opSide = isVertical ? 'bottom' : 'right'; 15763 var arrowElementSize = getOuterSizes(arrowElement)[len]; 15764 15765 // 15766 // extends keepTogether behavior making sure the popper and its 15767 // reference have enough pixels in conjunction 15768 // 15769 15770 // top/left side 15771 if (reference[opSide] - arrowElementSize < popper[side]) { 15772 data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); 15773 } 15774 // bottom/right side 15775 if (reference[side] + arrowElementSize > popper[opSide]) { 15776 data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; 15777 } 15778 data.offsets.popper = getClientRect(data.offsets.popper); 15779 15780 // compute center of the popper 15781 var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; 15782 15783 // Compute the sideValue using the updated popper offsets 15784 // take popper margin in account because we don't have this info available 15785 var css = getStyleComputedProperty(data.instance.popper); 15786 var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); 15787 var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); 15788 var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; 15789 15790 // prevent arrowElement from being placed not contiguously to its popper 15791 sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); 15792 15793 data.arrowElement = arrowElement; 15794 data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); 15795 15796 return data; 15797} 15798 15799/** 15800 * Get the opposite placement variation of the given one 15801 * @method 15802 * @memberof Popper.Utils 15803 * @argument {String} placement variation 15804 * @returns {String} flipped placement variation 15805 */ 15806function getOppositeVariation(variation) { 15807 if (variation === 'end') { 15808 return 'start'; 15809 } else if (variation === 'start') { 15810 return 'end'; 15811 } 15812 return variation; 15813} 15814 15815/** 15816 * List of accepted placements to use as values of the `placement` option.<br /> 15817 * Valid placements are: 15818 * - `auto` 15819 * - `top` 15820 * - `right` 15821 * - `bottom` 15822 * - `left` 15823 * 15824 * Each placement can have a variation from this list: 15825 * - `-start`
15826 * - `-end` 15827 * 15828 * Variations are interpreted easily if you think of them as the left to right 15829 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` 15830 * is right.<br /> 15831 * Vertically (`left` and `right`), `start` is top and `end` is bottom. 15832 * 15833 * Some valid examples are: 15834 * - `top-end` (on top of reference, right aligned) 15835 * - `right-start` (on right of reference, top aligned) 15836 * - `bottom` (on bottom, centered) 15837 * - `auto-end` (on the side with more space available, alignment depends by placement) 15838 * 15839 * @static 15840 * @type {Array} 15841 * @enum {String} 15842 * @readonly 15843 * @method placements 15844 * @memberof Popper 15845 */ 15846var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; 15847 15848// Get rid of `auto` `auto-start` and `auto-end` 15849var validPlacements = placements.slice(3); 15850 15851/** 15852 * Given an initial placement, returns all the subsequent placements 15853 * clockwise (or counter-clockwise). 15854 * 15855 * @method 15856 * @memberof Popper.Utils 15857 * @argument {String} placement - A valid placement (it accepts variations) 15858 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise 15859 * @returns {Array} placements including their variations 15860 */ 15861function clockwise(placement) { 15862 var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 15863 15864 var index = validPlacements.indexOf(placement); 15865 var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); 15866 return counter ? arr.reverse() : arr; 15867} 15868 15869var BEHAVIORS = { 15870 FLIP: 'flip', 15871 CLOCKWISE: 'clockwise', 15872 COUNTERCLOCKWISE: 'counterclockwise' 15873}; 15874 15875/** 15876 * @function 15877 * @memberof Modifiers 15878 * @argument {Object} data - The data object generated by update method 15879 * @argument {Object} options - Modifiers configuration and options 15880 * @returns {Object} The data object, properly modified 15881 */ 15882function flip(data, options) { 15883 // if `inner` modifier is enabled, we can't use the `flip` modifier 15884 if (isModifierEnabled(data.instance.modifiers, 'inner')) { 15885 return data; 15886 } 15887 15888 if (data.flipped && data.placement === data.originalPlacement) { 15889 // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides 15890 return data; 15891 } 15892 15893 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); 15894 15895 var placement = data.placement.split('-')[0]; 15896 var placementOpposite = getOppositePlacement(placement); 15897 var variation = data.placement.split('-')[1] || ''; 15898 15899 var flipOrder = []; 15900 15901 switch (options.behavior) { 15902 case BEHAVIORS.FLIP: 15903 flipOrder = [placement, placementOpposite]; 15904 break; 15905 case BEHAVIORS.CLOCKWISE: 15906 flipOrder = clockwise(placement); 15907 break; 15908 case BEHAVIORS.COUNTERCLOCKWISE: 15909 flipOrder = clockwise(placement, true); 15910 break; 15911 default: 15912 flipOrder = options.behavior; 15913 } 15914 15915 flipOrder.forEach(function (step, index) { 15916 if (placement !== step || flipOrder.length === index + 1) { 15917 return data; 15918 } 15919 15920 placement = data.placement.split('-')[0]; 15921 placementOpposite = getOppositePlacement(placement); 15922 15923 var popperOffsets = data.offsets.popper; 15924 var refOffsets = data.offsets.reference; 15925 15926 // using floor because the reference offsets may contain decimals we are not going to consider here 15927 var floor = Math.floor; 15928 var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); 15929 15930 var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); 15931 var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); 15932 var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); 15933 var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); 15934 15935 var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; 15936 15937 // flip the variation if required 15938 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 15939 var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom)
vendor: 21,083 bytes, lines 15939-16546
15939; 15940 15941 if (overlapsRef || overflowsBoundaries || flippedVariation) { 15942 // this boolean to detect any flip loop 15943 data.flipped = true; 15944 15945 if (overlapsRef || overflowsBoundaries) { 15946 placement = flipOrder[index + 1]; 15947 } 15948 15949 if (flippedVariation) { 15950 variation = getOppositeVariation(variation); 15951 } 15952 15953 data.placement = placement + (variation ? '-' + variation : ''); 15954 15955 // this object contains `position`, we want to preserve it along with 15956 // any additional property we may add in the future 15957 data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); 15958 15959 data = runModifiers(data.instance.modifiers, data, 'flip'); 15960 } 15961 }); 15962 return data; 15963} 15964 15965/** 15966 * @function 15967 * @memberof Modifiers 15968 * @argument {Object} data - The data object generated by update method 15969 * @argument {Object} options - Modifiers configuration and options 15970 * @returns {Object} The data object, properly modified 15971 */ 15972function keepTogether(data) { 15973 var _data$offsets = data.offsets, 15974 popper = _data$offsets.popper, 15975 reference = _data$offsets.reference; 15976 15977 var placement = data.placement.split('-')[0]; 15978 var floor = Math.floor; 15979 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 15980 var side = isVertical ? 'right' : 'bottom'; 15981 var opSide = isVertical ? 'left' : 'top'; 15982 var measurement = isVertical ? 'width' : 'height'; 15983 15984 if (popper[side] < floor(reference[opSide])) { 15985 data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; 15986 } 15987 if (popper[opSide] > floor(reference[side])) { 15988 data.offsets.popper[opSide] = floor(reference[side]); 15989 } 15990 15991 return data; 15992} 15993 15994/** 15995 * Converts a string containing value + unit into a px value number 15996 * @function 15997 * @memberof {modifiers~offset} 15998 * @private 15999 * @argument {String} str - Value + unit string 16000 * @argument {String} measurement - `height` or `width` 16001 * @argument {Object} popperOffsets 16002 * @argument {Object} referenceOffsets 16003 * @returns {Number|String} 16004 * Value in pixels, or original string if no values were extracted 16005 */ 16006function toValue(str, measurement, popperOffsets, referenceOffsets) { 16007 // separate value from unit 16008 var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); 16009 var value = +split[1]; 16010 var unit = split[2]; 16011 16012 // If it's not a number it's an operator, I guess 16013 if (!value) { 16014 return str; 16015 } 16016 16017 if (unit.indexOf('%') === 0) { 16018 var element = void 0; 16019 switch (unit) { 16020 case '%p': 16021 element = popperOffsets; 16022 break; 16023 case '%': 16024 case '%r': 16025 default: 16026 element = referenceOffsets; 16027 } 16028 16029 var rect = getClientRect(element); 16030 return rect[measurement] / 100 * value; 16031 } else if (unit === 'vh' || unit === 'vw') { 16032 // if is a vh or vw, we calculate the size based on the viewport 16033 var size = void 0; 16034 if (unit === 'vh') { 16035 size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 16036 } else { 16037 size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 16038 } 16039 return size / 100 * value; 16040 } else { 16041 // if is an explicit pixel unit, we get rid of the unit and keep the value 16042 // if is an implicit unit, it's px, and we return just the value 16043 return value; 16044 } 16045} 16046 16047/** 16048 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. 16049 * @function 16050 * @memberof {modifiers~offset} 16051 * @private 16052 * @argument {String} offset 16053 * @argument {Object} popperOffsets 16054 * @argument {Object} referenceOffsets 16055 * @argument {String} basePlacement 16056 * @returns {Array} a two cells array with x and y offsets in numbers 16057 */ 16058function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { 16059 var offsets = [0, 0]; 16060 16061 // Use height if placement is left or right and index is 0 otherwise use width 16062 // in this way the first offset will use an axis and the second one 16063 // will use the other one 16064 var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; 16065 16066 // Split the offset string to obtain a list of values and operands 16067 // The regex addresses values with the plus or minus sign in front (+10, -20, etc) 16068 var fragments = offset.split(/(\+|\-)/).map(function (frag) { 16069 return frag.trim(); 16070 }); 16071 16072 // Detect if the offset string contains a pair of values or a single one 16073 // they could be separated by comma or space 16074 var divider = fragments.indexOf(find(fragments, function (frag) { 16075 return frag.search(/,|\s/) !== -1; 16076 })); 16077 16078 if (fragments[divider] && fragments[divider].indexOf(',') === -1) { 16079 console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); 16080 } 16081 16082 // If divider is found, we divide the list of values and operands to divide 16083 // them by ofset X and Y. 16084 var splitRegex = /\s*,\s*|\s+/; 16085 var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; 16086 16087 // Convert the values with units to absolute pixels to allow our computations 16088 ops = ops.map(function (op, index) { 16089 // Most of the units rely on the orientation of the popper 16090 var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; 16091 var mergeWithPrevious = false; 16092 return op 16093 // This aggregates any `+` or `-` sign that aren't considered operators 16094 // e.g.: 10 + +5 => [10, +, +5] 16095 .reduce(function (a, b) { 16096 if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { 16097 a[a.length - 1] = b; 16098 mergeWithPrevious = true; 16099 return a; 16100 } else if (mergeWithPrevious) { 16101 a[a.length - 1] += b; 16102 mergeWithPrevious = false; 16103 return a; 16104 } else { 16105 return a.concat(b); 16106 } 16107 }, []) 16108 // Here we convert the string values into number values (in px) 16109 .map(function (str) { 16110 return toValue(str, measurement, popperOffsets, referenceOffsets); 16111 }); 16112 }); 16113 16114 // Loop trough the offsets arrays and execute the operations 16115 ops.forEach(function (op, index) { 16116 op.forEach(function (frag, index2) { 16117 if (isNumeric(frag)) { 16118 offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); 16119 } 16120 }); 16121 }); 16122 return offsets; 16123} 16124 16125/** 16126 * @function 16127 * @memberof Modifiers 16128 * @argument {Object} data - The data object generated by update method 16129 * @argument {Object} options - Modifiers configuration and options 16130 * @argument {Number|String} options.offset=0 16131 * The offset value as described in the modifier description 16132 * @returns {Object} The data object, properly modified 16133 */ 16134function offset(data, _ref) { 16135 var offset = _ref.offset; 16136 var placement = data.placement, 16137 _data$offsets = data.offsets, 16138 popper = _data$offsets.popper, 16139 reference = _data$offsets.reference; 16140 16141 var basePlacement = placement.split('-')[0]; 16142 16143 var offsets = void 0; 16144 if (isNumeric(+offset)) { 16145 offsets = [+offset, 0]; 16146 } else { 16147 offsets = parseOffset(offset, popper, reference, basePlacement); 16148 } 16149 16150 if (basePlacement === 'left') { 16151 popper.top += offsets[0]; 16152 popper.left -= offsets[1]; 16153 } else if (basePlacement === 'right') { 16154 popper.top += offsets[0]; 16155 popper.left += offsets[1]; 16156 } else if (basePlacement === 'top') { 16157 popper.left += offsets[0]; 16158 popper.top -= offsets[1]; 16159 } else if (basePlacement === 'bottom') { 16160 popper.left += offsets[0]; 16161 popper.top += offsets[1]; 16162 } 16163 16164 data.popper = popper; 16165 return data; 16166} 16167 16168/** 16169 * @function 16170 * @memberof Modifiers 16171 * @argument {Object} data - The data object generated by `update` method 16172 * @argument {Object} options - Modifiers configuration and options 16173 * @returns {Object} The data object, properly modified 16174 */ 16175function preventOverflow(data, options) { 16176 var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); 16177 16178 // If offsetParent is the reference element, we really want to 16179 // go one step up and use the next offsetParent as reference to 16180 // avoid to make this modifier completely useless and look like broken 16181 if (data.instance.reference === boundariesElement) { 16182 boundariesElement = getOffsetParent(boundariesElement); 16183 } 16184 16185 // NOTE: DOM access here 16186 // resets the popper's position so that the document size can be calculated excluding 16187 // the size of the popper element itself 16188 var transformProp = getSupportedPropertyName('transform'); 16189 var popperStyles = data.instance.popper.style; // assignment to help minification 16190 var top = popperStyles.top, 16191 left = popperStyles.left, 16192 transform = popperStyles[transformProp]; 16193 16194 popperStyles.top = ''; 16195 popperStyles.left = ''; 16196 popperStyles[transformProp] = ''; 16197 16198 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); 16199 16200 // NOTE: DOM access here 16201 // restores the original style properties after the offsets have been computed 16202 popperStyles.top = top; 16203 popperStyles.left = left; 16204 popperStyles[transformProp] = transform; 16205 16206 options.boundaries = boundaries; 16207 16208 var order = options.priority; 16209 var popper = data.offsets.popper; 16210 16211 var check = { 16212 primary: function primary(placement) { 16213 var value = popper[placement]; 16214 if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { 16215 value = Math.max(popper[placement], boundaries[placement]); 16216 } 16217 return defineProperty({}, placement, value); 16218 }, 16219 secondary: function secondary(placement) { 16220 var mainSide = placement === 'right' ? 'left' : 'top'; 16221 var value = popper[mainSide]; 16222 if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { 16223 value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); 16224 } 16225 return defineProperty({}, mainSide, value); 16226 } 16227 }; 16228 16229 order.forEach(function (placement) { 16230 var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; 16231 popper = _extends({}, popper, check[side](placement)); 16232 }); 16233 16234 data.offsets.popper = popper; 16235 16236 return data; 16237} 16238 16239/** 16240 * @function 16241 * @memberof Modifiers 16242 * @argument {Object} data - The data object generated by `update` method 16243 * @argument {Object} options - Modifiers configuration and options 16244 * @returns {Object} The data object, properly modified 16245 */ 16246function shift(data) { 16247 var placement = data.placement; 16248 var basePlacement = placement.split('-')[0]; 16249 var shiftvariation = placement.split('-')[1]; 16250 16251 // if shift shiftvariation is specified, run the modifier 16252 if (shiftvariation) { 16253 var _data$offsets = data.offsets, 16254 reference = _data$offsets.reference, 16255 popper = _data$offsets.popper; 16256 16257 var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; 16258 var side = isVertical ? 'left' : 'top'; 16259 var measurement = isVertical ? 'width' : 'height'; 16260 16261 var shiftOffsets = { 16262 start: defineProperty({}, side, reference[side]), 16263 end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) 16264 }; 16265 16266 data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); 16267 } 16268 16269 return data; 16270} 16271 16272/** 16273 * @function 16274 * @memberof Modifiers 16275 * @argument {Object} data - The data object generated by update method 16276 * @argument {Object} options - Modifiers configuration and options 16277 * @returns {Object} The data object, properly modified 16278 */ 16279function hide(data) { 16280 if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { 16281 return data; 16282 } 16283 16284 var refRect = data.offsets.reference; 16285 var bound = find(data.instance.modifiers, function (modifier) { 16286 return modifier.name === 'preventOverflow'; 16287 }).boundaries; 16288 16289 if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { 16290 // Avoid unnecessary DOM access if visibility hasn't changed 16291 if (data.hide === true) { 16292 return data; 16293 } 16294 16295 data.hide = true; 16296 data.attributes['x-out-of-boundaries'] = ''; 16297 } else { 16298 // Avoid unnecessary DOM access if visibility hasn't changed 16299 if (data.hide === false) { 16300 return data; 16301 } 16302 16303 data.hide = false; 16304 data.attributes['x-out-of-boundaries'] = false; 16305 } 16306 16307 return data; 16308} 16309 16310/** 16311 * @function 16312 * @memberof Modifiers 16313 * @argument {Object} data - The data object generated by `update` method 16314 * @argument {Object} options - Modifiers configuration and options 16315 * @returns {Object} The data object, properly modified 16316 */ 16317function inner(data) { 16318 var placement = data.placement; 16319 var basePlacement = placement.split('-')[0]; 16320 var _data$offsets = data.offsets, 16321 popper = _data$offsets.popper, 16322 reference = _data$offsets.reference; 16323 16324 var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; 16325 16326 var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; 16327 16328 popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); 16329 16330 data.placement = getOppositePlacement(placement); 16331 data.offsets.popper = getClientRect(popper); 16332 16333 return data; 16334} 16335 16336/** 16337 * Modifier function, each modifier can have a function of this type assigned 16338 * to its `fn` property.<br /> 16339 * These functions will be called on each update, this means that you must 16340 * make sure they are performant enough to avoid performance bottlenecks. 16341 * 16342 * @function ModifierFn 16343 * @argument {dataObject} data - The data object generated by `update` method 16344 * @argument {Object} options - Modifiers configuration and options 16345 * @returns {dataObject} The data object, properly modified 16346 */ 16347 16348/** 16349 * Modifiers are plugins used to alter the behavior of your poppers.<br /> 16350 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities 16351 * needed by the library. 16352 * 16353 * Usually you don't want to override the `order`, `fn` and `onLoad` props. 16354 * All the other properties are configurations that could be tweaked. 16355 * @namespace modifiers 16356 */ 16357var modifiers = { 16358 /** 16359 * Modifier used to shift the popper on the start or end of its reference 16360 * element.<br /> 16361 * It will read the variation of the `placement` property.<br /> 16362 * It can be one either `-end` or `-start`. 16363 * @memberof modifiers 16364 * @inner 16365 */ 16366 shift: { 16367 /** @prop {number} order=100 - Index used to define the order of execution */ 16368 order: 100, 16369 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16370 enabled: true, 16371 /** @prop {ModifierFn} */ 16372 fn: shift 16373 }, 16374 16375 /** 16376 * The `offset` modifier can shift your popper on both its axis. 16377 * 16378 * It accepts the following units: 16379 * - `px` or unit-less, interpreted as pixels 16380 * - `%` or `%r`, percentage relative to the length of the reference element 16381 * - `%p`, percentage relative to the length of the popper element 16382 * - `vw`, CSS viewport width unit 16383 * - `vh`, CSS viewport height unit 16384 * 16385 * For length is intended the main axis relative to the placement of the popper.<br /> 16386 * This means that if the placement is `top` or `bottom`, the length will be the 16387 * `width`. In case of `left` or `right`, it will be the `height`. 16388 * 16389 * You can provide a single value (as `Number` or `String`), or a pair of values 16390 * as `String` divided by a comma or one (or more) white spaces.<br /> 16391 * The latter is a deprecated method because it leads to confusion and will be 16392 * removed in v2.<br /> 16393 * Additionally, it accepts additions and subtractions between different units. 16394 * Note that multiplications and divisions aren't supported. 16395 * 16396 * Valid examples are: 16397 * ``` 16398 * 10 16399 * '10%' 16400 * '10, 10' 16401 * '10%, 10' 16402 * '10 + 10%' 16403 * '10 - 5vh + 3%' 16404 * '-10px + 5vh, 5px - 6%' 16405 * ``` 16406 * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap 16407 * > with their reference element, unfortunately, you will have to disable the `flip` modifier. 16408 * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). 16409 * 16410 * @memberof modifiers 16411 * @inner 16412 */ 16413 offset: { 16414 /** @prop {number} order=200 - Index used to define the order of execution */ 16415 order: 200, 16416 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16417 enabled: true, 16418 /** @prop {ModifierFn} */ 16419 fn: offset, 16420 /** @prop {Number|String} offset=0 16421 * The offset value as described in the modifier description 16422 */ 16423 offset: 0 16424 }, 16425 16426 /** 16427 * Modifier used to prevent the popper from being positioned outside the boundary. 16428 * 16429 * A scenario exists where the reference itself is not within the boundaries.<br /> 16430 * We can say it has "escaped the boundaries" — or just "escaped".<br /> 16431 * In this case we need to decide whether the popper should either: 16432 * 16433 * - detach from the reference and remain "trapped" in the boundaries, or 16434 * - if it should ignore the boundary and "escape with its reference" 16435 * 16436 * When `escapeWithReference` is set to`true` and reference is completely 16437 * outside its boundaries, the popper will overflow (or completely leave) 16438 * the boundaries in order to remain attached to the edge of the reference. 16439 * 16440 * @memberof modifiers 16441 * @inner 16442 */ 16443 preventOverflow: { 16444 /** @prop {number} order=300 - Index used to define the order of execution */ 16445 order: 300, 16446 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16447 enabled: true, 16448 /** @prop {ModifierFn} */ 16449 fn: preventOverflow, 16450 /** 16451 * @prop {Array} [priority=['left','right','top','bottom']] 16452 * Popper will try to prevent overflow following these priorities by default, 16453 * then, it could overflow on the left and on top of the `boundariesElement` 16454 */ 16455 priority: ['left', 'right', 'top', 'bottom'], 16456 /** 16457 * @prop {number} padding=5 16458 * Amount of pixel used to define a minimum distance between the boundaries 16459 * and the popper. This makes sure the popper always has a little padding 16460 * between the edges of its container 16461 */ 16462 padding: 5, 16463 /** 16464 * @prop {String|HTMLElement} boundariesElement='scrollParent' 16465 * Boundaries used by the modifier. Can be `scrollParent`, `window`, 16466 * `viewport` or any DOM element. 16467 */ 16468 boundariesElement: 'scrollParent' 16469 }, 16470 16471 /** 16472 * Modifier used to make sure the reference and its popper stay near each other 16473 * without leaving any gap between the two. Especially useful when the arrow is 16474 * enabled and you want to ensure that it points to its reference element. 16475 * It cares only about the first axis. You can still have poppers with margin 16476 * between the popper and its reference element. 16477 * @memberof modifiers 16478 * @inner 16479 */ 16480 keepTogether: { 16481 /** @prop {number} order=400 - Index used to define the order of execution */ 16482 order: 400, 16483 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16484 enabled: true, 16485 /** @prop {ModifierFn} */ 16486 fn: keepTogether 16487 }, 16488 16489 /** 16490 * This modifier is used to move the `arrowElement` of the popper to make 16491 * sure it is positioned between the reference element and its popper element. 16492 * It will read the outer size of the `arrowElement` node to detect how many 16493 * pixels of conjunction are needed. 16494 * 16495 * It has no effect if no `arrowElement` is provided. 16496 * @memberof modifiers 16497 * @inner 16498 */ 16499 arrow: { 16500 /** @prop {number} order=500 - Index used to define the order of execution */ 16501 order: 500, 16502 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16503 enabled: true, 16504 /** @prop {ModifierFn} */ 16505 fn: arrow, 16506 /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ 16507 element: '[x-arrow]' 16508 }, 16509 16510 /** 16511 * Modifier used to flip the popper's placement when it starts to overlap its 16512 * reference element. 16513 * 16514 * Requires the `preventOverflow` modifier before it in order to work. 16515 * 16516 * **NOTE:** this modifier will interrupt the current update cycle and will 16517 * restart it if it detects the need to flip the placement. 16518 * @memberof modifiers 16519 * @inner 16520 */ 16521 flip: { 16522 /** @prop {number} order=600 - Index used to define the order of execution */ 16523 order: 600, 16524 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16525 enabled: true, 16526 /** @prop {ModifierFn} */ 16527 fn: flip, 16528 /** 16529 * @prop {String|Array} behavior='flip' 16530 * The behavior used to change the popper's placement. It can be one of 16531 * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid 16532 * placements (with optional variations) 16533 */ 16534 behavior: 'flip', 16535 /** 16536 * @prop {number} padding=5 16537 * The popper will flip if it hits the edges of the `boundariesElement` 16538 */ 16539 padding: 5, 16540 /** 16541 * @prop {String|HTMLElement} boundariesElement='viewport' 16542 * The element which will define the boundaries of the popper position. 16543 * The popper will never be placed outside of the defined boundaries 16544 * (except if `keepTogether` is enabled) 16545 */ 16546 boundariesElement: 'viewport'
16546 16547 }, 16548 16549 /** 16550 * Modifier used to make the popper flow toward the inner of the reference element. 16551 * By default, when this modifier is disabled, the popper will be placed outside 16552 * the reference element. 16553 * @memberof modifiers 16554 * @inner 16555 */ 16556 inner: { 16557 /** @prop {number} order=700 - Index used to define the order of execution */ 16558 order: 700, 16559 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ 16560 enabled: false, 16561 /** @prop {ModifierFn} */ 16562 fn: inner 16563 }, 16564 16565 /** 16566 * Modifier used to hide the popper when its reference element is outside of the 16567 * popper boundaries. It will set a `x-out-of-boundaries` attribute which can 16568 * be used to hide with a CSS selector the popper when its reference is 16569 * out of boundaries. 16570 * 16571 * Requires the `preventOverflow` modifier before it in order to work. 16572 * @memberof modifiers 16573 * @inner 16574 */ 16575 hide: { 16576 /** @prop {number} order=800 - Index used to define the order of execution */ 16577 order: 800, 16578 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16579 enabled: true, 16580 /** @prop {ModifierFn} */ 16581 fn: hide 16582 }, 16583 16584 /** 16585 * Computes the style that will be applied to the popper element to gets 16586 * properly positioned. 16587 * 16588 * Note that this modifier will not touch the DOM, it just prepares the styles 16589 * so that `applyStyle` modifier can apply it. This separation is useful 16590 * in case you need to replace `applyStyle` with a custom implementation. 16591 * 16592 * This modifier has `850` as `order` value to maintain backward compatibility 16593 * with previous versions of Popper.js. Expect the modifiers ordering method 16594 * to change in future major versions of the library. 16595 * 16596 * @memberof modifiers 16597 * @inner 16598 */ 16599 computeStyle: { 16600 /** @prop {number} order=850 - Index used to define the order of execution */ 16601 order: 850, 16602 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16603 enabled: true, 16604 /** @prop {ModifierFn} */ 16605 fn: computeStyle, 16606 /** 16607 * @prop {Boolean} gpuAcceleration=true 16608 * If true, it uses the CSS 3D transformation to position the popper. 16609 * Otherwise, it will use the `top` and `left` properties 16610 */ 16611 gpuAcceleration: true, 16612 /** 16613 * @prop {string} [x='bottom'] 16614 * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. 16615 * Change this if your popper should grow in a direction different from `bottom` 16616 */ 16617 x: 'bottom', 16618 /** 16619 * @prop {string} [x='left'] 16620 * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. 16621 * Change this if your popper should grow in a direction different from `right` 16622 */ 16623 y: 'right' 16624 }, 16625 16626 /** 16627 * Applies the computed styles to the popper element. 16628 * 16629 * All the DOM manipulations are limited to this modifier. This is useful in case 16630 * you want to integrate Popper.js inside a framework or view library and you 16631 * want to delegate all the DOM manipulations to it. 16632 * 16633 * Note that if you disable this modifier, you must make sure the popper element 16634 * has its position set to `absolute` before Popper.js can do its work! 16635 * 16636 * Just disable this modifier and define your own to achieve the desired effect. 16637 * 16638 * @memberof modifiers 16639 * @inner 16640 */ 16641 applyStyle: { 16642 /** @prop {number} order=900 - Index used to define the order of execution */ 16643 order: 900, 16644 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 16645 enabled: true, 16646 /** @prop {ModifierFn} */
vendor: 4,830 bytes, lines 16647-16785
16647 fn: applyStyle, 16648 /** @prop {Function} */ 16649 onLoad: applyStyleOnLoad, 16650 /** 16651 * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier 16652 * @prop {Boolean} gpuAcceleration=true 16653 * If true, it uses the CSS 3D transformation to position the popper. 16654 * Otherwise, it will use the `top` and `left` properties 16655 */ 16656 gpuAcceleration: undefined 16657 } 16658}; 16659 16660/** 16661 * The `dataObject` is an object containing all the information used by Popper.js. 16662 * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. 16663 * @name dataObject 16664 * @property {Object} data.instance The Popper.js instance 16665 * @property {String} data.placement Placement applied to popper 16666 * @property {String} data.originalPlacement Placement originally defined on init 16667 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier 16668 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper 16669 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier 16670 * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) 16671 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) 16672 * @property {Object} data.boundaries Offsets of the popper boundaries 16673 * @property {Object} data.offsets The measurements of popper, reference and arrow elements 16674 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values 16675 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values 16676 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 16677 */ 16678 16679/** 16680 * Default options provided to Popper.js constructor.<br /> 16681 * These can be overridden using the `options` argument of Popper.js.<br /> 16682 * To override an option, simply pass an object with the same 16683 * structure of the `options` object, as the 3rd argument. For example: 16684 * ``` 16685 * new Popper(ref, pop, { 16686 * modifiers: { 16687 * preventOverflow: { enabled: false } 16688 * } 16689 * }) 16690 * ``` 16691 * @type {Object} 16692 * @static 16693 * @memberof Popper 16694 */ 16695var Defaults = { 16696 /** 16697 * Popper's placement. 16698 * @prop {Popper.placements} placement='bottom' 16699 */ 16700 placement: 'bottom', 16701 16702 /** 16703 * Set this to true if you want popper to position it self in 'fixed' mode 16704 * @prop {Boolean} positionFixed=false 16705 */ 16706 positionFixed: false, 16707 16708 /** 16709 * Whether events (resize, scroll) are initially enabled. 16710 * @prop {Boolean} eventsEnabled=true 16711 */ 16712 eventsEnabled: true, 16713 16714 /** 16715 * Set to true if you want to automatically remove the popper when 16716 * you call the `destroy` method. 16717 * @prop {Boolean} removeOnDestroy=false 16718 */ 16719 removeOnDestroy: false, 16720 16721 /** 16722 * Callback called when the popper is created.<br /> 16723 * By default, it is set to no-op.<br /> 16724 * Access Popper.js instance with `data.instance`. 16725 * @prop {onCreate} 16726 */ 16727 onCreate: function onCreate() {}, 16728 16729 /** 16730 * Callback called when the popper is updated. This callback is not called 16731 * on the initialization/creation of the popper, but only on subsequent 16732 * updates.<br /> 16733 * By default, it is set to no-op.<br /> 16734 * Access Popper.js instance with `data.instance`. 16735 * @prop {onUpdate} 16736 */ 16737 onUpdate: function onUpdate() {}, 16738 16739 /** 16740 * List of modifiers used to modify the offsets before they are applied to the popper. 16741 * They provide most of the functionalities of Popper.js. 16742 * @prop {modifiers} 16743 */ 16744 modifiers: modifiers 16745}; 16746 16747/** 16748 * @callback onCreate 16749 * @param {dataObject} data 16750 */ 16751 16752/** 16753 * @callback onUpdate 16754 * @param {dataObject} data 16755 */ 16756 16757// Utils 16758// Methods 16759var Popper = function () { 16760 /** 16761 * Creates a new Popper.js instance. 16762 * @class Popper 16763 * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper 16764 * @param {HTMLElement} popper - The HTML element used as the popper 16765 * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) 16766 * @return {Object} instance - The generated Popper.js instance 16767 */ 16768 function Popper(reference, popper) { 16769 var _this = this; 16770 16771 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 16772 classCallCheck(this, Popper); 16773 16774 this.scheduleUpdate = function () { 16775 return requestAnimationFrame(_this.update); 16776 }; 16777 16778 // make update() debounced, so that it only runs at most once-per-tick 16779 this.update = debounce(this.update.bind(this)); 16780 16781 // with {} we create a new object with the options inside it 16782 this.options = _extends({}, Popper.Defaults, options); 16783 16784 // init state 16785 this.state = {
vendor: 4,682 bytes, lines 16786-16921
16786 isDestroyed: false, 16787 isCreated: false, 16788 scrollParents: [] 16789 }; 16790 16791 // get reference and popper elements (allow jQuery wrappers) 16792 this.reference = reference && reference.jquery ? reference[0] : reference; 16793 this.popper = popper && popper.jquery ? popper[0] : popper; 16794 16795 // Deep merge modifiers options 16796 this.options.modifiers = {}; 16797 Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { 16798 _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); 16799 }); 16800 16801 // Refactoring modifiers' list (Object => Array) 16802 this.modifiers = Object.keys(this.options.modifiers).map(function (name) { 16803 return _extends({ 16804 name: name 16805 }, _this.options.modifiers[name]); 16806 }) 16807 // sort the modifiers by order 16808 .sort(function (a, b) { 16809 return a.order - b.order; 16810 }); 16811 16812 // modifiers have the ability to execute arbitrary code when Popper.js get inited 16813 // such code is executed in the same order of its modifier 16814 // they could add new properties to their options configuration 16815 // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! 16816 this.modifiers.forEach(function (modifierOptions) { 16817 if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { 16818 modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); 16819 } 16820 }); 16821 16822 // fire the first update to position the popper in the right place 16823 this.update(); 16824 16825 var eventsEnabled = this.options.eventsEnabled; 16826 if (eventsEnabled) { 16827 // setup event listeners, they will take care of update the position in specific situations 16828 this.enableEventListeners(); 16829 } 16830 16831 this.state.eventsEnabled = eventsEnabled; 16832 } 16833 16834 // We can't use class properties because they don't get listed in the 16835 // class prototype and break stuff like Sinon stubs 16836 16837 16838 createClass(Popper, [{ 16839 key: 'update', 16840 value: function update$$1() { 16841 return update.call(this); 16842 } 16843 }, { 16844 key: 'destroy', 16845 value: function destroy$$1() { 16846 return destroy.call(this); 16847 } 16848 }, { 16849 key: 'enableEventListeners', 16850 value: function enableEventListeners$$1() { 16851 return enableEventListeners.call(this); 16852 } 16853 }, { 16854 key: 'disableEventListeners', 16855 value: function disableEventListeners$$1() { 16856 return disableEventListeners.call(this); 16857 } 16858 16859 /** 16860 * Schedules an update. It will run on the next UI update available. 16861 * @method scheduleUpdate 16862 * @memberof Popper 16863 */ 16864 16865 16866 /** 16867 * Collection of utilities useful when writing custom modifiers. 16868 * Starting from version 1.7, this method is available only if you 16869 * include `popper-utils.js` before `popper.js`. 16870 * 16871 * **DEPRECATION**: This way to access PopperUtils is deprecated 16872 * and will be removed in v2! Use the PopperUtils module directly instead. 16873 * Due to the high instability of the methods contained in Utils, we can't 16874 * guarantee them to follow semver. Use them at your own risk! 16875 * @static 16876 * @private 16877 * @type {Object} 16878 * @deprecated since version 1.8 16879 * @member Utils 16880 * @memberof Popper 16881 */ 16882 16883 }]); 16884 return Popper; 16885}(); 16886 16887/** 16888 * The `referenceObject` is an object that provides an interface compatible with Popper.js 16889 * and lets you use it as replacement of a real DOM node.<br /> 16890 * You can use this method to position a popper relatively to a set of coordinates 16891 * in case you don't have a DOM node to use as reference. 16892 * 16893 * ``` 16894 * new Popper(referenceObject, popperNode); 16895 * ``` 16896 * 16897 * NB: This feature isn't supported in Internet Explorer 10. 16898 * @name referenceObject 16899 * @property {Function} data.getBoundingClientRect 16900 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. 16901 * @property {number} data.clientWidth 16902 * An ES6 getter that will return the width of the virtual reference element. 16903 * @property {number} data.clientHeight 16904 * An ES6 getter that will return the height of the virtual reference element. 16905 */ 16906 16907 16908Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; 16909Popper.placements = placements; 16910Popper.Defaults = Defaults; 16911 16912/* harmony default export */ __webpack_exports__["default"] = (Popper); 16913//# sourceMappingURL=popper.js.map 16914 16915/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(1))) 16916 16917/***/ }), 16918/* 6 */ 16919/***/ (function(module, exports, __webpack_require__) { 16920 16921!function(e,t){ true?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exp
vendor: 6,814 bytes, line 16921
16921orts.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=n(1),a=(o(r),n(6)),u=o(a),c=n(7),f=o(c),s=n(8),d=o(s),l=n(9),p=o(l),m=n(10),b=o(m),v=n(11),y=o(v),g=n(14),h=o(g),w=[],k=!1,x={offset:120,delay:0,easing:"ease",duration:400,disable:!1,once:!1,startEvent:"DOMContentLoaded",throttleDelay:99,debounceDelay:50,disableMutationObserver:!1},j=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},_=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},S=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},z=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?_():(document.querySelector("body").setAttribute("data-aos-easing",x.easing),document.querySelector("body").setAttribute("data-aos-duration",x.duration),document.querySelector("body").setAttribute("data-aos-delay",x.delay),"DOMContentLoaded"===x.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?j(!0):"load"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener("resize",(0,f.default)(j,x.debounceDelay,!0)),window.addEventListener("orientationchange",(0,f.default)(j,x.debounceDelay,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||(0,d.default)("[data-aos]",O),w)};e.exports={init:z,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(s,t),_?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function s(){var e=O();return c(e)?d(e):void(h=setTimeout(s,a(e)))}function d(e){return h=void 0,z&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(s,t),o(w)}return void 0===h&&(h=setTimeout(s,t)),g}var b,v,y,g,h,w,k=0,_=!1,S=!1,z=!0;if("function"!=typeof e)throw new TypeError(f);return t=u(t)||0,i(n)&&(_=!!n.leading,S="maxWait"in n,y=S?x(u(n.maxWait)||0,t):y,z="trailing"in n?!!n.trailing:z),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(f);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return s;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?s:+e}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f="Expected a function",s=NaN,d="[object Symbol]",l=/^\s+|\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(s,t),_?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function f(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function s(){var e=j();return f(e)?d(e):void(h=setTimeout(s,u(e)))}function d(e){return h=void 0,z&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=f(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(s,t),i(w)}return void 0===h&&(h=setTimeout(s,t)),g}var b,v,y,g,h,w,O=0,_=!1,S=!1,z=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(_=!!n.leading,S="maxWait"in n,y=S?k(a(n.maxWait)||0,t):y,z="trailing"in n?!!n.trailing:z),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==s}function a(e){if("number"==typeof e)return e;if(r(e))return f;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?f:+e}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c="Expected a function",f=NaN,s="[object Symbol]",d=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;t<e.length;t+=1){if(o=e[t],o.dataset&&o.dataset.aos)return!0;
16921if(i=o.children&&n(o.children))return!0}return!1}function o(e,t){var n=window.document,o=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,a=new o(i);r=t,a.observe(n.documentElement,{childList:!0,subtree:!0,removedNodes:!0})}function i(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),o=Array.prototype.slice.call(e.removedNodes),i=t.concat(o);if(n(i))return r()})}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){};t.default=o},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){return navigator.userAgent||navigator.vendor||window.opera||""}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),r=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,a=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,u=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,c=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
16921sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,f=function(){function e(){n(this,e)}return i(e,[{key:"phone",value:function(){var e=o();return!(!r.test(e)&&!a.test(e.substr(0,4)))}},{key:"mobile",value:function(){var e=o();return!(!u.test(e)&&!c.test(e.substr(0,4)))}},{key:"tablet",value:function(){return this.mobile()&&!this.phone()}}]),e}();t.default=new f},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n){var o=e.node.getAttribute("data-aos-once");t>e.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return e=e||document.querySelectorAll("[data-aos]"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])}); 16922 16923/***/ }) 16924/******/ ]);
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.