vendor: 3,619 bytes, lines 1-88
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, { enumerable: true, get: getter }); 40/******/ } 41/******/ }; 42/******/ 43/******/ // define __esModule on exports 44/******/ __webpack_require__.r = function(exports) { 45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47/******/ } 48/******/ Object.defineProperty(exports, '__esModule', { value: true }); 49/******/ }; 50/******/ 51/******/ // create a fake namespace object 52/******/ // mode & 1: value is a module id, require it 53/******/ // mode & 2: merge all properties of value into the ns 54/******/ // mode & 4: return value when already ns object 55/******/ // mode & 8|1: behave like require 56/******/ __webpack_require__.t = function(value, mode) { 57/******/ if(mode & 1) value = __webpack_require__(value); 58/******/ if(mode & 8) return value; 59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60/******/ var ns = Object.create(null); 61/******/ __webpack_require__.r(ns); 62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64/******/ return ns; 65/******/ }; 66/******/ 67/******/ // getDefaultExport function for compatibility with non-harmony modules 68/******/ __webpack_require__.n = function(module) { 69/******/ var getter = module && module.__esModule ? 70/******/ function getDefault() { return module['default']; } : 71/******/ function getModuleExports() { return module; }; 72/******/ __webpack_require__.d(getter, 'a', getter); 73/******/ return getter; 74/******/ }; 75/******/ 76/******/ // Object.prototype.hasOwnProperty.call 77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78/******/ 79/******/ // __webpack_public_path__ 80/******/ __webpack_require__.p = "../../"; 81/******/ 82/******/ 83/******/ // Load entry module and return exports 84/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/app.js"); 85/******/ }) 86/************************************************************************/ 87/******/ ({ 88
vendor: 830 bytes, lines 89-115
89/***/ "../node_modules/call-bind/callBound.js": 90/*!**********************************************!*\ 91 !*** ../node_modules/call-bind/callBound.js ***! 92 \**********************************************/ 93/*! no static exports found */ 94/***/ (function(module, exports, __webpack_require__) { 95 96"use strict"; 97 98 99var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js"); 100 101var callBind = __webpack_require__(/*! ./ */ "../node_modules/call-bind/index.js"); 102 103var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); 104 105module.exports = function callBoundIntrinsic(name, allowMissing) { 106 var intrinsic = GetIntrinsic(name, !!allowMissing); 107 if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { 108 return callBind(intrinsic); 109 } 110 return intrinsic; 111}; 112 113 114/***/ }), 115
vendor: 1,622 bytes, lines 116-162
116/***/ "../node_modules/call-bind/index.js": 117/*!******************************************!*\ 118 !*** ../node_modules/call-bind/index.js ***! 119 \******************************************/ 120/*! no static exports found */ 121/***/ (function(module, exports, __webpack_require__) { 122 123"use strict"; 124 125 126var bind = __webpack_require__(/*! function-bind */ "../node_modules/function-bind/index.js"); 127var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js"); 128var setFunctionLength = __webpack_require__(/*! set-function-length */ "../node_modules/set-function-length/index.js"); 129 130var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js"); 131var $apply = GetIntrinsic('%Function.prototype.apply%'); 132var $call = GetIntrinsic('%Function.prototype.call%'); 133var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); 134 135var $defineProperty = __webpack_require__(/*! es-define-property */ "../node_modules/es-define-property/index.js"); 136var $max = GetIntrinsic('%Math.max%'); 137 138module.exports = function callBind(originalFunction) { 139 if (typeof originalFunction !== 'function') { 140 throw new $TypeError('a function is required'); 141 } 142 var func = $reflectApply(bind, $call, arguments); 143 return setFunctionLength( 144 func, 145 1 + $max(0, originalFunction.length - (arguments.length - 1)), 146 true 147 ); 148}; 149 150var applyBind = function applyBind() { 151 return $reflectApply(bind, $apply, arguments); 152}; 153 154if ($defineProperty) { 155 $defineProperty(module.exports, 'apply', { value: applyBind }); 156} else { 157 module.exports.apply = applyBind; 158} 159 160 161/***/ }), 162
vendor: 2,889 bytes, lines 163-230
163/***/ "../node_modules/define-data-property/index.js": 164/*!*****************************************************!*\ 165 !*** ../node_modules/define-data-property/index.js ***! 166 \*****************************************************/ 167/*! no static exports found */ 168/***/ (function(module, exports, __webpack_require__) { 169 170"use strict"; 171 172 173var $defineProperty = __webpack_require__(/*! es-define-property */ "../node_modules/es-define-property/index.js"); 174 175var $SyntaxError = __webpack_require__(/*! es-errors/syntax */ "../node_modules/es-errors/syntax.js"); 176var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js"); 177 178var gopd = __webpack_require__(/*! gopd */ "../node_modules/gopd/index.js"); 179 180/** @type {import('.')} */ 181module.exports = function defineDataProperty( 182 obj, 183 property, 184 value 185) { 186 if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { 187 throw new $TypeError('`obj` must be an object or a function`'); 188 } 189 if (typeof property !== 'string' && typeof property !== 'symbol') { 190 throw new $TypeError('`property` must be a string or a symbol`'); 191 } 192 if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { 193 throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); 194 } 195 if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { 196 throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); 197 } 198 if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { 199 throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); 200 } 201 if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { 202 throw new $TypeError('`loose`, if provided, must be a boolean'); 203 } 204 205 var nonEnumerable = arguments.length > 3 ? arguments[3] : null; 206 var nonWritable = arguments.length > 4 ? arguments[4] : null; 207 var nonConfigurable = arguments.length > 5 ? arguments[5] : null; 208 var loose = arguments.length > 6 ? arguments[6] : false; 209 210 /* @type {false | TypedPropertyDescriptor<unknown>} */ 211 var desc = !!gopd && gopd(obj, property); 212 213 if ($defineProperty) { 214 $defineProperty(obj, property, { 215 configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, 216 enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, 217 value: value, 218 writable: nonWritable === null && desc ? desc.writable : !nonWritable 219 }); 220 } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { 221 // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable 222 obj[property] = value; // eslint-disable-line no-param-reassign 223 } else { 224 throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); 225 } 226}; 227 228 229/***/ }), 230
vendor: 741 bytes, lines 231-258
231/***/ "../node_modules/es-define-property/index.js": 232/*!***************************************************!*\ 233 !*** ../node_modules/es-define-property/index.js ***! 234 \***************************************************/ 235/*! no static exports found */ 236/***/ (function(module, exports, __webpack_require__) { 237 238"use strict"; 239 240 241var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js"); 242 243/** @type {import('.')} */ 244var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false; 245if ($defineProperty) { 246 try { 247 $defineProperty({}, 'a', { value: 1 }); 248 } catch (e) { 249 // IE 8 has a broken defineProperty 250 $defineProperty = false; 251 } 252} 253 254module.exports = $defineProperty; 255 256 257/***/ }), 258
vendor: 360 bytes, lines 259-274
259/***/ "../node_modules/es-errors/eval.js": 260/*!*****************************************!*\ 261 !*** ../node_modules/es-errors/eval.js ***! 262 \*****************************************/ 263/*! no static exports found */ 264/***/ (function(module, exports, __webpack_require__) { 265 266"use strict"; 267 268 269/** @type {import('./eval')} */ 270module.exports = EvalError; 271 272 273/***/ }), 274
vendor: 355 bytes, lines 275-290
275/***/ "../node_modules/es-errors/index.js": 276/*!******************************************!*\ 277 !*** ../node_modules/es-errors/index.js ***! 278 \******************************************/ 279/*! no static exports found */ 280/***/ (function(module, exports, __webpack_require__) { 281 282"use strict"; 283 284 285/** @type {import('.')} */ 286module.exports = Error; 287 288 289/***/ }), 290
vendor: 366 bytes, lines 291-306
291/***/ "../node_modules/es-errors/range.js": 292/*!******************************************!*\ 293 !*** ../node_modules/es-errors/range.js ***! 294 \******************************************/ 295/*! no static exports found */ 296/***/ (function(module, exports, __webpack_require__) { 297 298"use strict"; 299 300 301/** @type {import('./range')} */ 302module.exports = RangeError; 303 304 305/***/ }), 306
vendor: 360 bytes, lines 307-322
307/***/ "../node_modules/es-errors/ref.js": 308/*!****************************************!*\ 309 !*** ../node_modules/es-errors/ref.js ***! 310 \****************************************/ 311/*! no static exports found */ 312/***/ (function(module, exports, __webpack_require__) { 313 314"use strict"; 315 316 317/** @type {import('./ref')} */ 318module.exports = ReferenceError; 319 320 321/***/ }), 322
vendor: 372 bytes, lines 323-338
323/***/ "../node_modules/es-errors/syntax.js": 324/*!*******************************************!*\ 325 !*** ../node_modules/es-errors/syntax.js ***! 326 \*******************************************/ 327/*! no static exports found */ 328/***/ (function(module, exports, __webpack_require__) { 329 330"use strict"; 331 332 333/** @type {import('./syntax')} */ 334module.exports = SyntaxError; 335 336 337/***/ }), 338
vendor: 360 bytes, lines 339-354
339/***/ "../node_modules/es-errors/type.js": 340/*!*****************************************!*\ 341 !*** ../node_modules/es-errors/type.js ***! 342 \*****************************************/ 343/*! no static exports found */ 344/***/ (function(module, exports, __webpack_require__) { 345 346"use strict"; 347 348 349/** @type {import('./type')} */ 350module.exports = TypeError; 351 352 353/***/ }), 354
vendor: 354 bytes, lines 355-370
355/***/ "../node_modules/es-errors/uri.js": 356/*!****************************************!*\ 357 !*** ../node_modules/es-errors/uri.js ***! 358 \****************************************/ 359/*! no static exports found */ 360/***/ (function(module, exports, __webpack_require__) { 361 362"use strict"; 363 364 365/** @type {import('./uri')} */ 366module.exports = URIError; 367 368 369/***/ }), 370
vendor: 3,202 bytes, lines 371-491
371/***/ "../node_modules/ev-emitter/ev-emitter.js": 372/*!************************************************!*\ 373 !*** ../node_modules/ev-emitter/ev-emitter.js ***! 374 \************************************************/ 375/*! no static exports found */ 376/***/ (function(module, exports, __webpack_require__) { 377 378var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/** 379 * EvEmitter v1.1.0 380 * Lil' event emitter 381 * MIT License 382 */ 383 384/* jshint unused: true, undef: true, strict: true */ 385 386( function( global, factory ) { 387 // universal module definition 388 /* jshint strict: false */ /* globals define, module, window */ 389 if ( true ) { 390 // AMD - RequireJS 391 !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 392 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 393 (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : 394 __WEBPACK_AMD_DEFINE_FACTORY__), 395 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 396 } else {} 397 398}( typeof window != 'undefined' ? window : this, function() { 399 400"use strict"; 401 402function EvEmitter() {} 403 404var proto = EvEmitter.prototype; 405 406proto.on = function( eventName, listener ) { 407 if ( !eventName || !listener ) { 408 return; 409 } 410 // set events hash 411 var events = this._events = this._events || {}; 412 // set listeners array 413 var listeners = events[ eventName ] = events[ eventName ] || []; 414 // only add once 415 if ( listeners.indexOf( listener ) == -1 ) { 416 listeners.push( listener ); 417 } 418 419 return this; 420}; 421 422proto.once = function( eventName, listener ) { 423 if ( !eventName || !listener ) { 424 return; 425 } 426 // add event 427 this.on( eventName, listener ); 428 // set once flag 429 // set onceEvents hash 430 var onceEvents = this._onceEvents = this._onceEvents || {}; 431 // set onceListeners object 432 var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; 433 // set flag 434 onceListeners[ listener ] = true; 435 436 return this; 437}; 438 439proto.off = function( eventName, listener ) { 440 var listeners = this._events && this._events[ eventName ]; 441 if ( !listeners || !listeners.length ) { 442 return; 443 } 444 var index = listeners.indexOf( listener ); 445 if ( index != -1 ) { 446 listeners.splice( index, 1 ); 447 } 448 449 return this; 450}; 451 452proto.emitEvent = function( eventName, args ) { 453 var listeners = this._events && this._events[ eventName ]; 454 if ( !listeners || !listeners.length ) { 455 return; 456 } 457 // copy over to avoid interference if .off() in listener 458 listeners = listeners.slice(0); 459 args = args || []; 460 // once stuff 461 var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; 462 463 for ( var i=0; i < listeners.length; i++ ) { 464 var listener = listeners[i] 465 var isOnce = onceListeners && onceListeners[ listener ]; 466 if ( isOnce ) { 467 // remove listener 468 // remove before trigger to prevent recursion 469 this.off( eventName, listener ); 470 // unset once flag 471 delete onceListeners[ listener ]; 472 } 473 // trigger listener 474 listener.apply( this, args ); 475 } 476 477 return this; 478}; 479 480proto.allOff = function() { 481 delete this._events; 482 delete this._onceEvents; 483}; 484 485return EvEmitter; 486 487})); 488 489 490/***/ }), 491
vendor: 395 bytes, lines 492-502
492/***/ "../node_modules/font-awesome/scss/font-awesome.scss": 493/*!***********************************************************!*\ 494 !*** ../node_modules/font-awesome/scss/font-awesome.scss ***! 495 \***********************************************************/ 496/*! no static exports found */ 497/***/ (function(module, exports, __webpack_require__) { 498 499// extracted by mini-css-extract-plugin 500 501/***/ }), 502
vendor: 2,384 bytes, lines 503-598
503/***/ "../node_modules/function-bind/implementation.js": 504/*!*******************************************************!*\ 505 !*** ../node_modules/function-bind/implementation.js ***! 506 \*******************************************************/ 507/*! no static exports found */ 508/***/ (function(module, exports, __webpack_require__) { 509 510"use strict"; 511 512 513/* eslint no-invalid-this: 1 */ 514 515var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; 516var toStr = Object.prototype.toString; 517var max = Math.max; 518var funcType = '[object Function]'; 519 520var concatty = function concatty(a, b) { 521 var arr = []; 522 523 for (var i = 0; i < a.length; i += 1) { 524 arr[i] = a[i]; 525 } 526 for (var j = 0; j < b.length; j += 1) { 527 arr[j + a.length] = b[j]; 528 } 529 530 return arr; 531}; 532 533var slicy = function slicy(arrLike, offset) { 534 var arr = []; 535 for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { 536 arr[j] = arrLike[i]; 537 } 538 return arr; 539}; 540 541var joiny = function (arr, joiner) { 542 var str = ''; 543 for (var i = 0; i < arr.length; i += 1) { 544 str += arr[i]; 545 if (i + 1 < arr.length) { 546 str += joiner; 547 } 548 } 549 return str; 550}; 551 552module.exports = function bind(that) { 553 var target = this; 554 if (typeof target !== 'function' || toStr.apply(target) !== funcType) { 555 throw new TypeError(ERROR_MESSAGE + target); 556 } 557 var args = slicy(arguments, 1); 558 559 var bound; 560 var binder = function () { 561 if (this instanceof bound) { 562 var result = target.apply( 563 this, 564 concatty(args, arguments) 565 ); 566 if (Object(result) === result) { 567 return result; 568 } 569 return this; 570 } 571 return target.apply( 572 that, 573 concatty(args, arguments) 574 ); 575 576 }; 577 578 var boundLength = max(0, target.length - args.length); 579 var boundArgs = []; 580 for (var i = 0; i < boundLength; i++) { 581 boundArgs[i] = '$' + i; 582 } 583 584 bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); 585 586 if (target.prototype) { 587 var Empty = function Empty() {}; 588 Empty.prototype = target.prototype; 589 bound.prototype = new Empty(); 590 Empty.prototype = null; 591 } 592 593 return bound; 594}; 595 596 597/***/ }), 598
vendor: 498 bytes, lines 599-615
599/***/ "../node_modules/function-bind/index.js": 600/*!**********************************************!*\ 601 !*** ../node_modules/function-bind/index.js ***! 602 \**********************************************/ 603/*! no static exports found */ 604/***/ (function(module, exports, __webpack_require__) { 605 606"use strict"; 607 608 609var implementation = __webpack_require__(/*! ./implementation */ "../node_modules/function-bind/implementation.js"); 610 611module.exports = Function.prototype.bind || implementation; 612 613 614/***/ }), 615
vendor: 14,512 bytes, lines 616-986
616/***/ "../node_modules/get-intrinsic/index.js": 617/*!**********************************************!*\ 618 !*** ../node_modules/get-intrinsic/index.js ***! 619 \**********************************************/ 620/*! no static exports found */ 621/***/ (function(module, exports, __webpack_require__) { 622 623"use strict"; 624 625 626var undefined; 627 628var $Error = __webpack_require__(/*! es-errors */ "../node_modules/es-errors/index.js"); 629var $EvalError = __webpack_require__(/*! es-errors/eval */ "../node_modules/es-errors/eval.js"); 630var $RangeError = __webpack_require__(/*! es-errors/range */ "../node_modules/es-errors/range.js"); 631var $ReferenceError = __webpack_require__(/*! es-errors/ref */ "../node_modules/es-errors/ref.js"); 632var $SyntaxError = __webpack_require__(/*! es-errors/syntax */ "../node_modules/es-errors/syntax.js"); 633var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js"); 634var $URIError = __webpack_require__(/*! es-errors/uri */ "../node_modules/es-errors/uri.js"); 635 636var $Function = Function; 637 638// eslint-disable-next-line consistent-return 639var getEvalledConstructor = function (expressionSyntax) { 640 try { 641 return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); 642 } catch (e) {} 643}; 644 645var $gOPD = Object.getOwnPropertyDescriptor; 646if ($gOPD) { 647 try { 648 $gOPD({}, ''); 649 } catch (e) { 650 $gOPD = null; // this is IE 8, which has a broken gOPD 651 } 652} 653 654var throwTypeError = function () { 655 throw new $TypeError(); 656}; 657var ThrowTypeError = $gOPD 658 ? (function () { 659 try { 660 // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties 661 arguments.callee; // IE 8 does not throw here 662 return throwTypeError; 663 } catch (calleeThrows) { 664 try { 665 // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') 666 return $gOPD(arguments, 'callee').get; 667 } catch (gOPDthrows) { 668 return throwTypeError; 669 } 670 } 671 }()) 672 : throwTypeError; 673 674var hasSymbols = __webpack_require__(/*! has-symbols */ "../node_modules/has-symbols/index.js")(); 675var hasProto = __webpack_require__(/*! has-proto */ "../node_modules/has-proto/index.js")(); 676 677var getProto = Object.getPrototypeOf || ( 678 hasProto 679 ? function (x) { return x.__proto__; } // eslint-disable-line no-proto 680 : null 681); 682 683var needsEval = {}; 684 685var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); 686 687var INTRINSICS = { 688 __proto__: null, 689 '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, 690 '%Array%': Array, 691 '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, 692 '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, 693 '%AsyncFromSyncIteratorPrototype%': undefined, 694 '%AsyncFunction%': needsEval, 695 '%AsyncGenerator%': needsEval, 696 '%AsyncGeneratorFunction%': needsEval, 697 '%AsyncIteratorPrototype%': needsEval, 698 '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, 699 '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, 700 '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, 701 '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, 702 '%Boolean%': Boolean, 703 '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, 704 '%Date%': Date, 705 '%decodeURI%': decodeURI, 706 '%decodeURIComponent%': decodeURIComponent, 707 '%encodeURI%': encodeURI, 708 '%encodeURIComponent%': encodeURIComponent, 709 '%Error%': $Error, 710 '%eval%': eval, // eslint-disable-line no-eval 711 '%EvalError%': $EvalError, 712 '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, 713 '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, 714 '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, 715 '%Function%': $Function, 716 '%GeneratorFunction%': needsEval, 717 '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, 718 '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, 719 '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, 720 '%isFinite%': isFinite, 721 '%isNaN%': isNaN, 722 '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, 723 '%JSON%': typeof JSON === 'object' ? JSON : undefined, 724 '%Map%': typeof Map === 'undefined' ? undefined : Map, 725 '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), 726 '%Math%': Math, 727 '%Number%': Number, 728 '%Object%': Object, 729 '%parseFloat%': parseFloat, 730 '%parseInt%': parseInt, 731 '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, 732 '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, 733 '%RangeError%': $RangeError, 734 '%ReferenceError%': $ReferenceError, 735 '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, 736 '%RegExp%': RegExp, 737 '%Set%': typeof Set === 'undefined' ? undefined : Set, 738 '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), 739 '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, 740 '%String%': String, 741 '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, 742 '%Symbol%': hasSymbols ? Symbol : undefined, 743 '%SyntaxError%': $SyntaxError, 744 '%ThrowTypeError%': ThrowTypeError, 745 '%TypedArray%': TypedArray, 746 '%TypeError%': $TypeError, 747 '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, 748 '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, 749 '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, 750 '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, 751 '%URIError%': $URIError, 752 '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, 753 '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, 754 '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet 755}; 756 757if (getProto) { 758 try { 759 null.error; // eslint-disable-line no-unused-expressions 760 } catch (e) { 761 // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 762 var errorProto = getProto(getProto(e)); 763 INTRINSICS['%Error.prototype%'] = errorProto; 764 } 765} 766 767var doEval = function doEval(name) { 768 var value; 769 if (name === '%AsyncFunction%') { 770 value = getEvalledConstructor('async function () {}'); 771 } else if (name === '%GeneratorFunction%') { 772 value = getEvalledConstructor('function* () {}'); 773 } else if (name === '%AsyncGeneratorFunction%') { 774 value = getEvalledConstructor('async function* () {}'); 775 } else if (name === '%AsyncGenerator%') { 776 var fn = doEval('%AsyncGeneratorFunction%'); 777 if (fn) { 778 value = fn.prototype; 779 } 780 } else if (name === '%AsyncIteratorPrototype%') { 781 var gen = doEval('%AsyncGenerator%'); 782 if (gen && getProto) { 783 value = getProto(gen.prototype); 784 } 785 } 786 787 INTRINSICS[name] = value; 788 789 return value; 790}; 791 792var LEGACY_ALIASES = { 793 __proto__: null, 794 '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], 795 '%ArrayPrototype%': ['Array', 'prototype'], 796 '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], 797 '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], 798 '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], 799 '%ArrayProto_values%': ['Array', 'prototype', 'values'], 800 '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], 801 '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], 802 '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], 803 '%BooleanPrototype%': ['Boolean', 'prototype'], 804 '%DataViewPrototype%': ['DataView', 'prototype'], 805 '%DatePrototype%': ['Date', 'prototype'], 806 '%ErrorPrototype%': ['Error', 'prototype'], 807 '%EvalErrorPrototype%': ['EvalError', 'prototype'], 808 '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], 809 '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], 810 '%FunctionPrototype%': ['Function', 'prototype'], 811 '%Generator%': ['GeneratorFunction', 'prototype'], 812 '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], 813 '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], 814 '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], 815 '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], 816 '%JSONParse%': ['JSON', 'parse'], 817 '%JSONStringify%': ['JSON', 'stringify'], 818 '%MapPrototype%': ['Map', 'prototype'], 819 '%NumberPrototype%': ['Number', 'prototype'], 820 '%ObjectPrototype%': ['Object', 'prototype'], 821 '%ObjProto_toString%': ['Object', 'prototype', 'toString'], 822 '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], 823 '%PromisePrototype%': ['Promise', 'prototype'], 824 '%PromiseProto_then%': ['Promise', 'prototype', 'then'], 825 '%Promise_all%': ['Promise', 'all'], 826 '%Promise_reject%': ['Promise', 'reject'], 827 '%Promise_resolve%': ['Promise', 'resolve'], 828 '%RangeErrorPrototype%': ['RangeError', 'prototype'], 829 '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], 830 '%RegExpPrototype%': ['RegExp', 'prototype'], 831 '%SetPrototype%': ['Set', 'prototype'], 832 '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], 833 '%StringPrototype%': ['String', 'prototype'], 834 '%SymbolPrototype%': ['Symbol', 'prototype'], 835 '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], 836 '%TypedArrayPrototype%': ['TypedArray', 'prototype'], 837 '%TypeErrorPrototype%': ['TypeError', 'prototype'], 838 '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], 839 '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], 840 '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], 841 '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], 842 '%URIErrorPrototype%': ['URIError', 'prototype'], 843 '%WeakMapPrototype%': ['WeakMap', 'prototype'], 844 '%WeakSetPrototype%': ['WeakSet', 'prototype'] 845}; 846 847var bind = __webpack_require__(/*! function-bind */ "../node_modules/function-bind/index.js"); 848var hasOwn = __webpack_require__(/*! hasown */ "../node_modules/hasown/index.js"); 849var $concat = bind.call(Function.call, Array.prototype.concat); 850var $spliceApply = bind.call(Function.apply, Array.prototype.splice); 851var $replace = bind.call(Function.call, String.prototype.replace); 852var $strSlice = bind.call(Function.call, String.prototype.slice); 853var $exec = bind.call(Function.call, RegExp.prototype.exec); 854 855/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ 856var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; 857var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ 858var stringToPath = function stringToPath(string) { 859 var first = $strSlice(string, 0, 1); 860 var last = $strSlice(string, -1); 861 if (first === '%' && last !== '%') { 862 throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); 863 } else if (last === '%' && first !== '%') { 864 throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); 865 } 866 var result = []; 867 $replace(string, rePropName, function (match, number, quote, subString) { 868 result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; 869 }); 870 return result; 871}; 872/* end adaptation */ 873 874var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { 875 var intrinsicName = name; 876 var alias; 877 if (hasOwn(LEGACY_ALIASES, intrinsicName)) { 878 alias = LEGACY_ALIASES[intrinsicName]; 879 intrinsicName = '%' + alias[0] + '%'; 880 } 881 882 if (hasOwn(INTRINSICS, intrinsicName)) { 883 var value = INTRINSICS[intrinsicName]; 884 if (value === needsEval) { 885 value = doEval(intrinsicName); 886 } 887 if (typeof value === 'undefined' && !allowMissing) { 888 throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); 889 } 890 891 return { 892 alias: alias, 893 name: intrinsicName, 894 value: value 895 }; 896 } 897 898 throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); 899}; 900 901module.exports = function GetIntrinsic(name, allowMissing) { 902 if (typeof name !== 'string' || name.length === 0) { 903 throw new $TypeError('intrinsic name must be a non-empty string'); 904 } 905 if (arguments.length > 1 && typeof allowMissing !== 'boolean') { 906 throw new $TypeError('"allowMissing" argument must be a boolean'); 907 } 908 909 if ($exec(/^%?[^%]*%?$/, name) === null) { 910 throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); 911 } 912 var parts = stringToPath(name); 913 var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; 914 915 var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); 916 var intrinsicRealName = intrinsic.name; 917 var value = intrinsic.value; 918 var skipFurtherCaching = false; 919 920 var alias = intrinsic.alias; 921 if (alias) { 922 intrinsicBaseName = alias[0]; 923 $spliceApply(parts, $concat([0, 1], alias)); 924 } 925 926 for (var i = 1, isOwn = true; i < parts.length; i += 1) { 927 var part = parts[i]; 928 var first = $strSlice(part, 0, 1); 929 var last = $strSlice(part, -1); 930 if ( 931 ( 932 (first === '"' || first === "'" || first === '`') 933 || (last === '"' || last === "'" || last === '`') 934 ) 935 && first !== last 936 ) { 937 throw new $SyntaxError('property names with quotes must have matching quotes'); 938 } 939 if (part === 'constructor' || !isOwn) { 940 skipFurtherCaching = true; 941 } 942 943 intrinsicBaseName += '.' + part; 944 intrinsicRealName = '%' + intrinsicBaseName + '%'; 945 946 if (hasOwn(INTRINSICS, intrinsicRealName)) { 947 value = INTRINSICS[intrinsicRealName]; 948 } else if (value != null) { 949 if (!(part in value)) { 950 if (!allowMissing) { 951 throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); 952 } 953 return void undefined; 954 } 955 if ($gOPD && (i + 1) >= parts.length) { 956 var desc = $gOPD(value, part); 957 isOwn = !!desc; 958 959 // By convention, when a data property is converted to an accessor 960 // property to emulate a data property that does not suffer from 961 // the override mistake, that accessor's getter is marked with 962 // an `originalValue` property. Here, when we detect this, we 963 // uphold the illusion by pretending to see that original data 964 // property, i.e., returning the value rather than the getter 965 // itself. 966 if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { 967 value = desc.get; 968 } else { 969 value = value[part]; 970 } 971 } else { 972 isOwn = hasOwn(value, part); 973 value = value[part]; 974 } 975 976 if (isOwn && !skipFurtherCaching) { 977 INTRINSICS[intrinsicRealName] = value; 978 } 979 } 980 } 981 return value; 982}; 983 984 985/***/ }), 986
vendor: 590 bytes, lines 987-1014
987/***/ "../node_modules/gopd/index.js": 988/*!*************************************!*\ 989 !*** ../node_modules/gopd/index.js ***! 990 \*************************************/ 991/*! no static exports found */ 992/***/ (function(module, exports, __webpack_require__) { 993 994"use strict"; 995 996 997var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js"); 998 999var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); 1000 1001if ($gOPD) { 1002 try { 1003 $gOPD([], 'length'); 1004 } catch (e) { 1005 // IE 8 has a broken gOPD 1006 $gOPD = null; 1007 } 1008} 1009 1010module.exports = $gOPD; 1011 1012 1013/***/ }), 1014
vendor: 1,000 bytes, lines 1015-1048
1015/***/ "../node_modules/has-property-descriptors/index.js": 1016/*!*********************************************************!*\ 1017 !*** ../node_modules/has-property-descriptors/index.js ***! 1018 \*********************************************************/ 1019/*! no static exports found */ 1020/***/ (function(module, exports, __webpack_require__) { 1021 1022"use strict"; 1023 1024 1025var $defineProperty = __webpack_require__(/*! es-define-property */ "../node_modules/es-define-property/index.js"); 1026 1027var hasPropertyDescriptors = function hasPropertyDescriptors() { 1028 return !!$defineProperty; 1029}; 1030 1031hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { 1032 // node v0.6 has a bug where array lengths can be Set but not Defined 1033 if (!$defineProperty) { 1034 return null; 1035 } 1036 try { 1037 return $defineProperty([], 'length', { value: 1 }).length !== 1; 1038 } catch (e) { 1039 // In Firefox 4-22, defining length on an array throws an exception. 1040 return true; 1041 } 1042}; 1043 1044module.exports = hasPropertyDescriptors; 1045 1046 1047/***/ }), 1048
vendor: 591 bytes, lines 1049-1075
1049/***/ "../node_modules/has-proto/index.js": 1050/*!******************************************!*\ 1051 !*** ../node_modules/has-proto/index.js ***! 1052 \******************************************/ 1053/*! no static exports found */ 1054/***/ (function(module, exports, __webpack_require__) { 1055 1056"use strict"; 1057 1058 1059var test = { 1060 __proto__: null, 1061 foo: {} 1062}; 1063 1064var $Object = Object; 1065 1066/** @type {import('.')} */ 1067module.exports = function hasProto() { 1068 // @ts-expect-error: TS errors on an inherited property for some reason 1069 return { __proto__: test }.foo === test.foo 1070 && !(test instanceof $Object); 1071}; 1072 1073 1074/***/ }), 1075
vendor: 773 bytes, lines 1076-1100
1076/***/ "../node_modules/has-symbols/index.js": 1077/*!********************************************!*\ 1078 !*** ../node_modules/has-symbols/index.js ***! 1079 \********************************************/ 1080/*! no static exports found */ 1081/***/ (function(module, exports, __webpack_require__) { 1082 1083"use strict"; 1084 1085 1086var origSymbol = typeof Symbol !== 'undefined' && Symbol; 1087var hasSymbolSham = __webpack_require__(/*! ./shams */ "../node_modules/has-symbols/shams.js"); 1088 1089module.exports = function hasNativeSymbols() { 1090 if (typeof origSymbol !== 'function') { return false; } 1091 if (typeof Symbol !== 'function') { return false; } 1092 if (typeof origSymbol('foo') !== 'symbol') { return false; } 1093 if (typeof Symbol('bar') !== 'symbol') { return false; } 1094 1095 return hasSymbolSham(); 1096}; 1097 1098 1099/***/ }), 1100
vendor: 2,058 bytes, lines 1101-1154
1101/***/ "../node_modules/has-symbols/shams.js": 1102/*!********************************************!*\ 1103 !*** ../node_modules/has-symbols/shams.js ***! 1104 \********************************************/ 1105/*! no static exports found */ 1106/***/ (function(module, exports, __webpack_require__) { 1107 1108"use strict"; 1109 1110 1111/* eslint complexity: [2, 18], max-statements: [2, 33] */ 1112module.exports = function hasSymbols() { 1113 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } 1114 if (typeof Symbol.iterator === 'symbol') { return true; } 1115 1116 var obj = {}; 1117 var sym = Symbol('test'); 1118 var symObj = Object(sym); 1119 if (typeof sym === 'string') { return false; } 1120 1121 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } 1122 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } 1123 1124 // temp disabled per https://github.com/ljharb/object.assign/issues/17 1125 // if (sym instanceof Symbol) { return false; } 1126 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 1127 // if (!(symObj instanceof Symbol)) { return false; } 1128 1129 // if (typeof Symbol.prototype.toString !== 'function') { return false; } 1130 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } 1131 1132 var symVal = 42; 1133 obj[sym] = symVal; 1134 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop 1135 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } 1136 1137 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } 1138 1139 var syms = Object.getOwnPropertySymbols(obj); 1140 if (syms.length !== 1 || syms[0] !== sym) { return false; } 1141 1142 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } 1143 1144 if (typeof Object.getOwnPropertyDescriptor === 'function') { 1145 var descriptor = Object.getOwnPropertyDescriptor(obj, sym); 1146 if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } 1147 } 1148 1149 return true; 1150}; 1151 1152 1153/***/ }), 1154
vendor: 541 bytes, lines 1155-1174
1155/***/ "../node_modules/hasown/index.js": 1156/*!***************************************!*\ 1157 !*** ../node_modules/hasown/index.js ***! 1158 \***************************************/ 1159/*! no static exports found */ 1160/***/ (function(module, exports, __webpack_require__) { 1161 1162"use strict"; 1163 1164 1165var call = Function.prototype.call; 1166var $hasOwn = Object.prototype.hasOwnProperty; 1167var bind = __webpack_require__(/*! function-bind */ "../node_modules/function-bind/index.js"); 1168 1169/** @type {import('.')} */ 1170module.exports = bind.call(call, $hasOwn); 1171 1172 1173/***/ }), 1174
vendor: 10,333 bytes, lines 1175-1551
1175/***/ "../node_modules/imagesloaded/imagesloaded.js": 1176/*!****************************************************!*\ 1177 !*** ../node_modules/imagesloaded/imagesloaded.js ***! 1178 \****************************************************/ 1179/*! no static exports found */ 1180/***/ (function(module, exports, __webpack_require__) { 1181 1182var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 1183 * imagesLoaded v4.1.4 1184 * JavaScript is all like "You images are done yet or what?" 1185 * MIT License 1186 */ 1187 1188( function( window, factory ) { 'use strict'; 1189 // universal module definition 1190 1191 /*global define: false, module: false, require: false */ 1192 1193 if ( true ) { 1194 // AMD 1195 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ 1196 __webpack_require__(/*! ev-emitter/ev-emitter */ "../node_modules/ev-emitter/ev-emitter.js") 1197 ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter ) { 1198 return factory( window, EvEmitter ); 1199 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 1200 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 1201 } else {} 1202 1203})( typeof window !== 'undefined' ? window : this, 1204 1205// -------------------------- factory -------------------------- // 1206 1207function factory( window, EvEmitter ) { 1208 1209'use strict'; 1210 1211var $ = window.jQuery; 1212var console = window.console; 1213 1214// -------------------------- helpers -------------------------- // 1215 1216// extend objects 1217function extend( a, b ) { 1218 for ( var prop in b ) { 1219 a[ prop ] = b[ prop ]; 1220 } 1221 return a; 1222} 1223 1224var arraySlice = Array.prototype.slice; 1225 1226// turn element or nodeList into an array 1227function makeArray( obj ) { 1228 if ( Array.isArray( obj ) ) { 1229 // use object if already an array 1230 return obj; 1231 } 1232 1233 var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; 1234 if ( isArrayLike ) { 1235 // convert nodeList to array 1236 return arraySlice.call( obj ); 1237 } 1238 1239 // array of single index 1240 return [ obj ]; 1241} 1242 1243// -------------------------- imagesLoaded -------------------------- // 1244 1245/** 1246 * @param {Array, Element, NodeList, String} elem 1247 * @param {Object or Function} options - if function, use as callback 1248 * @param {Function} onAlways - callback function 1249 */ 1250function ImagesLoaded( elem, options, onAlways ) { 1251 // coerce ImagesLoaded() without new, to be new ImagesLoaded() 1252 if ( !( this instanceof ImagesLoaded ) ) { 1253 return new ImagesLoaded( elem, options, onAlways ); 1254 } 1255 // use elem as selector string 1256 var queryElem = elem; 1257 if ( typeof elem == 'string' ) { 1258 queryElem = document.querySelectorAll( elem ); 1259 } 1260 // bail if bad element 1261 if ( !queryElem ) { 1262 console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) ); 1263 return; 1264 } 1265 1266 this.elements = makeArray( queryElem ); 1267 this.options = extend( {}, this.options ); 1268 // shift arguments if no options set 1269 if ( typeof options == 'function' ) { 1270 onAlways = options; 1271 } else { 1272 extend( this.options, options ); 1273 } 1274 1275 if ( onAlways ) { 1276 this.on( 'always', onAlways ); 1277 } 1278 1279 this.getImages(); 1280 1281 if ( $ ) { 1282 // add jQuery Deferred object 1283 this.jqDeferred = new $.Deferred(); 1284 } 1285 1286 // HACK check async to allow time to bind listeners 1287 setTimeout( this.check.bind( this ) ); 1288} 1289 1290ImagesLoaded.prototype = Object.create( EvEmitter.prototype ); 1291 1292ImagesLoaded.prototype.options = {}; 1293 1294ImagesLoaded.prototype.getImages = function() { 1295 this.images = []; 1296 1297 // filter & find items if we have an item selector 1298 this.elements.forEach( this.addElementImages, this ); 1299}; 1300 1301/** 1302 * @param {Node} element 1303 */ 1304ImagesLoaded.prototype.addElementImages = function( elem ) { 1305 // filter siblings 1306 if ( elem.nodeName == 'IMG' ) { 1307 this.addImage( elem ); 1308 } 1309 // get background image on element 1310 if ( this.options.background === true ) { 1311 this.addElementBackgroundImages( elem ); 1312 } 1313 1314 // find children 1315 // no non-element nodes, #143 1316 var nodeType = elem.nodeType; 1317 if ( !nodeType || !elementNodeTypes[ nodeType ] ) { 1318 return; 1319 } 1320 var childImgs = elem.querySelectorAll('img'); 1321 // concat childElems to filterFound array 1322 for ( var i=0; i < childImgs.length; i++ ) { 1323 var img = childImgs[i]; 1324 this.addImage( img ); 1325 } 1326 1327 // get child background images 1328 if ( typeof this.options.background == 'string' ) { 1329 var children = elem.querySelectorAll( this.options.background ); 1330 for ( i=0; i < children.length; i++ ) { 1331 var child = children[i]; 1332 this.addElementBackgroundImages( child ); 1333 } 1334 } 1335}; 1336 1337var elementNodeTypes = { 1338 1: true, 1339 9: true, 1340 11: true 1341}; 1342 1343ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) { 1344 var style = getComputedStyle( elem ); 1345 if ( !style ) { 1346 // Firefox returns null if in a hidden iframe https://bugzil.la/548397 1347 return; 1348 } 1349 // get url inside url("...") 1350 var reURL = /url\((['"])?(.*?)\1\)/gi; 1351 var matches = reURL.exec( style.backgroundImage ); 1352 while ( matches !== null ) { 1353 var url = matches && matches[2]; 1354 if ( url ) { 1355 this.addBackground( url, elem ); 1356 } 1357 matches = reURL.exec( style.backgroundImage ); 1358 } 1359}; 1360 1361/** 1362 * @param {Image} img 1363 */ 1364ImagesLoaded.prototype.addImage = function( img ) { 1365 var loadingImage = new LoadingImage( img ); 1366 this.images.push( loadingImage ); 1367}; 1368 1369ImagesLoaded.prototype.addBackground = function( url, elem ) { 1370 var background = new Background( url, elem ); 1371 this.images.push( background ); 1372}; 1373 1374ImagesLoaded.prototype.check = function() { 1375 var _this = this; 1376 this.progressedCount = 0; 1377 this.hasAnyBroken = false; 1378 // complete if no images 1379 if ( !this.images.length ) { 1380 this.complete(); 1381 return; 1382 } 1383 1384 function onProgress( image, elem, message ) { 1385 // HACK - Chrome triggers event before object properties have changed. #83 1386 setTimeout( function() { 1387 _this.progress( image, elem, message ); 1388 }); 1389 } 1390 1391 this.images.forEach( function( loadingImage ) { 1392 loadingImage.once( 'progress', onProgress ); 1393 loadingImage.check(); 1394 }); 1395}; 1396 1397ImagesLoaded.prototype.progress = function( image, elem, message ) { 1398 this.progressedCount++; 1399 this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded; 1400 // progress event 1401 this.emitEvent( 'progress', [ this, image, elem ] ); 1402 if ( this.jqDeferred && this.jqDeferred.notify ) { 1403 this.jqDeferred.notify( this, image ); 1404 } 1405 // check if completed 1406 if ( this.progressedCount == this.images.length ) { 1407 this.complete(); 1408 } 1409 1410 if ( this.options.debug && console ) { 1411 console.log( 'progress: ' + message, image, elem ); 1412 } 1413}; 1414 1415ImagesLoaded.prototype.complete = function() { 1416 var eventName = this.hasAnyBroken ? 'fail' : 'done'; 1417 this.isComplete = true; 1418 this.emitEvent( eventName, [ this ] ); 1419 this.emitEvent( 'always', [ this ] ); 1420 if ( this.jqDeferred ) { 1421 var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve'; 1422 this.jqDeferred[ jqMethod ]( this ); 1423 } 1424}; 1425 1426// -------------------------- -------------------------- // 1427 1428function LoadingImage( img ) { 1429 this.img = img; 1430} 1431 1432LoadingImage.prototype = Object.create( EvEmitter.prototype ); 1433 1434LoadingImage.prototype.check = function() { 1435 // If complete is true and browser supports natural sizes, 1436 // try to check for image status manually. 1437 var isComplete = this.getIsImageComplete(); 1438 if ( isComplete ) { 1439 // report based on naturalWidth 1440 this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); 1441 return; 1442 } 1443 1444 // If none of the checks above matched, simulate loading on detached element. 1445 this.proxyImage = new Image(); 1446 this.proxyImage.addEventListener( 'load', this ); 1447 this.proxyImage.addEventListener( 'error', this ); 1448 // bind to image as well for Firefox. #191 1449 this.img.addEventListener( 'load', this ); 1450 this.img.addEventListener( 'error', this ); 1451 this.proxyImage.src = this.img.src; 1452}; 1453 1454LoadingImage.prototype.getIsImageComplete = function() { 1455 // check for non-zero, non-undefined naturalWidth 1456 // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671 1457 return this.img.complete && this.img.naturalWidth; 1458}; 1459 1460LoadingImage.prototype.confirm = function( isLoaded, message ) { 1461 this.isLoaded = isLoaded; 1462 this.emitEvent( 'progress', [ this, this.img, message ] ); 1463}; 1464 1465// ----- events ----- // 1466 1467// trigger specified handler for event type 1468LoadingImage.prototype.handleEvent = function( event ) { 1469 var method = 'on' + event.type; 1470 if ( this[ method ] ) { 1471 this[ method ]( event ); 1472 } 1473}; 1474 1475LoadingImage.prototype.onload = function() { 1476 this.confirm( true, 'onload' ); 1477 this.unbindEvents(); 1478}; 1479 1480LoadingImage.prototype.onerror = function() { 1481 this.confirm( false, 'onerror' ); 1482 this.unbindEvents(); 1483}; 1484 1485LoadingImage.prototype.unbindEvents = function() { 1486 this.proxyImage.removeEventListener( 'load', this ); 1487 this.proxyImage.removeEventListener( 'error', this ); 1488 this.img.removeEventListener( 'load', this ); 1489 this.img.removeEventListener( 'error', this ); 1490}; 1491 1492// -------------------------- Background -------------------------- // 1493 1494function Background( url, element ) { 1495 this.url = url; 1496 this.element = element; 1497 this.img = new Image(); 1498} 1499 1500// inherit LoadingImage prototype 1501Background.prototype = Object.create( LoadingImage.prototype ); 1502 1503Background.prototype.check = function() { 1504 this.img.addEventListener( 'load', this ); 1505 this.img.addEventListener( 'error', this ); 1506 this.img.src = this.url; 1507 // check if image is already complete 1508 var isComplete = this.getIsImageComplete(); 1509 if ( isComplete ) { 1510 this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); 1511 this.unbindEvents(); 1512 } 1513}; 1514 1515Background.prototype.unbindEvents = function() { 1516 this.img.removeEventListener( 'load', this ); 1517 this.img.removeEventListener( 'error', this ); 1518}; 1519 1520Background.prototype.confirm = function( isLoaded, message ) { 1521 this.isLoaded = isLoaded; 1522 this.emitEvent( 'progress', [ this, this.element, message ] ); 1523}; 1524 1525// -------------------------- jQuery -------------------------- // 1526 1527ImagesLoaded.makeJQueryPlugin = function( jQuery ) { 1528 jQuery = jQuery || window.jQuery; 1529 if ( !jQuery ) { 1530 return; 1531 } 1532 // set local variable 1533 $ = jQuery; 1534 // $().imagesLoaded() 1535 $.fn.imagesLoaded = function( options, callback ) { 1536 var instance = new ImagesLoaded( this, options, callback ); 1537 return instance.jqDeferred.promise( $(this) ); 1538 }; 1539}; 1540// try making plugin 1541ImagesLoaded.makeJQueryPlugin(); 1542 1543// -------------------------- -------------------------- // 1544 1545return ImagesLoaded; 1546 1547}); 1548 1549 1550/***/ }), 1551
vendor: 285,813 bytes, lines 1552-12279
1552/***/ "../node_modules/jquery/dist/jquery.js": 1553/*!*********************************************!*\ 1554 !*** ../node_modules/jquery/dist/jquery.js ***! 1555 \*********************************************/ 1556/*! no static exports found */ 1557/***/ (function(module, exports, __webpack_require__) { 1558 1559var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 1560 * jQuery JavaScript Library v3.7.1 1561 * https://jquery.com/ 1562 * 1563 * Copyright OpenJS Foundation and other contributors 1564 * Released under the MIT license 1565 * https://jquery.org/license 1566 * 1567 * Date: 2023-08-28T13:37Z 1568 */ 1569( function( global, factory ) { 1570 1571 "use strict"; 1572 1573 if ( true && typeof module.exports === "object" ) { 1574 1575 // For CommonJS and CommonJS-like environments where a proper `window` 1576 // is present, execute the factory and get jQuery. 1577 // For environments that do not have a `window` with a `document` 1578 // (such as Node.js), expose a factory as module.exports. 1579 // This accentuates the need for the creation of a real `window`. 1580 // e.g. var jQuery = require("jquery")(window); 1581 // See ticket trac-14549 for more info. 1582 module.exports = global.document ? 1583 factory( global, true ) : 1584 function( w ) { 1585 if ( !w.document ) { 1586 throw new Error( "jQuery requires a window with a document" ); 1587 } 1588 return factory( w ); 1589 }; 1590 } else { 1591 factory( global ); 1592 } 1593 1594// Pass this if window is not defined yet 1595} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 1596 1597// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 1598// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 1599// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 1600// enough that all such attempts are guarded in a try block. 1601"use strict"; 1602 1603var arr = []; 1604 1605var getProto = Object.getPrototypeOf; 1606 1607var slice = arr.slice; 1608 1609var flat = arr.flat ? function( array ) { 1610 return arr.flat.call( array ); 1611} : function( array ) { 1612 return arr.concat.apply( [], array ); 1613}; 1614 1615 1616var push = arr.push; 1617 1618var indexOf = arr.indexOf; 1619 1620var class2type = {}; 1621 1622var toString = class2type.toString; 1623 1624var hasOwn = class2type.hasOwnProperty; 1625 1626var fnToString = hasOwn.toString; 1627 1628var ObjectFunctionString = fnToString.call( Object ); 1629 1630var support = {}; 1631 1632var isFunction = function isFunction( obj ) { 1633 1634 // Support: Chrome <=57, Firefox <=52 1635 // In some browsers, typeof returns "function" for HTML <object> elements 1636 // (i.e., `typeof document.createElement( "object" ) === "function"`). 1637 // We don't want to classify *any* DOM node as a function. 1638 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 1639 // Plus for old WebKit, typeof returns "function" for HTML collections 1640 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 1641 return typeof obj === "function" && typeof obj.nodeType !== "number" && 1642 typeof obj.item !== "function"; 1643 }; 1644 1645 1646var isWindow = function isWindow( obj ) { 1647 return obj != null && obj === obj.window; 1648 }; 1649 1650 1651var document = window.document; 1652 1653 1654 1655 var preservedScriptAttributes = { 1656 type: true, 1657 src: true, 1658 nonce: true, 1659 noModule: true 1660 }; 1661 1662 function DOMEval( code, node, doc ) { 1663 doc = doc || document; 1664 1665 var i, val, 1666 script = doc.createElement( "script" ); 1667 1668 script.text = code; 1669 if ( node ) { 1670 for ( i in preservedScriptAttributes ) { 1671 1672 // Support: Firefox 64+, Edge 18+ 1673 // Some browsers don't support the "nonce" property on scripts. 1674 // On the other hand, just using `getAttribute` is not enough as 1675 // the `nonce` attribute is reset to an empty string whenever it 1676 // becomes browsing-context connected. 1677 // See https://github.com/whatwg/html/issues/2369 1678 // See https://html.spec.whatwg.org/#nonce-attributes 1679 // The `node.getAttribute` check was added for the sake of 1680 // `jQuery.globalEval` so that it can fake a nonce-containing node 1681 // via an object. 1682 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 1683 if ( val ) { 1684 script.setAttribute( i, val ); 1685 } 1686 } 1687 } 1688 doc.head.appendChild( script ).parentNode.removeChild( script ); 1689 } 1690 1691 1692function toType( obj ) { 1693 if ( obj == null ) { 1694 return obj + ""; 1695 } 1696 1697 // Support: Android <=2.3 only (functionish RegExp) 1698 return typeof obj === "object" || typeof obj === "function" ? 1699 class2type[ toString.call( obj ) ] || "object" : 1700 typeof obj; 1701} 1702/* global Symbol */ 1703// Defining this global in .eslintrc.json would create a danger of using the global 1704// unguarded in another place, it seems safer to define global only for this module 1705 1706 1707 1708var version = "3.7.1", 1709 1710 rhtmlSuffix = /HTML$/i, 1711 1712 // Define a local copy of jQuery 1713 jQuery = function( selector, context ) { 1714 1715 // The jQuery object is actually just the init constructor 'enhanced' 1716 // Need init if jQuery is called (just allow error to be thrown if not included) 1717 return new jQuery.fn.init( selector, context ); 1718 }; 1719 1720jQuery.fn = jQuery.prototype = { 1721 1722 // The current version of jQuery being used 1723 jquery: version, 1724 1725 constructor: jQuery, 1726 1727 // The default length of a jQuery object is 0 1728 length: 0, 1729 1730 toArray: function() { 1731 return slice.call( this ); 1732 }, 1733 1734 // Get the Nth element in the matched element set OR 1735 // Get the whole matched element set as a clean array 1736 get: function( num ) { 1737 1738 // Return all the elements in a clean array 1739 if ( num == null ) { 1740 return slice.call( this ); 1741 } 1742 1743 // Return just the one element from the set 1744 return num < 0 ? this[ num + this.length ] : this[ num ]; 1745 }, 1746 1747 // Take an array of elements and push it onto the stack 1748 // (returning the new matched element set) 1749 pushStack: function( elems ) { 1750 1751 // Build a new jQuery matched element set 1752 var ret = jQuery.merge( this.constructor(), elems ); 1753 1754 // Add the old object onto the stack (as a reference) 1755 ret.prevObject = this; 1756 1757 // Return the newly-formed element set 1758 return ret; 1759 }, 1760 1761 // Execute a callback for every element in the matched set. 1762 each: function( callback ) { 1763 return jQuery.each( this, callback ); 1764 }, 1765 1766 map: function( callback ) { 1767 return this.pushStack( jQuery.map( this, function( elem, i ) { 1768 return callback.call( elem, i, elem ); 1769 } ) ); 1770 }, 1771 1772 slice: function() { 1773 return this.pushStack( slice.apply( this, arguments ) ); 1774 }, 1775 1776 first: function() { 1777 return this.eq( 0 ); 1778 }, 1779 1780 last: function() { 1781 return this.eq( -1 ); 1782 }, 1783 1784 even: function() { 1785 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 1786 return ( i + 1 ) % 2; 1787 } ) ); 1788 }, 1789 1790 odd: function() { 1791 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 1792 return i % 2; 1793 } ) ); 1794 }, 1795 1796 eq: function( i ) { 1797 var len = this.length, 1798 j = +i + ( i < 0 ? len : 0 ); 1799 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 1800 }, 1801 1802 end: function() { 1803 return this.prevObject || this.constructor(); 1804 }, 1805 1806 // For internal use only. 1807 // Behaves like an Array's method, not like a jQuery method. 1808 push: push, 1809 sort: arr.sort, 1810 splice: arr.splice 1811}; 1812 1813jQuery.extend = jQuery.fn.extend = function() { 1814 var options, name, src, copy, copyIsArray, clone, 1815 target = arguments[ 0 ] || {}, 1816 i = 1, 1817 length = arguments.length, 1818 deep = false; 1819 1820 // Handle a deep copy situation 1821 if ( typeof target === "boolean" ) { 1822 deep = target; 1823 1824 // Skip the boolean and the target 1825 target = arguments[ i ] || {}; 1826 i++; 1827 } 1828 1829 // Handle case when target is a string or something (possible in deep copy) 1830 if ( typeof target !== "object" && !isFunction( target ) ) { 1831 target = {}; 1832 } 1833 1834 // Extend jQuery itself if only one argument is passed 1835 if ( i === length ) { 1836 target = this; 1837 i--; 1838 } 1839 1840 for ( ; i < length; i++ ) { 1841 1842 // Only deal with non-null/undefined values 1843 if ( ( options = arguments[ i ] ) != null ) { 1844 1845 // Extend the base object 1846 for ( name in options ) { 1847 copy = options[ name ]; 1848 1849 // Prevent Object.prototype pollution 1850 // Prevent never-ending loop 1851 if ( name === "__proto__" || target === copy ) { 1852 continue; 1853 } 1854 1855 // Recurse if we're merging plain objects or arrays 1856 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 1857 ( copyIsArray = Array.isArray( copy ) ) ) ) { 1858 src = target[ name ]; 1859 1860 // Ensure proper type for the source value 1861 if ( copyIsArray && !Array.isArray( src ) ) { 1862 clone = []; 1863 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 1864 clone = {}; 1865 } else { 1866 clone = src; 1867 } 1868 copyIsArray = false; 1869 1870 // Never move original objects, clone them 1871 target[ name ] = jQuery.extend( deep, clone, copy ); 1872 1873 // Don't bring in undefined values 1874 } else if ( copy !== undefined ) { 1875 target[ name ] = copy; 1876 } 1877 } 1878 } 1879 } 1880 1881 // Return the modified object 1882 return target; 1883}; 1884 1885jQuery.extend( { 1886 1887 // Unique for each copy of jQuery on the page 1888 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 1889 1890 // Assume jQuery is ready without the ready module 1891 isReady: true, 1892 1893 error: function( msg ) { 1894 throw new Error( msg ); 1895 }, 1896 1897 noop: function() {}, 1898 1899 isPlainObject: function( obj ) { 1900 var proto, Ctor; 1901 1902 // Detect obvious negatives 1903 // Use toString instead of jQuery.type to catch host objects 1904 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 1905 return false; 1906 } 1907 1908 proto = getProto( obj ); 1909 1910 // Objects with no prototype (e.g., `Object.create( null )`) are plain 1911 if ( !proto ) { 1912 return true; 1913 } 1914 1915 // Objects with prototype are plain iff they were constructed by a global Object function 1916 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 1917 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 1918 }, 1919 1920 isEmptyObject: function( obj ) { 1921 var name; 1922 1923 for ( name in obj ) { 1924 return false; 1925 } 1926 return true; 1927 }, 1928 1929 // Evaluates a script in a provided context; falls back to the global one 1930 // if not specified. 1931 globalEval: function( code, options, doc ) { 1932 DOMEval( code, { nonce: options && options.nonce }, doc ); 1933 }, 1934 1935 each: function( obj, callback ) { 1936 var length, i = 0; 1937 1938 if ( isArrayLike( obj ) ) { 1939 length = obj.length; 1940 for ( ; i < length; i++ ) { 1941 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 1942 break; 1943 } 1944 } 1945 } else { 1946 for ( i in obj ) { 1947 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 1948 break; 1949 } 1950 } 1951 } 1952 1953 return obj; 1954 }, 1955 1956 1957 // Retrieve the text value of an array of DOM nodes 1958 text: function( elem ) { 1959 var node, 1960 ret = "", 1961 i = 0, 1962 nodeType = elem.nodeType; 1963 1964 if ( !nodeType ) { 1965 1966 // If no nodeType, this is expected to be an array 1967 while ( ( node = elem[ i++ ] ) ) { 1968 1969 // Do not traverse comment nodes 1970 ret += jQuery.text( node ); 1971 } 1972 } 1973 if ( nodeType === 1 || nodeType === 11 ) { 1974 return elem.textContent; 1975 } 1976 if ( nodeType === 9 ) { 1977 return elem.documentElement.textContent; 1978 } 1979 if ( nodeType === 3 || nodeType === 4 ) { 1980 return elem.nodeValue; 1981 } 1982 1983 // Do not include comment or processing instruction nodes 1984 1985 return ret; 1986 }, 1987 1988 // results is for internal usage only 1989 makeArray: function( arr, results ) { 1990 var ret = results || []; 1991 1992 if ( arr != null ) { 1993 if ( isArrayLike( Object( arr ) ) ) { 1994 jQuery.merge( ret, 1995 typeof arr === "string" ? 1996 [ arr ] : arr 1997 ); 1998 } else { 1999 push.call( ret, arr ); 2000 } 2001 } 2002 2003 return ret; 2004 }, 2005 2006 inArray: function( elem, arr, i ) { 2007 return arr == null ? -1 : indexOf.call( arr, elem, i ); 2008 }, 2009 2010 isXMLDoc: function( elem ) { 2011 var namespace = elem && elem.namespaceURI, 2012 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 2013 2014 // Assume HTML when documentElement doesn't yet exist, such as inside 2015 // document fragments. 2016 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 2017 }, 2018 2019 // Support: Android <=4.0 only, PhantomJS 1 only 2020 // push.apply(_, arraylike) throws on ancient WebKit 2021 merge: function( first, second ) { 2022 var len = +second.length, 2023 j = 0, 2024 i = first.length; 2025 2026 for ( ; j < len; j++ ) { 2027 first[ i++ ] = second[ j ]; 2028 } 2029 2030 first.length = i; 2031 2032 return first; 2033 }, 2034 2035 grep: function( elems, callback, invert ) { 2036 var callbackInverse, 2037 matches = [], 2038 i = 0, 2039 length = elems.length, 2040 callbackExpect = !invert; 2041 2042 // Go through the array, only saving the items 2043 // that pass the validator function 2044 for ( ; i < length; i++ ) { 2045 callbackInverse = !callback( elems[ i ], i ); 2046 if ( callbackInverse !== callbackExpect ) { 2047 matches.push( elems[ i ] ); 2048 } 2049 } 2050 2051 return matches; 2052 }, 2053 2054 // arg is for internal usage only 2055 map: function( elems, callback, arg ) { 2056 var length, value, 2057 i = 0, 2058 ret = []; 2059 2060 // Go through the array, translating each of the items to their new values 2061 if ( isArrayLike( elems ) ) { 2062 length = elems.length; 2063 for ( ; i < length; i++ ) { 2064 value = callback( elems[ i ], i, arg ); 2065 2066 if ( value != null ) { 2067 ret.push( value ); 2068 } 2069 } 2070 2071 // Go through every key on the object, 2072 } else { 2073 for ( i in elems ) { 2074 value = callback( elems[ i ], i, arg ); 2075 2076 if ( value != null ) { 2077 ret.push( value ); 2078 } 2079 } 2080 } 2081 2082 // Flatten any nested arrays 2083 return flat( ret ); 2084 }, 2085 2086 // A global GUID counter for objects 2087 guid: 1, 2088 2089 // jQuery.support is not used in Core but other projects attach their 2090 // properties to it so it needs to exist. 2091 support: support 2092} ); 2093 2094if ( typeof Symbol === "function" ) { 2095 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 2096} 2097 2098// Populate the class2type map 2099jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 2100 function( _i, name ) { 2101 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 2102 } ); 2103 2104function isArrayLike( obj ) { 2105 2106 // Support: real iOS 8.2 only (not reproducible in simulator) 2107 // `in` check used to prevent JIT error (gh-2145) 2108 // hasOwn isn't used here due to false negatives 2109 // regarding Nodelist length in IE 2110 var length = !!obj && "length" in obj && obj.length, 2111 type = toType( obj ); 2112 2113 if ( isFunction( obj ) || isWindow( obj ) ) { 2114 return false; 2115 } 2116 2117 return type === "array" || length === 0 || 2118 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 2119} 2120 2121 2122function nodeName( elem, name ) { 2123 2124 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 2125 2126} 2127var pop = arr.pop; 2128 2129 2130var sort = arr.sort; 2131 2132 2133var splice = arr.splice; 2134 2135 2136var whitespace = "[\\x20\\t\\r\\n\\f]"; 2137 2138 2139var rtrimCSS = new RegExp( 2140 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 2141 "g" 2142); 2143 2144 2145 2146 2147// Note: an element does not contain itself 2148jQuery.contains = function( a, b ) { 2149 var bup = b && b.parentNode; 2150 2151 return a === bup || !!( bup && bup.nodeType === 1 && ( 2152 2153 // Support: IE 9 - 11+ 2154 // IE doesn't have `contains` on SVG. 2155 a.contains ? 2156 a.contains( bup ) : 2157 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 2158 ) ); 2159}; 2160 2161 2162 2163 2164// CSS string/identifier serialization 2165// https://drafts.csswg.org/cssom/#common-serializing-idioms 2166var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 2167 2168function fcssescape( ch, asCodePoint ) { 2169 if ( asCodePoint ) { 2170 2171 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 2172 if ( ch === "\0" ) { 2173 return "\uFFFD"; 2174 } 2175 2176 // Control characters and (dependent upon position) numbers get escaped as code points 2177 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 2178 } 2179 2180 // Other potentially-special ASCII characters get backslash-escaped 2181 return "\\" + ch; 2182} 2183 2184jQuery.escapeSelector = function( sel ) { 2185 return ( sel + "" ).replace( rcssescape, fcssescape ); 2186}; 2187 2188 2189 2190 2191var preferredDoc = document, 2192 pushNative = push; 2193 2194( function() { 2195 2196var i, 2197 Expr, 2198 outermostContext, 2199 sortInput, 2200 hasDuplicate, 2201 push = pushNative, 2202 2203 // Local document vars 2204 document, 2205 documentElement, 2206 documentIsHTML, 2207 rbuggyQSA, 2208 matches, 2209 2210 // Instance-specific data 2211 expando = jQuery.expando, 2212 dirruns = 0, 2213 done = 0, 2214 classCache = createCache(), 2215 tokenCache = createCache(), 2216 compilerCache = createCache(), 2217 nonnativeSelectorCache = createCache(), 2218 sortOrder = function( a, b ) { 2219 if ( a === b ) { 2220 hasDuplicate = true; 2221 } 2222 return 0; 2223 }, 2224 2225 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 2226 "loop|multiple|open|readonly|required|scoped", 2227 2228 // Regular expressions 2229 2230 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 2231 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 2232 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 2233 2234 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 2235 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 2236 2237 // Operator (capture 2) 2238 "*([*^$|!~]?=)" + whitespace + 2239 2240 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 2241 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 2242 whitespace + "*\\]", 2243 2244 pseudos = ":(" + identifier + ")(?:\\((" + 2245 2246 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 2247 // 1. quoted (capture 3; capture 4 or capture 5) 2248 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 2249 2250 // 2. simple (capture 6) 2251 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 2252 2253 // 3. anything else (capture 2) 2254 ".*" + 2255 ")\\)|)", 2256 2257 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 2258 rwhitespace = new RegExp( whitespace + "+", "g" ), 2259 2260 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 2261 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 2262 whitespace + "*" ), 2263 rdescend = new RegExp( whitespace + "|>" ), 2264 2265 rpseudo = new RegExp( pseudos ), 2266 ridentifier = new RegExp( "^" + identifier + "$" ), 2267 2268 matchExpr = { 2269 ID: new RegExp( "^#(" + identifier + ")" ), 2270 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 2271 TAG: new RegExp( "^(" + identifier + "|[*])" ), 2272 ATTR: new RegExp( "^" + attributes ), 2273 PSEUDO: new RegExp( "^" + pseudos ), 2274 CHILD: new RegExp( 2275 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 2276 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 2277 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 2278 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 2279 2280 // For use in libraries implementing .is() 2281 // We use this for POS matching in `select` 2282 needsContext: new RegExp( "^" + whitespace + 2283 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 2284 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 2285 }, 2286 2287 rinputs = /^(?:input|select|textarea|button)$/i, 2288 rheader = /^h\d$/i, 2289 2290 // Easily-parseable/retrievable ID or TAG or CLASS selectors 2291 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 2292 2293 rsibling = /[+~]/, 2294 2295 // CSS escapes 2296 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 2297 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 2298 "?|\\\\([^\\r\\n\\f])", "g" ), 2299 funescape = function( escape, nonHex ) { 2300 var high = "0x" + escape.slice( 1 ) - 0x10000; 2301 2302 if ( nonHex ) { 2303 2304 // Strip the backslash prefix from a non-hex escape sequence 2305 return nonHex; 2306 } 2307 2308 // Replace a hexadecimal escape sequence with the encoded Unicode code point 2309 // Support: IE <=11+ 2310 // For values outside the Basic Multilingual Plane (BMP), manually construct a 2311 // surrogate pair 2312 return high < 0 ? 2313 String.fromCharCode( high + 0x10000 ) : 2314 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 2315 }, 2316 2317 // Used for iframes; see `setDocument`. 2318 // Support: IE 9 - 11+, Edge 12 - 18+ 2319 // Removing the function wrapper causes a "Permission Denied" 2320 // error in IE/Edge. 2321 unloadHandler = function() { 2322 setDocument(); 2323 }, 2324 2325 inDisabledFieldset = addCombinator( 2326 function( elem ) { 2327 return elem.disabled === true && nodeName( elem, "fieldset" ); 2328 }, 2329 { dir: "parentNode", next: "legend" } 2330 ); 2331 2332// Support: IE <=9 only 2333// Accessing document.activeElement can throw unexpectedly 2334// https://bugs.jquery.com/ticket/13393 2335function safeActiveElement() { 2336 try { 2337 return document.activeElement; 2338 } catch ( err ) { } 2339} 2340 2341// Optimize for push.apply( _, NodeList ) 2342try { 2343 push.apply( 2344 ( arr = slice.call( preferredDoc.childNodes ) ), 2345 preferredDoc.childNodes 2346 ); 2347 2348 // Support: Android <=4.0 2349 // Detect silently failing push.apply 2350 // eslint-disable-next-line no-unused-expressions 2351 arr[ preferredDoc.childNodes.length ].nodeType; 2352} catch ( e ) { 2353 push = { 2354 apply: function( target, els ) { 2355 pushNative.apply( target, slice.call( els ) ); 2356 }, 2357 call: function( target ) { 2358 pushNative.apply( target, slice.call( arguments, 1 ) ); 2359 } 2360 }; 2361} 2362 2363function find( selector, context, results, seed ) { 2364 var m, i, elem, nid, match, groups, newSelector, 2365 newContext = context && context.ownerDocument, 2366 2367 // nodeType defaults to 9, since context defaults to document 2368 nodeType = context ? context.nodeType : 9; 2369 2370 results = results || []; 2371 2372 // Return early from calls with invalid selector or context 2373 if ( typeof selector !== "string" || !selector || 2374 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 2375 2376 return results; 2377 } 2378 2379 // Try to shortcut find operations (as opposed to filters) in HTML documents 2380 if ( !seed ) { 2381 setDocument( context ); 2382 context = context || document; 2383 2384 if ( documentIsHTML ) { 2385 2386 // If the selector is sufficiently simple, try using a "get*By*" DOM method 2387 // (excepting DocumentFragment context, where the methods don't exist) 2388 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 2389 2390 // ID selector 2391 if ( ( m = match[ 1 ] ) ) { 2392 2393 // Document context 2394 if ( nodeType === 9 ) { 2395 if ( ( elem = context.getElementById( m ) ) ) { 2396 2397 // Support: IE 9 only 2398 // getElementById can match elements by name instead of ID 2399 if ( elem.id === m ) { 2400 push.call( results, elem ); 2401 return results; 2402 } 2403 } else { 2404 return results; 2405 } 2406 2407 // Element context 2408 } else { 2409 2410 // Support: IE 9 only 2411 // getElementById can match elements by name instead of ID 2412 if ( newContext && ( elem = newContext.getElementById( m ) ) && 2413 find.contains( context, elem ) && 2414 elem.id === m ) { 2415 2416 push.call( results, elem ); 2417 return results; 2418 } 2419 } 2420 2421 // Type selector 2422 } else if ( match[ 2 ] ) { 2423 push.apply( results, context.getElementsByTagName( selector ) ); 2424 return results; 2425 2426 // Class selector 2427 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 2428 push.apply( results, context.getElementsByClassName( m ) ); 2429 return results; 2430 } 2431 } 2432 2433 // Take advantage of querySelectorAll 2434 if ( !nonnativeSelectorCache[ selector + " " ] && 2435 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 2436 2437 newSelector = selector; 2438 newContext = context; 2439 2440 // qSA considers elements outside a scoping root when evaluating child or 2441 // descendant combinators, which is not what we want. 2442 // In such cases, we work around the behavior by prefixing every selector in the 2443 // list with an ID selector referencing the scope context. 2444 // The technique has to be used as well when a leading combinator is used 2445 // as such selectors are not recognized by querySelectorAll. 2446 // Thanks to Andrew Dupont for this technique. 2447 if ( nodeType === 1 && 2448 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 2449 2450 // Expand context for sibling selectors 2451 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 2452 context; 2453 2454 // We can use :scope instead of the ID hack if the browser 2455 // supports it & if we're not changing the context. 2456 // Support: IE 11+, Edge 17 - 18+ 2457 // IE/Edge sometimes throw a "Permission denied" error when 2458 // strict-comparing two documents; shallow comparisons work. 2459 // eslint-disable-next-line eqeqeq 2460 if ( newContext != context || !support.scope ) { 2461 2462 // Capture the context ID, setting it first if necessary 2463 if ( ( nid = context.getAttribute( "id" ) ) ) { 2464 nid = jQuery.escapeSelector( nid ); 2465 } else { 2466 context.setAttribute( "id", ( nid = expando ) ); 2467 } 2468 } 2469 2470 // Prefix every selector in the list 2471 groups = tokenize( selector ); 2472 i = groups.length; 2473 while ( i-- ) { 2474 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 2475 toSelector( groups[ i ] ); 2476 } 2477 newSelector = groups.join( "," ); 2478 } 2479 2480 try { 2481 push.apply( results, 2482 newContext.querySelectorAll( newSelector ) 2483 ); 2484 return results; 2485 } catch ( qsaError ) { 2486 nonnativeSelectorCache( selector, true ); 2487 } finally { 2488 if ( nid === expando ) { 2489 context.removeAttribute( "id" ); 2490 } 2491 } 2492 } 2493 } 2494 } 2495 2496 // All others 2497 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 2498} 2499 2500/** 2501 * Create key-value caches of limited size 2502 * @returns {function(string, object)} Returns the Object data after storing it on itself with 2503 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 2504 * deleting the oldest entry 2505 */ 2506function createCache() { 2507 var keys = []; 2508 2509 function cache( key, value ) { 2510 2511 // Use (key + " ") to avoid collision with native prototype properties 2512 // (see https://github.com/jquery/sizzle/issues/157) 2513 if ( keys.push( key + " " ) > Expr.cacheLength ) { 2514 2515 // Only keep the most recent entries 2516 delete cache[ keys.shift() ]; 2517 } 2518 return ( cache[ key + " " ] = value ); 2519 } 2520 return cache; 2521} 2522 2523/** 2524 * Mark a function for special use by jQuery selector module 2525 * @param {Function} fn The function to mark 2526 */ 2527function markFunction( fn ) { 2528 fn[ expando ] = true; 2529 return fn; 2530} 2531 2532/** 2533 * Support testing using an element 2534 * @param {Function} fn Passed the created element and returns a boolean result 2535 */ 2536function assert( fn ) { 2537 var el = document.createElement( "fieldset" ); 2538 2539 try { 2540 return !!fn( el ); 2541 } catch ( e ) { 2542 return false; 2543 } finally { 2544 2545 // Remove from its parent by default 2546 if ( el.parentNode ) { 2547 el.parentNode.removeChild( el ); 2548 } 2549 2550 // release memory in IE 2551 el = null; 2552 } 2553} 2554 2555/** 2556 * Returns a function to use in pseudos for input types 2557 * @param {String} type 2558 */ 2559function createInputPseudo( type ) { 2560 return function( elem ) { 2561 return nodeName( elem, "input" ) && elem.type === type; 2562 }; 2563} 2564 2565/** 2566 * Returns a function to use in pseudos for buttons 2567 * @param {String} type 2568 */ 2569function createButtonPseudo( type ) { 2570 return function( elem ) { 2571 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 2572 elem.type === type; 2573 }; 2574} 2575 2576/** 2577 * Returns a function to use in pseudos for :enabled/:disabled 2578 * @param {Boolean} disabled true for :disabled; false for :enabled 2579 */ 2580function createDisabledPseudo( disabled ) { 2581 2582 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 2583 return function( elem ) { 2584 2585 // Only certain elements can match :enabled or :disabled 2586 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 2587 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 2588 if ( "form" in elem ) { 2589 2590 // Check for inherited disabledness on relevant non-disabled elements: 2591 // * listed form-associated elements in a disabled fieldset 2592 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 2593 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 2594 // * option elements in a disabled optgroup 2595 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 2596 // All such elements have a "form" property. 2597 if ( elem.parentNode && elem.disabled === false ) { 2598 2599 // Option elements defer to a parent optgroup if present 2600 if ( "label" in elem ) { 2601 if ( "label" in elem.parentNode ) { 2602 return elem.parentNode.disabled === disabled; 2603 } else { 2604 return elem.disabled === disabled; 2605 } 2606 } 2607 2608 // Support: IE 6 - 11+ 2609 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 2610 return elem.isDisabled === disabled || 2611 2612 // Where there is no isDisabled, check manually 2613 elem.isDisabled !== !disabled && 2614 inDisabledFieldset( elem ) === disabled; 2615 } 2616 2617 return elem.disabled === disabled; 2618 2619 // Try to winnow out elements that can't be disabled before trusting the disabled property. 2620 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 2621 // even exist on them, let alone have a boolean value. 2622 } else if ( "label" in elem ) { 2623 return elem.disabled === disabled; 2624 } 2625 2626 // Remaining elements are neither :enabled nor :disabled 2627 return false; 2628 }; 2629} 2630 2631/** 2632 * Returns a function to use in pseudos for positionals 2633 * @param {Function} fn 2634 */ 2635function createPositionalPseudo( fn ) { 2636 return markFunction( function( argument ) { 2637 argument = +argument; 2638 return markFunction( function( seed, matches ) { 2639 var j, 2640 matchIndexes = fn( [], seed.length, argument ), 2641 i = matchIndexes.length; 2642 2643 // Match elements found at the specified indexes 2644 while ( i-- ) { 2645 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 2646 seed[ j ] = !( matches[ j ] = seed[ j ] ); 2647 } 2648 } 2649 } ); 2650 } ); 2651} 2652 2653/** 2654 * Checks a node for validity as a jQuery selector context 2655 * @param {Element|Object=} context 2656 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 2657 */ 2658function testContext( context ) { 2659 return context && typeof context.getElementsByTagName !== "undefined" && context; 2660} 2661 2662/** 2663 * Sets document-related variables once based on the current document 2664 * @param {Element|Object} [node] An element or document object to use to set the document 2665 * @returns {Object} Returns the current document 2666 */ 2667function setDocument( node ) { 2668 var subWindow, 2669 doc = node ? node.ownerDocument || node : preferredDoc; 2670 2671 // Return early if doc is invalid or already selected 2672 // Support: IE 11+, Edge 17 - 18+ 2673 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2674 // two documents; shallow comparisons work. 2675 // eslint-disable-next-line eqeqeq 2676 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 2677 return document; 2678 } 2679 2680 // Update global variables 2681 document = doc; 2682 documentElement = document.documentElement; 2683 documentIsHTML = !jQuery.isXMLDoc( document ); 2684 2685 // Support: iOS 7 only, IE 9 - 11+ 2686 // Older browsers didn't support unprefixed `matches`. 2687 matches = documentElement.matches || 2688 documentElement.webkitMatchesSelector || 2689 documentElement.msMatchesSelector; 2690 2691 // Support: IE 9 - 11+, Edge 12 - 18+ 2692 // Accessing iframe documents after unload throws "permission denied" errors 2693 // (see trac-13936). 2694 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 2695 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 2696 if ( documentElement.msMatchesSelector && 2697 2698 // Support: IE 11+, Edge 17 - 18+ 2699 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2700 // two documents; shallow comparisons work. 2701 // eslint-disable-next-line eqeqeq 2702 preferredDoc != document && 2703 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 2704 2705 // Support: IE 9 - 11+, Edge 12 - 18+ 2706 subWindow.addEventListener( "unload", unloadHandler ); 2707 } 2708 2709 // Support: IE <10 2710 // Check if getElementById returns elements by name 2711 // The broken getElementById methods don't pick up programmatically-set names, 2712 // so use a roundabout getElementsByName test 2713 support.getById = assert( function( el ) { 2714 documentElement.appendChild( el ).id = jQuery.expando; 2715 return !document.getElementsByName || 2716 !document.getElementsByName( jQuery.expando ).length; 2717 } ); 2718 2719 // Support: IE 9 only 2720 // Check to see if it's possible to do matchesSelector 2721 // on a disconnected node. 2722 support.disconnectedMatch = assert( function( el ) { 2723 return matches.call( el, "*" ); 2724 } ); 2725 2726 // Support: IE 9 - 11+, Edge 12 - 18+ 2727 // IE/Edge don't support the :scope pseudo-class. 2728 support.scope = assert( function() { 2729 return document.querySelectorAll( ":scope" ); 2730 } ); 2731 2732 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 2733 // Make sure the `:has()` argument is parsed unforgivingly. 2734 // We include `*` in the test to detect buggy implementations that are 2735 // _selectively_ forgiving (specifically when the list includes at least 2736 // one valid selector). 2737 // Note that we treat complete lack of support for `:has()` as if it were 2738 // spec-compliant support, which is fine because use of `:has()` in such 2739 // environments will fail in the qSA path and fall back to jQuery traversal 2740 // anyway. 2741 support.cssHas = assert( function() { 2742 try { 2743 document.querySelector( ":has(*,:jqfake)" ); 2744 return false; 2745 } catch ( e ) { 2746 return true; 2747 } 2748 } ); 2749 2750 // ID filter and find 2751 if ( support.getById ) { 2752 Expr.filter.ID = function( id ) { 2753 var attrId = id.replace( runescape, funescape ); 2754 return function( elem ) { 2755 return elem.getAttribute( "id" ) === attrId; 2756 }; 2757 }; 2758 Expr.find.ID = function( id, context ) { 2759 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 2760 var elem = context.getElementById( id ); 2761 return elem ? [ elem ] : []; 2762 } 2763 }; 2764 } else { 2765 Expr.filter.ID = function( id ) { 2766 var attrId = id.replace( runescape, funescape ); 2767 return function( elem ) { 2768 var node = typeof elem.getAttributeNode !== "undefined" && 2769 elem.getAttributeNode( "id" ); 2770 return node && node.value === attrId; 2771 }; 2772 }; 2773 2774 // Support: IE 6 - 7 only 2775 // getElementById is not reliable as a find shortcut 2776 Expr.find.ID = function( id, context ) { 2777 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 2778 var node, i, elems, 2779 elem = context.getElementById( id ); 2780 2781 if ( elem ) { 2782 2783 // Verify the id attribute 2784 node = elem.getAttributeNode( "id" ); 2785 if ( node && node.value === id ) { 2786 return [ elem ]; 2787 } 2788 2789 // Fall back on getElementsByName 2790 elems = context.getElementsByName( id ); 2791 i = 0; 2792 while ( ( elem = elems[ i++ ] ) ) { 2793 node = elem.getAttributeNode( "id" ); 2794 if ( node && node.value === id ) { 2795 return [ elem ]; 2796 } 2797 } 2798 } 2799 2800 return []; 2801 } 2802 }; 2803 } 2804 2805 // Tag 2806 Expr.find.TAG = function( tag, context ) { 2807 if ( typeof context.getElementsByTagName !== "undefined" ) { 2808 return context.getElementsByTagName( tag ); 2809 2810 // DocumentFragment nodes don't have gEBTN 2811 } else { 2812 return context.querySelectorAll( tag ); 2813 } 2814 }; 2815 2816 // Class 2817 Expr.find.CLASS = function( className, context ) { 2818 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 2819 return context.getElementsByClassName( className ); 2820 } 2821 }; 2822 2823 /* QSA/matchesSelector 2824 ---------------------------------------------------------------------- */ 2825 2826 // QSA and matchesSelector support 2827 2828 rbuggyQSA = []; 2829 2830 // Build QSA regex 2831 // Regex strategy adopted from Diego Perini 2832 assert( function( el ) { 2833 2834 var input; 2835 2836 documentElement.appendChild( el ).innerHTML = 2837 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 2838 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 2839 "<option selected=''></option></select>"; 2840 2841 // Support: iOS <=7 - 8 only 2842 // Boolean attributes and "value" are not treated correctly in some XML documents 2843 if ( !el.querySelectorAll( "[selected]" ).length ) { 2844 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 2845 } 2846 2847 // Support: iOS <=7 - 8 only 2848 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 2849 rbuggyQSA.push( "~=" ); 2850 } 2851 2852 // Support: iOS 8 only 2853 // https://bugs.webkit.org/show_bug.cgi?id=136851 2854 // In-page `selector#id sibling-combinator selector` fails 2855 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 2856 rbuggyQSA.push( ".#.+[+~]" ); 2857 } 2858 2859 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 2860 // In some of the document kinds, these selectors wouldn't work natively. 2861 // This is probably OK but for backwards compatibility we want to maintain 2862 // handling them through jQuery traversal in jQuery 3.x. 2863 if ( !el.querySelectorAll( ":checked" ).length ) { 2864 rbuggyQSA.push( ":checked" ); 2865 } 2866 2867 // Support: Windows 8 Native Apps 2868 // The type and name attributes are restricted during .innerHTML assignment 2869 input = document.createElement( "input" ); 2870 input.setAttribute( "type", "hidden" ); 2871 el.appendChild( input ).setAttribute( "name", "D" ); 2872 2873 // Support: IE 9 - 11+ 2874 // IE's :disabled selector does not pick up the children of disabled fieldsets 2875 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 2876 // In some of the document kinds, these selectors wouldn't work natively. 2877 // This is probably OK but for backwards compatibility we want to maintain 2878 // handling them through jQuery traversal in jQuery 3.x. 2879 documentElement.appendChild( el ).disabled = true; 2880 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 2881 rbuggyQSA.push( ":enabled", ":disabled" ); 2882 } 2883 2884 // Support: IE 11+, Edge 15 - 18+ 2885 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 2886 // Adding a temporary attribute to the document before the selection works 2887 // around the issue. 2888 // Interestingly, IE 10 & older don't seem to have the issue. 2889 input = document.createElement( "input" ); 2890 input.setAttribute( "name", "" ); 2891 el.appendChild( input ); 2892 if ( !el.querySelectorAll( "[name='']" ).length ) { 2893 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 2894 whitespace + "*(?:''|\"\")" ); 2895 } 2896 } ); 2897 2898 if ( !support.cssHas ) { 2899 2900 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 2901 // Our regular `try-catch` mechanism fails to detect natively-unsupported 2902 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 2903 // in browsers that parse the `:has()` argument as a forgiving selector list. 2904 // https://drafts.csswg.org/selectors/#relational now requires the argument 2905 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 2906 rbuggyQSA.push( ":has" ); 2907 } 2908 2909 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 2910 2911 /* Sorting 2912 ---------------------------------------------------------------------- */ 2913 2914 // Document order sorting 2915 sortOrder = function( a, b ) { 2916 2917 // Flag for duplicate removal 2918 if ( a === b ) { 2919 hasDuplicate = true; 2920 return 0; 2921 } 2922 2923 // Sort on method existence if only one input has compareDocumentPosition 2924 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 2925 if ( compare ) { 2926 return compare; 2927 } 2928 2929 // Calculate position if both inputs belong to the same document 2930 // Support: IE 11+, Edge 17 - 18+ 2931 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2932 // two documents; shallow comparisons work. 2933 // eslint-disable-next-line eqeqeq 2934 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 2935 a.compareDocumentPosition( b ) : 2936 2937 // Otherwise we know they are disconnected 2938 1; 2939 2940 // Disconnected nodes 2941 if ( compare & 1 || 2942 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 2943 2944 // Choose the first element that is related to our preferred document 2945 // Support: IE 11+, Edge 17 - 18+ 2946 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2947 // two documents; shallow comparisons work. 2948 // eslint-disable-next-line eqeqeq 2949 if ( a === document || a.ownerDocument == preferredDoc && 2950 find.contains( preferredDoc, a ) ) { 2951 return -1; 2952 } 2953 2954 // Support: IE 11+, Edge 17 - 18+ 2955 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2956 // two documents; shallow comparisons work. 2957 // eslint-disable-next-line eqeqeq 2958 if ( b === document || b.ownerDocument == preferredDoc && 2959 find.contains( preferredDoc, b ) ) { 2960 return 1; 2961 } 2962 2963 // Maintain original order 2964 return sortInput ? 2965 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 2966 0; 2967 } 2968 2969 return compare & 4 ? -1 : 1; 2970 }; 2971 2972 return document; 2973} 2974 2975find.matches = function( expr, elements ) { 2976 return find( expr, null, null, elements ); 2977}; 2978 2979find.matchesSelector = function( elem, expr ) { 2980 setDocument( elem ); 2981 2982 if ( documentIsHTML && 2983 !nonnativeSelectorCache[ expr + " " ] && 2984 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 2985 2986 try { 2987 var ret = matches.call( elem, expr ); 2988 2989 // IE 9's matchesSelector returns false on disconnected nodes 2990 if ( ret || support.disconnectedMatch || 2991 2992 // As well, disconnected nodes are said to be in a document 2993 // fragment in IE 9 2994 elem.document && elem.document.nodeType !== 11 ) { 2995 return ret; 2996 } 2997 } catch ( e ) { 2998 nonnativeSelectorCache( expr, true ); 2999 } 3000 } 3001 3002 return find( expr, document, null, [ elem ] ).length > 0; 3003}; 3004 3005find.contains = function( context, elem ) { 3006 3007 // Set document vars if needed 3008 // Support: IE 11+, Edge 17 - 18+ 3009 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3010 // two documents; shallow comparisons work. 3011 // eslint-disable-next-line eqeqeq 3012 if ( ( context.ownerDocument || context ) != document ) { 3013 setDocument( context ); 3014 } 3015 return jQuery.contains( context, elem ); 3016}; 3017 3018 3019find.attr = function( elem, name ) { 3020 3021 // Set document vars if needed 3022 // Support: IE 11+, Edge 17 - 18+ 3023 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3024 // two documents; shallow comparisons work. 3025 // eslint-disable-next-line eqeqeq 3026 if ( ( elem.ownerDocument || elem ) != document ) { 3027 setDocument( elem ); 3028 } 3029 3030 var fn = Expr.attrHandle[ name.toLowerCase() ], 3031 3032 // Don't get fooled by Object.prototype properties (see trac-13807) 3033 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 3034 fn( elem, name, !documentIsHTML ) : 3035 undefined; 3036 3037 if ( val !== undefined ) { 3038 return val; 3039 } 3040 3041 return elem.getAttribute( name ); 3042}; 3043 3044find.error = function( msg ) { 3045 throw new Error( "Syntax error, unrecognized expression: " + msg ); 3046}; 3047 3048/** 3049 * Document sorting and removing duplicates 3050 * @param {ArrayLike} results 3051 */ 3052jQuery.uniqueSort = function( results ) { 3053 var elem, 3054 duplicates = [], 3055 j = 0, 3056 i = 0; 3057 3058 // Unless we *know* we can detect duplicates, assume their presence 3059 // 3060 // Support: Android <=4.0+ 3061 // Testing for detecting duplicates is unpredictable so instead assume we can't 3062 // depend on duplicate detection in all browsers without a stable sort. 3063 hasDuplicate = !support.sortStable; 3064 sortInput = !support.sortStable && slice.call( results, 0 ); 3065 sort.call( results, sortOrder ); 3066 3067 if ( hasDuplicate ) { 3068 while ( ( elem = results[ i++ ] ) ) { 3069 if ( elem === results[ i ] ) { 3070 j = duplicates.push( i ); 3071 } 3072 } 3073 while ( j-- ) { 3074 splice.call( results, duplicates[ j ], 1 ); 3075 } 3076 } 3077 3078 // Clear input after sorting to release objects 3079 // See https://github.com/jquery/sizzle/pull/225 3080 sortInput = null; 3081 3082 return results; 3083}; 3084 3085jQuery.fn.uniqueSort = function() { 3086 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 3087}; 3088 3089Expr = jQuery.expr = { 3090 3091 // Can be adjusted by the user 3092 cacheLength: 50, 3093 3094 createPseudo: markFunction, 3095 3096 match: matchExpr, 3097 3098 attrHandle: {}, 3099 3100 find: {}, 3101 3102 relative: { 3103 ">": { dir: "parentNode", first: true }, 3104 " ": { dir: "parentNode" }, 3105 "+": { dir: "previousSibling", first: true }, 3106 "~": { dir: "previousSibling" } 3107 }, 3108 3109 preFilter: { 3110 ATTR: function( match ) { 3111 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 3112 3113 // Move the given value to match[3] whether quoted or unquoted 3114 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 3115 .replace( runescape, funescape ); 3116 3117 if ( match[ 2 ] === "~=" ) { 3118 match[ 3 ] = " " + match[ 3 ] + " "; 3119 } 3120 3121 return match.slice( 0, 4 ); 3122 }, 3123 3124 CHILD: function( match ) { 3125 3126 /* matches from matchExpr["CHILD"] 3127 1 type (only|nth|...) 3128 2 what (child|of-type) 3129 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 3130 4 xn-component of xn+y argument ([+-]?\d*n|) 3131 5 sign of xn-component 3132 6 x of xn-component 3133 7 sign of y-component 3134 8 y of y-component 3135 */ 3136 match[ 1 ] = match[ 1 ].toLowerCase(); 3137 3138 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 3139 3140 // nth-* requires argument 3141 if ( !match[ 3 ] ) { 3142 find.error( match[ 0 ] ); 3143 } 3144 3145 // numeric x and y parameters for Expr.filter.CHILD 3146 // remember that false/true cast respectively to 0/1 3147 match[ 4 ] = +( match[ 4 ] ? 3148 match[ 5 ] + ( match[ 6 ] || 1 ) : 3149 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 3150 ); 3151 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 3152 3153 // other types prohibit arguments 3154 } else if ( match[ 3 ] ) { 3155 find.error( match[ 0 ] ); 3156 } 3157 3158 return match; 3159 }, 3160 3161 PSEUDO: function( match ) { 3162 var excess, 3163 unquoted = !match[ 6 ] && match[ 2 ]; 3164 3165 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 3166 return null; 3167 } 3168 3169 // Accept quoted arguments as-is 3170 if ( match[ 3 ] ) { 3171 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 3172 3173 // Strip excess characters from unquoted arguments 3174 } else if ( unquoted && rpseudo.test( unquoted ) && 3175 3176 // Get excess from tokenize (recursively) 3177 ( excess = tokenize( unquoted, true ) ) && 3178 3179 // advance to the next closing parenthesis 3180 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 3181 3182 // excess is a negative index 3183 match[ 0 ] = match[ 0 ].slice( 0, excess ); 3184 match[ 2 ] = unquoted.slice( 0, excess ); 3185 } 3186 3187 // Return only captures needed by the pseudo filter method (type and argument) 3188 return match.slice( 0, 3 ); 3189 } 3190 }, 3191 3192 filter: { 3193 3194 TAG: function( nodeNameSelector ) { 3195 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 3196 return nodeNameSelector === "*" ? 3197 function() { 3198 return true; 3199 } : 3200 function( elem ) { 3201 return nodeName( elem, expectedNodeName ); 3202 }; 3203 }, 3204 3205 CLASS: function( className ) { 3206 var pattern = classCache[ className + " " ]; 3207 3208 return pattern || 3209 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 3210 "(" + whitespace + "|$)" ) ) && 3211 classCache( className, function( elem ) { 3212 return pattern.test( 3213 typeof elem.className === "string" && elem.className || 3214 typeof elem.getAttribute !== "undefined" && 3215 elem.getAttribute( "class" ) || 3216 "" 3217 ); 3218 } ); 3219 }, 3220 3221 ATTR: function( name, operator, check ) { 3222 return function( elem ) { 3223 var result = find.attr( elem, name ); 3224 3225 if ( result == null ) { 3226 return operator === "!="; 3227 } 3228 if ( !operator ) { 3229 return true; 3230 } 3231 3232 result += ""; 3233 3234 if ( operator === "=" ) { 3235 return result === check; 3236 } 3237 if ( operator === "!=" ) { 3238 return result !== check; 3239 } 3240 if ( operator === "^=" ) { 3241 return check && result.indexOf( check ) === 0; 3242 } 3243 if ( operator === "*=" ) { 3244 return check && result.indexOf( check ) > -1; 3245 } 3246 if ( operator === "$=" ) { 3247 return check && result.slice( -check.length ) === check; 3248 } 3249 if ( operator === "~=" ) { 3250 return ( " " + result.replace( rwhitespace, " " ) + " " ) 3251 .indexOf( check ) > -1; 3252 } 3253 if ( operator === "|=" ) { 3254 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 3255 } 3256 3257 return false; 3258 }; 3259 }, 3260 3261 CHILD: function( type, what, _argument, first, last ) { 3262 var simple = type.slice( 0, 3 ) !== "nth", 3263 forward = type.slice( -4 ) !== "last", 3264 ofType = what === "of-type"; 3265 3266 return first === 1 && last === 0 ? 3267 3268 // Shortcut for :nth-*(n) 3269 function( elem ) { 3270 return !!elem.parentNode; 3271 } : 3272 3273 function( elem, _context, xml ) { 3274 var cache, outerCache, node, nodeIndex, start, 3275 dir = simple !== forward ? "nextSibling" : "previousSibling", 3276 parent = elem.parentNode, 3277 name = ofType && elem.nodeName.toLowerCase(), 3278 useCache = !xml && !ofType, 3279 diff = false; 3280 3281 if ( parent ) { 3282 3283 // :(first|last|only)-(child|of-type) 3284 if ( simple ) { 3285 while ( dir ) { 3286 node = elem; 3287 while ( ( node = node[ dir ] ) ) { 3288 if ( ofType ? 3289 nodeName( node, name ) : 3290 node.nodeType === 1 ) { 3291 3292 return false; 3293 } 3294 } 3295 3296 // Reverse direction for :only-* (if we haven't yet done so) 3297 start = dir = type === "only" && !start && "nextSibling"; 3298 } 3299 return true; 3300 } 3301 3302 start = [ forward ? parent.firstChild : parent.lastChild ]; 3303 3304 // non-xml :nth-child(...) stores cache data on `parent` 3305 if ( forward && useCache ) { 3306 3307 // Seek `elem` from a previously-cached index 3308 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 3309 cache = outerCache[ type ] || []; 3310 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 3311 diff = nodeIndex && cache[ 2 ]; 3312 node = nodeIndex && parent.childNodes[ nodeIndex ]; 3313 3314 while ( ( node = ++nodeIndex && node && node[ dir ] || 3315 3316 // Fallback to seeking `elem` from the start 3317 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 3318 3319 // When found, cache indexes on `parent` and break 3320 if ( node.nodeType === 1 && ++diff && node === elem ) { 3321 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 3322 break; 3323 } 3324 } 3325 3326 } else { 3327 3328 // Use previously-cached element index if available 3329 if ( useCache ) { 3330 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 3331 cache = outerCache[ type ] || []; 3332 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 3333 diff = nodeIndex; 3334 } 3335 3336 // xml :nth-child(...) 3337 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 3338 if ( diff === false ) { 3339 3340 // Use the same loop as above to seek `elem` from the start 3341 while ( ( node = ++nodeIndex && node && node[ dir ] || 3342 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 3343 3344 if ( ( ofType ? 3345 nodeName( node, name ) : 3346 node.nodeType === 1 ) && 3347 ++diff ) { 3348 3349 // Cache the index of each encountered element 3350 if ( useCache ) { 3351 outerCache = node[ expando ] || 3352 ( node[ expando ] = {} ); 3353 outerCache[ type ] = [ dirruns, diff ]; 3354 } 3355 3356 if ( node === elem ) { 3357 break; 3358 } 3359 } 3360 } 3361 } 3362 } 3363 3364 // Incorporate the offset, then check against cycle size 3365 diff -= last; 3366 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 3367 } 3368 }; 3369 }, 3370 3371 PSEUDO: function( pseudo, argument ) { 3372 3373 // pseudo-class names are case-insensitive 3374 // https://www.w3.org/TR/selectors/#pseudo-classes 3375 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 3376 // Remember that setFilters inherits from pseudos 3377 var args, 3378 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 3379 find.error( "unsupported pseudo: " + pseudo ); 3380 3381 // The user may use createPseudo to indicate that 3382 // arguments are needed to create the filter function 3383 // just as jQuery does 3384 if ( fn[ expando ] ) { 3385 return fn( argument ); 3386 } 3387 3388 // But maintain support for old signatures 3389 if ( fn.length > 1 ) { 3390 args = [ pseudo, pseudo, "", argument ]; 3391 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 3392 markFunction( function( seed, matches ) { 3393 var idx, 3394 matched = fn( seed, argument ), 3395 i = matched.length; 3396 while ( i-- ) { 3397 idx = indexOf.call( seed, matched[ i ] ); 3398 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 3399 } 3400 } ) : 3401 function( elem ) { 3402 return fn( elem, 0, args ); 3403 }; 3404 } 3405 3406 return fn; 3407 } 3408 }, 3409 3410 pseudos: { 3411 3412 // Potentially complex pseudos 3413 not: markFunction( function( selector ) { 3414 3415 // Trim the selector passed to compile 3416 // to avoid treating leading and trailing 3417 // spaces as combinators 3418 var input = [], 3419 results = [], 3420 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 3421 3422 return matcher[ expando ] ? 3423 markFunction( function( seed, matches, _context, xml ) { 3424 var elem, 3425 unmatched = matcher( seed, null, xml, [] ), 3426 i = seed.length; 3427 3428 // Match elements unmatched by `matcher` 3429 while ( i-- ) { 3430 if ( ( elem = unmatched[ i ] ) ) { 3431 seed[ i ] = !( matches[ i ] = elem ); 3432 } 3433 } 3434 } ) : 3435 function( elem, _context, xml ) { 3436 input[ 0 ] = elem; 3437 matcher( input, null, xml, results ); 3438 3439 // Don't keep the element 3440 // (see https://github.com/jquery/sizzle/issues/299) 3441 input[ 0 ] = null; 3442 return !results.pop(); 3443 }; 3444 } ), 3445 3446 has: markFunction( function( selector ) { 3447 return function( elem ) { 3448 return find( selector, elem ).length > 0; 3449 }; 3450 } ), 3451 3452 contains: markFunction( function( text ) { 3453 text = text.replace( runescape, funescape ); 3454 return function( elem ) { 3455 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 3456 }; 3457 } ), 3458 3459 // "Whether an element is represented by a :lang() selector 3460 // is based solely on the element's language value 3461 // being equal to the identifier C, 3462 // or beginning with the identifier C immediately followed by "-". 3463 // The matching of C against the element's language value is performed case-insensitively. 3464 // The identifier C does not have to be a valid language name." 3465 // https://www.w3.org/TR/selectors/#lang-pseudo 3466 lang: markFunction( function( lang ) { 3467 3468 // lang value must be a valid identifier 3469 if ( !ridentifier.test( lang || "" ) ) { 3470 find.error( "unsupported lang: " + lang ); 3471 } 3472 lang = lang.replace( runescape, funescape ).toLowerCase(); 3473 return function( elem ) { 3474 var elemLang; 3475 do { 3476 if ( ( elemLang = documentIsHTML ? 3477 elem.lang : 3478 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 3479 3480 elemLang = elemLang.toLowerCase(); 3481 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 3482 } 3483 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 3484 return false; 3485 }; 3486 } ), 3487 3488 // Miscellaneous 3489 target: function( elem ) { 3490 var hash = window.location && window.location.hash; 3491 return hash && hash.slice( 1 ) === elem.id; 3492 }, 3493 3494 root: function( elem ) { 3495 return elem === documentElement; 3496 }, 3497 3498 focus: function( elem ) { 3499 return elem === safeActiveElement() && 3500 document.hasFocus() && 3501 !!( elem.type || elem.href || ~elem.tabIndex ); 3502 }, 3503 3504 // Boolean properties 3505 enabled: createDisabledPseudo( false ), 3506 disabled: createDisabledPseudo( true ), 3507 3508 checked: function( elem ) { 3509 3510 // In CSS3, :checked should return both checked and selected elements 3511 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 3512 return ( nodeName( elem, "input" ) && !!elem.checked ) || 3513 ( nodeName( elem, "option" ) && !!elem.selected ); 3514 }, 3515 3516 selected: function( elem ) { 3517 3518 // Support: IE <=11+ 3519 // Accessing the selectedIndex property 3520 // forces the browser to treat the default option as 3521 // selected when in an optgroup. 3522 if ( elem.parentNode ) { 3523 // eslint-disable-next-line no-unused-expressions 3524 elem.parentNode.selectedIndex; 3525 } 3526 3527 return elem.selected === true; 3528 }, 3529 3530 // Contents 3531 empty: function( elem ) { 3532 3533 // https://www.w3.org/TR/selectors/#empty-pseudo 3534 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 3535 // but not by others (comment: 8; processing instruction: 7; etc.) 3536 // nodeType < 6 works because attributes (2) do not appear as children 3537 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 3538 if ( elem.nodeType < 6 ) { 3539 return false; 3540 } 3541 } 3542 return true; 3543 }, 3544 3545 parent: function( elem ) { 3546 return !Expr.pseudos.empty( elem ); 3547 }, 3548 3549 // Element/input types 3550 header: function( elem ) { 3551 return rheader.test( elem.nodeName ); 3552 }, 3553 3554 input: function( elem ) { 3555 return rinputs.test( elem.nodeName ); 3556 }, 3557 3558 button: function( elem ) { 3559 return nodeName( elem, "input" ) && elem.type === "button" || 3560 nodeName( elem, "button" ); 3561 }, 3562 3563 text: function( elem ) { 3564 var attr; 3565 return nodeName( elem, "input" ) && elem.type === "text" && 3566 3567 // Support: IE <10 only 3568 // New HTML5 attribute values (e.g., "search") appear 3569 // with elem.type === "text" 3570 ( ( attr = elem.getAttribute( "type" ) ) == null || 3571 attr.toLowerCase() === "text" ); 3572 }, 3573 3574 // Position-in-collection 3575 first: createPositionalPseudo( function() { 3576 return [ 0 ]; 3577 } ), 3578 3579 last: createPositionalPseudo( function( _matchIndexes, length ) { 3580 return [ length - 1 ]; 3581 } ), 3582 3583 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 3584 return [ argument < 0 ? argument + length : argument ]; 3585 } ), 3586 3587 even: createPositionalPseudo( function( matchIndexes, length ) { 3588 var i = 0; 3589 for ( ; i < length; i += 2 ) { 3590 matchIndexes.push( i ); 3591 } 3592 return matchIndexes; 3593 } ), 3594 3595 odd: createPositionalPseudo( function( matchIndexes, length ) { 3596 var i = 1; 3597 for ( ; i < length; i += 2 ) { 3598 matchIndexes.push( i ); 3599 } 3600 return matchIndexes; 3601 } ), 3602 3603 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 3604 var i; 3605 3606 if ( argument < 0 ) { 3607 i = argument + length; 3608 } else if ( argument > length ) { 3609 i = length; 3610 } else { 3611 i = argument; 3612 } 3613 3614 for ( ; --i >= 0; ) { 3615 matchIndexes.push( i ); 3616 } 3617 return matchIndexes; 3618 } ), 3619 3620 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 3621 var i = argument < 0 ? argument + length : argument; 3622 for ( ; ++i < length; ) { 3623 matchIndexes.push( i ); 3624 } 3625 return matchIndexes; 3626 } ) 3627 } 3628}; 3629 3630Expr.pseudos.nth = Expr.pseudos.eq; 3631 3632// Add button/input type pseudos 3633for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 3634 Expr.pseudos[ i ] = createInputPseudo( i ); 3635} 3636for ( i in { submit: true, reset: true } ) { 3637 Expr.pseudos[ i ] = createButtonPseudo( i ); 3638} 3639 3640// Easy API for creating new setFilters 3641function setFilters() {} 3642setFilters.prototype = Expr.filters = Expr.pseudos; 3643Expr.setFilters = new setFilters(); 3644 3645function tokenize( selector, parseOnly ) { 3646 var matched, match, tokens, type, 3647 soFar, groups, preFilters, 3648 cached = tokenCache[ selector + " " ]; 3649 3650 if ( cached ) { 3651 return parseOnly ? 0 : cached.slice( 0 ); 3652 } 3653 3654 soFar = selector; 3655 groups = []; 3656 preFilters = Expr.preFilter; 3657 3658 while ( soFar ) { 3659 3660 // Comma and first run 3661 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 3662 if ( match ) { 3663 3664 // Don't consume trailing commas as valid 3665 soFar = soFar.slice( match[ 0 ].length ) || soFar; 3666 } 3667 groups.push( ( tokens = [] ) ); 3668 } 3669 3670 matched = false; 3671 3672 // Combinators 3673 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 3674 matched = match.shift(); 3675 tokens.push( { 3676 value: matched, 3677 3678 // Cast descendant combinators to space 3679 type: match[ 0 ].replace( rtrimCSS, " " ) 3680 } ); 3681 soFar = soFar.slice( matched.length ); 3682 } 3683 3684 // Filters 3685 for ( type in Expr.filter ) { 3686 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 3687 ( match = preFilters[ type ]( match ) ) ) ) { 3688 matched = match.shift(); 3689 tokens.push( { 3690 value: matched, 3691 type: type, 3692 matches: match 3693 } ); 3694 soFar = soFar.slice( matched.length ); 3695 } 3696 } 3697 3698 if ( !matched ) { 3699 break; 3700 } 3701 } 3702 3703 // Return the length of the invalid excess 3704 // if we're just parsing 3705 // Otherwise, throw an error or return tokens 3706 if ( parseOnly ) { 3707 return soFar.length; 3708 } 3709 3710 return soFar ? 3711 find.error( selector ) : 3712 3713 // Cache the tokens 3714 tokenCache( selector, groups ).slice( 0 ); 3715} 3716 3717function toSelector( tokens ) { 3718 var i = 0, 3719 len = tokens.length, 3720 selector = ""; 3721 for ( ; i < len; i++ ) { 3722 selector += tokens[ i ].value; 3723 } 3724 return selector; 3725} 3726 3727function addCombinator( matcher, combinator, base ) { 3728 var dir = combinator.dir, 3729 skip = combinator.next, 3730 key = skip || dir, 3731 checkNonElements = base && key === "parentNode", 3732 doneName = done++; 3733 3734 return combinator.first ? 3735 3736 // Check against closest ancestor/preceding element 3737 function( elem, context, xml ) { 3738 while ( ( elem = elem[ dir ] ) ) { 3739 if ( elem.nodeType === 1 || checkNonElements ) { 3740 return matcher( elem, context, xml ); 3741 } 3742 } 3743 return false; 3744 } : 3745 3746 // Check against all ancestor/preceding elements 3747 function( elem, context, xml ) { 3748 var oldCache, outerCache, 3749 newCache = [ dirruns, doneName ]; 3750 3751 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 3752 if ( xml ) { 3753 while ( ( elem = elem[ dir ] ) ) { 3754 if ( elem.nodeType === 1 || checkNonElements ) { 3755 if ( matcher( elem, context, xml ) ) { 3756 return true; 3757 } 3758 } 3759 } 3760 } else { 3761 while ( ( elem = elem[ dir ] ) ) { 3762 if ( elem.nodeType === 1 || checkNonElements ) { 3763 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 3764 3765 if ( skip && nodeName( elem, skip ) ) { 3766 elem = elem[ dir ] || elem; 3767 } else if ( ( oldCache = outerCache[ key ] ) && 3768 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 3769 3770 // Assign to newCache so results back-propagate to previous elements 3771 return ( newCache[ 2 ] = oldCache[ 2 ] ); 3772 } else { 3773 3774 // Reuse newcache so results back-propagate to previous elements 3775 outerCache[ key ] = newCache; 3776 3777 // A match means we're done; a fail means we have to keep checking 3778 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 3779 return true; 3780 } 3781 } 3782 } 3783 } 3784 } 3785 return false; 3786 }; 3787} 3788 3789function elementMatcher( matchers ) { 3790 return matchers.length > 1 ? 3791 function( elem, context, xml ) { 3792 var i = matchers.length; 3793 while ( i-- ) { 3794 if ( !matchers[ i ]( elem, context, xml ) ) { 3795 return false; 3796 } 3797 } 3798 return true; 3799 } : 3800 matchers[ 0 ]; 3801} 3802 3803function multipleContexts( selector, contexts, results ) { 3804 var i = 0, 3805 len = contexts.length; 3806 for ( ; i < len; i++ ) { 3807 find( selector, contexts[ i ], results ); 3808 } 3809 return results; 3810} 3811 3812function condense( unmatched, map, filter, context, xml ) { 3813 var elem, 3814 newUnmatched = [], 3815 i = 0, 3816 len = unmatched.length, 3817 mapped = map != null; 3818 3819 for ( ; i < len; i++ ) { 3820 if ( ( elem = unmatched[ i ] ) ) { 3821 if ( !filter || filter( elem, context, xml ) ) { 3822 newUnmatched.push( elem ); 3823 if ( mapped ) { 3824 map.push( i ); 3825 } 3826 } 3827 } 3828 } 3829 3830 return newUnmatched; 3831} 3832 3833function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 3834 if ( postFilter && !postFilter[ expando ] ) { 3835 postFilter = setMatcher( postFilter ); 3836 } 3837 if ( postFinder && !postFinder[ expando ] ) { 3838 postFinder = setMatcher( postFinder, postSelector ); 3839 } 3840 return markFunction( function( seed, results, context, xml ) { 3841 var temp, i, elem, matcherOut, 3842 preMap = [], 3843 postMap = [], 3844 preexisting = results.length, 3845 3846 // Get initial elements from seed or context 3847 elems = seed || 3848 multipleContexts( selector || "*", 3849 context.nodeType ? [ context ] : context, [] ), 3850 3851 // Prefilter to get matcher input, preserving a map for seed-results synchronization 3852 matcherIn = preFilter && ( seed || !selector ) ? 3853 condense( elems, preMap, preFilter, context, xml ) : 3854 elems; 3855 3856 if ( matcher ) { 3857 3858 // If we have a postFinder, or filtered seed, or non-seed postFilter 3859 // or preexisting results, 3860 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 3861 3862 // ...intermediate processing is necessary 3863 [] : 3864 3865 // ...otherwise use results directly 3866 results; 3867 3868 // Find primary matches 3869 matcher( matcherIn, matcherOut, context, xml ); 3870 } else { 3871 matcherOut = matcherIn; 3872 } 3873 3874 // Apply postFilter 3875 if ( postFilter ) { 3876 temp = condense( matcherOut, postMap ); 3877 postFilter( temp, [], context, xml ); 3878 3879 // Un-match failing elements by moving them back to matcherIn 3880 i = temp.length; 3881 while ( i-- ) { 3882 if ( ( elem = temp[ i ] ) ) { 3883 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 3884 } 3885 } 3886 } 3887 3888 if ( seed ) { 3889 if ( postFinder || preFilter ) { 3890 if ( postFinder ) { 3891 3892 // Get the final matcherOut by condensing this intermediate into postFinder contexts 3893 temp = []; 3894 i = matcherOut.length; 3895 while ( i-- ) { 3896 if ( ( elem = matcherOut[ i ] ) ) { 3897 3898 // Restore matcherIn since elem is not yet a final match 3899 temp.push( ( matcherIn[ i ] = elem ) ); 3900 } 3901 } 3902 postFinder( null, ( matcherOut = [] ), temp, xml ); 3903 } 3904 3905 // Move matched elements from seed to results to keep them synchronized 3906 i = matcherOut.length; 3907 while ( i-- ) { 3908 if ( ( elem = matcherOut[ i ] ) && 3909 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 3910 3911 seed[ temp ] = !( results[ temp ] = elem ); 3912 } 3913 } 3914 } 3915 3916 // Add elements to results, through postFinder if defined 3917 } else { 3918 matcherOut = condense( 3919 matcherOut === results ? 3920 matcherOut.splice( preexisting, matcherOut.length ) : 3921 matcherOut 3922 ); 3923 if ( postFinder ) { 3924 postFinder( null, results, matcherOut, xml ); 3925 } else { 3926 push.apply( results, matcherOut ); 3927 } 3928 } 3929 } ); 3930} 3931 3932function matcherFromTokens( tokens ) { 3933 var checkContext, matcher, j, 3934 len = tokens.length, 3935 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 3936 implicitRelative = leadingRelative || Expr.relative[ " " ], 3937 i = leadingRelative ? 1 : 0, 3938 3939 // The foundational matcher ensures that elements are reachable from top-level context(s) 3940 matchContext = addCombinator( function( elem ) { 3941 return elem === checkContext; 3942 }, implicitRelative, true ), 3943 matchAnyContext = addCombinator( function( elem ) { 3944 return indexOf.call( checkContext, elem ) > -1; 3945 }, implicitRelative, true ), 3946 matchers = [ function( elem, context, xml ) { 3947 3948 // Support: IE 11+, Edge 17 - 18+ 3949 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3950 // two documents; shallow comparisons work. 3951 // eslint-disable-next-line eqeqeq 3952 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 3953 ( checkContext = context ).nodeType ? 3954 matchContext( elem, context, xml ) : 3955 matchAnyContext( elem, context, xml ) ); 3956 3957 // Avoid hanging onto element 3958 // (see https://github.com/jquery/sizzle/issues/299) 3959 checkContext = null; 3960 return ret; 3961 } ]; 3962 3963 for ( ; i < len; i++ ) { 3964 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 3965 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 3966 } else { 3967 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 3968 3969 // Return special upon seeing a positional matcher 3970 if ( matcher[ expando ] ) { 3971 3972 // Find the next relative operator (if any) for proper handling 3973 j = ++i; 3974 for ( ; j < len; j++ ) { 3975 if ( Expr.relative[ tokens[ j ].type ] ) { 3976 break; 3977 } 3978 } 3979 return setMatcher( 3980 i > 1 && elementMatcher( matchers ), 3981 i > 1 && toSelector( 3982 3983 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 3984 tokens.slice( 0, i - 1 ) 3985 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 3986 ).replace( rtrimCSS, "$1" ), 3987 matcher, 3988 i < j && matcherFromTokens( tokens.slice( i, j ) ), 3989 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 3990 j < len && toSelector( tokens ) 3991 ); 3992 } 3993 matchers.push( matcher ); 3994 } 3995 } 3996 3997 return elementMatcher( matchers ); 3998} 3999 4000function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 4001 var bySet = setMatchers.length > 0, 4002 byElement = elementMatchers.length > 0, 4003 superMatcher = function( seed, context, xml, results, outermost ) { 4004 var elem, j, matcher, 4005 matchedCount = 0, 4006 i = "0", 4007 unmatched = seed && [], 4008 setMatched = [], 4009 contextBackup = outermostContext, 4010 4011 // We must always have either seed elements or outermost context 4012 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 4013 4014 // Use integer dirruns iff this is the outermost matcher 4015 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 4016 len = elems.length; 4017 4018 if ( outermost ) { 4019 4020 // Support: IE 11+, Edge 17 - 18+ 4021 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4022 // two documents; shallow comparisons work. 4023 // eslint-disable-next-line eqeqeq 4024 outermostContext = context == document || context || outermost; 4025 } 4026 4027 // Add elements passing elementMatchers directly to results 4028 // Support: iOS <=7 - 9 only 4029 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 4030 // elements by id. (see trac-14142) 4031 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 4032 if ( byElement && elem ) { 4033 j = 0; 4034 4035 // Support: IE 11+, Edge 17 - 18+ 4036 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4037 // two documents; shallow comparisons work. 4038 // eslint-disable-next-line eqeqeq 4039 if ( !context && elem.ownerDocument != document ) { 4040 setDocument( elem ); 4041 xml = !documentIsHTML; 4042 } 4043 while ( ( matcher = elementMatchers[ j++ ] ) ) { 4044 if ( matcher( elem, context || document, xml ) ) { 4045 push.call( results, elem ); 4046 break; 4047 } 4048 } 4049 if ( outermost ) { 4050 dirruns = dirrunsUnique; 4051 } 4052 } 4053 4054 // Track unmatched elements for set filters 4055 if ( bySet ) { 4056 4057 // They will have gone through all possible matchers 4058 if ( ( elem = !matcher && elem ) ) { 4059 matchedCount--; 4060 } 4061 4062 // Lengthen the array for every element, matched or not 4063 if ( seed ) { 4064 unmatched.push( elem ); 4065 } 4066 } 4067 } 4068 4069 // `i` is now the count of elements visited above, and adding it to `matchedCount` 4070 // makes the latter nonnegative. 4071 matchedCount += i; 4072 4073 // Apply set filters to unmatched elements 4074 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 4075 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 4076 // no element matchers and no seed. 4077 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 4078 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 4079 // numerically zero. 4080 if ( bySet && i !== matchedCount ) { 4081 j = 0; 4082 while ( ( matcher = setMatchers[ j++ ] ) ) { 4083 matcher( unmatched, setMatched, context, xml ); 4084 } 4085 4086 if ( seed ) { 4087 4088 // Reintegrate element matches to eliminate the need for sorting 4089 if ( matchedCount > 0 ) { 4090 while ( i-- ) { 4091 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 4092 setMatched[ i ] = pop.call( results ); 4093 } 4094 } 4095 } 4096 4097 // Discard index placeholder values to get only actual matches 4098 setMatched = condense( setMatched ); 4099 } 4100 4101 // Add matches to results 4102 push.apply( results, setMatched ); 4103 4104 // Seedless set matches succeeding multiple successful matchers stipulate sorting 4105 if ( outermost && !seed && setMatched.length > 0 && 4106 ( matchedCount + setMatchers.length ) > 1 ) { 4107 4108 jQuery.uniqueSort( results ); 4109 } 4110 } 4111 4112 // Override manipulation of globals by nested matchers 4113 if ( outermost ) { 4114 dirruns = dirrunsUnique; 4115 outermostContext = contextBackup; 4116 } 4117 4118 return unmatched; 4119 }; 4120 4121 return bySet ? 4122 markFunction( superMatcher ) : 4123 superMatcher; 4124} 4125 4126function compile( selector, match /* Internal Use Only */ ) { 4127 var i, 4128 setMatchers = [], 4129 elementMatchers = [], 4130 cached = compilerCache[ selector + " " ]; 4131 4132 if ( !cached ) { 4133 4134 // Generate a function of recursive functions that can be used to check each element 4135 if ( !match ) { 4136 match = tokenize( selector ); 4137 } 4138 i = match.length; 4139 while ( i-- ) { 4140 cached = matcherFromTokens( match[ i ] ); 4141 if ( cached[ expando ] ) { 4142 setMatchers.push( cached ); 4143 } else { 4144 elementMatchers.push( cached ); 4145 } 4146 } 4147 4148 // Cache the compiled function 4149 cached = compilerCache( selector, 4150 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 4151 4152 // Save selector and tokenization 4153 cached.selector = selector; 4154 } 4155 return cached; 4156} 4157 4158/** 4159 * A low-level selection function that works with jQuery's compiled 4160 * selector functions 4161 * @param {String|Function} selector A selector or a pre-compiled 4162 * selector function built with jQuery selector compile 4163 * @param {Element} context 4164 * @param {Array} [results] 4165 * @param {Array} [seed] A set of elements to match against 4166 */ 4167function select( selector, context, results, seed ) { 4168 var i, tokens, token, type, find, 4169 compiled = typeof selector === "function" && selector, 4170 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 4171 4172 results = results || []; 4173 4174 // Try to minimize operations if there is only one selector in the list and no seed 4175 // (the latter of which guarantees us context) 4176 if ( match.length === 1 ) { 4177 4178 // Reduce context if the leading compound selector is an ID 4179 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 4180 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 4181 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 4182 4183 context = ( Expr.find.ID( 4184 token.matches[ 0 ].replace( runescape, funescape ), 4185 context 4186 ) || [] )[ 0 ]; 4187 if ( !context ) { 4188 return results; 4189 4190 // Precompiled matchers will still verify ancestry, so step up a level 4191 } else if ( compiled ) { 4192 context = context.parentNode; 4193 } 4194 4195 selector = selector.slice( tokens.shift().value.length ); 4196 } 4197 4198 // Fetch a seed set for right-to-left matching 4199 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 4200 while ( i-- ) { 4201 token = tokens[ i ]; 4202 4203 // Abort if we hit a combinator 4204 if ( Expr.relative[ ( type = token.type ) ] ) { 4205 break; 4206 } 4207 if ( ( find = Expr.find[ type ] ) ) { 4208 4209 // Search, expanding context for leading sibling combinators 4210 if ( ( seed = find( 4211 token.matches[ 0 ].replace( runescape, funescape ), 4212 rsibling.test( tokens[ 0 ].type ) && 4213 testContext( context.parentNode ) || context 4214 ) ) ) { 4215 4216 // If seed is empty or no tokens remain, we can return early 4217 tokens.splice( i, 1 ); 4218 selector = seed.length && toSelector( tokens ); 4219 if ( !selector ) { 4220 push.apply( results, seed ); 4221 return results; 4222 } 4223 4224 break; 4225 } 4226 } 4227 } 4228 } 4229 4230 // Compile and execute a filtering function if one is not provided 4231 // Provide `match` to avoid retokenization if we modified the selector above 4232 ( compiled || compile( selector, match ) )( 4233 seed, 4234 context, 4235 !documentIsHTML, 4236 results, 4237 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 4238 ); 4239 return results; 4240} 4241 4242// One-time assignments 4243 4244// Support: Android <=4.0 - 4.1+ 4245// Sort stability 4246support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 4247 4248// Initialize against the default document 4249setDocument(); 4250 4251// Support: Android <=4.0 - 4.1+ 4252// Detached nodes confoundingly follow *each other* 4253support.sortDetached = assert( function( el ) { 4254 4255 // Should return 1, but returns 4 (following) 4256 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 4257} ); 4258 4259jQuery.find = find; 4260 4261// Deprecated 4262jQuery.expr[ ":" ] = jQuery.expr.pseudos; 4263jQuery.unique = jQuery.uniqueSort; 4264 4265// These have always been private, but they used to be documented as part of 4266// Sizzle so let's maintain them for now for backwards compatibility purposes. 4267find.compile = compile; 4268find.select = select; 4269find.setDocument = setDocument; 4270find.tokenize = tokenize; 4271 4272find.escape = jQuery.escapeSelector; 4273find.getText = jQuery.text; 4274find.isXML = jQuery.isXMLDoc; 4275find.selectors = jQuery.expr; 4276find.support = jQuery.support; 4277find.uniqueSort = jQuery.uniqueSort; 4278 4279 /* eslint-enable */ 4280 4281} )(); 4282 4283 4284var dir = function( elem, dir, until ) { 4285 var matched = [], 4286 truncate = until !== undefined; 4287 4288 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 4289 if ( elem.nodeType === 1 ) { 4290 if ( truncate && jQuery( elem ).is( until ) ) { 4291 break; 4292 } 4293 matched.push( elem ); 4294 } 4295 } 4296 return matched; 4297}; 4298 4299 4300var siblings = function( n, elem ) { 4301 var matched = []; 4302 4303 for ( ; n; n = n.nextSibling ) { 4304 if ( n.nodeType === 1 && n !== elem ) { 4305 matched.push( n ); 4306 } 4307 } 4308 4309 return matched; 4310}; 4311 4312 4313var rneedsContext = jQuery.expr.match.needsContext; 4314 4315var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 4316 4317 4318 4319// Implement the identical functionality for filter and not 4320function winnow( elements, qualifier, not ) { 4321 if ( isFunction( qualifier ) ) { 4322 return jQuery.grep( elements, function( elem, i ) { 4323 return !!qualifier.call( elem, i, elem ) !== not; 4324 } ); 4325 } 4326 4327 // Single element 4328 if ( qualifier.nodeType ) { 4329 return jQuery.grep( elements, function( elem ) { 4330 return ( elem === qualifier ) !== not; 4331 } ); 4332 } 4333 4334 // Arraylike of elements (jQuery, arguments, Array) 4335 if ( typeof qualifier !== "string" ) { 4336 return jQuery.grep( elements, function( elem ) { 4337 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 4338 } ); 4339 } 4340 4341 // Filtered directly for both simple and complex selectors 4342 return jQuery.filter( qualifier, elements, not ); 4343} 4344 4345jQuery.filter = function( expr, elems, not ) { 4346 var elem = elems[ 0 ]; 4347 4348 if ( not ) { 4349 expr = ":not(" + expr + ")"; 4350 } 4351 4352 if ( elems.length === 1 && elem.nodeType === 1 ) { 4353 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 4354 } 4355 4356 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 4357 return elem.nodeType === 1; 4358 } ) ); 4359}; 4360 4361jQuery.fn.extend( { 4362 find: function( selector ) { 4363 var i, ret, 4364 len = this.length, 4365 self = this; 4366 4367 if ( typeof selector !== "string" ) { 4368 return this.pushStack( jQuery( selector ).filter( function() { 4369 for ( i = 0; i < len; i++ ) { 4370 if ( jQuery.contains( self[ i ], this ) ) { 4371 return true; 4372 } 4373 } 4374 } ) ); 4375 } 4376 4377 ret = this.pushStack( [] ); 4378 4379 for ( i = 0; i < len; i++ ) { 4380 jQuery.find( selector, self[ i ], ret ); 4381 } 4382 4383 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 4384 }, 4385 filter: function( selector ) { 4386 return this.pushStack( winnow( this, selector || [], false ) ); 4387 }, 4388 not: function( selector ) { 4389 return this.pushStack( winnow( this, selector || [], true ) ); 4390 }, 4391 is: function( selector ) { 4392 return !!winnow( 4393 this, 4394 4395 // If this is a positional/relative selector, check membership in the returned set 4396 // so $("p:first").is("p:last") won't return true for a doc with two "p". 4397 typeof selector === "string" && rneedsContext.test( selector ) ? 4398 jQuery( selector ) : 4399 selector || [], 4400 false 4401 ).length; 4402 } 4403} ); 4404 4405 4406// Initialize a jQuery object 4407 4408 4409// A central reference to the root jQuery(document) 4410var rootjQuery, 4411 4412 // A simple way to check for HTML strings 4413 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 4414 // Strict HTML recognition (trac-11290: must start with <) 4415 // Shortcut simple #id case for speed 4416 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 4417 4418 init = jQuery.fn.init = function( selector, context, root ) { 4419 var match, elem; 4420 4421 // HANDLE: $(""), $(null), $(undefined), $(false) 4422 if ( !selector ) { 4423 return this; 4424 } 4425 4426 // Method init() accepts an alternate rootjQuery 4427 // so migrate can support jQuery.sub (gh-2101) 4428 root = root || rootjQuery; 4429 4430 // Handle HTML strings 4431 if ( typeof selector === "string" ) { 4432 if ( selector[ 0 ] === "<" && 4433 selector[ selector.length - 1 ] === ">" && 4434 selector.length >= 3 ) { 4435 4436 // Assume that strings that start and end with <> are HTML and skip the regex check 4437 match = [ null, selector, null ]; 4438 4439 } else { 4440 match = rquickExpr.exec( selector ); 4441 } 4442 4443 // Match html or make sure no context is specified for #id 4444 if ( match && ( match[ 1 ] || !context ) ) { 4445 4446 // HANDLE: $(html) -> $(array) 4447 if ( match[ 1 ] ) { 4448 context = context instanceof jQuery ? context[ 0 ] : context; 4449 4450 // Option to run scripts is true for back-compat 4451 // Intentionally let the error be thrown if parseHTML is not present 4452 jQuery.merge( this, jQuery.parseHTML( 4453 match[ 1 ], 4454 context && context.nodeType ? context.ownerDocument || context : document, 4455 true 4456 ) ); 4457 4458 // HANDLE: $(html, props) 4459 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 4460 for ( match in context ) { 4461 4462 // Properties of context are called as methods if possible 4463 if ( isFunction( this[ match ] ) ) { 4464 this[ match ]( context[ match ] ); 4465 4466 // ...and otherwise set as attributes 4467 } else { 4468 this.attr( match, context[ match ] ); 4469 } 4470 } 4471 } 4472 4473 return this; 4474 4475 // HANDLE: $(#id) 4476 } else { 4477 elem = document.getElementById( match[ 2 ] ); 4478 4479 if ( elem ) { 4480 4481 // Inject the element directly into the jQuery object 4482 this[ 0 ] = elem; 4483 this.length = 1; 4484 } 4485 return this; 4486 } 4487 4488 // HANDLE: $(expr, $(...)) 4489 } else if ( !context || context.jquery ) { 4490 return ( context || root ).find( selector ); 4491 4492 // HANDLE: $(expr, context) 4493 // (which is just equivalent to: $(context).find(expr) 4494 } else { 4495 return this.constructor( context ).find( selector ); 4496 } 4497 4498 // HANDLE: $(DOMElement) 4499 } else if ( selector.nodeType ) { 4500 this[ 0 ] = selector; 4501 this.length = 1; 4502 return this; 4503 4504 // HANDLE: $(function) 4505 // Shortcut for document ready 4506 } else if ( isFunction( selector ) ) { 4507 return root.ready !== undefined ? 4508 root.ready( selector ) : 4509 4510 // Execute immediately if ready is not present 4511 selector( jQuery ); 4512 } 4513 4514 return jQuery.makeArray( selector, this ); 4515 }; 4516 4517// Give the init function the jQuery prototype for later instantiation 4518init.prototype = jQuery.fn; 4519 4520// Initialize central reference 4521rootjQuery = jQuery( document ); 4522 4523 4524var rparentsprev = /^(?:parents|prev(?:Until|All))/, 4525 4526 // Methods guaranteed to produce a unique set when starting from a unique set 4527 guaranteedUnique = { 4528 children: true, 4529 contents: true, 4530 next: true, 4531 prev: true 4532 }; 4533 4534jQuery.fn.extend( { 4535 has: function( target ) { 4536 var targets = jQuery( target, this ), 4537 l = targets.length; 4538 4539 return this.filter( function() { 4540 var i = 0; 4541 for ( ; i < l; i++ ) { 4542 if ( jQuery.contains( this, targets[ i ] ) ) { 4543 return true; 4544 } 4545 } 4546 } ); 4547 }, 4548 4549 closest: function( selectors, context ) { 4550 var cur, 4551 i = 0, 4552 l = this.length, 4553 matched = [], 4554 targets = typeof selectors !== "string" && jQuery( selectors ); 4555 4556 // Positional selectors never match, since there's no _selection_ context 4557 if ( !rneedsContext.test( selectors ) ) { 4558 for ( ; i < l; i++ ) { 4559 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 4560 4561 // Always skip document fragments 4562 if ( cur.nodeType < 11 && ( targets ? 4563 targets.index( cur ) > -1 : 4564 4565 // Don't pass non-elements to jQuery#find 4566 cur.nodeType === 1 && 4567 jQuery.find.matchesSelector( cur, selectors ) ) ) { 4568 4569 matched.push( cur ); 4570 break; 4571 } 4572 } 4573 } 4574 } 4575 4576 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 4577 }, 4578 4579 // Determine the position of an element within the set 4580 index: function( elem ) { 4581 4582 // No argument, return index in parent 4583 if ( !elem ) { 4584 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 4585 } 4586 4587 // Index in selector 4588 if ( typeof elem === "string" ) { 4589 return indexOf.call( jQuery( elem ), this[ 0 ] ); 4590 } 4591 4592 // Locate the position of the desired element 4593 return indexOf.call( this, 4594 4595 // If it receives a jQuery object, the first element is used 4596 elem.jquery ? elem[ 0 ] : elem 4597 ); 4598 }, 4599 4600 add: function( selector, context ) { 4601 return this.pushStack( 4602 jQuery.uniqueSort( 4603 jQuery.merge( this.get(), jQuery( selector, context ) ) 4604 ) 4605 ); 4606 }, 4607 4608 addBack: function( selector ) { 4609 return this.add( selector == null ? 4610 this.prevObject : this.prevObject.filter( selector ) 4611 ); 4612 } 4613} ); 4614 4615function sibling( cur, dir ) { 4616 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 4617 return cur; 4618} 4619 4620jQuery.each( { 4621 parent: function( elem ) { 4622 var parent = elem.parentNode; 4623 return parent && parent.nodeType !== 11 ? parent : null; 4624 }, 4625 parents: function( elem ) { 4626 return dir( elem, "parentNode" ); 4627 }, 4628 parentsUntil: function( elem, _i, until ) { 4629 return dir( elem, "parentNode", until ); 4630 }, 4631 next: function( elem ) { 4632 return sibling( elem, "nextSibling" ); 4633 }, 4634 prev: function( elem ) { 4635 return sibling( elem, "previousSibling" ); 4636 }, 4637 nextAll: function( elem ) { 4638 return dir( elem, "nextSibling" ); 4639 }, 4640 prevAll: function( elem ) { 4641 return dir( elem, "previousSibling" ); 4642 }, 4643 nextUntil: function( elem, _i, until ) { 4644 return dir( elem, "nextSibling", until ); 4645 }, 4646 prevUntil: function( elem, _i, until ) { 4647 return dir( elem, "previousSibling", until ); 4648 }, 4649 siblings: function( elem ) { 4650 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 4651 }, 4652 children: function( elem ) { 4653 return siblings( elem.firstChild ); 4654 }, 4655 contents: function( elem ) { 4656 if ( elem.contentDocument != null && 4657 4658 // Support: IE 11+ 4659 // <object> elements with no `data` attribute has an object 4660 // `contentDocument` with a `null` prototype. 4661 getProto( elem.contentDocument ) ) { 4662 4663 return elem.contentDocument; 4664 } 4665 4666 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 4667 // Treat the template element as a regular one in browsers that 4668 // don't support it. 4669 if ( nodeName( elem, "template" ) ) { 4670 elem = elem.content || elem; 4671 } 4672 4673 return jQuery.merge( [], elem.childNodes ); 4674 } 4675}, function( name, fn ) { 4676 jQuery.fn[ name ] = function( until, selector ) { 4677 var matched = jQuery.map( this, fn, until ); 4678 4679 if ( name.slice( -5 ) !== "Until" ) { 4680 selector = until; 4681 } 4682 4683 if ( selector && typeof selector === "string" ) { 4684 matched = jQuery.filter( selector, matched ); 4685 } 4686 4687 if ( this.length > 1 ) { 4688 4689 // Remove duplicates 4690 if ( !guaranteedUnique[ name ] ) { 4691 jQuery.uniqueSort( matched ); 4692 } 4693 4694 // Reverse order for parents* and prev-derivatives 4695 if ( rparentsprev.test( name ) ) { 4696 matched.reverse(); 4697 } 4698 } 4699 4700 return this.pushStack( matched ); 4701 }; 4702} ); 4703var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 4704 4705 4706 4707// Convert String-formatted options into Object-formatted ones 4708function createOptions( options ) { 4709 var object = {}; 4710 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 4711 object[ flag ] = true; 4712 } ); 4713 return object; 4714} 4715 4716/* 4717 * Create a callback list using the following parameters: 4718 * 4719 * options: an optional list of space-separated options that will change how 4720 * the callback list behaves or a more traditional option object 4721 * 4722 * By default a callback list will act like an event callback list and can be 4723 * "fired" multiple times. 4724 * 4725 * Possible options: 4726 * 4727 * once: will ensure the callback list can only be fired once (like a Deferred) 4728 * 4729 * memory: will keep track of previous values and will call any callback added 4730 * after the list has been fired right away with the latest "memorized" 4731 * values (like a Deferred) 4732 * 4733 * unique: will ensure a callback can only be added once (no duplicate in the list) 4734 * 4735 * stopOnFalse: interrupt callings when a callback returns false 4736 * 4737 */ 4738jQuery.Callbacks = function( options ) { 4739 4740 // Convert options from String-formatted to Object-formatted if needed 4741 // (we check in cache first) 4742 options = typeof options === "string" ? 4743 createOptions( options ) : 4744 jQuery.extend( {}, options ); 4745 4746 var // Flag to know if list is currently firing 4747 firing, 4748 4749 // Last fire value for non-forgettable lists 4750 memory, 4751 4752 // Flag to know if list was already fired 4753 fired, 4754 4755 // Flag to prevent firing 4756 locked, 4757 4758 // Actual callback list 4759 list = [], 4760 4761 // Queue of execution data for repeatable lists 4762 queue = [], 4763 4764 // Index of currently firing callback (modified by add/remove as needed) 4765 firingIndex = -1, 4766 4767 // Fire callbacks 4768 fire = function() { 4769 4770 // Enforce single-firing 4771 locked = locked || options.once; 4772 4773 // Execute callbacks for all pending executions, 4774 // respecting firingIndex overrides and runtime changes 4775 fired = firing = true; 4776 for ( ; queue.length; firingIndex = -1 ) { 4777 memory = queue.shift(); 4778 while ( ++firingIndex < list.length ) { 4779 4780 // Run callback and check for early termination 4781 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 4782 options.stopOnFalse ) { 4783 4784 // Jump to end and forget the data so .add doesn't re-fire 4785 firingIndex = list.length; 4786 memory = false; 4787 } 4788 } 4789 } 4790 4791 // Forget the data if we're done with it 4792 if ( !options.memory ) { 4793 memory = false; 4794 } 4795 4796 firing = false; 4797 4798 // Clean up if we're done firing for good 4799 if ( locked ) { 4800 4801 // Keep an empty list if we have data for future add calls 4802 if ( memory ) { 4803 list = []; 4804 4805 // Otherwise, this object is spent 4806 } else { 4807 list = ""; 4808 } 4809 } 4810 }, 4811 4812 // Actual Callbacks object 4813 self = { 4814 4815 // Add a callback or a collection of callbacks to the list 4816 add: function() { 4817 if ( list ) { 4818 4819 // If we have memory from a past run, we should fire after adding 4820 if ( memory && !firing ) { 4821 firingIndex = list.length - 1; 4822 queue.push( memory ); 4823 } 4824 4825 ( function add( args ) { 4826 jQuery.each( args, function( _, arg ) { 4827 if ( isFunction( arg ) ) { 4828 if ( !options.unique || !self.has( arg ) ) { 4829 list.push( arg ); 4830 } 4831 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 4832 4833 // Inspect recursively 4834 add( arg ); 4835 } 4836 } ); 4837 } )( arguments ); 4838 4839 if ( memory && !firing ) { 4840 fire(); 4841 } 4842 } 4843 return this; 4844 }, 4845 4846 // Remove a callback from the list 4847 remove: function() { 4848 jQuery.each( arguments, function( _, arg ) { 4849 var index; 4850 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 4851 list.splice( index, 1 ); 4852 4853 // Handle firing indexes 4854 if ( index <= firingIndex ) { 4855 firingIndex--; 4856 } 4857 } 4858 } ); 4859 return this; 4860 }, 4861 4862 // Check if a given callback is in the list. 4863 // If no argument is given, return whether or not list has callbacks attached. 4864 has: function( fn ) { 4865 return fn ? 4866 jQuery.inArray( fn, list ) > -1 : 4867 list.length > 0; 4868 }, 4869 4870 // Remove all callbacks from the list 4871 empty: function() { 4872 if ( list ) { 4873 list = []; 4874 } 4875 return this; 4876 }, 4877 4878 // Disable .fire and .add 4879 // Abort any current/pending executions 4880 // Clear all callbacks and values 4881 disable: function() { 4882 locked = queue = []; 4883 list = memory = ""; 4884 return this; 4885 }, 4886 disabled: function() { 4887 return !list; 4888 }, 4889 4890 // Disable .fire 4891 // Also disable .add unless we have memory (since it would have no effect) 4892 // Abort any pending executions 4893 lock: function() { 4894 locked = queue = []; 4895 if ( !memory && !firing ) { 4896 list = memory = ""; 4897 } 4898 return this; 4899 }, 4900 locked: function() { 4901 return !!locked; 4902 }, 4903 4904 // Call all callbacks with the given context and arguments 4905 fireWith: function( context, args ) { 4906 if ( !locked ) { 4907 args = args || []; 4908 args = [ context, args.slice ? args.slice() : args ]; 4909 queue.push( args ); 4910 if ( !firing ) { 4911 fire(); 4912 } 4913 } 4914 return this; 4915 }, 4916 4917 // Call all the callbacks with the given arguments 4918 fire: function() { 4919 self.fireWith( this, arguments ); 4920 return this; 4921 }, 4922 4923 // To know if the callbacks have already been called at least once 4924 fired: function() { 4925 return !!fired; 4926 } 4927 }; 4928 4929 return self; 4930}; 4931 4932 4933function Identity( v ) { 4934 return v; 4935} 4936function Thrower( ex ) { 4937 throw ex; 4938} 4939 4940function adoptValue( value, resolve, reject, noValue ) { 4941 var method; 4942 4943 try { 4944 4945 // Check for promise aspect first to privilege synchronous behavior 4946 if ( value && isFunction( ( method = value.promise ) ) ) { 4947 method.call( value ).done( resolve ).fail( reject ); 4948 4949 // Other thenables 4950 } else if ( value && isFunction( ( method = value.then ) ) ) { 4951 method.call( value, resolve, reject ); 4952 4953 // Other non-thenables 4954 } else { 4955 4956 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 4957 // * false: [ value ].slice( 0 ) => resolve( value ) 4958 // * true: [ value ].slice( 1 ) => resolve() 4959 resolve.apply( undefined, [ value ].slice( noValue ) ); 4960 } 4961 4962 // For Promises/A+, convert exceptions into rejections 4963 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 4964 // Deferred#then to conditionally suppress rejection. 4965 } catch ( value ) { 4966 4967 // Support: Android 4.0 only 4968 // Strict mode functions invoked without .call/.apply get global-object context 4969 reject.apply( undefined, [ value ] ); 4970 } 4971} 4972 4973jQuery.extend( { 4974 4975 Deferred: function( func ) { 4976 var tuples = [ 4977 4978 // action, add listener, callbacks, 4979 // ... .then handlers, argument index, [final state] 4980 [ "notify", "progress", jQuery.Callbacks( "memory" ), 4981 jQuery.Callbacks( "memory" ), 2 ], 4982 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 4983 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 4984 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 4985 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 4986 ], 4987 state = "pending", 4988 promise = { 4989 state: function() { 4990 return state; 4991 }, 4992 always: function() { 4993 deferred.done( arguments ).fail( arguments ); 4994 return this; 4995 }, 4996 "catch": function( fn ) { 4997 return promise.then( null, fn ); 4998 }, 4999 5000 // Keep pipe for back-compat 5001 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 5002 var fns = arguments; 5003 5004 return jQuery.Deferred( function( newDefer ) { 5005 jQuery.each( tuples, function( _i, tuple ) { 5006 5007 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 5008 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 5009 5010 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 5011 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 5012 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 5013 deferred[ tuple[ 1 ] ]( function() { 5014 var returned = fn && fn.apply( this, arguments ); 5015 if ( returned && isFunction( returned.promise ) ) { 5016 returned.promise() 5017 .progress( newDefer.notify ) 5018 .done( newDefer.resolve ) 5019 .fail( newDefer.reject ); 5020 } else { 5021 newDefer[ tuple[ 0 ] + "With" ]( 5022 this, 5023 fn ? [ returned ] : arguments 5024 ); 5025 } 5026 } ); 5027 } ); 5028 fns = null; 5029 } ).promise(); 5030 }, 5031 then: function( onFulfilled, onRejected, onProgress ) { 5032 var maxDepth = 0; 5033 function resolve( depth, deferred, handler, special ) { 5034 return function() { 5035 var that = this, 5036 args = arguments, 5037 mightThrow = function() { 5038 var returned, then; 5039 5040 // Support: Promises/A+ section 2.3.3.3.3 5041 // https://promisesaplus.com/#point-59 5042 // Ignore double-resolution attempts 5043 if ( depth < maxDepth ) { 5044 return; 5045 } 5046 5047 returned = handler.apply( that, args ); 5048 5049 // Support: Promises/A+ section 2.3.1 5050 // https://promisesaplus.com/#point-48 5051 if ( returned === deferred.promise() ) { 5052 throw new TypeError( "Thenable self-resolution" ); 5053 } 5054 5055 // Support: Promises/A+ sections 2.3.3.1, 3.5 5056 // https://promisesaplus.com/#point-54 5057 // https://promisesaplus.com/#point-75 5058 // Retrieve `then` only once 5059 then = returned && 5060 5061 // Support: Promises/A+ section 2.3.4 5062 // https://promisesaplus.com/#point-64 5063 // Only check objects and functions for thenability 5064 ( typeof returned === "object" || 5065 typeof returned === "function" ) && 5066 returned.then; 5067 5068 // Handle a returned thenable 5069 if ( isFunction( then ) ) { 5070 5071 // Special processors (notify) just wait for resolution 5072 if ( special ) { 5073 then.call( 5074 returned, 5075 resolve( maxDepth, deferred, Identity, special ), 5076 resolve( maxDepth, deferred, Thrower, special ) 5077 ); 5078 5079 // Normal processors (resolve) also hook into progress 5080 } else { 5081 5082 // ...and disregard older resolution values 5083 maxDepth++; 5084 5085 then.call( 5086 returned, 5087 resolve( maxDepth, deferred, Identity, special ), 5088 resolve( maxDepth, deferred, Thrower, special ), 5089 resolve( maxDepth, deferred, Identity, 5090 deferred.notifyWith ) 5091 ); 5092 } 5093 5094 // Handle all other returned values 5095 } else { 5096 5097 // Only substitute handlers pass on context 5098 // and multiple values (non-spec behavior) 5099 if ( handler !== Identity ) { 5100 that = undefined; 5101 args = [ returned ]; 5102 } 5103 5104 // Process the value(s) 5105 // Default process is resolve 5106 ( special || deferred.resolveWith )( that, args ); 5107 } 5108 }, 5109 5110 // Only normal processors (resolve) catch and reject exceptions 5111 process = special ? 5112 mightThrow : 5113 function() { 5114 try { 5115 mightThrow(); 5116 } catch ( e ) { 5117 5118 if ( jQuery.Deferred.exceptionHook ) { 5119 jQuery.Deferred.exceptionHook( e, 5120 process.error ); 5121 } 5122 5123 // Support: Promises/A+ section 2.3.3.3.4.1 5124 // https://promisesaplus.com/#point-61 5125 // Ignore post-resolution exceptions 5126 if ( depth + 1 >= maxDepth ) { 5127 5128 // Only substitute handlers pass on context 5129 // and multiple values (non-spec behavior) 5130 if ( handler !== Thrower ) { 5131 that = undefined; 5132 args = [ e ]; 5133 } 5134 5135 deferred.rejectWith( that, args ); 5136 } 5137 } 5138 }; 5139 5140 // Support: Promises/A+ section 2.3.3.3.1 5141 // https://promisesaplus.com/#point-57 5142 // Re-resolve promises immediately to dodge false rejection from 5143 // subsequent errors 5144 if ( depth ) { 5145 process(); 5146 } else { 5147 5148 // Call an optional hook to record the error, in case of exception 5149 // since it's otherwise lost when execution goes async 5150 if ( jQuery.Deferred.getErrorHook ) { 5151 process.error = jQuery.Deferred.getErrorHook(); 5152 5153 // The deprecated alias of the above. While the name suggests 5154 // returning the stack, not an error instance, jQuery just passes 5155 // it directly to `console.warn` so both will work; an instance 5156 // just better cooperates with source maps. 5157 } else if ( jQuery.Deferred.getStackHook ) { 5158 process.error = jQuery.Deferred.getStackHook(); 5159 } 5160 window.setTimeout( process ); 5161 } 5162 }; 5163 } 5164 5165 return jQuery.Deferred( function( newDefer ) { 5166 5167 // progress_handlers.add( ... ) 5168 tuples[ 0 ][ 3 ].add( 5169 resolve( 5170 0, 5171 newDefer, 5172 isFunction( onProgress ) ? 5173 onProgress : 5174 Identity, 5175 newDefer.notifyWith 5176 ) 5177 ); 5178 5179 // fulfilled_handlers.add( ... ) 5180 tuples[ 1 ][ 3 ].add( 5181 resolve( 5182 0, 5183 newDefer, 5184 isFunction( onFulfilled ) ? 5185 onFulfilled : 5186 Identity 5187 ) 5188 ); 5189 5190 // rejected_handlers.add( ... ) 5191 tuples[ 2 ][ 3 ].add( 5192 resolve( 5193 0, 5194 newDefer, 5195 isFunction( onRejected ) ? 5196 onRejected : 5197 Thrower 5198 ) 5199 ); 5200 } ).promise(); 5201 }, 5202 5203 // Get a promise for this deferred 5204 // If obj is provided, the promise aspect is added to the object 5205 promise: function( obj ) { 5206 return obj != null ? jQuery.extend( obj, promise ) : promise; 5207 } 5208 }, 5209 deferred = {}; 5210 5211 // Add list-specific methods 5212 jQuery.each( tuples, function( i, tuple ) { 5213 var list = tuple[ 2 ], 5214 stateString = tuple[ 5 ]; 5215 5216 // promise.progress = list.add 5217 // promise.done = list.add 5218 // promise.fail = list.add 5219 promise[ tuple[ 1 ] ] = list.add; 5220 5221 // Handle state 5222 if ( stateString ) { 5223 list.add( 5224 function() { 5225 5226 // state = "resolved" (i.e., fulfilled) 5227 // state = "rejected" 5228 state = stateString; 5229 }, 5230 5231 // rejected_callbacks.disable 5232 // fulfilled_callbacks.disable 5233 tuples[ 3 - i ][ 2 ].disable, 5234 5235 // rejected_handlers.disable 5236 // fulfilled_handlers.disable 5237 tuples[ 3 - i ][ 3 ].disable, 5238 5239 // progress_callbacks.lock 5240 tuples[ 0 ][ 2 ].lock, 5241 5242 // progress_handlers.lock 5243 tuples[ 0 ][ 3 ].lock 5244 ); 5245 } 5246 5247 // progress_handlers.fire 5248 // fulfilled_handlers.fire 5249 // rejected_handlers.fire 5250 list.add( tuple[ 3 ].fire ); 5251 5252 // deferred.notify = function() { deferred.notifyWith(...) } 5253 // deferred.resolve = function() { deferred.resolveWith(...) } 5254 // deferred.reject = function() { deferred.rejectWith(...) } 5255 deferred[ tuple[ 0 ] ] = function() { 5256 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 5257 return this; 5258 }; 5259 5260 // deferred.notifyWith = list.fireWith 5261 // deferred.resolveWith = list.fireWith 5262 // deferred.rejectWith = list.fireWith 5263 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 5264 } ); 5265 5266 // Make the deferred a promise 5267 promise.promise( deferred ); 5268 5269 // Call given func if any 5270 if ( func ) { 5271 func.call( deferred, deferred ); 5272 } 5273 5274 // All done! 5275 return deferred; 5276 }, 5277 5278 // Deferred helper 5279 when: function( singleValue ) { 5280 var 5281 5282 // count of uncompleted subordinates 5283 remaining = arguments.length, 5284 5285 // count of unprocessed arguments 5286 i = remaining, 5287 5288 // subordinate fulfillment data 5289 resolveContexts = Array( i ), 5290 resolveValues = slice.call( arguments ), 5291 5292 // the primary Deferred 5293 primary = jQuery.Deferred(), 5294 5295 // subordinate callback factory 5296 updateFunc = function( i ) { 5297 return function( value ) { 5298 resolveContexts[ i ] = this; 5299 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 5300 if ( !( --remaining ) ) { 5301 primary.resolveWith( resolveContexts, resolveValues ); 5302 } 5303 }; 5304 }; 5305 5306 // Single- and empty arguments are adopted like Promise.resolve 5307 if ( remaining <= 1 ) { 5308 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 5309 !remaining ); 5310 5311 // Use .then() to unwrap secondary thenables (cf. gh-3000) 5312 if ( primary.state() === "pending" || 5313 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 5314 5315 return primary.then(); 5316 } 5317 } 5318 5319 // Multiple arguments are aggregated like Promise.all array elements 5320 while ( i-- ) { 5321 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 5322 } 5323 5324 return primary.promise(); 5325 } 5326} ); 5327 5328 5329// These usually indicate a programmer mistake during development, 5330// warn about them ASAP rather than swallowing them by default. 5331var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 5332 5333// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 5334// captured before the async barrier to get the original error cause 5335// which may otherwise be hidden. 5336jQuery.Deferred.exceptionHook = function( error, asyncError ) { 5337 5338 // Support: IE 8 - 9 only 5339 // Console exists when dev tools are open, which can happen at any time 5340 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 5341 window.console.warn( "jQuery.Deferred exception: " + error.message, 5342 error.stack, asyncError ); 5343 } 5344}; 5345 5346 5347 5348 5349jQuery.readyException = function( error ) { 5350 window.setTimeout( function() { 5351 throw error; 5352 } ); 5353}; 5354 5355 5356 5357 5358// The deferred used on DOM ready 5359var readyList = jQuery.Deferred(); 5360 5361jQuery.fn.ready = function( fn ) { 5362 5363 readyList 5364 .then( fn ) 5365 5366 // Wrap jQuery.readyException in a function so that the lookup 5367 // happens at the time of error handling instead of callback 5368 // registration. 5369 .catch( function( error ) { 5370 jQuery.readyException( error ); 5371 } ); 5372 5373 return this; 5374}; 5375 5376jQuery.extend( { 5377 5378 // Is the DOM ready to be used? Set to true once it occurs. 5379 isReady: false, 5380 5381 // A counter to track how many items to wait for before 5382 // the ready event fires. See trac-6781 5383 readyWait: 1, 5384 5385 // Handle when the DOM is ready 5386 ready: function( wait ) { 5387 5388 // Abort if there are pending holds or we're already ready 5389 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 5390 return; 5391 } 5392 5393 // Remember that the DOM is ready 5394 jQuery.isReady = true; 5395 5396 // If a normal DOM Ready event fired, decrement, and wait if need be 5397 if ( wait !== true && --jQuery.readyWait > 0 ) { 5398 return; 5399 } 5400 5401 // If there are functions bound, to execute 5402 readyList.resolveWith( document, [ jQuery ] ); 5403 } 5404} ); 5405 5406jQuery.ready.then = readyList.then; 5407 5408// The ready event handler and self cleanup method 5409function completed() { 5410 document.removeEventListener( "DOMContentLoaded", completed ); 5411 window.removeEventListener( "load", completed ); 5412 jQuery.ready(); 5413} 5414 5415// Catch cases where $(document).ready() is called 5416// after the browser event has already occurred. 5417// Support: IE <=9 - 10 only 5418// Older IE sometimes signals "interactive" too soon 5419if ( document.readyState === "complete" || 5420 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 5421 5422 // Handle it asynchronously to allow scripts the opportunity to delay ready 5423 window.setTimeout( jQuery.ready ); 5424 5425} else { 5426 5427 // Use the handy event callback 5428 document.addEventListener( "DOMContentLoaded", completed ); 5429 5430 // A fallback to window.onload, that will always work 5431 window.addEventListener( "load", completed ); 5432} 5433 5434 5435 5436 5437// Multifunctional method to get and set values of a collection 5438// The value/s can optionally be executed if it's a function 5439var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 5440 var i = 0, 5441 len = elems.length, 5442 bulk = key == null; 5443 5444 // Sets many values 5445 if ( toType( key ) === "object" ) { 5446 chainable = true; 5447 for ( i in key ) { 5448 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 5449 } 5450 5451 // Sets one value 5452 } else if ( value !== undefined ) { 5453 chainable = true; 5454 5455 if ( !isFunction( value ) ) { 5456 raw = true; 5457 } 5458 5459 if ( bulk ) { 5460 5461 // Bulk operations run against the entire set 5462 if ( raw ) { 5463 fn.call( elems, value ); 5464 fn = null; 5465 5466 // ...except when executing function values 5467 } else { 5468 bulk = fn; 5469 fn = function( elem, _key, value ) { 5470 return bulk.call( jQuery( elem ), value ); 5471 }; 5472 } 5473 } 5474 5475 if ( fn ) { 5476 for ( ; i < len; i++ ) { 5477 fn( 5478 elems[ i ], key, raw ? 5479 value : 5480 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 5481 ); 5482 } 5483 } 5484 } 5485 5486 if ( chainable ) { 5487 return elems; 5488 } 5489 5490 // Gets 5491 if ( bulk ) { 5492 return fn.call( elems ); 5493 } 5494 5495 return len ? fn( elems[ 0 ], key ) : emptyGet; 5496}; 5497 5498 5499// Matches dashed string for camelizing 5500var rmsPrefix = /^-ms-/, 5501 rdashAlpha = /-([a-z])/g; 5502 5503// Used by camelCase as callback to replace() 5504function fcamelCase( _all, letter ) { 5505 return letter.toUpperCase(); 5506} 5507 5508// Convert dashed to camelCase; used by the css and data modules 5509// Support: IE <=9 - 11, Edge 12 - 15 5510// Microsoft forgot to hump their vendor prefix (trac-9572) 5511function camelCase( string ) { 5512 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 5513} 5514var acceptData = function( owner ) { 5515 5516 // Accepts only: 5517 // - Node 5518 // - Node.ELEMENT_NODE 5519 // - Node.DOCUMENT_NODE 5520 // - Object 5521 // - Any 5522 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 5523}; 5524 5525 5526 5527 5528function Data() { 5529 this.expando = jQuery.expando + Data.uid++; 5530} 5531 5532Data.uid = 1; 5533 5534Data.prototype = { 5535 5536 cache: function( owner ) { 5537 5538 // Check if the owner object already has a cache 5539 var value = owner[ this.expando ]; 5540 5541 // If not, create one 5542 if ( !value ) { 5543 value = {}; 5544 5545 // We can accept data for non-element nodes in modern browsers, 5546 // but we should not, see trac-8335. 5547 // Always return an empty object. 5548 if ( acceptData( owner ) ) { 5549 5550 // If it is a node unlikely to be stringify-ed or looped over 5551 // use plain assignment 5552 if ( owner.nodeType ) { 5553 owner[ this.expando ] = value; 5554 5555 // Otherwise secure it in a non-enumerable property 5556 // configurable must be true to allow the property to be 5557 // deleted when data is removed 5558 } else { 5559 Object.defineProperty( owner, this.expando, { 5560 value: value, 5561 configurable: true 5562 } ); 5563 } 5564 } 5565 } 5566 5567 return value; 5568 }, 5569 set: function( owner, data, value ) { 5570 var prop, 5571 cache = this.cache( owner ); 5572 5573 // Handle: [ owner, key, value ] args 5574 // Always use camelCase key (gh-2257) 5575 if ( typeof data === "string" ) { 5576 cache[ camelCase( data ) ] = value; 5577 5578 // Handle: [ owner, { properties } ] args 5579 } else { 5580 5581 // Copy the properties one-by-one to the cache object 5582 for ( prop in data ) { 5583 cache[ camelCase( prop ) ] = data[ prop ]; 5584 } 5585 } 5586 return cache; 5587 }, 5588 get: function( owner, key ) { 5589 return key === undefined ? 5590 this.cache( owner ) : 5591 5592 // Always use camelCase key (gh-2257) 5593 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 5594 }, 5595 access: function( owner, key, value ) { 5596 5597 // In cases where either: 5598 // 5599 // 1. No key was specified 5600 // 2. A string key was specified, but no value provided 5601 // 5602 // Take the "read" path and allow the get method to determine 5603 // which value to return, respectively either: 5604 // 5605 // 1. The entire cache object 5606 // 2. The data stored at the key 5607 // 5608 if ( key === undefined || 5609 ( ( key && typeof key === "string" ) && value === undefined ) ) { 5610 5611 return this.get( owner, key ); 5612 } 5613 5614 // When the key is not a string, or both a key and value 5615 // are specified, set or extend (existing objects) with either: 5616 // 5617 // 1. An object of properties 5618 // 2. A key and value 5619 // 5620 this.set( owner, key, value ); 5621 5622 // Since the "set" path can have two possible entry points 5623 // return the expected data based on which path was taken[*] 5624 return value !== undefined ? value : key; 5625 }, 5626 remove: function( owner, key ) { 5627 var i, 5628 cache = owner[ this.expando ]; 5629 5630 if ( cache === undefined ) { 5631 return; 5632 } 5633 5634 if ( key !== undefined ) { 5635 5636 // Support array or space separated string of keys 5637 if ( Array.isArray( key ) ) { 5638 5639 // If key is an array of keys... 5640 // We always set camelCase keys, so remove that. 5641 key = key.map( camelCase ); 5642 } else { 5643 key = camelCase( key ); 5644 5645 // If a key with the spaces exists, use it. 5646 // Otherwise, create an array by matching non-whitespace 5647 key = key in cache ? 5648 [ key ] : 5649 ( key.match( rnothtmlwhite ) || [] ); 5650 } 5651 5652 i = key.length; 5653 5654 while ( i-- ) { 5655 delete cache[ key[ i ] ]; 5656 } 5657 } 5658 5659 // Remove the expando if there's no more data 5660 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 5661 5662 // Support: Chrome <=35 - 45 5663 // Webkit & Blink performance suffers when deleting properties 5664 // from DOM nodes, so set to undefined instead 5665 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 5666 if ( owner.nodeType ) { 5667 owner[ this.expando ] = undefined; 5668 } else { 5669 delete owner[ this.expando ]; 5670 } 5671 } 5672 }, 5673 hasData: function( owner ) { 5674 var cache = owner[ this.expando ]; 5675 return cache !== undefined && !jQuery.isEmptyObject( cache ); 5676 } 5677}; 5678var dataPriv = new Data(); 5679 5680var dataUser = new Data(); 5681 5682 5683 5684// Implementation Summary 5685// 5686// 1. Enforce API surface and semantic compatibility with 1.9.x branch 5687// 2. Improve the module's maintainability by reducing the storage 5688// paths to a single mechanism. 5689// 3. Use the same single mechanism to support "private" and "user" data. 5690// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 5691// 5. Avoid exposing implementation details on user objects (eg. expando properties) 5692// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 5693 5694var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 5695 rmultiDash = /[A-Z]/g; 5696 5697function getData( data ) { 5698 if ( data === "true" ) { 5699 return true; 5700 } 5701 5702 if ( data === "false" ) { 5703 return false; 5704 } 5705 5706 if ( data === "null" ) { 5707 return null; 5708 } 5709 5710 // Only convert to a number if it doesn't change the string 5711 if ( data === +data + "" ) { 5712 return +data; 5713 } 5714 5715 if ( rbrace.test( data ) ) { 5716 return JSON.parse( data ); 5717 } 5718 5719 return data; 5720} 5721 5722function dataAttr( elem, key, data ) { 5723 var name; 5724 5725 // If nothing was found internally, try to fetch any 5726 // data from the HTML5 data-* attribute 5727 if ( data === undefined && elem.nodeType === 1 ) { 5728 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 5729 data = elem.getAttribute( name ); 5730 5731 if ( typeof data === "string" ) { 5732 try { 5733 data = getData( data ); 5734 } catch ( e ) {} 5735 5736 // Make sure we set the data so it isn't changed later 5737 dataUser.set( elem, key, data ); 5738 } else { 5739 data = undefined; 5740 } 5741 } 5742 return data; 5743} 5744 5745jQuery.extend( { 5746 hasData: function( elem ) { 5747 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 5748 }, 5749 5750 data: function( elem, name, data ) { 5751 return dataUser.access( elem, name, data ); 5752 }, 5753 5754 removeData: function( elem, name ) { 5755 dataUser.remove( elem, name ); 5756 }, 5757 5758 // TODO: Now that all calls to _data and _removeData have been replaced 5759 // with direct calls to dataPriv methods, these can be deprecated. 5760 _data: function( elem, name, data ) { 5761 return dataPriv.access( elem, name, data ); 5762 }, 5763 5764 _removeData: function( elem, name ) { 5765 dataPriv.remove( elem, name ); 5766 } 5767} ); 5768 5769jQuery.fn.extend( { 5770 data: function( key, value ) { 5771 var i, name, data, 5772 elem = this[ 0 ], 5773 attrs = elem && elem.attributes; 5774 5775 // Gets all values 5776 if ( key === undefined ) { 5777 if ( this.length ) { 5778 data = dataUser.get( elem ); 5779 5780 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 5781 i = attrs.length; 5782 while ( i-- ) { 5783 5784 // Support: IE 11 only 5785 // The attrs elements can be null (trac-14894) 5786 if ( attrs[ i ] ) { 5787 name = attrs[ i ].name; 5788 if ( name.indexOf( "data-" ) === 0 ) { 5789 name = camelCase( name.slice( 5 ) ); 5790 dataAttr( elem, name, data[ name ] ); 5791 } 5792 } 5793 } 5794 dataPriv.set( elem, "hasDataAttrs", true ); 5795 } 5796 } 5797 5798 return data; 5799 } 5800 5801 // Sets multiple values 5802 if ( typeof key === "object" ) { 5803 return this.each( function() { 5804 dataUser.set( this, key ); 5805 } ); 5806 } 5807 5808 return access( this, function( value ) { 5809 var data; 5810 5811 // The calling jQuery object (element matches) is not empty 5812 // (and therefore has an element appears at this[ 0 ]) and the 5813 // `value` parameter was not undefined. An empty jQuery object 5814 // will result in `undefined` for elem = this[ 0 ] which will 5815 // throw an exception if an attempt to read a data cache is made. 5816 if ( elem && value === undefined ) { 5817 5818 // Attempt to get data from the cache 5819 // The key will always be camelCased in Data 5820 data = dataUser.get( elem, key ); 5821 if ( data !== undefined ) { 5822 return data; 5823 } 5824 5825 // Attempt to "discover" the data in 5826 // HTML5 custom data-* attrs 5827 data = dataAttr( elem, key ); 5828 if ( data !== undefined ) { 5829 return data; 5830 } 5831 5832 // We tried really hard, but the data doesn't exist. 5833 return; 5834 } 5835 5836 // Set the data... 5837 this.each( function() { 5838 5839 // We always store the camelCased key 5840 dataUser.set( this, key, value ); 5841 } ); 5842 }, null, value, arguments.length > 1, null, true ); 5843 }, 5844 5845 removeData: function( key ) { 5846 return this.each( function() { 5847 dataUser.remove( this, key ); 5848 } ); 5849 } 5850} ); 5851 5852 5853jQuery.extend( { 5854 queue: function( elem, type, data ) { 5855 var queue; 5856 5857 if ( elem ) { 5858 type = ( type || "fx" ) + "queue"; 5859 queue = dataPriv.get( elem, type ); 5860 5861 // Speed up dequeue by getting out quickly if this is just a lookup 5862 if ( data ) { 5863 if ( !queue || Array.isArray( data ) ) { 5864 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 5865 } else { 5866 queue.push( data ); 5867 } 5868 } 5869 return queue || []; 5870 } 5871 }, 5872 5873 dequeue: function( elem, type ) { 5874 type = type || "fx"; 5875 5876 var queue = jQuery.queue( elem, type ), 5877 startLength = queue.length, 5878 fn = queue.shift(), 5879 hooks = jQuery._queueHooks( elem, type ), 5880 next = function() { 5881 jQuery.dequeue( elem, type ); 5882 }; 5883 5884 // If the fx queue is dequeued, always remove the progress sentinel 5885 if ( fn === "inprogress" ) { 5886 fn = queue.shift(); 5887 startLength--; 5888 } 5889 5890 if ( fn ) { 5891 5892 // Add a progress sentinel to prevent the fx queue from being 5893 // automatically dequeued 5894 if ( type === "fx" ) { 5895 queue.unshift( "inprogress" ); 5896 } 5897 5898 // Clear up the last queue stop function 5899 delete hooks.stop; 5900 fn.call( elem, next, hooks ); 5901 } 5902 5903 if ( !startLength && hooks ) { 5904 hooks.empty.fire(); 5905 } 5906 }, 5907 5908 // Not public - generate a queueHooks object, or return the current one 5909 _queueHooks: function( elem, type ) { 5910 var key = type + "queueHooks"; 5911 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 5912 empty: jQuery.Callbacks( "once memory" ).add( function() { 5913 dataPriv.remove( elem, [ type + "queue", key ] ); 5914 } ) 5915 } ); 5916 } 5917} ); 5918 5919jQuery.fn.extend( { 5920 queue: function( type, data ) { 5921 var setter = 2; 5922 5923 if ( typeof type !== "string" ) { 5924 data = type; 5925 type = "fx"; 5926 setter--; 5927 } 5928 5929 if ( arguments.length < setter ) { 5930 return jQuery.queue( this[ 0 ], type ); 5931 } 5932 5933 return data === undefined ? 5934 this : 5935 this.each( function() { 5936 var queue = jQuery.queue( this, type, data ); 5937 5938 // Ensure a hooks for this queue 5939 jQuery._queueHooks( this, type ); 5940 5941 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 5942 jQuery.dequeue( this, type ); 5943 } 5944 } ); 5945 }, 5946 dequeue: function( type ) { 5947 return this.each( function() { 5948 jQuery.dequeue( this, type ); 5949 } ); 5950 }, 5951 clearQueue: function( type ) { 5952 return this.queue( type || "fx", [] ); 5953 }, 5954 5955 // Get a promise resolved when queues of a certain type 5956 // are emptied (fx is the type by default) 5957 promise: function( type, obj ) { 5958 var tmp, 5959 count = 1, 5960 defer = jQuery.Deferred(), 5961 elements = this, 5962 i = this.length, 5963 resolve = function() { 5964 if ( !( --count ) ) { 5965 defer.resolveWith( elements, [ elements ] ); 5966 } 5967 }; 5968 5969 if ( typeof type !== "string" ) { 5970 obj = type; 5971 type = undefined; 5972 } 5973 type = type || "fx"; 5974 5975 while ( i-- ) { 5976 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 5977 if ( tmp && tmp.empty ) { 5978 count++; 5979 tmp.empty.add( resolve ); 5980 } 5981 } 5982 resolve(); 5983 return defer.promise( obj ); 5984 } 5985} ); 5986var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 5987 5988var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 5989 5990 5991var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 5992 5993var documentElement = document.documentElement; 5994 5995 5996 5997 var isAttached = function( elem ) { 5998 return jQuery.contains( elem.ownerDocument, elem ); 5999 }, 6000 composed = { composed: true }; 6001 6002 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 6003 // Check attachment across shadow DOM boundaries when possible (gh-3504) 6004 // Support: iOS 10.0-10.2 only 6005 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 6006 // leading to errors. We need to check for `getRootNode`. 6007 if ( documentElement.getRootNode ) { 6008 isAttached = function( elem ) { 6009 return jQuery.contains( elem.ownerDocument, elem ) || 6010 elem.getRootNode( composed ) === elem.ownerDocument; 6011 }; 6012 } 6013var isHiddenWithinTree = function( elem, el ) { 6014 6015 // isHiddenWithinTree might be called from jQuery#filter function; 6016 // in that case, element will be second argument 6017 elem = el || elem; 6018 6019 // Inline style trumps all 6020 return elem.style.display === "none" || 6021 elem.style.display === "" && 6022 6023 // Otherwise, check computed style 6024 // Support: Firefox <=43 - 45 6025 // Disconnected elements can have computed display: none, so first confirm that elem is 6026 // in the document. 6027 isAttached( elem ) && 6028 6029 jQuery.css( elem, "display" ) === "none"; 6030 }; 6031 6032 6033 6034function adjustCSS( elem, prop, valueParts, tween ) { 6035 var adjusted, scale, 6036 maxIterations = 20, 6037 currentValue = tween ? 6038 function() { 6039 return tween.cur(); 6040 } : 6041 function() { 6042 return jQuery.css( elem, prop, "" ); 6043 }, 6044 initial = currentValue(), 6045 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 6046 6047 // Starting value computation is required for potential unit mismatches 6048 initialInUnit = elem.nodeType && 6049 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 6050 rcssNum.exec( jQuery.css( elem, prop ) ); 6051 6052 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 6053 6054 // Support: Firefox <=54 6055 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 6056 initial = initial / 2; 6057 6058 // Trust units reported by jQuery.css 6059 unit = unit || initialInUnit[ 3 ]; 6060 6061 // Iteratively approximate from a nonzero starting point 6062 initialInUnit = +initial || 1; 6063 6064 while ( maxIterations-- ) { 6065 6066 // Evaluate and update our best guess (doubling guesses that zero out). 6067 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 6068 jQuery.style( elem, prop, initialInUnit + unit ); 6069 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 6070 maxIterations = 0; 6071 } 6072 initialInUnit = initialInUnit / scale; 6073 6074 } 6075 6076 initialInUnit = initialInUnit * 2; 6077 jQuery.style( elem, prop, initialInUnit + unit ); 6078 6079 // Make sure we update the tween properties later on 6080 valueParts = valueParts || []; 6081 } 6082 6083 if ( valueParts ) { 6084 initialInUnit = +initialInUnit || +initial || 0; 6085 6086 // Apply relative offset (+=/-=) if specified 6087 adjusted = valueParts[ 1 ] ? 6088 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 6089 +valueParts[ 2 ]; 6090 if ( tween ) { 6091 tween.unit = unit; 6092 tween.start = initialInUnit; 6093 tween.end = adjusted; 6094 } 6095 } 6096 return adjusted; 6097} 6098 6099 6100var defaultDisplayMap = {}; 6101 6102function getDefaultDisplay( elem ) { 6103 var temp, 6104 doc = elem.ownerDocument, 6105 nodeName = elem.nodeName, 6106 display = defaultDisplayMap[ nodeName ]; 6107 6108 if ( display ) { 6109 return display; 6110 } 6111 6112 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 6113 display = jQuery.css( temp, "display" ); 6114 6115 temp.parentNode.removeChild( temp ); 6116 6117 if ( display === "none" ) { 6118 display = "block"; 6119 } 6120 defaultDisplayMap[ nodeName ] = display; 6121 6122 return display; 6123} 6124 6125function showHide( elements, show ) { 6126 var display, elem, 6127 values = [], 6128 index = 0, 6129 length = elements.length; 6130 6131 // Determine new display value for elements that need to change 6132 for ( ; index < length; index++ ) { 6133 elem = elements[ index ]; 6134 if ( !elem.style ) { 6135 continue; 6136 } 6137 6138 display = elem.style.display; 6139 if ( show ) { 6140 6141 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 6142 // check is required in this first loop unless we have a nonempty display value (either 6143 // inline or about-to-be-restored) 6144 if ( display === "none" ) { 6145 values[ index ] = dataPriv.get( elem, "display" ) || null; 6146 if ( !values[ index ] ) { 6147 elem.style.display = ""; 6148 } 6149 } 6150 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 6151 values[ index ] = getDefaultDisplay( elem ); 6152 } 6153 } else { 6154 if ( display !== "none" ) { 6155 values[ index ] = "none"; 6156 6157 // Remember what we're overwriting 6158 dataPriv.set( elem, "display", display ); 6159 } 6160 } 6161 } 6162 6163 // Set the display of the elements in a second loop to avoid constant reflow 6164 for ( index = 0; index < length; index++ ) { 6165 if ( values[ index ] != null ) { 6166 elements[ index ].style.display = values[ index ]; 6167 } 6168 } 6169 6170 return elements; 6171} 6172 6173jQuery.fn.extend( { 6174 show: function() { 6175 return showHide( this, true ); 6176 }, 6177 hide: function() { 6178 return showHide( this ); 6179 }, 6180 toggle: function( state ) { 6181 if ( typeof state === "boolean" ) { 6182 return state ? this.show() : this.hide(); 6183 } 6184 6185 return this.each( function() { 6186 if ( isHiddenWithinTree( this ) ) { 6187 jQuery( this ).show(); 6188 } else { 6189 jQuery( this ).hide(); 6190 } 6191 } ); 6192 } 6193} ); 6194var rcheckableType = ( /^(?:checkbox|radio)$/i ); 6195 6196var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 6197 6198var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 6199 6200 6201 6202( function() { 6203 var fragment = document.createDocumentFragment(), 6204 div = fragment.appendChild( document.createElement( "div" ) ), 6205 input = document.createElement( "input" ); 6206 6207 // Support: Android 4.0 - 4.3 only 6208 // Check state lost if the name is set (trac-11217) 6209 // Support: Windows Web Apps (WWA) 6210 // `name` and `type` must use .setAttribute for WWA (trac-14901) 6211 input.setAttribute( "type", "radio" ); 6212 input.setAttribute( "checked", "checked" ); 6213 input.setAttribute( "name", "t" ); 6214 6215 div.appendChild( input ); 6216 6217 // Support: Android <=4.1 only 6218 // Older WebKit doesn't clone checked state correctly in fragments 6219 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 6220 6221 // Support: IE <=11 only 6222 // Make sure textarea (and checkbox) defaultValue is properly cloned 6223 div.innerHTML = "<textarea>x</textarea>"; 6224 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 6225 6226 // Support: IE <=9 only 6227 // IE <=9 replaces <option> tags with their contents when inserted outside of 6228 // the select element. 6229 div.innerHTML = "<option></option>"; 6230 support.option = !!div.lastChild; 6231} )(); 6232 6233 6234// We have to close these tags to support XHTML (trac-13200) 6235var wrapMap = { 6236 6237 // XHTML parsers do not magically insert elements in the 6238 // same way that tag soup parsers do. So we cannot shorten 6239 // this by omitting <tbody> or other required elements. 6240 thead: [ 1, "<table>", "</table>" ], 6241 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 6242 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 6243 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 6244 6245 _default: [ 0, "", "" ] 6246}; 6247 6248wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 6249wrapMap.th = wrapMap.td; 6250 6251// Support: IE <=9 only 6252if ( !support.option ) { 6253 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 6254} 6255 6256 6257function getAll( context, tag ) { 6258 6259 // Support: IE <=9 - 11 only 6260 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 6261 var ret; 6262 6263 if ( typeof context.getElementsByTagName !== "undefined" ) { 6264 ret = context.getElementsByTagName( tag || "*" ); 6265 6266 } else if ( typeof context.querySelectorAll !== "undefined" ) { 6267 ret = context.querySelectorAll( tag || "*" ); 6268 6269 } else { 6270 ret = []; 6271 } 6272 6273 if ( tag === undefined || tag && nodeName( context, tag ) ) { 6274 return jQuery.merge( [ context ], ret ); 6275 } 6276 6277 return ret; 6278} 6279 6280 6281// Mark scripts as having already been evaluated 6282function setGlobalEval( elems, refElements ) { 6283 var i = 0, 6284 l = elems.length; 6285 6286 for ( ; i < l; i++ ) { 6287 dataPriv.set( 6288 elems[ i ], 6289 "globalEval", 6290 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 6291 ); 6292 } 6293} 6294 6295 6296var rhtml = /<|&#?\w+;/; 6297 6298function buildFragment( elems, context, scripts, selection, ignored ) { 6299 var elem, tmp, tag, wrap, attached, j, 6300 fragment = context.createDocumentFragment(), 6301 nodes = [], 6302 i = 0, 6303 l = elems.length; 6304 6305 for ( ; i < l; i++ ) { 6306 elem = elems[ i ]; 6307 6308 if ( elem || elem === 0 ) { 6309 6310 // Add nodes directly 6311 if ( toType( elem ) === "object" ) { 6312 6313 // Support: Android <=4.0 only, PhantomJS 1 only 6314 // push.apply(_, arraylike) throws on ancient WebKit 6315 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 6316 6317 // Convert non-html into a text node 6318 } else if ( !rhtml.test( elem ) ) { 6319 nodes.push( context.createTextNode( elem ) ); 6320 6321 // Convert html into DOM nodes 6322 } else { 6323 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 6324 6325 // Deserialize a standard representation 6326 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 6327 wrap = wrapMap[ tag ] || wrapMap._default; 6328 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 6329 6330 // Descend through wrappers to the right content 6331 j = wrap[ 0 ]; 6332 while ( j-- ) { 6333 tmp = tmp.lastChild; 6334 } 6335 6336 // Support: Android <=4.0 only, PhantomJS 1 only 6337 // push.apply(_, arraylike) throws on ancient WebKit 6338 jQuery.merge( nodes, tmp.childNodes ); 6339 6340 // Remember the top-level container 6341 tmp = fragment.firstChild; 6342 6343 // Ensure the created nodes are orphaned (trac-12392) 6344 tmp.textContent = ""; 6345 } 6346 } 6347 } 6348 6349 // Remove wrapper from fragment 6350 fragment.textContent = ""; 6351 6352 i = 0; 6353 while ( ( elem = nodes[ i++ ] ) ) { 6354 6355 // Skip elements already in the context collection (trac-4087) 6356 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 6357 if ( ignored ) { 6358 ignored.push( elem ); 6359 } 6360 continue; 6361 } 6362 6363 attached = isAttached( elem ); 6364 6365 // Append to fragment 6366 tmp = getAll( fragment.appendChild( elem ), "script" ); 6367 6368 // Preserve script evaluation history 6369 if ( attached ) { 6370 setGlobalEval( tmp ); 6371 } 6372 6373 // Capture executables 6374 if ( scripts ) { 6375 j = 0; 6376 while ( ( elem = tmp[ j++ ] ) ) { 6377 if ( rscriptType.test( elem.type || "" ) ) { 6378 scripts.push( elem ); 6379 } 6380 } 6381 } 6382 } 6383 6384 return fragment; 6385} 6386 6387 6388var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 6389 6390function returnTrue() { 6391 return true; 6392} 6393 6394function returnFalse() { 6395 return false; 6396} 6397 6398function on( elem, types, selector, data, fn, one ) { 6399 var origFn, type; 6400 6401 // Types can be a map of types/handlers 6402 if ( typeof types === "object" ) { 6403 6404 // ( types-Object, selector, data ) 6405 if ( typeof selector !== "string" ) { 6406 6407 // ( types-Object, data ) 6408 data = data || selector; 6409 selector = undefined; 6410 } 6411 for ( type in types ) { 6412 on( elem, type, selector, data, types[ type ], one ); 6413 } 6414 return elem; 6415 } 6416 6417 if ( data == null && fn == null ) { 6418 6419 // ( types, fn ) 6420 fn = selector; 6421 data = selector = undefined; 6422 } else if ( fn == null ) { 6423 if ( typeof selector === "string" ) { 6424 6425 // ( types, selector, fn ) 6426 fn = data; 6427 data = undefined; 6428 } else { 6429 6430 // ( types, data, fn ) 6431 fn = data; 6432 data = selector; 6433 selector = undefined; 6434 } 6435 } 6436 if ( fn === false ) { 6437 fn = returnFalse; 6438 } else if ( !fn ) { 6439 return elem; 6440 } 6441 6442 if ( one === 1 ) { 6443 origFn = fn; 6444 fn = function( event ) { 6445 6446 // Can use an empty set, since event contains the info 6447 jQuery().off( event ); 6448 return origFn.apply( this, arguments ); 6449 }; 6450 6451 // Use same guid so caller can remove using origFn 6452 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 6453 } 6454 return elem.each( function() { 6455 jQuery.event.add( this, types, fn, data, selector ); 6456 } ); 6457} 6458 6459/* 6460 * Helper functions for managing events -- not part of the public interface. 6461 * Props to Dean Edwards' addEvent library for many of the ideas. 6462 */ 6463jQuery.event = { 6464 6465 global: {}, 6466 6467 add: function( elem, types, handler, data, selector ) { 6468 6469 var handleObjIn, eventHandle, tmp, 6470 events, t, handleObj, 6471 special, handlers, type, namespaces, origType, 6472 elemData = dataPriv.get( elem ); 6473 6474 // Only attach events to objects that accept data 6475 if ( !acceptData( elem ) ) { 6476 return; 6477 } 6478 6479 // Caller can pass in an object of custom data in lieu of the handler 6480 if ( handler.handler ) { 6481 handleObjIn = handler; 6482 handler = handleObjIn.handler; 6483 selector = handleObjIn.selector; 6484 } 6485 6486 // Ensure that invalid selectors throw exceptions at attach time 6487 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 6488 if ( selector ) { 6489 jQuery.find.matchesSelector( documentElement, selector ); 6490 } 6491 6492 // Make sure that the handler has a unique ID, used to find/remove it later 6493 if ( !handler.guid ) { 6494 handler.guid = jQuery.guid++; 6495 } 6496 6497 // Init the element's event structure and main handler, if this is the first 6498 if ( !( events = elemData.events ) ) { 6499 events = elemData.events = Object.create( null ); 6500 } 6501 if ( !( eventHandle = elemData.handle ) ) { 6502 eventHandle = elemData.handle = function( e ) { 6503 6504 // Discard the second event of a jQuery.event.trigger() and 6505 // when an event is called after a page has unloaded 6506 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 6507 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 6508 }; 6509 } 6510 6511 // Handle multiple events separated by a space 6512 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 6513 t = types.length; 6514 while ( t-- ) { 6515 tmp = rtypenamespace.exec( types[ t ] ) || []; 6516 type = origType = tmp[ 1 ]; 6517 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 6518 6519 // There *must* be a type, no attaching namespace-only handlers 6520 if ( !type ) { 6521 continue; 6522 } 6523 6524 // If event changes its type, use the special event handlers for the changed type 6525 special = jQuery.event.special[ type ] || {}; 6526 6527 // If selector defined, determine special event api type, otherwise given type 6528 type = ( selector ? special.delegateType : special.bindType ) || type; 6529 6530 // Update special based on newly reset type 6531 special = jQuery.event.special[ type ] || {}; 6532 6533 // handleObj is passed to all event handlers 6534 handleObj = jQuery.extend( { 6535 type: type, 6536 origType: origType, 6537 data: data, 6538 handler: handler, 6539 guid: handler.guid, 6540 selector: selector, 6541 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 6542 namespace: namespaces.join( "." ) 6543 }, handleObjIn ); 6544 6545 // Init the event handler queue if we're the first 6546 if ( !( handlers = events[ type ] ) ) { 6547 handlers = events[ type ] = []; 6548 handlers.delegateCount = 0; 6549 6550 // Only use addEventListener if the special events handler returns false 6551 if ( !special.setup || 6552 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 6553 6554 if ( elem.addEventListener ) { 6555 elem.addEventListener( type, eventHandle ); 6556 } 6557 } 6558 } 6559 6560 if ( special.add ) { 6561 special.add.call( elem, handleObj ); 6562 6563 if ( !handleObj.handler.guid ) { 6564 handleObj.handler.guid = handler.guid; 6565 } 6566 } 6567 6568 // Add to the element's handler list, delegates in front 6569 if ( selector ) { 6570 handlers.splice( handlers.delegateCount++, 0, handleObj ); 6571 } else { 6572 handlers.push( handleObj ); 6573 } 6574 6575 // Keep track of which events have ever been used, for event optimization 6576 jQuery.event.global[ type ] = true; 6577 } 6578 6579 }, 6580 6581 // Detach an event or set of events from an element 6582 remove: function( elem, types, handler, selector, mappedTypes ) { 6583 6584 var j, origCount, tmp, 6585 events, t, handleObj, 6586 special, handlers, type, namespaces, origType, 6587 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 6588 6589 if ( !elemData || !( events = elemData.events ) ) { 6590 return; 6591 } 6592 6593 // Once for each type.namespace in types; type may be omitted 6594 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 6595 t = types.length; 6596 while ( t-- ) { 6597 tmp = rtypenamespace.exec( types[ t ] ) || []; 6598 type = origType = tmp[ 1 ]; 6599 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 6600 6601 // Unbind all events (on this namespace, if provided) for the element 6602 if ( !type ) { 6603 for ( type in events ) { 6604 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 6605 } 6606 continue; 6607 } 6608 6609 special = jQuery.event.special[ type ] || {}; 6610 type = ( selector ? special.delegateType : special.bindType ) || type; 6611 handlers = events[ type ] || []; 6612 tmp = tmp[ 2 ] && 6613 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 6614 6615 // Remove matching events 6616 origCount = j = handlers.length; 6617 while ( j-- ) { 6618 handleObj = handlers[ j ]; 6619 6620 if ( ( mappedTypes || origType === handleObj.origType ) && 6621 ( !handler || handler.guid === handleObj.guid ) && 6622 ( !tmp || tmp.test( handleObj.namespace ) ) && 6623 ( !selector || selector === handleObj.selector || 6624 selector === "**" && handleObj.selector ) ) { 6625 handlers.splice( j, 1 ); 6626 6627 if ( handleObj.selector ) { 6628 handlers.delegateCount--; 6629 } 6630 if ( special.remove ) { 6631 special.remove.call( elem, handleObj ); 6632 } 6633 } 6634 } 6635 6636 // Remove generic event handler if we removed something and no more handlers exist 6637 // (avoids potential for endless recursion during removal of special event handlers) 6638 if ( origCount && !handlers.length ) { 6639 if ( !special.teardown || 6640 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 6641 6642 jQuery.removeEvent( elem, type, elemData.handle ); 6643 } 6644 6645 delete events[ type ]; 6646 } 6647 } 6648 6649 // Remove data and the expando if it's no longer used 6650 if ( jQuery.isEmptyObject( events ) ) { 6651 dataPriv.remove( elem, "handle events" ); 6652 } 6653 }, 6654 6655 dispatch: function( nativeEvent ) { 6656 6657 var i, j, ret, matched, handleObj, handlerQueue, 6658 args = new Array( arguments.length ), 6659 6660 // Make a writable jQuery.Event from the native event object 6661 event = jQuery.event.fix( nativeEvent ), 6662 6663 handlers = ( 6664 dataPriv.get( this, "events" ) || Object.create( null ) 6665 )[ event.type ] || [], 6666 special = jQuery.event.special[ event.type ] || {}; 6667 6668 // Use the fix-ed jQuery.Event rather than the (read-only) native event 6669 args[ 0 ] = event; 6670 6671 for ( i = 1; i < arguments.length; i++ ) { 6672 args[ i ] = arguments[ i ]; 6673 } 6674 6675 event.delegateTarget = this; 6676 6677 // Call the preDispatch hook for the mapped type, and let it bail if desired 6678 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 6679 return; 6680 } 6681 6682 // Determine handlers 6683 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 6684 6685 // Run delegates first; they may want to stop propagation beneath us 6686 i = 0; 6687 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 6688 event.currentTarget = matched.elem; 6689 6690 j = 0; 6691 while ( ( handleObj = matched.handlers[ j++ ] ) && 6692 !event.isImmediatePropagationStopped() ) { 6693 6694 // If the event is namespaced, then each handler is only invoked if it is 6695 // specially universal or its namespaces are a superset of the event's. 6696 if ( !event.rnamespace || handleObj.namespace === false || 6697 event.rnamespace.test( handleObj.namespace ) ) { 6698 6699 event.handleObj = handleObj; 6700 event.data = handleObj.data; 6701 6702 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 6703 handleObj.handler ).apply( matched.elem, args ); 6704 6705 if ( ret !== undefined ) { 6706 if ( ( event.result = ret ) === false ) { 6707 event.preventDefault(); 6708 event.stopPropagation(); 6709 } 6710 } 6711 } 6712 } 6713 } 6714 6715 // Call the postDispatch hook for the mapped type 6716 if ( special.postDispatch ) { 6717 special.postDispatch.call( this, event ); 6718 } 6719 6720 return event.result; 6721 }, 6722 6723 handlers: function( event, handlers ) { 6724 var i, handleObj, sel, matchedHandlers, matchedSelectors, 6725 handlerQueue = [], 6726 delegateCount = handlers.delegateCount, 6727 cur = event.target; 6728 6729 // Find delegate handlers 6730 if ( delegateCount && 6731 6732 // Support: IE <=9 6733 // Black-hole SVG <use> instance trees (trac-13180) 6734 cur.nodeType && 6735 6736 // Support: Firefox <=42 6737 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 6738 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 6739 // Support: IE 11 only 6740 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 6741 !( event.type === "click" && event.button >= 1 ) ) { 6742 6743 for ( ; cur !== this; cur = cur.parentNode || this ) { 6744 6745 // Don't check non-elements (trac-13208) 6746 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 6747 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 6748 matchedHandlers = []; 6749 matchedSelectors = {}; 6750 for ( i = 0; i < delegateCount; i++ ) { 6751 handleObj = handlers[ i ]; 6752 6753 // Don't conflict with Object.prototype properties (trac-13203) 6754 sel = handleObj.selector + " "; 6755 6756 if ( matchedSelectors[ sel ] === undefined ) { 6757 matchedSelectors[ sel ] = handleObj.needsContext ? 6758 jQuery( sel, this ).index( cur ) > -1 : 6759 jQuery.find( sel, this, null, [ cur ] ).length; 6760 } 6761 if ( matchedSelectors[ sel ] ) { 6762 matchedHandlers.push( handleObj ); 6763 } 6764 } 6765 if ( matchedHandlers.length ) { 6766 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 6767 } 6768 } 6769 } 6770 } 6771 6772 // Add the remaining (directly-bound) handlers 6773 cur = this; 6774 if ( delegateCount < handlers.length ) { 6775 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 6776 } 6777 6778 return handlerQueue; 6779 }, 6780 6781 addProp: function( name, hook ) { 6782 Object.defineProperty( jQuery.Event.prototype, name, { 6783 enumerable: true, 6784 configurable: true, 6785 6786 get: isFunction( hook ) ? 6787 function() { 6788 if ( this.originalEvent ) { 6789 return hook( this.originalEvent ); 6790 } 6791 } : 6792 function() { 6793 if ( this.originalEvent ) { 6794 return this.originalEvent[ name ]; 6795 } 6796 }, 6797 6798 set: function( value ) { 6799 Object.defineProperty( this, name, { 6800 enumerable: true, 6801 configurable: true, 6802 writable: true, 6803 value: value 6804 } ); 6805 } 6806 } ); 6807 }, 6808 6809 fix: function( originalEvent ) { 6810 return originalEvent[ jQuery.expando ] ? 6811 originalEvent : 6812 new jQuery.Event( originalEvent ); 6813 }, 6814 6815 special: { 6816 load: { 6817 6818 // Prevent triggered image.load events from bubbling to window.load 6819 noBubble: true 6820 }, 6821 click: { 6822 6823 // Utilize native event to ensure correct state for checkable inputs 6824 setup: function( data ) { 6825 6826 // For mutual compressibility with _default, replace `this` access with a local var. 6827 // `|| data` is dead code meant only to preserve the variable through minification. 6828 var el = this || data; 6829 6830 // Claim the first handler 6831 if ( rcheckableType.test( el.type ) && 6832 el.click && nodeName( el, "input" ) ) { 6833 6834 // dataPriv.set( el, "click", ... ) 6835 leverageNative( el, "click", true ); 6836 } 6837 6838 // Return false to allow normal processing in the caller 6839 return false; 6840 }, 6841 trigger: function( data ) { 6842 6843 // For mutual compressibility with _default, replace `this` access with a local var. 6844 // `|| data` is dead code meant only to preserve the variable through minification. 6845 var el = this || data; 6846 6847 // Force setup before triggering a click 6848 if ( rcheckableType.test( el.type ) && 6849 el.click && nodeName( el, "input" ) ) { 6850 6851 leverageNative( el, "click" ); 6852 } 6853 6854 // Return non-false to allow normal event-path propagation 6855 return true; 6856 }, 6857 6858 // For cross-browser consistency, suppress native .click() on links 6859 // Also prevent it if we're currently inside a leveraged native-event stack 6860 _default: function( event ) { 6861 var target = event.target; 6862 return rcheckableType.test( target.type ) && 6863 target.click && nodeName( target, "input" ) && 6864 dataPriv.get( target, "click" ) || 6865 nodeName( target, "a" ); 6866 } 6867 }, 6868 6869 beforeunload: { 6870 postDispatch: function( event ) { 6871 6872 // Support: Firefox 20+ 6873 // Firefox doesn't alert if the returnValue field is not set. 6874 if ( event.result !== undefined && event.originalEvent ) { 6875 event.originalEvent.returnValue = event.result; 6876 } 6877 } 6878 } 6879 } 6880}; 6881 6882// Ensure the presence of an event listener that handles manually-triggered 6883// synthetic events by interrupting progress until reinvoked in response to 6884// *native* events that it fires directly, ensuring that state changes have 6885// already occurred before other listeners are invoked. 6886function leverageNative( el, type, isSetup ) { 6887 6888 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 6889 if ( !isSetup ) { 6890 if ( dataPriv.get( el, type ) === undefined ) { 6891 jQuery.event.add( el, type, returnTrue ); 6892 } 6893 return; 6894 } 6895 6896 // Register the controller as a special universal handler for all event namespaces 6897 dataPriv.set( el, type, false ); 6898 jQuery.event.add( el, type, { 6899 namespace: false, 6900 handler: function( event ) { 6901 var result, 6902 saved = dataPriv.get( this, type ); 6903 6904 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 6905 6906 // Interrupt processing of the outer synthetic .trigger()ed event 6907 if ( !saved ) { 6908 6909 // Store arguments for use when handling the inner native event 6910 // There will always be at least one argument (an event object), so this array 6911 // will not be confused with a leftover capture object. 6912 saved = slice.call( arguments ); 6913 dataPriv.set( this, type, saved ); 6914 6915 // Trigger the native event and capture its result 6916 this[ type ](); 6917 result = dataPriv.get( this, type ); 6918 dataPriv.set( this, type, false ); 6919 6920 if ( saved !== result ) { 6921 6922 // Cancel the outer synthetic event 6923 event.stopImmediatePropagation(); 6924 event.preventDefault(); 6925 6926 return result; 6927 } 6928 6929 // If this is an inner synthetic event for an event with a bubbling surrogate 6930 // (focus or blur), assume that the surrogate already propagated from triggering 6931 // the native event and prevent that from happening again here. 6932 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 6933 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 6934 // less bad than duplication. 6935 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 6936 event.stopPropagation(); 6937 } 6938 6939 // If this is a native event triggered above, everything is now in order 6940 // Fire an inner synthetic event with the original arguments 6941 } else if ( saved ) { 6942 6943 // ...and capture the result 6944 dataPriv.set( this, type, jQuery.event.trigger( 6945 saved[ 0 ], 6946 saved.slice( 1 ), 6947 this 6948 ) ); 6949 6950 // Abort handling of the native event by all jQuery handlers while allowing 6951 // native handlers on the same element to run. On target, this is achieved 6952 // by stopping immediate propagation just on the jQuery event. However, 6953 // the native event is re-wrapped by a jQuery one on each level of the 6954 // propagation so the only way to stop it for jQuery is to stop it for 6955 // everyone via native `stopPropagation()`. This is not a problem for 6956 // focus/blur which don't bubble, but it does also stop click on checkboxes 6957 // and radios. We accept this limitation. 6958 event.stopPropagation(); 6959 event.isImmediatePropagationStopped = returnTrue; 6960 } 6961 } 6962 } ); 6963} 6964 6965jQuery.removeEvent = function( elem, type, handle ) { 6966 6967 // This "if" is needed for plain objects 6968 if ( elem.removeEventListener ) { 6969 elem.removeEventListener( type, handle ); 6970 } 6971}; 6972 6973jQuery.Event = function( src, props ) { 6974 6975 // Allow instantiation without the 'new' keyword 6976 if ( !( this instanceof jQuery.Event ) ) { 6977 return new jQuery.Event( src, props ); 6978 } 6979 6980 // Event object 6981 if ( src && src.type ) { 6982 this.originalEvent = src; 6983 this.type = src.type; 6984 6985 // Events bubbling up the document may have been marked as prevented 6986 // by a handler lower down the tree; reflect the correct value. 6987 this.isDefaultPrevented = src.defaultPrevented || 6988 src.defaultPrevented === undefined && 6989 6990 // Support: Android <=2.3 only 6991 src.returnValue === false ? 6992 returnTrue : 6993 returnFalse; 6994 6995 // Create target properties 6996 // Support: Safari <=6 - 7 only 6997 // Target should not be a text node (trac-504, trac-13143) 6998 this.target = ( src.target && src.target.nodeType === 3 ) ? 6999 src.target.parentNode : 7000 src.target; 7001 7002 this.currentTarget = src.currentTarget; 7003 this.relatedTarget = src.relatedTarget; 7004 7005 // Event type 7006 } else { 7007 this.type = src; 7008 } 7009 7010 // Put explicitly provided properties onto the event object 7011 if ( props ) { 7012 jQuery.extend( this, props ); 7013 } 7014 7015 // Create a timestamp if incoming event doesn't have one 7016 this.timeStamp = src && src.timeStamp || Date.now(); 7017 7018 // Mark it as fixed 7019 this[ jQuery.expando ] = true; 7020}; 7021 7022// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 7023// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 7024jQuery.Event.prototype = { 7025 constructor: jQuery.Event, 7026 isDefaultPrevented: returnFalse, 7027 isPropagationStopped: returnFalse, 7028 isImmediatePropagationStopped: returnFalse, 7029 isSimulated: false, 7030 7031 preventDefault: function() { 7032 var e = this.originalEvent; 7033 7034 this.isDefaultPrevented = returnTrue; 7035 7036 if ( e && !this.isSimulated ) { 7037 e.preventDefault(); 7038 } 7039 }, 7040 stopPropagation: function() { 7041 var e = this.originalEvent; 7042 7043 this.isPropagationStopped = returnTrue; 7044 7045 if ( e && !this.isSimulated ) { 7046 e.stopPropagation(); 7047 } 7048 }, 7049 stopImmediatePropagation: function() { 7050 var e = this.originalEvent; 7051 7052 this.isImmediatePropagationStopped = returnTrue; 7053 7054 if ( e && !this.isSimulated ) { 7055 e.stopImmediatePropagation(); 7056 } 7057 7058 this.stopPropagation(); 7059 } 7060}; 7061 7062// Includes all common event props including KeyEvent and MouseEvent specific props 7063jQuery.each( { 7064 altKey: true, 7065 bubbles: true, 7066 cancelable: true, 7067 changedTouches: true, 7068 ctrlKey: true, 7069 detail: true, 7070 eventPhase: true, 7071 metaKey: true, 7072 pageX: true, 7073 pageY: true, 7074 shiftKey: true, 7075 view: true, 7076 "char": true, 7077 code: true, 7078 charCode: true, 7079 key: true, 7080 keyCode: true, 7081 button: true, 7082 buttons: true, 7083 clientX: true, 7084 clientY: true, 7085 offsetX: true, 7086 offsetY: true, 7087 pointerId: true, 7088 pointerType: true, 7089 screenX: true, 7090 screenY: true, 7091 targetTouches: true, 7092 toElement: true, 7093 touches: true, 7094 which: true 7095}, jQuery.event.addProp ); 7096 7097jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 7098 7099 function focusMappedHandler( nativeEvent ) { 7100 if ( document.documentMode ) { 7101 7102 // Support: IE 11+ 7103 // Attach a single focusin/focusout handler on the document while someone wants 7104 // focus/blur. This is because the former are synchronous in IE while the latter 7105 // are async. In other browsers, all those handlers are invoked synchronously. 7106 7107 // `handle` from private data would already wrap the event, but we need 7108 // to change the `type` here. 7109 var handle = dataPriv.get( this, "handle" ), 7110 event = jQuery.event.fix( nativeEvent ); 7111 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 7112 event.isSimulated = true; 7113 7114 // First, handle focusin/focusout 7115 handle( nativeEvent ); 7116 7117 // ...then, handle focus/blur 7118 // 7119 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 7120 // invoking the handler at the lower level. 7121 if ( event.target === event.currentTarget ) { 7122 7123 // The setup part calls `leverageNative`, which, in turn, calls 7124 // `jQuery.event.add`, so event handle will already have been set 7125 // by this point. 7126 handle( event ); 7127 } 7128 } else { 7129 7130 // For non-IE browsers, attach a single capturing handler on the document 7131 // while someone wants focusin/focusout. 7132 jQuery.event.simulate( delegateType, nativeEvent.target, 7133 jQuery.event.fix( nativeEvent ) ); 7134 } 7135 } 7136 7137 jQuery.event.special[ type ] = { 7138 7139 // Utilize native event if possible so blur/focus sequence is correct 7140 setup: function() { 7141 7142 var attaches; 7143 7144 // Claim the first handler 7145 // dataPriv.set( this, "focus", ... ) 7146 // dataPriv.set( this, "blur", ... ) 7147 leverageNative( this, type, true ); 7148 7149 if ( document.documentMode ) { 7150 7151 // Support: IE 9 - 11+ 7152 // We use the same native handler for focusin & focus (and focusout & blur) 7153 // so we need to coordinate setup & teardown parts between those events. 7154 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 7155 attaches = dataPriv.get( this, delegateType ); 7156 if ( !attaches ) { 7157 this.addEventListener( delegateType, focusMappedHandler ); 7158 } 7159 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 7160 } else { 7161 7162 // Return false to allow normal processing in the caller 7163 return false; 7164 } 7165 }, 7166 trigger: function() { 7167 7168 // Force setup before trigger 7169 leverageNative( this, type ); 7170 7171 // Return non-false to allow normal event-path propagation 7172 return true; 7173 }, 7174 7175 teardown: function() { 7176 var attaches; 7177 7178 if ( document.documentMode ) { 7179 attaches = dataPriv.get( this, delegateType ) - 1; 7180 if ( !attaches ) { 7181 this.removeEventListener( delegateType, focusMappedHandler ); 7182 dataPriv.remove( this, delegateType ); 7183 } else { 7184 dataPriv.set( this, delegateType, attaches ); 7185 } 7186 } else { 7187 7188 // Return false to indicate standard teardown should be applied 7189 return false; 7190 } 7191 }, 7192 7193 // Suppress native focus or blur if we're currently inside 7194 // a leveraged native-event stack 7195 _default: function( event ) { 7196 return dataPriv.get( event.target, type ); 7197 }, 7198 7199 delegateType: delegateType 7200 }; 7201 7202 // Support: Firefox <=44 7203 // Firefox doesn't have focus(in | out) events 7204 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 7205 // 7206 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 7207 // focus(in | out) events fire after focus & blur events, 7208 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 7209 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 7210 // 7211 // Support: IE 9 - 11+ 7212 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 7213 // attach a single handler for both events in IE. 7214 jQuery.event.special[ delegateType ] = { 7215 setup: function() { 7216 7217 // Handle: regular nodes (via `this.ownerDocument`), window 7218 // (via `this.document`) & document (via `this`). 7219 var doc = this.ownerDocument || this.document || this, 7220 dataHolder = document.documentMode ? this : doc, 7221 attaches = dataPriv.get( dataHolder, delegateType ); 7222 7223 // Support: IE 9 - 11+ 7224 // We use the same native handler for focusin & focus (and focusout & blur) 7225 // so we need to coordinate setup & teardown parts between those events. 7226 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 7227 if ( !attaches ) { 7228 if ( document.documentMode ) { 7229 this.addEventListener( delegateType, focusMappedHandler ); 7230 } else { 7231 doc.addEventListener( type, focusMappedHandler, true ); 7232 } 7233 } 7234 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 7235 }, 7236 teardown: function() { 7237 var doc = this.ownerDocument || this.document || this, 7238 dataHolder = document.documentMode ? this : doc, 7239 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 7240 7241 if ( !attaches ) { 7242 if ( document.documentMode ) { 7243 this.removeEventListener( delegateType, focusMappedHandler ); 7244 } else { 7245 doc.removeEventListener( type, focusMappedHandler, true ); 7246 } 7247 dataPriv.remove( dataHolder, delegateType ); 7248 } else { 7249 dataPriv.set( dataHolder, delegateType, attaches ); 7250 } 7251 } 7252 }; 7253} ); 7254 7255// Create mouseenter/leave events using mouseover/out and event-time checks 7256// so that event delegation works in jQuery. 7257// Do the same for pointerenter/pointerleave and pointerover/pointerout 7258// 7259// Support: Safari 7 only 7260// Safari sends mouseenter too often; see: 7261// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 7262// for the description of the bug (it existed in older Chrome versions as well). 7263jQuery.each( { 7264 mouseenter: "mouseover", 7265 mouseleave: "mouseout", 7266 pointerenter: "pointerover", 7267 pointerleave: "pointerout" 7268}, function( orig, fix ) { 7269 jQuery.event.special[ orig ] = { 7270 delegateType: fix, 7271 bindType: fix, 7272 7273 handle: function( event ) { 7274 var ret, 7275 target = this, 7276 related = event.relatedTarget, 7277 handleObj = event.handleObj; 7278 7279 // For mouseenter/leave call the handler if related is outside the target. 7280 // NB: No relatedTarget if the mouse left/entered the browser window 7281 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 7282 event.type = handleObj.origType; 7283 ret = handleObj.handler.apply( this, arguments ); 7284 event.type = fix; 7285 } 7286 return ret; 7287 } 7288 }; 7289} ); 7290 7291jQuery.fn.extend( { 7292 7293 on: function( types, selector, data, fn ) { 7294 return on( this, types, selector, data, fn ); 7295 }, 7296 one: function( types, selector, data, fn ) { 7297 return on( this, types, selector, data, fn, 1 ); 7298 }, 7299 off: function( types, selector, fn ) { 7300 var handleObj, type; 7301 if ( types && types.preventDefault && types.handleObj ) { 7302 7303 // ( event ) dispatched jQuery.Event 7304 handleObj = types.handleObj; 7305 jQuery( types.delegateTarget ).off( 7306 handleObj.namespace ? 7307 handleObj.origType + "." + handleObj.namespace : 7308 handleObj.origType, 7309 handleObj.selector, 7310 handleObj.handler 7311 ); 7312 return this; 7313 } 7314 if ( typeof types === "object" ) { 7315 7316 // ( types-object [, selector] ) 7317 for ( type in types ) { 7318 this.off( type, selector, types[ type ] ); 7319 } 7320 return this; 7321 } 7322 if ( selector === false || typeof selector === "function" ) { 7323 7324 // ( types [, fn] ) 7325 fn = selector; 7326 selector = undefined; 7327 } 7328 if ( fn === false ) { 7329 fn = returnFalse; 7330 } 7331 return this.each( function() { 7332 jQuery.event.remove( this, types, fn, selector ); 7333 } ); 7334 } 7335} ); 7336 7337 7338var 7339 7340 // Support: IE <=10 - 11, Edge 12 - 13 only 7341 // In IE/Edge using regex groups here causes severe slowdowns. 7342 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 7343 rnoInnerhtml = /<script|<style|<link/i, 7344 7345 // checked="checked" or checked 7346 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 7347 7348 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 7349 7350// Prefer a tbody over its parent table for containing new rows 7351function manipulationTarget( elem, content ) { 7352 if ( nodeName( elem, "table" ) && 7353 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 7354 7355 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 7356 } 7357 7358 return elem; 7359} 7360 7361// Replace/restore the type attribute of script elements for safe DOM manipulation 7362function disableScript( elem ) { 7363 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 7364 return elem; 7365} 7366function restoreScript( elem ) { 7367 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 7368 elem.type = elem.type.slice( 5 ); 7369 } else { 7370 elem.removeAttribute( "type" ); 7371 } 7372 7373 return elem; 7374} 7375 7376function cloneCopyEvent( src, dest ) { 7377 var i, l, type, pdataOld, udataOld, udataCur, events; 7378 7379 if ( dest.nodeType !== 1 ) { 7380 return; 7381 } 7382 7383 // 1. Copy private data: events, handlers, etc. 7384 if ( dataPriv.hasData( src ) ) { 7385 pdataOld = dataPriv.get( src ); 7386 events = pdataOld.events; 7387 7388 if ( events ) { 7389 dataPriv.remove( dest, "handle events" ); 7390 7391 for ( type in events ) { 7392 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 7393 jQuery.event.add( dest, type, events[ type ][ i ] ); 7394 } 7395 } 7396 } 7397 } 7398 7399 // 2. Copy user data 7400 if ( dataUser.hasData( src ) ) { 7401 udataOld = dataUser.access( src ); 7402 udataCur = jQuery.extend( {}, udataOld ); 7403 7404 dataUser.set( dest, udataCur ); 7405 } 7406} 7407 7408// Fix IE bugs, see support tests 7409function fixInput( src, dest ) { 7410 var nodeName = dest.nodeName.toLowerCase(); 7411 7412 // Fails to persist the checked state of a cloned checkbox or radio button. 7413 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 7414 dest.checked = src.checked; 7415 7416 // Fails to return the selected option to the default selected state when cloning options 7417 } else if ( nodeName === "input" || nodeName === "textarea" ) { 7418 dest.defaultValue = src.defaultValue; 7419 } 7420} 7421 7422function domManip( collection, args, callback, ignored ) { 7423 7424 // Flatten any nested arrays 7425 args = flat( args ); 7426 7427 var fragment, first, scripts, hasScripts, node, doc, 7428 i = 0, 7429 l = collection.length, 7430 iNoClone = l - 1, 7431 value = args[ 0 ], 7432 valueIsFunction = isFunction( value ); 7433 7434 // We can't cloneNode fragments that contain checked, in WebKit 7435 if ( valueIsFunction || 7436 ( l > 1 && typeof value === "string" && 7437 !support.checkClone && rchecked.test( value ) ) ) { 7438 return collection.each( function( index ) { 7439 var self = collection.eq( index ); 7440 if ( valueIsFunction ) { 7441 args[ 0 ] = value.call( this, index, self.html() ); 7442 } 7443 domManip( self, args, callback, ignored ); 7444 } ); 7445 } 7446 7447 if ( l ) { 7448 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 7449 first = fragment.firstChild; 7450 7451 if ( fragment.childNodes.length === 1 ) { 7452 fragment = first; 7453 } 7454 7455 // Require either new content or an interest in ignored elements to invoke the callback 7456 if ( first || ignored ) { 7457 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 7458 hasScripts = scripts.length; 7459 7460 // Use the original fragment for the last item 7461 // instead of the first because it can end up 7462 // being emptied incorrectly in certain situations (trac-8070). 7463 for ( ; i < l; i++ ) { 7464 node = fragment; 7465 7466 if ( i !== iNoClone ) { 7467 node = jQuery.clone( node, true, true ); 7468 7469 // Keep references to cloned scripts for later restoration 7470 if ( hasScripts ) { 7471 7472 // Support: Android <=4.0 only, PhantomJS 1 only 7473 // push.apply(_, arraylike) throws on ancient WebKit 7474 jQuery.merge( scripts, getAll( node, "script" ) ); 7475 } 7476 } 7477 7478 callback.call( collection[ i ], node, i ); 7479 } 7480 7481 if ( hasScripts ) { 7482 doc = scripts[ scripts.length - 1 ].ownerDocument; 7483 7484 // Re-enable scripts 7485 jQuery.map( scripts, restoreScript ); 7486 7487 // Evaluate executable scripts on first document insertion 7488 for ( i = 0; i < hasScripts; i++ ) { 7489 node = scripts[ i ]; 7490 if ( rscriptType.test( node.type || "" ) && 7491 !dataPriv.access( node, "globalEval" ) && 7492 jQuery.contains( doc, node ) ) { 7493 7494 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 7495 7496 // Optional AJAX dependency, but won't run scripts if not present 7497 if ( jQuery._evalUrl && !node.noModule ) { 7498 jQuery._evalUrl( node.src, { 7499 nonce: node.nonce || node.getAttribute( "nonce" ) 7500 }, doc ); 7501 } 7502 } else { 7503 7504 // Unwrap a CDATA section containing script contents. This shouldn't be 7505 // needed as in XML documents they're already not visible when 7506 // inspecting element contents and in HTML documents they have no 7507 // meaning but we're preserving that logic for backwards compatibility. 7508 // This will be removed completely in 4.0. See gh-4904. 7509 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 7510 } 7511 } 7512 } 7513 } 7514 } 7515 } 7516 7517 return collection; 7518} 7519 7520function remove( elem, selector, keepData ) { 7521 var node, 7522 nodes = selector ? jQuery.filter( selector, elem ) : elem, 7523 i = 0; 7524 7525 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 7526 if ( !keepData && node.nodeType === 1 ) { 7527 jQuery.cleanData( getAll( node ) ); 7528 } 7529 7530 if ( node.parentNode ) { 7531 if ( keepData && isAttached( node ) ) { 7532 setGlobalEval( getAll( node, "script" ) ); 7533 } 7534 node.parentNode.removeChild( node ); 7535 } 7536 } 7537 7538 return elem; 7539} 7540 7541jQuery.extend( { 7542 htmlPrefilter: function( html ) { 7543 return html; 7544 }, 7545 7546 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 7547 var i, l, srcElements, destElements, 7548 clone = elem.cloneNode( true ), 7549 inPage = isAttached( elem ); 7550 7551 // Fix IE cloning issues 7552 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 7553 !jQuery.isXMLDoc( elem ) ) { 7554 7555 // We eschew jQuery#find here for performance reasons: 7556 // https://jsperf.com/getall-vs-sizzle/2 7557 destElements = getAll( clone ); 7558 srcElements = getAll( elem ); 7559 7560 for ( i = 0, l = srcElements.length; i < l; i++ ) { 7561 fixInput( srcElements[ i ], destElements[ i ] ); 7562 } 7563 } 7564 7565 // Copy the events from the original to the clone 7566 if ( dataAndEvents ) { 7567 if ( deepDataAndEvents ) { 7568 srcElements = srcElements || getAll( elem ); 7569 destElements = destElements || getAll( clone ); 7570 7571 for ( i = 0, l = srcElements.length; i < l; i++ ) { 7572 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 7573 } 7574 } else { 7575 cloneCopyEvent( elem, clone ); 7576 } 7577 } 7578 7579 // Preserve script evaluation history 7580 destElements = getAll( clone, "script" ); 7581 if ( destElements.length > 0 ) { 7582 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 7583 } 7584 7585 // Return the cloned set 7586 return clone; 7587 }, 7588 7589 cleanData: function( elems ) { 7590 var data, elem, type, 7591 special = jQuery.event.special, 7592 i = 0; 7593 7594 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 7595 if ( acceptData( elem ) ) { 7596 if ( ( data = elem[ dataPriv.expando ] ) ) { 7597 if ( data.events ) { 7598 for ( type in data.events ) { 7599 if ( special[ type ] ) { 7600 jQuery.event.remove( elem, type ); 7601 7602 // This is a shortcut to avoid jQuery.event.remove's overhead 7603 } else { 7604 jQuery.removeEvent( elem, type, data.handle ); 7605 } 7606 } 7607 } 7608 7609 // Support: Chrome <=35 - 45+ 7610 // Assign undefined instead of using delete, see Data#remove 7611 elem[ dataPriv.expando ] = undefined; 7612 } 7613 if ( elem[ dataUser.expando ] ) { 7614 7615 // Support: Chrome <=35 - 45+ 7616 // Assign undefined instead of using delete, see Data#remove 7617 elem[ dataUser.expando ] = undefined; 7618 } 7619 } 7620 } 7621 } 7622} ); 7623 7624jQuery.fn.extend( { 7625 detach: function( selector ) { 7626 return remove( this, selector, true ); 7627 }, 7628 7629 remove: function( selector ) { 7630 return remove( this, selector ); 7631 }, 7632 7633 text: function( value ) { 7634 return access( this, function( value ) { 7635 return value === undefined ? 7636 jQuery.text( this ) : 7637 this.empty().each( function() { 7638 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 7639 this.textContent = value; 7640 } 7641 } ); 7642 }, null, value, arguments.length ); 7643 }, 7644 7645 append: function() { 7646 return domManip( this, arguments, function( elem ) { 7647 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 7648 var target = manipulationTarget( this, elem ); 7649 target.appendChild( elem ); 7650 } 7651 } ); 7652 }, 7653 7654 prepend: function() { 7655 return domManip( this, arguments, function( elem ) { 7656 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 7657 var target = manipulationTarget( this, elem ); 7658 target.insertBefore( elem, target.firstChild ); 7659 } 7660 } ); 7661 }, 7662 7663 before: function() { 7664 return domManip( this, arguments, function( elem ) { 7665 if ( this.parentNode ) { 7666 this.parentNode.insertBefore( elem, this ); 7667 } 7668 } ); 7669 }, 7670 7671 after: function() { 7672 return domManip( this, arguments, function( elem ) { 7673 if ( this.parentNode ) { 7674 this.parentNode.insertBefore( elem, this.nextSibling ); 7675 } 7676 } ); 7677 }, 7678 7679 empty: function() { 7680 var elem, 7681 i = 0; 7682 7683 for ( ; ( elem = this[ i ] ) != null; i++ ) { 7684 if ( elem.nodeType === 1 ) { 7685 7686 // Prevent memory leaks 7687 jQuery.cleanData( getAll( elem, false ) ); 7688 7689 // Remove any remaining nodes 7690 elem.textContent = ""; 7691 } 7692 } 7693 7694 return this; 7695 }, 7696 7697 clone: function( dataAndEvents, deepDataAndEvents ) { 7698 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 7699 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 7700 7701 return this.map( function() { 7702 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 7703 } ); 7704 }, 7705 7706 html: function( value ) { 7707 return access( this, function( value ) { 7708 var elem = this[ 0 ] || {}, 7709 i = 0, 7710 l = this.length; 7711 7712 if ( value === undefined && elem.nodeType === 1 ) { 7713 return elem.innerHTML; 7714 } 7715 7716 // See if we can take a shortcut and just use innerHTML 7717 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 7718 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 7719 7720 value = jQuery.htmlPrefilter( value ); 7721 7722 try { 7723 for ( ; i < l; i++ ) { 7724 elem = this[ i ] || {}; 7725 7726 // Remove element nodes and prevent memory leaks 7727 if ( elem.nodeType === 1 ) { 7728 jQuery.cleanData( getAll( elem, false ) ); 7729 elem.innerHTML = value; 7730 } 7731 } 7732 7733 elem = 0; 7734 7735 // If using innerHTML throws an exception, use the fallback method 7736 } catch ( e ) {} 7737 } 7738 7739 if ( elem ) { 7740 this.empty().append( value ); 7741 } 7742 }, null, value, arguments.length ); 7743 }, 7744 7745 replaceWith: function() { 7746 var ignored = []; 7747 7748 // Make the changes, replacing each non-ignored context element with the new content 7749 return domManip( this, arguments, function( elem ) { 7750 var parent = this.parentNode; 7751 7752 if ( jQuery.inArray( this, ignored ) < 0 ) { 7753 jQuery.cleanData( getAll( this ) ); 7754 if ( parent ) { 7755 parent.replaceChild( elem, this ); 7756 } 7757 } 7758 7759 // Force callback invocation 7760 }, ignored ); 7761 } 7762} ); 7763 7764jQuery.each( { 7765 appendTo: "append", 7766 prependTo: "prepend", 7767 insertBefore: "before", 7768 insertAfter: "after", 7769 replaceAll: "replaceWith" 7770}, function( name, original ) { 7771 jQuery.fn[ name ] = function( selector ) { 7772 var elems, 7773 ret = [], 7774 insert = jQuery( selector ), 7775 last = insert.length - 1, 7776 i = 0; 7777 7778 for ( ; i <= last; i++ ) { 7779 elems = i === last ? this : this.clone( true ); 7780 jQuery( insert[ i ] )[ original ]( elems ); 7781 7782 // Support: Android <=4.0 only, PhantomJS 1 only 7783 // .get() because push.apply(_, arraylike) throws on ancient WebKit 7784 push.apply( ret, elems.get() ); 7785 } 7786 7787 return this.pushStack( ret ); 7788 }; 7789} ); 7790var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 7791 7792var rcustomProp = /^--/; 7793 7794 7795var getStyles = function( elem ) { 7796 7797 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 7798 // IE throws on elements created in popups 7799 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 7800 var view = elem.ownerDocument.defaultView; 7801 7802 if ( !view || !view.opener ) { 7803 view = window; 7804 } 7805 7806 return view.getComputedStyle( elem ); 7807 }; 7808 7809var swap = function( elem, options, callback ) { 7810 var ret, name, 7811 old = {}; 7812 7813 // Remember the old values, and insert the new ones 7814 for ( name in options ) { 7815 old[ name ] = elem.style[ name ]; 7816 elem.style[ name ] = options[ name ]; 7817 } 7818 7819 ret = callback.call( elem ); 7820 7821 // Revert the old values 7822 for ( name in options ) { 7823 elem.style[ name ] = old[ name ]; 7824 } 7825 7826 return ret; 7827}; 7828 7829 7830var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 7831 7832 7833 7834( function() { 7835 7836 // Executing both pixelPosition & boxSizingReliable tests require only one layout 7837 // so they're executed at the same time to save the second computation. 7838 function computeStyleTests() { 7839 7840 // This is a singleton, we need to execute it only once 7841 if ( !div ) { 7842 return; 7843 } 7844 7845 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 7846 "margin-top:1px;padding:0;border:0"; 7847 div.style.cssText = 7848 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 7849 "margin:auto;border:1px;padding:1px;" + 7850 "width:60%;top:1%"; 7851 documentElement.appendChild( container ).appendChild( div ); 7852 7853 var divStyle = window.getComputedStyle( div ); 7854 pixelPositionVal = divStyle.top !== "1%"; 7855 7856 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 7857 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 7858 7859 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 7860 // Some styles come back with percentage values, even though they shouldn't 7861 div.style.right = "60%"; 7862 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 7863 7864 // Support: IE 9 - 11 only 7865 // Detect misreporting of content dimensions for box-sizing:border-box elements 7866 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 7867 7868 // Support: IE 9 only 7869 // Detect overflow:scroll screwiness (gh-3699) 7870 // Support: Chrome <=64 7871 // Don't get tricked when zoom affects offsetWidth (gh-4029) 7872 div.style.position = "absolute"; 7873 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 7874 7875 documentElement.removeChild( container ); 7876 7877 // Nullify the div so it wouldn't be stored in the memory and 7878 // it will also be a sign that checks already performed 7879 div = null; 7880 } 7881 7882 function roundPixelMeasures( measure ) { 7883 return Math.round( parseFloat( measure ) ); 7884 } 7885 7886 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 7887 reliableTrDimensionsVal, reliableMarginLeftVal, 7888 container = document.createElement( "div" ), 7889 div = document.createElement( "div" ); 7890 7891 // Finish early in limited (non-browser) environments 7892 if ( !div.style ) { 7893 return; 7894 } 7895 7896 // Support: IE <=9 - 11 only 7897 // Style of cloned element affects source element cloned (trac-8908) 7898 div.style.backgroundClip = "content-box"; 7899 div.cloneNode( true ).style.backgroundClip = ""; 7900 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 7901 7902 jQuery.extend( support, { 7903 boxSizingReliable: function() { 7904 computeStyleTests(); 7905 return boxSizingReliableVal; 7906 }, 7907 pixelBoxStyles: function() { 7908 computeStyleTests(); 7909 return pixelBoxStylesVal; 7910 }, 7911 pixelPosition: function() { 7912 computeStyleTests(); 7913 return pixelPositionVal; 7914 }, 7915 reliableMarginLeft: function() { 7916 computeStyleTests(); 7917 return reliableMarginLeftVal; 7918 }, 7919 scrollboxSize: function() { 7920 computeStyleTests(); 7921 return scrollboxSizeVal; 7922 }, 7923 7924 // Support: IE 9 - 11+, Edge 15 - 18+ 7925 // IE/Edge misreport `getComputedStyle` of table rows with width/height 7926 // set in CSS while `offset*` properties report correct values. 7927 // Behavior in IE 9 is more subtle than in newer versions & it passes 7928 // some versions of this test; make sure not to make it pass there! 7929 // 7930 // Support: Firefox 70+ 7931 // Only Firefox includes border widths 7932 // in computed dimensions. (gh-4529) 7933 reliableTrDimensions: function() { 7934 var table, tr, trChild, trStyle; 7935 if ( reliableTrDimensionsVal == null ) { 7936 table = document.createElement( "table" ); 7937 tr = document.createElement( "tr" ); 7938 trChild = document.createElement( "div" ); 7939 7940 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 7941 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 7942 7943 // Support: Chrome 86+ 7944 // Height set through cssText does not get applied. 7945 // Computed height then comes back as 0. 7946 tr.style.height = "1px"; 7947 trChild.style.height = "9px"; 7948 7949 // Support: Android 8 Chrome 86+ 7950 // In our bodyBackground.html iframe, 7951 // display for all div elements is set to "inline", 7952 // which causes a problem only in Android 8 Chrome 86. 7953 // Ensuring the div is `display: block` 7954 // gets around this issue. 7955 trChild.style.display = "block"; 7956 7957 documentElement 7958 .appendChild( table ) 7959 .appendChild( tr ) 7960 .appendChild( trChild ); 7961 7962 trStyle = window.getComputedStyle( tr ); 7963 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 7964 parseInt( trStyle.borderTopWidth, 10 ) + 7965 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 7966 7967 documentElement.removeChild( table ); 7968 } 7969 return reliableTrDimensionsVal; 7970 } 7971 } ); 7972} )(); 7973 7974 7975function curCSS( elem, name, computed ) { 7976 var width, minWidth, maxWidth, ret, 7977 isCustomProp = rcustomProp.test( name ), 7978 7979 // Support: Firefox 51+ 7980 // Retrieving style before computed somehow 7981 // fixes an issue with getting wrong values 7982 // on detached elements 7983 style = elem.style; 7984 7985 computed = computed || getStyles( elem ); 7986 7987 // getPropertyValue is needed for: 7988 // .css('filter') (IE 9 only, trac-12537) 7989 // .css('--customProperty) (gh-3144) 7990 if ( computed ) { 7991 7992 // Support: IE <=9 - 11+ 7993 // IE only supports `"float"` in `getPropertyValue`; in computed styles 7994 // it's only available as `"cssFloat"`. We no longer modify properties 7995 // sent to `.css()` apart from camelCasing, so we need to check both. 7996 // Normally, this would create difference in behavior: if 7997 // `getPropertyValue` returns an empty string, the value returned 7998 // by `.css()` would be `undefined`. This is usually the case for 7999 // disconnected elements. However, in IE even disconnected elements 8000 // with no styles return `"none"` for `getPropertyValue( "float" )` 8001 ret = computed.getPropertyValue( name ) || computed[ name ]; 8002 8003 if ( isCustomProp && ret ) { 8004 8005 // Support: Firefox 105+, Chrome <=105+ 8006 // Spec requires trimming whitespace for custom properties (gh-4926). 8007 // Firefox only trims leading whitespace. Chrome just collapses 8008 // both leading & trailing whitespace to a single space. 8009 // 8010 // Fall back to `undefined` if empty string returned. 8011 // This collapses a missing definition with property defined 8012 // and set to an empty string but there's no standard API 8013 // allowing us to differentiate them without a performance penalty 8014 // and returning `undefined` aligns with older jQuery. 8015 // 8016 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 8017 // as whitespace while CSS does not, but this is not a problem 8018 // because CSS preprocessing replaces them with U+000A LINE FEED 8019 // (which *is* CSS whitespace) 8020 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 8021 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 8022 } 8023 8024 if ( ret === "" && !isAttached( elem ) ) { 8025 ret = jQuery.style( elem, name ); 8026 } 8027 8028 // A tribute to the "awesome hack by Dean Edwards" 8029 // Android Browser returns percentage for some values, 8030 // but width seems to be reliably pixels. 8031 // This is against the CSSOM draft spec: 8032 // https://drafts.csswg.org/cssom/#resolved-values 8033 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 8034 8035 // Remember the original values 8036 width = style.width; 8037 minWidth = style.minWidth; 8038 maxWidth = style.maxWidth; 8039 8040 // Put in the new values to get a computed value out 8041 style.minWidth = style.maxWidth = style.width = ret; 8042 ret = computed.width; 8043 8044 // Revert the changed values 8045 style.width = width; 8046 style.minWidth = minWidth; 8047 style.maxWidth = maxWidth; 8048 } 8049 } 8050 8051 return ret !== undefined ? 8052 8053 // Support: IE <=9 - 11 only 8054 // IE returns zIndex value as an integer. 8055 ret + "" : 8056 ret; 8057} 8058 8059 8060function addGetHookIf( conditionFn, hookFn ) { 8061 8062 // Define the hook, we'll check on the first run if it's really needed. 8063 return { 8064 get: function() { 8065 if ( conditionFn() ) { 8066 8067 // Hook not needed (or it's not possible to use it due 8068 // to missing dependency), remove it. 8069 delete this.get; 8070 return; 8071 } 8072 8073 // Hook needed; redefine it so that the support test is not executed again. 8074 return ( this.get = hookFn ).apply( this, arguments ); 8075 } 8076 }; 8077} 8078 8079 8080var cssPrefixes = [ "Webkit", "Moz", "ms" ], 8081 emptyStyle = document.createElement( "div" ).style, 8082 vendorProps = {}; 8083 8084// Return a vendor-prefixed property or undefined 8085function vendorPropName( name ) { 8086 8087 // Check for vendor prefixed names 8088 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 8089 i = cssPrefixes.length; 8090 8091 while ( i-- ) { 8092 name = cssPrefixes[ i ] + capName; 8093 if ( name in emptyStyle ) { 8094 return name; 8095 } 8096 } 8097} 8098 8099// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 8100function finalPropName( name ) { 8101 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 8102 8103 if ( final ) { 8104 return final; 8105 } 8106 if ( name in emptyStyle ) { 8107 return name; 8108 } 8109 return vendorProps[ name ] = vendorPropName( name ) || name; 8110} 8111 8112 8113var 8114 8115 // Swappable if display is none or starts with table 8116 // except "table", "table-cell", or "table-caption" 8117 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 8118 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 8119 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 8120 cssNormalTransform = { 8121 letterSpacing: "0", 8122 fontWeight: "400" 8123 }; 8124 8125function setPositiveNumber( _elem, value, subtract ) { 8126 8127 // Any relative (+/-) values have already been 8128 // normalized at this point 8129 var matches = rcssNum.exec( value ); 8130 return matches ? 8131 8132 // Guard against undefined "subtract", e.g., when used as in cssHooks 8133 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 8134 value; 8135} 8136 8137function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 8138 var i = dimension === "width" ? 1 : 0, 8139 extra = 0, 8140 delta = 0, 8141 marginDelta = 0; 8142 8143 // Adjustment may not be necessary 8144 if ( box === ( isBorderBox ? "border" : "content" ) ) { 8145 return 0; 8146 } 8147 8148 for ( ; i < 4; i += 2 ) { 8149 8150 // Both box models exclude margin 8151 // Count margin delta separately to only add it after scroll gutter adjustment. 8152 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 8153 if ( box === "margin" ) { 8154 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 8155 } 8156 8157 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 8158 if ( !isBorderBox ) { 8159 8160 // Add padding 8161 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 8162 8163 // For "border" or "margin", add border 8164 if ( box !== "padding" ) { 8165 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 8166 8167 // But still keep track of it otherwise 8168 } else { 8169 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 8170 } 8171 8172 // If we get here with a border-box (content + padding + border), we're seeking "content" or 8173 // "padding" or "margin" 8174 } else { 8175 8176 // For "content", subtract padding 8177 if ( box === "content" ) { 8178 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 8179 } 8180 8181 // For "content" or "padding", subtract border 8182 if ( box !== "margin" ) { 8183 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 8184 } 8185 } 8186 } 8187 8188 // Account for positive content-box scroll gutter when requested by providing computedVal 8189 if ( !isBorderBox && computedVal >= 0 ) { 8190 8191 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 8192 // Assuming integer scroll gutter, subtract the rest and round down 8193 delta += Math.max( 0, Math.ceil( 8194 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 8195 computedVal - 8196 delta - 8197 extra - 8198 0.5 8199 8200 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 8201 // Use an explicit zero to avoid NaN (gh-3964) 8202 ) ) || 0; 8203 } 8204 8205 return delta + marginDelta; 8206} 8207 8208function getWidthOrHeight( elem, dimension, extra ) { 8209 8210 // Start with computed style 8211 var styles = getStyles( elem ), 8212 8213 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 8214 // Fake content-box until we know it's needed to know the true value. 8215 boxSizingNeeded = !support.boxSizingReliable() || extra, 8216 isBorderBox = boxSizingNeeded && 8217 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 8218 valueIsBorderBox = isBorderBox, 8219 8220 val = curCSS( elem, dimension, styles ), 8221 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 8222 8223 // Support: Firefox <=54 8224 // Return a confounding non-pixel value or feign ignorance, as appropriate. 8225 if ( rnumnonpx.test( val ) ) { 8226 if ( !extra ) { 8227 return val; 8228 } 8229 val = "auto"; 8230 } 8231 8232 8233 // Support: IE 9 - 11 only 8234 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 8235 // In those cases, the computed value can be trusted to be border-box. 8236 if ( ( !support.boxSizingReliable() && isBorderBox || 8237 8238 // Support: IE 10 - 11+, Edge 15 - 18+ 8239 // IE/Edge misreport `getComputedStyle` of table rows with width/height 8240 // set in CSS while `offset*` properties report correct values. 8241 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 8242 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 8243 8244 // Fall back to offsetWidth/offsetHeight when value is "auto" 8245 // This happens for inline elements with no explicit setting (gh-3571) 8246 val === "auto" || 8247 8248 // Support: Android <=4.1 - 4.3 only 8249 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 8250 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 8251 8252 // Make sure the element is visible & connected 8253 elem.getClientRects().length ) { 8254 8255 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 8256 8257 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 8258 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 8259 // retrieved value as a content box dimension. 8260 valueIsBorderBox = offsetProp in elem; 8261 if ( valueIsBorderBox ) { 8262 val = elem[ offsetProp ]; 8263 } 8264 } 8265 8266 // Normalize "" and auto 8267 val = parseFloat( val ) || 0; 8268 8269 // Adjust for the element's box model 8270 return ( val + 8271 boxModelAdjustment( 8272 elem, 8273 dimension, 8274 extra || ( isBorderBox ? "border" : "content" ), 8275 valueIsBorderBox, 8276 styles, 8277 8278 // Provide the current computed size to request scroll gutter calculation (gh-3589) 8279 val 8280 ) 8281 ) + "px"; 8282} 8283 8284jQuery.extend( { 8285 8286 // Add in style property hooks for overriding the default 8287 // behavior of getting and setting a style property 8288 cssHooks: { 8289 opacity: { 8290 get: function( elem, computed ) { 8291 if ( computed ) { 8292 8293 // We should always get a number back from opacity 8294 var ret = curCSS( elem, "opacity" ); 8295 return ret === "" ? "1" : ret; 8296 } 8297 } 8298 } 8299 }, 8300 8301 // Don't automatically add "px" to these possibly-unitless properties 8302 cssNumber: { 8303 animationIterationCount: true, 8304 aspectRatio: true, 8305 borderImageSlice: true, 8306 columnCount: true, 8307 flexGrow: true, 8308 flexShrink: true, 8309 fontWeight: true, 8310 gridArea: true, 8311 gridColumn: true, 8312 gridColumnEnd: true, 8313 gridColumnStart: true, 8314 gridRow: true, 8315 gridRowEnd: true, 8316 gridRowStart: true, 8317 lineHeight: true, 8318 opacity: true, 8319 order: true, 8320 orphans: true, 8321 scale: true, 8322 widows: true, 8323 zIndex: true, 8324 zoom: true, 8325 8326 // SVG-related 8327 fillOpacity: true, 8328 floodOpacity: true, 8329 stopOpacity: true, 8330 strokeMiterlimit: true, 8331 strokeOpacity: true 8332 }, 8333 8334 // Add in properties whose names you wish to fix before 8335 // setting or getting the value 8336 cssProps: {}, 8337 8338 // Get and set the style property on a DOM Node 8339 style: function( elem, name, value, extra ) { 8340 8341 // Don't set styles on text and comment nodes 8342 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 8343 return; 8344 } 8345 8346 // Make sure that we're working with the right name 8347 var ret, type, hooks, 8348 origName = camelCase( name ), 8349 isCustomProp = rcustomProp.test( name ), 8350 style = elem.style; 8351 8352 // Make sure that we're working with the right name. We don't 8353 // want to query the value if it is a CSS custom property 8354 // since they are user-defined. 8355 if ( !isCustomProp ) { 8356 name = finalPropName( origName ); 8357 } 8358 8359 // Gets hook for the prefixed version, then unprefixed version 8360 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 8361 8362 // Check if we're setting a value 8363 if ( value !== undefined ) { 8364 type = typeof value; 8365 8366 // Convert "+=" or "-=" to relative numbers (trac-7345) 8367 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 8368 value = adjustCSS( elem, name, ret ); 8369 8370 // Fixes bug trac-9237 8371 type = "number"; 8372 } 8373 8374 // Make sure that null and NaN values aren't set (trac-7116) 8375 if ( value == null || value !== value ) { 8376 return; 8377 } 8378 8379 // If a number was passed in, add the unit (except for certain CSS properties) 8380 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 8381 // "px" to a few hardcoded values. 8382 if ( type === "number" && !isCustomProp ) { 8383 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 8384 } 8385 8386 // background-* props affect original clone's values 8387 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 8388 style[ name ] = "inherit"; 8389 } 8390 8391 // If a hook was provided, use that value, otherwise just set the specified value 8392 if ( !hooks || !( "set" in hooks ) || 8393 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 8394 8395 if ( isCustomProp ) { 8396 style.setProperty( name, value ); 8397 } else { 8398 style[ name ] = value; 8399 } 8400 } 8401 8402 } else { 8403 8404 // If a hook was provided get the non-computed value from there 8405 if ( hooks && "get" in hooks && 8406 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 8407 8408 return ret; 8409 } 8410 8411 // Otherwise just get the value from the style object 8412 return style[ name ]; 8413 } 8414 }, 8415 8416 css: function( elem, name, extra, styles ) { 8417 var val, num, hooks, 8418 origName = camelCase( name ), 8419 isCustomProp = rcustomProp.test( name ); 8420 8421 // Make sure that we're working with the right name. We don't 8422 // want to modify the value if it is a CSS custom property 8423 // since they are user-defined. 8424 if ( !isCustomProp ) { 8425 name = finalPropName( origName ); 8426 } 8427 8428 // Try prefixed name followed by the unprefixed name 8429 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 8430 8431 // If a hook was provided get the computed value from there 8432 if ( hooks && "get" in hooks ) { 8433 val = hooks.get( elem, true, extra ); 8434 } 8435 8436 // Otherwise, if a way to get the computed value exists, use that 8437 if ( val === undefined ) { 8438 val = curCSS( elem, name, styles ); 8439 } 8440 8441 // Convert "normal" to computed value 8442 if ( val === "normal" && name in cssNormalTransform ) { 8443 val = cssNormalTransform[ name ]; 8444 } 8445 8446 // Make numeric if forced or a qualifier was provided and val looks numeric 8447 if ( extra === "" || extra ) { 8448 num = parseFloat( val ); 8449 return extra === true || isFinite( num ) ? num || 0 : val; 8450 } 8451 8452 return val; 8453 } 8454} ); 8455 8456jQuery.each( [ "height", "width" ], function( _i, dimension ) { 8457 jQuery.cssHooks[ dimension ] = { 8458 get: function( elem, computed, extra ) { 8459 if ( computed ) { 8460 8461 // Certain elements can have dimension info if we invisibly show them 8462 // but it must have a current display style that would benefit 8463 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 8464 8465 // Support: Safari 8+ 8466 // Table columns in Safari have non-zero offsetWidth & zero 8467 // getBoundingClientRect().width unless display is changed. 8468 // Support: IE <=11 only 8469 // Running getBoundingClientRect on a disconnected node 8470 // in IE throws an error. 8471 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 8472 swap( elem, cssShow, function() { 8473 return getWidthOrHeight( elem, dimension, extra ); 8474 } ) : 8475 getWidthOrHeight( elem, dimension, extra ); 8476 } 8477 }, 8478 8479 set: function( elem, value, extra ) { 8480 var matches, 8481 styles = getStyles( elem ), 8482 8483 // Only read styles.position if the test has a chance to fail 8484 // to avoid forcing a reflow. 8485 scrollboxSizeBuggy = !support.scrollboxSize() && 8486 styles.position === "absolute", 8487 8488 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 8489 boxSizingNeeded = scrollboxSizeBuggy || extra, 8490 isBorderBox = boxSizingNeeded && 8491 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 8492 subtract = extra ? 8493 boxModelAdjustment( 8494 elem, 8495 dimension, 8496 extra, 8497 isBorderBox, 8498 styles 8499 ) : 8500 0; 8501 8502 // Account for unreliable border-box dimensions by comparing offset* to computed and 8503 // faking a content-box to get border and padding (gh-3699) 8504 if ( isBorderBox && scrollboxSizeBuggy ) { 8505 subtract -= Math.ceil( 8506 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 8507 parseFloat( styles[ dimension ] ) - 8508 boxModelAdjustment( elem, dimension, "border", false, styles ) - 8509 0.5 8510 ); 8511 } 8512 8513 // Convert to pixels if value adjustment is needed 8514 if ( subtract && ( matches = rcssNum.exec( value ) ) && 8515 ( matches[ 3 ] || "px" ) !== "px" ) { 8516 8517 elem.style[ dimension ] = value; 8518 value = jQuery.css( elem, dimension ); 8519 } 8520 8521 return setPositiveNumber( elem, value, subtract ); 8522 } 8523 }; 8524} ); 8525 8526jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 8527 function( elem, computed ) { 8528 if ( computed ) { 8529 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 8530 elem.getBoundingClientRect().left - 8531 swap( elem, { marginLeft: 0 }, function() { 8532 return elem.getBoundingClientRect().left; 8533 } ) 8534 ) + "px"; 8535 } 8536 } 8537); 8538 8539// These hooks are used by animate to expand properties 8540jQuery.each( { 8541 margin: "", 8542 padding: "", 8543 border: "Width" 8544}, function( prefix, suffix ) { 8545 jQuery.cssHooks[ prefix + suffix ] = { 8546 expand: function( value ) { 8547 var i = 0, 8548 expanded = {}, 8549 8550 // Assumes a single number if not a string 8551 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 8552 8553 for ( ; i < 4; i++ ) { 8554 expanded[ prefix + cssExpand[ i ] + suffix ] = 8555 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 8556 } 8557 8558 return expanded; 8559 } 8560 }; 8561 8562 if ( prefix !== "margin" ) { 8563 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 8564 } 8565} ); 8566 8567jQuery.fn.extend( { 8568 css: function( name, value ) { 8569 return access( this, function( elem, name, value ) { 8570 var styles, len, 8571 map = {}, 8572 i = 0; 8573 8574 if ( Array.isArray( name ) ) { 8575 styles = getStyles( elem ); 8576 len = name.length; 8577 8578 for ( ; i < len; i++ ) { 8579 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 8580 } 8581 8582 return map; 8583 } 8584 8585 return value !== undefined ? 8586 jQuery.style( elem, name, value ) : 8587 jQuery.css( elem, name ); 8588 }, name, value, arguments.length > 1 ); 8589 } 8590} ); 8591 8592 8593function Tween( elem, options, prop, end, easing ) { 8594 return new Tween.prototype.init( elem, options, prop, end, easing ); 8595} 8596jQuery.Tween = Tween; 8597 8598Tween.prototype = { 8599 constructor: Tween, 8600 init: function( elem, options, prop, end, easing, unit ) { 8601 this.elem = elem; 8602 this.prop = prop; 8603 this.easing = easing || jQuery.easing._default; 8604 this.options = options; 8605 this.start = this.now = this.cur(); 8606 this.end = end; 8607 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 8608 }, 8609 cur: function() { 8610 var hooks = Tween.propHooks[ this.prop ]; 8611 8612 return hooks && hooks.get ? 8613 hooks.get( this ) : 8614 Tween.propHooks._default.get( this ); 8615 }, 8616 run: function( percent ) { 8617 var eased, 8618 hooks = Tween.propHooks[ this.prop ]; 8619 8620 if ( this.options.duration ) { 8621 this.pos = eased = jQuery.easing[ this.easing ]( 8622 percent, this.options.duration * percent, 0, 1, this.options.duration 8623 ); 8624 } else { 8625 this.pos = eased = percent; 8626 } 8627 this.now = ( this.end - this.start ) * eased + this.start; 8628 8629 if ( this.options.step ) { 8630 this.options.step.call( this.elem, this.now, this ); 8631 } 8632 8633 if ( hooks && hooks.set ) { 8634 hooks.set( this ); 8635 } else { 8636 Tween.propHooks._default.set( this ); 8637 } 8638 return this; 8639 } 8640}; 8641 8642Tween.prototype.init.prototype = Tween.prototype; 8643 8644Tween.propHooks = { 8645 _default: { 8646 get: function( tween ) { 8647 var result; 8648 8649 // Use a property on the element directly when it is not a DOM element, 8650 // or when there is no matching style property that exists. 8651 if ( tween.elem.nodeType !== 1 || 8652 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 8653 return tween.elem[ tween.prop ]; 8654 } 8655 8656 // Passing an empty string as a 3rd parameter to .css will automatically 8657 // attempt a parseFloat and fallback to a string if the parse fails. 8658 // Simple values such as "10px" are parsed to Float; 8659 // complex values such as "rotate(1rad)" are returned as-is. 8660 result = jQuery.css( tween.elem, tween.prop, "" ); 8661 8662 // Empty strings, null, undefined and "auto" are converted to 0. 8663 return !result || result === "auto" ? 0 : result; 8664 }, 8665 set: function( tween ) { 8666 8667 // Use step hook for back compat. 8668 // Use cssHook if its there. 8669 // Use .style if available and use plain properties where available. 8670 if ( jQuery.fx.step[ tween.prop ] ) { 8671 jQuery.fx.step[ tween.prop ]( tween ); 8672 } else if ( tween.elem.nodeType === 1 && ( 8673 jQuery.cssHooks[ tween.prop ] || 8674 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 8675 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 8676 } else { 8677 tween.elem[ tween.prop ] = tween.now; 8678 } 8679 } 8680 } 8681}; 8682 8683// Support: IE <=9 only 8684// Panic based approach to setting things on disconnected nodes 8685Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 8686 set: function( tween ) { 8687 if ( tween.elem.nodeType && tween.elem.parentNode ) { 8688 tween.elem[ tween.prop ] = tween.now; 8689 } 8690 } 8691}; 8692 8693jQuery.easing = { 8694 linear: function( p ) { 8695 return p; 8696 }, 8697 swing: function( p ) { 8698 return 0.5 - Math.cos( p * Math.PI ) / 2; 8699 }, 8700 _default: "swing" 8701}; 8702 8703jQuery.fx = Tween.prototype.init; 8704 8705// Back compat <1.8 extension point 8706jQuery.fx.step = {}; 8707 8708 8709 8710 8711var 8712 fxNow, inProgress, 8713 rfxtypes = /^(?:toggle|show|hide)$/, 8714 rrun = /queueHooks$/; 8715 8716function schedule() { 8717 if ( inProgress ) { 8718 if ( document.hidden === false && window.requestAnimationFrame ) { 8719 window.requestAnimationFrame( schedule ); 8720 } else { 8721 window.setTimeout( schedule, jQuery.fx.interval ); 8722 } 8723 8724 jQuery.fx.tick(); 8725 } 8726} 8727 8728// Animations created synchronously will run synchronously 8729function createFxNow() { 8730 window.setTimeout( function() { 8731 fxNow = undefined; 8732 } ); 8733 return ( fxNow = Date.now() ); 8734} 8735 8736// Generate parameters to create a standard animation 8737function genFx( type, includeWidth ) { 8738 var which, 8739 i = 0, 8740 attrs = { height: type }; 8741 8742 // If we include width, step value is 1 to do all cssExpand values, 8743 // otherwise step value is 2 to skip over Left and Right 8744 includeWidth = includeWidth ? 1 : 0; 8745 for ( ; i < 4; i += 2 - includeWidth ) { 8746 which = cssExpand[ i ]; 8747 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 8748 } 8749 8750 if ( includeWidth ) { 8751 attrs.opacity = attrs.width = type; 8752 } 8753 8754 return attrs; 8755} 8756 8757function createTween( value, prop, animation ) { 8758 var tween, 8759 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 8760 index = 0, 8761 length = collection.length; 8762 for ( ; index < length; index++ ) { 8763 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 8764 8765 // We're done with this property 8766 return tween; 8767 } 8768 } 8769} 8770 8771function defaultPrefilter( elem, props, opts ) { 8772 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 8773 isBox = "width" in props || "height" in props, 8774 anim = this, 8775 orig = {}, 8776 style = elem.style, 8777 hidden = elem.nodeType && isHiddenWithinTree( elem ), 8778 dataShow = dataPriv.get( elem, "fxshow" ); 8779 8780 // Queue-skipping animations hijack the fx hooks 8781 if ( !opts.queue ) { 8782 hooks = jQuery._queueHooks( elem, "fx" ); 8783 if ( hooks.unqueued == null ) { 8784 hooks.unqueued = 0; 8785 oldfire = hooks.empty.fire; 8786 hooks.empty.fire = function() { 8787 if ( !hooks.unqueued ) { 8788 oldfire(); 8789 } 8790 }; 8791 } 8792 hooks.unqueued++; 8793 8794 anim.always( function() { 8795 8796 // Ensure the complete handler is called before this completes 8797 anim.always( function() { 8798 hooks.unqueued--; 8799 if ( !jQuery.queue( elem, "fx" ).length ) { 8800 hooks.empty.fire(); 8801 } 8802 } ); 8803 } ); 8804 } 8805 8806 // Detect show/hide animations 8807 for ( prop in props ) { 8808 value = props[ prop ]; 8809 if ( rfxtypes.test( value ) ) { 8810 delete props[ prop ]; 8811 toggle = toggle || value === "toggle"; 8812 if ( value === ( hidden ? "hide" : "show" ) ) { 8813 8814 // Pretend to be hidden if this is a "show" and 8815 // there is still data from a stopped show/hide 8816 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 8817 hidden = true; 8818 8819 // Ignore all other no-op show/hide data 8820 } else { 8821 continue; 8822 } 8823 } 8824 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 8825 } 8826 } 8827 8828 // Bail out if this is a no-op like .hide().hide() 8829 propTween = !jQuery.isEmptyObject( props ); 8830 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 8831 return; 8832 } 8833 8834 // Restrict "overflow" and "display" styles during box animations 8835 if ( isBox && elem.nodeType === 1 ) { 8836 8837 // Support: IE <=9 - 11, Edge 12 - 15 8838 // Record all 3 overflow attributes because IE does not infer the shorthand 8839 // from identically-valued overflowX and overflowY and Edge just mirrors 8840 // the overflowX value there. 8841 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 8842 8843 // Identify a display type, preferring old show/hide data over the CSS cascade 8844 restoreDisplay = dataShow && dataShow.display; 8845 if ( restoreDisplay == null ) { 8846 restoreDisplay = dataPriv.get( elem, "display" ); 8847 } 8848 display = jQuery.css( elem, "display" ); 8849 if ( display === "none" ) { 8850 if ( restoreDisplay ) { 8851 display = restoreDisplay; 8852 } else { 8853 8854 // Get nonempty value(s) by temporarily forcing visibility 8855 showHide( [ elem ], true ); 8856 restoreDisplay = elem.style.display || restoreDisplay; 8857 display = jQuery.css( elem, "display" ); 8858 showHide( [ elem ] ); 8859 } 8860 } 8861 8862 // Animate inline elements as inline-block 8863 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 8864 if ( jQuery.css( elem, "float" ) === "none" ) { 8865 8866 // Restore the original display value at the end of pure show/hide animations 8867 if ( !propTween ) { 8868 anim.done( function() { 8869 style.display = restoreDisplay; 8870 } ); 8871 if ( restoreDisplay == null ) { 8872 display = style.display; 8873 restoreDisplay = display === "none" ? "" : display; 8874 } 8875 } 8876 style.display = "inline-block"; 8877 } 8878 } 8879 } 8880 8881 if ( opts.overflow ) { 8882 style.overflow = "hidden"; 8883 anim.always( function() { 8884 style.overflow = opts.overflow[ 0 ]; 8885 style.overflowX = opts.overflow[ 1 ]; 8886 style.overflowY = opts.overflow[ 2 ]; 8887 } ); 8888 } 8889 8890 // Implement show/hide animations 8891 propTween = false; 8892 for ( prop in orig ) { 8893 8894 // General show/hide setup for this element animation 8895 if ( !propTween ) { 8896 if ( dataShow ) { 8897 if ( "hidden" in dataShow ) { 8898 hidden = dataShow.hidden; 8899 } 8900 } else { 8901 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 8902 } 8903 8904 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 8905 if ( toggle ) { 8906 dataShow.hidden = !hidden; 8907 } 8908 8909 // Show elements before animating them 8910 if ( hidden ) { 8911 showHide( [ elem ], true ); 8912 } 8913 8914 /* eslint-disable no-loop-func */ 8915 8916 anim.done( function() { 8917 8918 /* eslint-enable no-loop-func */ 8919 8920 // The final step of a "hide" animation is actually hiding the element 8921 if ( !hidden ) { 8922 showHide( [ elem ] ); 8923 } 8924 dataPriv.remove( elem, "fxshow" ); 8925 for ( prop in orig ) { 8926 jQuery.style( elem, prop, orig[ prop ] ); 8927 } 8928 } ); 8929 } 8930 8931 // Per-property setup 8932 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 8933 if ( !( prop in dataShow ) ) { 8934 dataShow[ prop ] = propTween.start; 8935 if ( hidden ) { 8936 propTween.end = propTween.start; 8937 propTween.start = 0; 8938 } 8939 } 8940 } 8941} 8942 8943function propFilter( props, specialEasing ) { 8944 var index, name, easing, value, hooks; 8945 8946 // camelCase, specialEasing and expand cssHook pass 8947 for ( index in props ) { 8948 name = camelCase( index ); 8949 easing = specialEasing[ name ]; 8950 value = props[ index ]; 8951 if ( Array.isArray( value ) ) { 8952 easing = value[ 1 ]; 8953 value = props[ index ] = value[ 0 ]; 8954 } 8955 8956 if ( index !== name ) { 8957 props[ name ] = value; 8958 delete props[ index ]; 8959 } 8960 8961 hooks = jQuery.cssHooks[ name ]; 8962 if ( hooks && "expand" in hooks ) { 8963 value = hooks.expand( value ); 8964 delete props[ name ]; 8965 8966 // Not quite $.extend, this won't overwrite existing keys. 8967 // Reusing 'index' because we have the correct "name" 8968 for ( index in value ) { 8969 if ( !( index in props ) ) { 8970 props[ index ] = value[ index ]; 8971 specialEasing[ index ] = easing; 8972 } 8973 } 8974 } else { 8975 specialEasing[ name ] = easing; 8976 } 8977 } 8978} 8979 8980function Animation( elem, properties, options ) { 8981 var result, 8982 stopped, 8983 index = 0, 8984 length = Animation.prefilters.length, 8985 deferred = jQuery.Deferred().always( function() { 8986 8987 // Don't match elem in the :animated selector 8988 delete tick.elem; 8989 } ), 8990 tick = function() { 8991 if ( stopped ) { 8992 return false; 8993 } 8994 var currentTime = fxNow || createFxNow(), 8995 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 8996 8997 // Support: Android 2.3 only 8998 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 8999 temp = remaining / animation.duration || 0, 9000 percent = 1 - temp, 9001 index = 0, 9002 length = animation.tweens.length; 9003 9004 for ( ; index < length; index++ ) { 9005 animation.tweens[ index ].run( percent ); 9006 } 9007 9008 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 9009 9010 // If there's more to do, yield 9011 if ( percent < 1 && length ) { 9012 return remaining; 9013 } 9014 9015 // If this was an empty animation, synthesize a final progress notification 9016 if ( !length ) { 9017 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 9018 } 9019 9020 // Resolve the animation and report its conclusion 9021 deferred.resolveWith( elem, [ animation ] ); 9022 return false; 9023 }, 9024 animation = deferred.promise( { 9025 elem: elem, 9026 props: jQuery.extend( {}, properties ), 9027 opts: jQuery.extend( true, { 9028 specialEasing: {}, 9029 easing: jQuery.easing._default 9030 }, options ), 9031 originalProperties: properties, 9032 originalOptions: options, 9033 startTime: fxNow || createFxNow(), 9034 duration: options.duration, 9035 tweens: [], 9036 createTween: function( prop, end ) { 9037 var tween = jQuery.Tween( elem, animation.opts, prop, end, 9038 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 9039 animation.tweens.push( tween ); 9040 return tween; 9041 }, 9042 stop: function( gotoEnd ) { 9043 var index = 0, 9044 9045 // If we are going to the end, we want to run all the tweens 9046 // otherwise we skip this part 9047 length = gotoEnd ? animation.tweens.length : 0; 9048 if ( stopped ) { 9049 return this; 9050 } 9051 stopped = true; 9052 for ( ; index < length; index++ ) { 9053 animation.tweens[ index ].run( 1 ); 9054 } 9055 9056 // Resolve when we played the last frame; otherwise, reject 9057 if ( gotoEnd ) { 9058 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 9059 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 9060 } else { 9061 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 9062 } 9063 return this; 9064 } 9065 } ), 9066 props = animation.props; 9067 9068 propFilter( props, animation.opts.specialEasing ); 9069 9070 for ( ; index < length; index++ ) { 9071 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 9072 if ( result ) { 9073 if ( isFunction( result.stop ) ) { 9074 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 9075 result.stop.bind( result ); 9076 } 9077 return result; 9078 } 9079 } 9080 9081 jQuery.map( props, createTween, animation ); 9082 9083 if ( isFunction( animation.opts.start ) ) { 9084 animation.opts.start.call( elem, animation ); 9085 } 9086 9087 // Attach callbacks from options 9088 animation 9089 .progress( animation.opts.progress ) 9090 .done( animation.opts.done, animation.opts.complete ) 9091 .fail( animation.opts.fail ) 9092 .always( animation.opts.always ); 9093 9094 jQuery.fx.timer( 9095 jQuery.extend( tick, { 9096 elem: elem, 9097 anim: animation, 9098 queue: animation.opts.queue 9099 } ) 9100 ); 9101 9102 return animation; 9103} 9104 9105jQuery.Animation = jQuery.extend( Animation, { 9106 9107 tweeners: { 9108 "*": [ function( prop, value ) { 9109 var tween = this.createTween( prop, value ); 9110 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 9111 return tween; 9112 } ] 9113 }, 9114 9115 tweener: function( props, callback ) { 9116 if ( isFunction( props ) ) { 9117 callback = props; 9118 props = [ "*" ]; 9119 } else { 9120 props = props.match( rnothtmlwhite ); 9121 } 9122 9123 var prop, 9124 index = 0, 9125 length = props.length; 9126 9127 for ( ; index < length; index++ ) { 9128 prop = props[ index ]; 9129 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 9130 Animation.tweeners[ prop ].unshift( callback ); 9131 } 9132 }, 9133 9134 prefilters: [ defaultPrefilter ], 9135 9136 prefilter: function( callback, prepend ) { 9137 if ( prepend ) { 9138 Animation.prefilters.unshift( callback ); 9139 } else { 9140 Animation.prefilters.push( callback ); 9141 } 9142 } 9143} ); 9144 9145jQuery.speed = function( speed, easing, fn ) { 9146 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 9147 complete: fn || !fn && easing || 9148 isFunction( speed ) && speed, 9149 duration: speed, 9150 easing: fn && easing || easing && !isFunction( easing ) && easing 9151 }; 9152 9153 // Go to the end state if fx are off 9154 if ( jQuery.fx.off ) { 9155 opt.duration = 0; 9156 9157 } else { 9158 if ( typeof opt.duration !== "number" ) { 9159 if ( opt.duration in jQuery.fx.speeds ) { 9160 opt.duration = jQuery.fx.speeds[ opt.duration ]; 9161 9162 } else { 9163 opt.duration = jQuery.fx.speeds._default; 9164 } 9165 } 9166 } 9167 9168 // Normalize opt.queue - true/undefined/null -> "fx" 9169 if ( opt.queue == null || opt.queue === true ) { 9170 opt.queue = "fx"; 9171 } 9172 9173 // Queueing 9174 opt.old = opt.complete; 9175 9176 opt.complete = function() { 9177 if ( isFunction( opt.old ) ) { 9178 opt.old.call( this ); 9179 } 9180 9181 if ( opt.queue ) { 9182 jQuery.dequeue( this, opt.queue ); 9183 } 9184 }; 9185 9186 return opt; 9187}; 9188 9189jQuery.fn.extend( { 9190 fadeTo: function( speed, to, easing, callback ) { 9191 9192 // Show any hidden elements after setting opacity to 0 9193 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 9194 9195 // Animate to the value specified 9196 .end().animate( { opacity: to }, speed, easing, callback ); 9197 }, 9198 animate: function( prop, speed, easing, callback ) { 9199 var empty = jQuery.isEmptyObject( prop ), 9200 optall = jQuery.speed( speed, easing, callback ), 9201 doAnimation = function() { 9202 9203 // Operate on a copy of prop so per-property easing won't be lost 9204 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 9205 9206 // Empty animations, or finishing resolves immediately 9207 if ( empty || dataPriv.get( this, "finish" ) ) { 9208 anim.stop( true ); 9209 } 9210 }; 9211 9212 doAnimation.finish = doAnimation; 9213 9214 return empty || optall.queue === false ? 9215 this.each( doAnimation ) : 9216 this.queue( optall.queue, doAnimation ); 9217 }, 9218 stop: function( type, clearQueue, gotoEnd ) { 9219 var stopQueue = function( hooks ) { 9220 var stop = hooks.stop; 9221 delete hooks.stop; 9222 stop( gotoEnd ); 9223 }; 9224 9225 if ( typeof type !== "string" ) { 9226 gotoEnd = clearQueue; 9227 clearQueue = type; 9228 type = undefined; 9229 } 9230 if ( clearQueue ) { 9231 this.queue( type || "fx", [] ); 9232 } 9233 9234 return this.each( function() { 9235 var dequeue = true, 9236 index = type != null && type + "queueHooks", 9237 timers = jQuery.timers, 9238 data = dataPriv.get( this ); 9239 9240 if ( index ) { 9241 if ( data[ index ] && data[ index ].stop ) { 9242 stopQueue( data[ index ] ); 9243 } 9244 } else { 9245 for ( index in data ) { 9246 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 9247 stopQueue( data[ index ] ); 9248 } 9249 } 9250 } 9251 9252 for ( index = timers.length; index--; ) { 9253 if ( timers[ index ].elem === this && 9254 ( type == null || timers[ index ].queue === type ) ) { 9255 9256 timers[ index ].anim.stop( gotoEnd ); 9257 dequeue = false; 9258 timers.splice( index, 1 ); 9259 } 9260 } 9261 9262 // Start the next in the queue if the last step wasn't forced. 9263 // Timers currently will call their complete callbacks, which 9264 // will dequeue but only if they were gotoEnd. 9265 if ( dequeue || !gotoEnd ) { 9266 jQuery.dequeue( this, type ); 9267 } 9268 } ); 9269 }, 9270 finish: function( type ) { 9271 if ( type !== false ) { 9272 type = type || "fx"; 9273 } 9274 return this.each( function() { 9275 var index, 9276 data = dataPriv.get( this ), 9277 queue = data[ type + "queue" ], 9278 hooks = data[ type + "queueHooks" ], 9279 timers = jQuery.timers, 9280 length = queue ? queue.length : 0; 9281 9282 // Enable finishing flag on private data 9283 data.finish = true; 9284 9285 // Empty the queue first 9286 jQuery.queue( this, type, [] ); 9287 9288 if ( hooks && hooks.stop ) { 9289 hooks.stop.call( this, true ); 9290 } 9291 9292 // Look for any active animations, and finish them 9293 for ( index = timers.length; index--; ) { 9294 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 9295 timers[ index ].anim.stop( true ); 9296 timers.splice( index, 1 ); 9297 } 9298 } 9299 9300 // Look for any animations in the old queue and finish them 9301 for ( index = 0; index < length; index++ ) { 9302 if ( queue[ index ] && queue[ index ].finish ) { 9303 queue[ index ].finish.call( this ); 9304 } 9305 } 9306 9307 // Turn off finishing flag 9308 delete data.finish; 9309 } ); 9310 } 9311} ); 9312 9313jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 9314 var cssFn = jQuery.fn[ name ]; 9315 jQuery.fn[ name ] = function( speed, easing, callback ) { 9316 return speed == null || typeof speed === "boolean" ? 9317 cssFn.apply( this, arguments ) : 9318 this.animate( genFx( name, true ), speed, easing, callback ); 9319 }; 9320} ); 9321 9322// Generate shortcuts for custom animations 9323jQuery.each( { 9324 slideDown: genFx( "show" ), 9325 slideUp: genFx( "hide" ), 9326 slideToggle: genFx( "toggle" ), 9327 fadeIn: { opacity: "show" }, 9328 fadeOut: { opacity: "hide" }, 9329 fadeToggle: { opacity: "toggle" } 9330}, function( name, props ) { 9331 jQuery.fn[ name ] = function( speed, easing, callback ) { 9332 return this.animate( props, speed, easing, callback ); 9333 }; 9334} ); 9335 9336jQuery.timers = []; 9337jQuery.fx.tick = function() { 9338 var timer, 9339 i = 0, 9340 timers = jQuery.timers; 9341 9342 fxNow = Date.now(); 9343 9344 for ( ; i < timers.length; i++ ) { 9345 timer = timers[ i ]; 9346 9347 // Run the timer and safely remove it when done (allowing for external removal) 9348 if ( !timer() && timers[ i ] === timer ) { 9349 timers.splice( i--, 1 ); 9350 } 9351 } 9352 9353 if ( !timers.length ) { 9354 jQuery.fx.stop(); 9355 } 9356 fxNow = undefined; 9357}; 9358 9359jQuery.fx.timer = function( timer ) { 9360 jQuery.timers.push( timer ); 9361 jQuery.fx.start(); 9362}; 9363 9364jQuery.fx.interval = 13; 9365jQuery.fx.start = function() { 9366 if ( inProgress ) { 9367 return; 9368 } 9369 9370 inProgress = true; 9371 schedule(); 9372}; 9373 9374jQuery.fx.stop = function() { 9375 inProgress = null; 9376}; 9377 9378jQuery.fx.speeds = { 9379 slow: 600, 9380 fast: 200, 9381 9382 // Default speed 9383 _default: 400 9384}; 9385 9386 9387// Based off of the plugin by Clint Helfers, with permission. 9388jQuery.fn.delay = function( time, type ) { 9389 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 9390 type = type || "fx"; 9391 9392 return this.queue( type, function( next, hooks ) { 9393 var timeout = window.setTimeout( next, time ); 9394 hooks.stop = function() { 9395 window.clearTimeout( timeout ); 9396 }; 9397 } ); 9398}; 9399 9400 9401( function() { 9402 var input = document.createElement( "input" ), 9403 select = document.createElement( "select" ), 9404 opt = select.appendChild( document.createElement( "option" ) ); 9405 9406 input.type = "checkbox"; 9407 9408 // Support: Android <=4.3 only 9409 // Default value for a checkbox should be "on" 9410 support.checkOn = input.value !== ""; 9411 9412 // Support: IE <=11 only 9413 // Must access selectedIndex to make default options select 9414 support.optSelected = opt.selected; 9415 9416 // Support: IE <=11 only 9417 // An input loses its value after becoming a radio 9418 input = document.createElement( "input" ); 9419 input.value = "t"; 9420 input.type = "radio"; 9421 support.radioValue = input.value === "t"; 9422} )(); 9423 9424 9425var boolHook, 9426 attrHandle = jQuery.expr.attrHandle; 9427 9428jQuery.fn.extend( { 9429 attr: function( name, value ) { 9430 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 9431 }, 9432 9433 removeAttr: function( name ) { 9434 return this.each( function() { 9435 jQuery.removeAttr( this, name ); 9436 } ); 9437 } 9438} ); 9439 9440jQuery.extend( { 9441 attr: function( elem, name, value ) { 9442 var ret, hooks, 9443 nType = elem.nodeType; 9444 9445 // Don't get/set attributes on text, comment and attribute nodes 9446 if ( nType === 3 || nType === 8 || nType === 2 ) { 9447 return; 9448 } 9449 9450 // Fallback to prop when attributes are not supported 9451 if ( typeof elem.getAttribute === "undefined" ) { 9452 return jQuery.prop( elem, name, value ); 9453 } 9454 9455 // Attribute hooks are determined by the lowercase version 9456 // Grab necessary hook if one is defined 9457 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 9458 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 9459 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 9460 } 9461 9462 if ( value !== undefined ) { 9463 if ( value === null ) { 9464 jQuery.removeAttr( elem, name ); 9465 return; 9466 } 9467 9468 if ( hooks && "set" in hooks && 9469 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 9470 return ret; 9471 } 9472 9473 elem.setAttribute( name, value + "" ); 9474 return value; 9475 } 9476 9477 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 9478 return ret; 9479 } 9480 9481 ret = jQuery.find.attr( elem, name ); 9482 9483 // Non-existent attributes return null, we normalize to undefined 9484 return ret == null ? undefined : ret; 9485 }, 9486 9487 attrHooks: { 9488 type: { 9489 set: function( elem, value ) { 9490 if ( !support.radioValue && value === "radio" && 9491 nodeName( elem, "input" ) ) { 9492 var val = elem.value; 9493 elem.setAttribute( "type", value ); 9494 if ( val ) { 9495 elem.value = val; 9496 } 9497 return value; 9498 } 9499 } 9500 } 9501 }, 9502 9503 removeAttr: function( elem, value ) { 9504 var name, 9505 i = 0, 9506 9507 // Attribute names can contain non-HTML whitespace characters 9508 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 9509 attrNames = value && value.match( rnothtmlwhite ); 9510 9511 if ( attrNames && elem.nodeType === 1 ) { 9512 while ( ( name = attrNames[ i++ ] ) ) { 9513 elem.removeAttribute( name ); 9514 } 9515 } 9516 } 9517} ); 9518 9519// Hooks for boolean attributes 9520boolHook = { 9521 set: function( elem, value, name ) { 9522 if ( value === false ) { 9523 9524 // Remove boolean attributes when set to false 9525 jQuery.removeAttr( elem, name ); 9526 } else { 9527 elem.setAttribute( name, name ); 9528 } 9529 return name; 9530 } 9531}; 9532 9533jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 9534 var getter = attrHandle[ name ] || jQuery.find.attr; 9535 9536 attrHandle[ name ] = function( elem, name, isXML ) { 9537 var ret, handle, 9538 lowercaseName = name.toLowerCase(); 9539 9540 if ( !isXML ) { 9541 9542 // Avoid an infinite loop by temporarily removing this function from the getter 9543 handle = attrHandle[ lowercaseName ]; 9544 attrHandle[ lowercaseName ] = ret; 9545 ret = getter( elem, name, isXML ) != null ? 9546 lowercaseName : 9547 null; 9548 attrHandle[ lowercaseName ] = handle; 9549 } 9550 return ret; 9551 }; 9552} ); 9553 9554 9555 9556 9557var rfocusable = /^(?:input|select|textarea|button)$/i, 9558 rclickable = /^(?:a|area)$/i; 9559 9560jQuery.fn.extend( { 9561 prop: function( name, value ) { 9562 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 9563 }, 9564 9565 removeProp: function( name ) { 9566 return this.each( function() { 9567 delete this[ jQuery.propFix[ name ] || name ]; 9568 } ); 9569 } 9570} ); 9571 9572jQuery.extend( { 9573 prop: function( elem, name, value ) { 9574 var ret, hooks, 9575 nType = elem.nodeType; 9576 9577 // Don't get/set properties on text, comment and attribute nodes 9578 if ( nType === 3 || nType === 8 || nType === 2 ) { 9579 return; 9580 } 9581 9582 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 9583 9584 // Fix name and attach hooks 9585 name = jQuery.propFix[ name ] || name; 9586 hooks = jQuery.propHooks[ name ]; 9587 } 9588 9589 if ( value !== undefined ) { 9590 if ( hooks && "set" in hooks && 9591 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 9592 return ret; 9593 } 9594 9595 return ( elem[ name ] = value ); 9596 } 9597 9598 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 9599 return ret; 9600 } 9601 9602 return elem[ name ]; 9603 }, 9604 9605 propHooks: { 9606 tabIndex: { 9607 get: function( elem ) { 9608 9609 // Support: IE <=9 - 11 only 9610 // elem.tabIndex doesn't always return the 9611 // correct value when it hasn't been explicitly set 9612 // Use proper attribute retrieval (trac-12072) 9613 var tabindex = jQuery.find.attr( elem, "tabindex" ); 9614 9615 if ( tabindex ) { 9616 return parseInt( tabindex, 10 ); 9617 } 9618 9619 if ( 9620 rfocusable.test( elem.nodeName ) || 9621 rclickable.test( elem.nodeName ) && 9622 elem.href 9623 ) { 9624 return 0; 9625 } 9626 9627 return -1; 9628 } 9629 } 9630 }, 9631 9632 propFix: { 9633 "for": "htmlFor", 9634 "class": "className" 9635 } 9636} ); 9637 9638// Support: IE <=11 only 9639// Accessing the selectedIndex property 9640// forces the browser to respect setting selected 9641// on the option 9642// The getter ensures a default option is selected 9643// when in an optgroup 9644// eslint rule "no-unused-expressions" is disabled for this code 9645// since it considers such accessions noop 9646if ( !support.optSelected ) { 9647 jQuery.propHooks.selected = { 9648 get: function( elem ) { 9649 9650 /* eslint no-unused-expressions: "off" */ 9651 9652 var parent = elem.parentNode; 9653 if ( parent && parent.parentNode ) { 9654 parent.parentNode.selectedIndex; 9655 } 9656 return null; 9657 }, 9658 set: function( elem ) { 9659 9660 /* eslint no-unused-expressions: "off" */ 9661 9662 var parent = elem.parentNode; 9663 if ( parent ) { 9664 parent.selectedIndex; 9665 9666 if ( parent.parentNode ) { 9667 parent.parentNode.selectedIndex; 9668 } 9669 } 9670 } 9671 }; 9672} 9673 9674jQuery.each( [ 9675 "tabIndex", 9676 "readOnly", 9677 "maxLength", 9678 "cellSpacing", 9679 "cellPadding", 9680 "rowSpan", 9681 "colSpan", 9682 "useMap", 9683 "frameBorder", 9684 "contentEditable" 9685], function() { 9686 jQuery.propFix[ this.toLowerCase() ] = this; 9687} ); 9688 9689 9690 9691 9692 // Strip and collapse whitespace according to HTML spec 9693 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 9694 function stripAndCollapse( value ) { 9695 var tokens = value.match( rnothtmlwhite ) || []; 9696 return tokens.join( " " ); 9697 } 9698 9699 9700function getClass( elem ) { 9701 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 9702} 9703 9704function classesToArray( value ) { 9705 if ( Array.isArray( value ) ) { 9706 return value; 9707 } 9708 if ( typeof value === "string" ) { 9709 return value.match( rnothtmlwhite ) || []; 9710 } 9711 return []; 9712} 9713 9714jQuery.fn.extend( { 9715 addClass: function( value ) { 9716 var classNames, cur, curValue, className, i, finalValue; 9717 9718 if ( isFunction( value ) ) { 9719 return this.each( function( j ) { 9720 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 9721 } ); 9722 } 9723 9724 classNames = classesToArray( value ); 9725 9726 if ( classNames.length ) { 9727 return this.each( function() { 9728 curValue = getClass( this ); 9729 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 9730 9731 if ( cur ) { 9732 for ( i = 0; i < classNames.length; i++ ) { 9733 className = classNames[ i ]; 9734 if ( cur.indexOf( " " + className + " " ) < 0 ) { 9735 cur += className + " "; 9736 } 9737 } 9738 9739 // Only assign if different to avoid unneeded rendering. 9740 finalValue = stripAndCollapse( cur ); 9741 if ( curValue !== finalValue ) { 9742 this.setAttribute( "class", finalValue ); 9743 } 9744 } 9745 } ); 9746 } 9747 9748 return this; 9749 }, 9750 9751 removeClass: function( value ) { 9752 var classNames, cur, curValue, className, i, finalValue; 9753 9754 if ( isFunction( value ) ) { 9755 return this.each( function( j ) { 9756 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 9757 } ); 9758 } 9759 9760 if ( !arguments.length ) { 9761 return this.attr( "class", "" ); 9762 } 9763 9764 classNames = classesToArray( value ); 9765 9766 if ( classNames.length ) { 9767 return this.each( function() { 9768 curValue = getClass( this ); 9769 9770 // This expression is here for better compressibility (see addClass) 9771 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 9772 9773 if ( cur ) { 9774 for ( i = 0; i < classNames.length; i++ ) { 9775 className = classNames[ i ]; 9776 9777 // Remove *all* instances 9778 while ( cur.indexOf( " " + className + " " ) > -1 ) { 9779 cur = cur.replace( " " + className + " ", " " ); 9780 } 9781 } 9782 9783 // Only assign if different to avoid unneeded rendering. 9784 finalValue = stripAndCollapse( cur ); 9785 if ( curValue !== finalValue ) { 9786 this.setAttribute( "class", finalValue ); 9787 } 9788 } 9789 } ); 9790 } 9791 9792 return this; 9793 }, 9794 9795 toggleClass: function( value, stateVal ) { 9796 var classNames, className, i, self, 9797 type = typeof value, 9798 isValidValue = type === "string" || Array.isArray( value ); 9799 9800 if ( isFunction( value ) ) { 9801 return this.each( function( i ) { 9802 jQuery( this ).toggleClass( 9803 value.call( this, i, getClass( this ), stateVal ), 9804 stateVal 9805 ); 9806 } ); 9807 } 9808 9809 if ( typeof stateVal === "boolean" && isValidValue ) { 9810 return stateVal ? this.addClass( value ) : this.removeClass( value ); 9811 } 9812 9813 classNames = classesToArray( value ); 9814 9815 return this.each( function() { 9816 if ( isValidValue ) { 9817 9818 // Toggle individual class names 9819 self = jQuery( this ); 9820 9821 for ( i = 0; i < classNames.length; i++ ) { 9822 className = classNames[ i ]; 9823 9824 // Check each className given, space separated list 9825 if ( self.hasClass( className ) ) { 9826 self.removeClass( className ); 9827 } else { 9828 self.addClass( className ); 9829 } 9830 } 9831 9832 // Toggle whole class name 9833 } else if ( value === undefined || type === "boolean" ) { 9834 className = getClass( this ); 9835 if ( className ) { 9836 9837 // Store className if set 9838 dataPriv.set( this, "__className__", className ); 9839 } 9840 9841 // If the element has a class name or if we're passed `false`, 9842 // then remove the whole classname (if there was one, the above saved it). 9843 // Otherwise bring back whatever was previously saved (if anything), 9844 // falling back to the empty string if nothing was stored. 9845 if ( this.setAttribute ) { 9846 this.setAttribute( "class", 9847 className || value === false ? 9848 "" : 9849 dataPriv.get( this, "__className__" ) || "" 9850 ); 9851 } 9852 } 9853 } ); 9854 }, 9855 9856 hasClass: function( selector ) { 9857 var className, elem, 9858 i = 0; 9859 9860 className = " " + selector + " "; 9861 while ( ( elem = this[ i++ ] ) ) { 9862 if ( elem.nodeType === 1 && 9863 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 9864 return true; 9865 } 9866 } 9867 9868 return false; 9869 } 9870} ); 9871 9872 9873 9874 9875var rreturn = /\r/g; 9876 9877jQuery.fn.extend( { 9878 val: function( value ) { 9879 var hooks, ret, valueIsFunction, 9880 elem = this[ 0 ]; 9881 9882 if ( !arguments.length ) { 9883 if ( elem ) { 9884 hooks = jQuery.valHooks[ elem.type ] || 9885 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 9886 9887 if ( hooks && 9888 "get" in hooks && 9889 ( ret = hooks.get( elem, "value" ) ) !== undefined 9890 ) { 9891 return ret; 9892 } 9893 9894 ret = elem.value; 9895 9896 // Handle most common string cases 9897 if ( typeof ret === "string" ) { 9898 return ret.replace( rreturn, "" ); 9899 } 9900 9901 // Handle cases where value is null/undef or number 9902 return ret == null ? "" : ret; 9903 } 9904 9905 return; 9906 } 9907 9908 valueIsFunction = isFunction( value ); 9909 9910 return this.each( function( i ) { 9911 var val; 9912 9913 if ( this.nodeType !== 1 ) { 9914 return; 9915 } 9916 9917 if ( valueIsFunction ) { 9918 val = value.call( this, i, jQuery( this ).val() ); 9919 } else { 9920 val = value; 9921 } 9922 9923 // Treat null/undefined as ""; convert numbers to string 9924 if ( val == null ) { 9925 val = ""; 9926 9927 } else if ( typeof val === "number" ) { 9928 val += ""; 9929 9930 } else if ( Array.isArray( val ) ) { 9931 val = jQuery.map( val, function( value ) { 9932 return value == null ? "" : value + ""; 9933 } ); 9934 } 9935 9936 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 9937 9938 // If set returns undefined, fall back to normal setting 9939 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 9940 this.value = val; 9941 } 9942 } ); 9943 } 9944} ); 9945 9946jQuery.extend( { 9947 valHooks: { 9948 option: { 9949 get: function( elem ) { 9950 9951 var val = jQuery.find.attr( elem, "value" ); 9952 return val != null ? 9953 val : 9954 9955 // Support: IE <=10 - 11 only 9956 // option.text throws exceptions (trac-14686, trac-14858) 9957 // Strip and collapse whitespace 9958 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 9959 stripAndCollapse( jQuery.text( elem ) ); 9960 } 9961 }, 9962 select: { 9963 get: function( elem ) { 9964 var value, option, i, 9965 options = elem.options, 9966 index = elem.selectedIndex, 9967 one = elem.type === "select-one", 9968 values = one ? null : [], 9969 max = one ? index + 1 : options.length; 9970 9971 if ( index < 0 ) { 9972 i = max; 9973 9974 } else { 9975 i = one ? index : 0; 9976 } 9977 9978 // Loop through all the selected options 9979 for ( ; i < max; i++ ) { 9980 option = options[ i ]; 9981 9982 // Support: IE <=9 only 9983 // IE8-9 doesn't update selected after form reset (trac-2551) 9984 if ( ( option.selected || i === index ) && 9985 9986 // Don't return options that are disabled or in a disabled optgroup 9987 !option.disabled && 9988 ( !option.parentNode.disabled || 9989 !nodeName( option.parentNode, "optgroup" ) ) ) { 9990 9991 // Get the specific value for the option 9992 value = jQuery( option ).val(); 9993 9994 // We don't need an array for one selects 9995 if ( one ) { 9996 return value; 9997 } 9998 9999 // Multi-Selects return an array 10000 values.push( value ); 10001 } 10002 } 10003 10004 return values; 10005 }, 10006 10007 set: function( elem, value ) { 10008 var optionSet, option, 10009 options = elem.options, 10010 values = jQuery.makeArray( value ), 10011 i = options.length; 10012 10013 while ( i-- ) { 10014 option = options[ i ]; 10015 10016 /* eslint-disable no-cond-assign */ 10017 10018 if ( option.selected = 10019 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 10020 ) { 10021 optionSet = true; 10022 } 10023 10024 /* eslint-enable no-cond-assign */ 10025 } 10026 10027 // Force browsers to behave consistently when non-matching value is set 10028 if ( !optionSet ) { 10029 elem.selectedIndex = -1; 10030 } 10031 return values; 10032 } 10033 } 10034 } 10035} ); 10036 10037// Radios and checkboxes getter/setter 10038jQuery.each( [ "radio", "checkbox" ], function() { 10039 jQuery.valHooks[ this ] = { 10040 set: function( elem, value ) { 10041 if ( Array.isArray( value ) ) { 10042 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 10043 } 10044 } 10045 }; 10046 if ( !support.checkOn ) { 10047 jQuery.valHooks[ this ].get = function( elem ) { 10048 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 10049 }; 10050 } 10051} ); 10052 10053 10054 10055 10056// Return jQuery for attributes-only inclusion 10057var location = window.location; 10058 10059var nonce = { guid: Date.now() }; 10060 10061var rquery = ( /\?/ ); 10062 10063 10064 10065// Cross-browser xml parsing 10066jQuery.parseXML = function( data ) { 10067 var xml, parserErrorElem; 10068 if ( !data || typeof data !== "string" ) { 10069 return null; 10070 } 10071 10072 // Support: IE 9 - 11 only 10073 // IE throws on parseFromString with invalid input. 10074 try { 10075 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 10076 } catch ( e ) {} 10077 10078 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 10079 if ( !xml || parserErrorElem ) { 10080 jQuery.error( "Invalid XML: " + ( 10081 parserErrorElem ? 10082 jQuery.map( parserErrorElem.childNodes, function( el ) { 10083 return el.textContent; 10084 } ).join( "\n" ) : 10085 data 10086 ) ); 10087 } 10088 return xml; 10089}; 10090 10091 10092var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 10093 stopPropagationCallback = function( e ) { 10094 e.stopPropagation(); 10095 }; 10096 10097jQuery.extend( jQuery.event, { 10098 10099 trigger: function( event, data, elem, onlyHandlers ) { 10100 10101 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 10102 eventPath = [ elem || document ], 10103 type = hasOwn.call( event, "type" ) ? event.type : event, 10104 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 10105 10106 cur = lastElement = tmp = elem = elem || document; 10107 10108 // Don't do events on text and comment nodes 10109 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 10110 return; 10111 } 10112 10113 // focus/blur morphs to focusin/out; ensure we're not firing them right now 10114 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 10115 return; 10116 } 10117 10118 if ( type.indexOf( "." ) > -1 ) { 10119 10120 // Namespaced trigger; create a regexp to match event type in handle() 10121 namespaces = type.split( "." ); 10122 type = namespaces.shift(); 10123 namespaces.sort(); 10124 } 10125 ontype = type.indexOf( ":" ) < 0 && "on" + type; 10126 10127 // Caller can pass in a jQuery.Event object, Object, or just an event type string 10128 event = event[ jQuery.expando ] ? 10129 event : 10130 new jQuery.Event( type, typeof event === "object" && event ); 10131 10132 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 10133 event.isTrigger = onlyHandlers ? 2 : 3; 10134 event.namespace = namespaces.join( "." ); 10135 event.rnamespace = event.namespace ? 10136 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 10137 null; 10138 10139 // Clean up the event in case it is being reused 10140 event.result = undefined; 10141 if ( !event.target ) { 10142 event.target = elem; 10143 } 10144 10145 // Clone any incoming data and prepend the event, creating the handler arg list 10146 data = data == null ? 10147 [ event ] : 10148 jQuery.makeArray( data, [ event ] ); 10149 10150 // Allow special events to draw outside the lines 10151 special = jQuery.event.special[ type ] || {}; 10152 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 10153 return; 10154 } 10155 10156 // Determine event propagation path in advance, per W3C events spec (trac-9951) 10157 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 10158 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 10159 10160 bubbleType = special.delegateType || type; 10161 if ( !rfocusMorph.test( bubbleType + type ) ) { 10162 cur = cur.parentNode; 10163 } 10164 for ( ; cur; cur = cur.parentNode ) { 10165 eventPath.push( cur ); 10166 tmp = cur; 10167 } 10168 10169 // Only add window if we got to document (e.g., not plain obj or detached DOM) 10170 if ( tmp === ( elem.ownerDocument || document ) ) { 10171 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 10172 } 10173 } 10174 10175 // Fire handlers on the event path 10176 i = 0; 10177 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 10178 lastElement = cur; 10179 event.type = i > 1 ? 10180 bubbleType : 10181 special.bindType || type; 10182 10183 // jQuery handler 10184 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 10185 dataPriv.get( cur, "handle" ); 10186 if ( handle ) { 10187 handle.apply( cur, data ); 10188 } 10189 10190 // Native handler 10191 handle = ontype && cur[ ontype ]; 10192 if ( handle && handle.apply && acceptData( cur ) ) { 10193 event.result = handle.apply( cur, data ); 10194 if ( event.result === false ) { 10195 event.preventDefault(); 10196 } 10197 } 10198 } 10199 event.type = type; 10200 10201 // If nobody prevented the default action, do it now 10202 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 10203 10204 if ( ( !special._default || 10205 special._default.apply( eventPath.pop(), data ) === false ) && 10206 acceptData( elem ) ) { 10207 10208 // Call a native DOM method on the target with the same name as the event. 10209 // Don't do default actions on window, that's where global variables be (trac-6170) 10210 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 10211 10212 // Don't re-trigger an onFOO event when we call its FOO() method 10213 tmp = elem[ ontype ]; 10214 10215 if ( tmp ) { 10216 elem[ ontype ] = null; 10217 } 10218 10219 // Prevent re-triggering of the same event, since we already bubbled it above 10220 jQuery.event.triggered = type; 10221 10222 if ( event.isPropagationStopped() ) { 10223 lastElement.addEventListener( type, stopPropagationCallback ); 10224 } 10225 10226 elem[ type ](); 10227 10228 if ( event.isPropagationStopped() ) { 10229 lastElement.removeEventListener( type, stopPropagationCallback ); 10230 } 10231 10232 jQuery.event.triggered = undefined; 10233 10234 if ( tmp ) { 10235 elem[ ontype ] = tmp; 10236 } 10237 } 10238 } 10239 } 10240 10241 return event.result; 10242 }, 10243 10244 // Piggyback on a donor event to simulate a different one 10245 // Used only for `focus(in | out)` events 10246 simulate: function( type, elem, event ) { 10247 var e = jQuery.extend( 10248 new jQuery.Event(), 10249 event, 10250 { 10251 type: type, 10252 isSimulated: true 10253 } 10254 ); 10255 10256 jQuery.event.trigger( e, null, elem ); 10257 } 10258 10259} ); 10260 10261jQuery.fn.extend( { 10262 10263 trigger: function( type, data ) { 10264 return this.each( function() { 10265 jQuery.event.trigger( type, data, this ); 10266 } ); 10267 }, 10268 triggerHandler: function( type, data ) { 10269 var elem = this[ 0 ]; 10270 if ( elem ) { 10271 return jQuery.event.trigger( type, data, elem, true ); 10272 } 10273 } 10274} ); 10275 10276 10277var 10278 rbracket = /\[\]$/, 10279 rCRLF = /\r?\n/g, 10280 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 10281 rsubmittable = /^(?:input|select|textarea|keygen)/i; 10282 10283function buildParams( prefix, obj, traditional, add ) { 10284 var name; 10285 10286 if ( Array.isArray( obj ) ) { 10287 10288 // Serialize array item. 10289 jQuery.each( obj, function( i, v ) { 10290 if ( traditional || rbracket.test( prefix ) ) { 10291 10292 // Treat each array item as a scalar. 10293 add( prefix, v ); 10294 10295 } else { 10296 10297 // Item is non-scalar (array or object), encode its numeric index. 10298 buildParams( 10299 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 10300 v, 10301 traditional, 10302 add 10303 ); 10304 } 10305 } ); 10306 10307 } else if ( !traditional && toType( obj ) === "object" ) { 10308 10309 // Serialize object item. 10310 for ( name in obj ) { 10311 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 10312 } 10313 10314 } else { 10315 10316 // Serialize scalar item. 10317 add( prefix, obj ); 10318 } 10319} 10320 10321// Serialize an array of form elements or a set of 10322// key/values into a query string 10323jQuery.param = function( a, traditional ) { 10324 var prefix, 10325 s = [], 10326 add = function( key, valueOrFunction ) { 10327 10328 // If value is a function, invoke it and use its return value 10329 var value = isFunction( valueOrFunction ) ? 10330 valueOrFunction() : 10331 valueOrFunction; 10332 10333 s[ s.length ] = encodeURIComponent( key ) + "=" + 10334 encodeURIComponent( value == null ? "" : value ); 10335 }; 10336 10337 if ( a == null ) { 10338 return ""; 10339 } 10340 10341 // If an array was passed in, assume that it is an array of form elements. 10342 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 10343 10344 // Serialize the form elements 10345 jQuery.each( a, function() { 10346 add( this.name, this.value ); 10347 } ); 10348 10349 } else { 10350 10351 // If traditional, encode the "old" way (the way 1.3.2 or older 10352 // did it), otherwise encode params recursively. 10353 for ( prefix in a ) { 10354 buildParams( prefix, a[ prefix ], traditional, add ); 10355 } 10356 } 10357 10358 // Return the resulting serialization 10359 return s.join( "&" ); 10360}; 10361 10362jQuery.fn.extend( { 10363 serialize: function() { 10364 return jQuery.param( this.serializeArray() ); 10365 }, 10366 serializeArray: function() { 10367 return this.map( function() { 10368 10369 // Can add propHook for "elements" to filter or add form elements 10370 var elements = jQuery.prop( this, "elements" ); 10371 return elements ? jQuery.makeArray( elements ) : this; 10372 } ).filter( function() { 10373 var type = this.type; 10374 10375 // Use .is( ":disabled" ) so that fieldset[disabled] works 10376 return this.name && !jQuery( this ).is( ":disabled" ) && 10377 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 10378 ( this.checked || !rcheckableType.test( type ) ); 10379 } ).map( function( _i, elem ) { 10380 var val = jQuery( this ).val(); 10381 10382 if ( val == null ) { 10383 return null; 10384 } 10385 10386 if ( Array.isArray( val ) ) { 10387 return jQuery.map( val, function( val ) { 10388 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 10389 } ); 10390 } 10391 10392 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 10393 } ).get(); 10394 } 10395} ); 10396 10397 10398var 10399 r20 = /%20/g, 10400 rhash = /#.*$/, 10401 rantiCache = /([?&])_=[^&]*/, 10402 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 10403 10404 // trac-7653, trac-8125, trac-8152: local protocol detection 10405 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 10406 rnoContent = /^(?:GET|HEAD)$/, 10407 rprotocol = /^\/\//, 10408 10409 /* Prefilters 10410 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 10411 * 2) These are called: 10412 * - BEFORE asking for a transport 10413 * - AFTER param serialization (s.data is a string if s.processData is true) 10414 * 3) key is the dataType 10415 * 4) the catchall symbol "*" can be used 10416 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 10417 */ 10418 prefilters = {}, 10419 10420 /* Transports bindings 10421 * 1) key is the dataType 10422 * 2) the catchall symbol "*" can be used 10423 * 3) selection will start with transport dataType and THEN go to "*" if needed 10424 */ 10425 transports = {}, 10426 10427 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 10428 allTypes = "*/".concat( "*" ), 10429 10430 // Anchor tag for parsing the document origin 10431 originAnchor = document.createElement( "a" ); 10432 10433originAnchor.href = location.href; 10434 10435// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 10436function addToPrefiltersOrTransports( structure ) { 10437 10438 // dataTypeExpression is optional and defaults to "*" 10439 return function( dataTypeExpression, func ) { 10440 10441 if ( typeof dataTypeExpression !== "string" ) { 10442 func = dataTypeExpression; 10443 dataTypeExpression = "*"; 10444 } 10445 10446 var dataType, 10447 i = 0, 10448 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 10449 10450 if ( isFunction( func ) ) { 10451 10452 // For each dataType in the dataTypeExpression 10453 while ( ( dataType = dataTypes[ i++ ] ) ) { 10454 10455 // Prepend if requested 10456 if ( dataType[ 0 ] === "+" ) { 10457 dataType = dataType.slice( 1 ) || "*"; 10458 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 10459 10460 // Otherwise append 10461 } else { 10462 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 10463 } 10464 } 10465 } 10466 }; 10467} 10468 10469// Base inspection function for prefilters and transports 10470function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 10471 10472 var inspected = {}, 10473 seekingTransport = ( structure === transports ); 10474 10475 function inspect( dataType ) { 10476 var selected; 10477 inspected[ dataType ] = true; 10478 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 10479 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 10480 if ( typeof dataTypeOrTransport === "string" && 10481 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 10482 10483 options.dataTypes.unshift( dataTypeOrTransport ); 10484 inspect( dataTypeOrTransport ); 10485 return false; 10486 } else if ( seekingTransport ) { 10487 return !( selected = dataTypeOrTransport ); 10488 } 10489 } ); 10490 return selected; 10491 } 10492 10493 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 10494} 10495 10496// A special extend for ajax options 10497// that takes "flat" options (not to be deep extended) 10498// Fixes trac-9887 10499function ajaxExtend( target, src ) { 10500 var key, deep, 10501 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 10502 10503 for ( key in src ) { 10504 if ( src[ key ] !== undefined ) { 10505 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 10506 } 10507 } 10508 if ( deep ) { 10509 jQuery.extend( true, target, deep ); 10510 } 10511 10512 return target; 10513} 10514 10515/* Handles responses to an ajax request: 10516 * - finds the right dataType (mediates between content-type and expected dataType) 10517 * - returns the corresponding response 10518 */ 10519function ajaxHandleResponses( s, jqXHR, responses ) { 10520 10521 var ct, type, finalDataType, firstDataType, 10522 contents = s.contents, 10523 dataTypes = s.dataTypes; 10524 10525 // Remove auto dataType and get content-type in the process 10526 while ( dataTypes[ 0 ] === "*" ) { 10527 dataTypes.shift(); 10528 if ( ct === undefined ) { 10529 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 10530 } 10531 } 10532 10533 // Check if we're dealing with a known content-type 10534 if ( ct ) { 10535 for ( type in contents ) { 10536 if ( contents[ type ] && contents[ type ].test( ct ) ) { 10537 dataTypes.unshift( type ); 10538 break; 10539 } 10540 } 10541 } 10542 10543 // Check to see if we have a response for the expected dataType 10544 if ( dataTypes[ 0 ] in responses ) { 10545 finalDataType = dataTypes[ 0 ]; 10546 } else { 10547 10548 // Try convertible dataTypes 10549 for ( type in responses ) { 10550 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 10551 finalDataType = type; 10552 break; 10553 } 10554 if ( !firstDataType ) { 10555 firstDataType = type; 10556 } 10557 } 10558 10559 // Or just use first one 10560 finalDataType = finalDataType || firstDataType; 10561 } 10562 10563 // If we found a dataType 10564 // We add the dataType to the list if needed 10565 // and return the corresponding response 10566 if ( finalDataType ) { 10567 if ( finalDataType !== dataTypes[ 0 ] ) { 10568 dataTypes.unshift( finalDataType ); 10569 } 10570 return responses[ finalDataType ]; 10571 } 10572} 10573 10574/* Chain conversions given the request and the original response 10575 * Also sets the responseXXX fields on the jqXHR instance 10576 */ 10577function ajaxConvert( s, response, jqXHR, isSuccess ) { 10578 var conv2, current, conv, tmp, prev, 10579 converters = {}, 10580 10581 // Work with a copy of dataTypes in case we need to modify it for conversion 10582 dataTypes = s.dataTypes.slice(); 10583 10584 // Create converters map with lowercased keys 10585 if ( dataTypes[ 1 ] ) { 10586 for ( conv in s.converters ) { 10587 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 10588 } 10589 } 10590 10591 current = dataTypes.shift(); 10592 10593 // Convert to each sequential dataType 10594 while ( current ) { 10595 10596 if ( s.responseFields[ current ] ) { 10597 jqXHR[ s.responseFields[ current ] ] = response; 10598 } 10599 10600 // Apply the dataFilter if provided 10601 if ( !prev && isSuccess && s.dataFilter ) { 10602 response = s.dataFilter( response, s.dataType ); 10603 } 10604 10605 prev = current; 10606 current = dataTypes.shift(); 10607 10608 if ( current ) { 10609 10610 // There's only work to do if current dataType is non-auto 10611 if ( current === "*" ) { 10612 10613 current = prev; 10614 10615 // Convert response if prev dataType is non-auto and differs from current 10616 } else if ( prev !== "*" && prev !== current ) { 10617 10618 // Seek a direct converter 10619 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 10620 10621 // If none found, seek a pair 10622 if ( !conv ) { 10623 for ( conv2 in converters ) { 10624 10625 // If conv2 outputs current 10626 tmp = conv2.split( " " ); 10627 if ( tmp[ 1 ] === current ) { 10628 10629 // If prev can be converted to accepted input 10630 conv = converters[ prev + " " + tmp[ 0 ] ] || 10631 converters[ "* " + tmp[ 0 ] ]; 10632 if ( conv ) { 10633 10634 // Condense equivalence converters 10635 if ( conv === true ) { 10636 conv = converters[ conv2 ]; 10637 10638 // Otherwise, insert the intermediate dataType 10639 } else if ( converters[ conv2 ] !== true ) { 10640 current = tmp[ 0 ]; 10641 dataTypes.unshift( tmp[ 1 ] ); 10642 } 10643 break; 10644 } 10645 } 10646 } 10647 } 10648 10649 // Apply converter (if not an equivalence) 10650 if ( conv !== true ) { 10651 10652 // Unless errors are allowed to bubble, catch and return them 10653 if ( conv && s.throws ) { 10654 response = conv( response ); 10655 } else { 10656 try { 10657 response = conv( response ); 10658 } catch ( e ) { 10659 return { 10660 state: "parsererror", 10661 error: conv ? e : "No conversion from " + prev + " to " + current 10662 }; 10663 } 10664 } 10665 } 10666 } 10667 } 10668 } 10669 10670 return { state: "success", data: response }; 10671} 10672 10673jQuery.extend( { 10674 10675 // Counter for holding the number of active queries 10676 active: 0, 10677 10678 // Last-Modified header cache for next request 10679 lastModified: {}, 10680 etag: {}, 10681 10682 ajaxSettings: { 10683 url: location.href, 10684 type: "GET", 10685 isLocal: rlocalProtocol.test( location.protocol ), 10686 global: true, 10687 processData: true, 10688 async: true, 10689 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 10690 10691 /* 10692 timeout: 0, 10693 data: null, 10694 dataType: null, 10695 username: null, 10696 password: null, 10697 cache: null, 10698 throws: false, 10699 traditional: false, 10700 headers: {}, 10701 */ 10702 10703 accepts: { 10704 "*": allTypes, 10705 text: "text/plain", 10706 html: "text/html", 10707 xml: "application/xml, text/xml", 10708 json: "application/json, text/javascript" 10709 }, 10710 10711 contents: { 10712 xml: /\bxml\b/, 10713 html: /\bhtml/, 10714 json: /\bjson\b/ 10715 }, 10716 10717 responseFields: { 10718 xml: "responseXML", 10719 text: "responseText", 10720 json: "responseJSON" 10721 }, 10722 10723 // Data converters 10724 // Keys separate source (or catchall "*") and destination types with a single space 10725 converters: { 10726 10727 // Convert anything to text 10728 "* text": String, 10729 10730 // Text to html (true = no transformation) 10731 "text html": true, 10732 10733 // Evaluate text as a json expression 10734 "text json": JSON.parse, 10735 10736 // Parse text as xml 10737 "text xml": jQuery.parseXML 10738 }, 10739 10740 // For options that shouldn't be deep extended: 10741 // you can add your own custom options here if 10742 // and when you create one that shouldn't be 10743 // deep extended (see ajaxExtend) 10744 flatOptions: { 10745 url: true, 10746 context: true 10747 } 10748 }, 10749 10750 // Creates a full fledged settings object into target 10751 // with both ajaxSettings and settings fields. 10752 // If target is omitted, writes into ajaxSettings. 10753 ajaxSetup: function( target, settings ) { 10754 return settings ? 10755 10756 // Building a settings object 10757 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 10758 10759 // Extending ajaxSettings 10760 ajaxExtend( jQuery.ajaxSettings, target ); 10761 }, 10762 10763 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 10764 ajaxTransport: addToPrefiltersOrTransports( transports ), 10765 10766 // Main method 10767 ajax: function( url, options ) { 10768 10769 // If url is an object, simulate pre-1.5 signature 10770 if ( typeof url === "object" ) { 10771 options = url; 10772 url = undefined; 10773 } 10774 10775 // Force options to be an object 10776 options = options || {}; 10777 10778 var transport, 10779 10780 // URL without anti-cache param 10781 cacheURL, 10782 10783 // Response headers 10784 responseHeadersString, 10785 responseHeaders, 10786 10787 // timeout handle 10788 timeoutTimer, 10789 10790 // Url cleanup var 10791 urlAnchor, 10792 10793 // Request state (becomes false upon send and true upon completion) 10794 completed, 10795 10796 // To know if global events are to be dispatched 10797 fireGlobals, 10798 10799 // Loop variable 10800 i, 10801 10802 // uncached part of the url 10803 uncached, 10804 10805 // Create the final options object 10806 s = jQuery.ajaxSetup( {}, options ), 10807 10808 // Callbacks context 10809 callbackContext = s.context || s, 10810 10811 // Context for global events is callbackContext if it is a DOM node or jQuery collection 10812 globalEventContext = s.context && 10813 ( callbackContext.nodeType || callbackContext.jquery ) ? 10814 jQuery( callbackContext ) : 10815 jQuery.event, 10816 10817 // Deferreds 10818 deferred = jQuery.Deferred(), 10819 completeDeferred = jQuery.Callbacks( "once memory" ), 10820 10821 // Status-dependent callbacks 10822 statusCode = s.statusCode || {}, 10823 10824 // Headers (they are sent all at once) 10825 requestHeaders = {}, 10826 requestHeadersNames = {}, 10827 10828 // Default abort message 10829 strAbort = "canceled", 10830 10831 // Fake xhr 10832 jqXHR = { 10833 readyState: 0, 10834 10835 // Builds headers hashtable if needed 10836 getResponseHeader: function( key ) { 10837 var match; 10838 if ( completed ) { 10839 if ( !responseHeaders ) { 10840 responseHeaders = {}; 10841 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 10842 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 10843 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 10844 .concat( match[ 2 ] ); 10845 } 10846 } 10847 match = responseHeaders[ key.toLowerCase() + " " ]; 10848 } 10849 return match == null ? null : match.join( ", " ); 10850 }, 10851 10852 // Raw string 10853 getAllResponseHeaders: function() { 10854 return completed ? responseHeadersString : null; 10855 }, 10856 10857 // Caches the header 10858 setRequestHeader: function( name, value ) { 10859 if ( completed == null ) { 10860 name = requestHeadersNames[ name.toLowerCase() ] = 10861 requestHeadersNames[ name.toLowerCase() ] || name; 10862 requestHeaders[ name ] = value; 10863 } 10864 return this; 10865 }, 10866 10867 // Overrides response content-type header 10868 overrideMimeType: function( type ) { 10869 if ( completed == null ) { 10870 s.mimeType = type; 10871 } 10872 return this; 10873 }, 10874 10875 // Status-dependent callbacks 10876 statusCode: function( map ) { 10877 var code; 10878 if ( map ) { 10879 if ( completed ) { 10880 10881 // Execute the appropriate callbacks 10882 jqXHR.always( map[ jqXHR.status ] ); 10883 } else { 10884 10885 // Lazy-add the new callbacks in a way that preserves old ones 10886 for ( code in map ) { 10887 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 10888 } 10889 } 10890 } 10891 return this; 10892 }, 10893 10894 // Cancel the request 10895 abort: function( statusText ) { 10896 var finalText = statusText || strAbort; 10897 if ( transport ) { 10898 transport.abort( finalText ); 10899 } 10900 done( 0, finalText ); 10901 return this; 10902 } 10903 }; 10904 10905 // Attach deferreds 10906 deferred.promise( jqXHR ); 10907 10908 // Add protocol if not provided (prefilters might expect it) 10909 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 10910 // We also use the url parameter if available 10911 s.url = ( ( url || s.url || location.href ) + "" ) 10912 .replace( rprotocol, location.protocol + "//" ); 10913 10914 // Alias method option to type as per ticket trac-12004 10915 s.type = options.method || options.type || s.method || s.type; 10916 10917 // Extract dataTypes list 10918 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 10919 10920 // A cross-domain request is in order when the origin doesn't match the current origin. 10921 if ( s.crossDomain == null ) { 10922 urlAnchor = document.createElement( "a" ); 10923 10924 // Support: IE <=8 - 11, Edge 12 - 15 10925 // IE throws exception on accessing the href property if url is malformed, 10926 // e.g. http://example.com:80x/ 10927 try { 10928 urlAnchor.href = s.url; 10929 10930 // Support: IE <=8 - 11 only 10931 // Anchor's host property isn't correctly set when s.url is relative 10932 urlAnchor.href = urlAnchor.href; 10933 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 10934 urlAnchor.protocol + "//" + urlAnchor.host; 10935 } catch ( e ) { 10936 10937 // If there is an error parsing the URL, assume it is crossDomain, 10938 // it can be rejected by the transport if it is invalid 10939 s.crossDomain = true; 10940 } 10941 } 10942 10943 // Convert data if not already a string 10944 if ( s.data && s.processData && typeof s.data !== "string" ) { 10945 s.data = jQuery.param( s.data, s.traditional ); 10946 } 10947 10948 // Apply prefilters 10949 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 10950 10951 // If request was aborted inside a prefilter, stop there 10952 if ( completed ) { 10953 return jqXHR; 10954 } 10955 10956 // We can fire global events as of now if asked to 10957 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 10958 fireGlobals = jQuery.event && s.global; 10959 10960 // Watch for a new set of requests 10961 if ( fireGlobals && jQuery.active++ === 0 ) { 10962 jQuery.event.trigger( "ajaxStart" ); 10963 } 10964 10965 // Uppercase the type 10966 s.type = s.type.toUpperCase(); 10967 10968 // Determine if request has content 10969 s.hasContent = !rnoContent.test( s.type ); 10970 10971 // Save the URL in case we're toying with the If-Modified-Since 10972 // and/or If-None-Match header later on 10973 // Remove hash to simplify url manipulation 10974 cacheURL = s.url.replace( rhash, "" ); 10975 10976 // More options handling for requests with no content 10977 if ( !s.hasContent ) { 10978 10979 // Remember the hash so we can put it back 10980 uncached = s.url.slice( cacheURL.length ); 10981 10982 // If data is available and should be processed, append data to url 10983 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 10984 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 10985 10986 // trac-9682: remove data so that it's not used in an eventual retry 10987 delete s.data; 10988 } 10989 10990 // Add or update anti-cache param if needed 10991 if ( s.cache === false ) { 10992 cacheURL = cacheURL.replace( rantiCache, "$1" ); 10993 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 10994 uncached; 10995 } 10996 10997 // Put hash and anti-cache on the URL that will be requested (gh-1732) 10998 s.url = cacheURL + uncached; 10999 11000 // Change '%20' to '+' if this is encoded form body content (gh-2658) 11001 } else if ( s.data && s.processData && 11002 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 11003 s.data = s.data.replace( r20, "+" ); 11004 } 11005 11006 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 11007 if ( s.ifModified ) { 11008 if ( jQuery.lastModified[ cacheURL ] ) { 11009 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 11010 } 11011 if ( jQuery.etag[ cacheURL ] ) { 11012 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 11013 } 11014 } 11015 11016 // Set the correct header, if data is being sent 11017 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 11018 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 11019 } 11020 11021 // Set the Accepts header for the server, depending on the dataType 11022 jqXHR.setRequestHeader( 11023 "Accept", 11024 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 11025 s.accepts[ s.dataTypes[ 0 ] ] + 11026 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 11027 s.accepts[ "*" ] 11028 ); 11029 11030 // Check for headers option 11031 for ( i in s.headers ) { 11032 jqXHR.setRequestHeader( i, s.headers[ i ] ); 11033 } 11034 11035 // Allow custom headers/mimetypes and early abort 11036 if ( s.beforeSend && 11037 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 11038 11039 // Abort if not done already and return 11040 return jqXHR.abort(); 11041 } 11042 11043 // Aborting is no longer a cancellation 11044 strAbort = "abort"; 11045 11046 // Install callbacks on deferreds 11047 completeDeferred.add( s.complete ); 11048 jqXHR.done( s.success ); 11049 jqXHR.fail( s.error ); 11050 11051 // Get transport 11052 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 11053 11054 // If no transport, we auto-abort 11055 if ( !transport ) { 11056 done( -1, "No Transport" ); 11057 } else { 11058 jqXHR.readyState = 1; 11059 11060 // Send global event 11061 if ( fireGlobals ) { 11062 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 11063 } 11064 11065 // If request was aborted inside ajaxSend, stop there 11066 if ( completed ) { 11067 return jqXHR; 11068 } 11069 11070 // Timeout 11071 if ( s.async && s.timeout > 0 ) { 11072 timeoutTimer = window.setTimeout( function() { 11073 jqXHR.abort( "timeout" ); 11074 }, s.timeout ); 11075 } 11076 11077 try { 11078 completed = false; 11079 transport.send( requestHeaders, done ); 11080 } catch ( e ) { 11081 11082 // Rethrow post-completion exceptions 11083 if ( completed ) { 11084 throw e; 11085 } 11086 11087 // Propagate others as results 11088 done( -1, e ); 11089 } 11090 } 11091 11092 // Callback for when everything is done 11093 function done( status, nativeStatusText, responses, headers ) { 11094 var isSuccess, success, error, response, modified, 11095 statusText = nativeStatusText; 11096 11097 // Ignore repeat invocations 11098 if ( completed ) { 11099 return; 11100 } 11101 11102 completed = true; 11103 11104 // Clear timeout if it exists 11105 if ( timeoutTimer ) { 11106 window.clearTimeout( timeoutTimer ); 11107 } 11108 11109 // Dereference transport for early garbage collection 11110 // (no matter how long the jqXHR object will be used) 11111 transport = undefined; 11112 11113 // Cache response headers 11114 responseHeadersString = headers || ""; 11115 11116 // Set readyState 11117 jqXHR.readyState = status > 0 ? 4 : 0; 11118 11119 // Determine if successful 11120 isSuccess = status >= 200 && status < 300 || status === 304; 11121 11122 // Get response data 11123 if ( responses ) { 11124 response = ajaxHandleResponses( s, jqXHR, responses ); 11125 } 11126 11127 // Use a noop converter for missing script but not if jsonp 11128 if ( !isSuccess && 11129 jQuery.inArray( "script", s.dataTypes ) > -1 && 11130 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 11131 s.converters[ "text script" ] = function() {}; 11132 } 11133 11134 // Convert no matter what (that way responseXXX fields are always set) 11135 response = ajaxConvert( s, response, jqXHR, isSuccess ); 11136 11137 // If successful, handle type chaining 11138 if ( isSuccess ) { 11139 11140 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 11141 if ( s.ifModified ) { 11142 modified = jqXHR.getResponseHeader( "Last-Modified" ); 11143 if ( modified ) { 11144 jQuery.lastModified[ cacheURL ] = modified; 11145 } 11146 modified = jqXHR.getResponseHeader( "etag" ); 11147 if ( modified ) { 11148 jQuery.etag[ cacheURL ] = modified; 11149 } 11150 } 11151 11152 // if no content 11153 if ( status === 204 || s.type === "HEAD" ) { 11154 statusText = "nocontent"; 11155 11156 // if not modified 11157 } else if ( status === 304 ) { 11158 statusText = "notmodified"; 11159 11160 // If we have data, let's convert it 11161 } else { 11162 statusText = response.state; 11163 success = response.data; 11164 error = response.error; 11165 isSuccess = !error; 11166 } 11167 } else { 11168 11169 // Extract error from statusText and normalize for non-aborts 11170 error = statusText; 11171 if ( status || !statusText ) { 11172 statusText = "error"; 11173 if ( status < 0 ) { 11174 status = 0; 11175 } 11176 } 11177 } 11178 11179 // Set data for the fake xhr object 11180 jqXHR.status = status; 11181 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 11182 11183 // Success/Error 11184 if ( isSuccess ) { 11185 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 11186 } else { 11187 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 11188 } 11189 11190 // Status-dependent callbacks 11191 jqXHR.statusCode( statusCode ); 11192 statusCode = undefined; 11193 11194 if ( fireGlobals ) { 11195 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 11196 [ jqXHR, s, isSuccess ? success : error ] ); 11197 } 11198 11199 // Complete 11200 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 11201 11202 if ( fireGlobals ) { 11203 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 11204 11205 // Handle the global AJAX counter 11206 if ( !( --jQuery.active ) ) { 11207 jQuery.event.trigger( "ajaxStop" ); 11208 } 11209 } 11210 } 11211 11212 return jqXHR; 11213 }, 11214 11215 getJSON: function( url, data, callback ) { 11216 return jQuery.get( url, data, callback, "json" ); 11217 }, 11218 11219 getScript: function( url, callback ) { 11220 return jQuery.get( url, undefined, callback, "script" ); 11221 } 11222} ); 11223 11224jQuery.each( [ "get", "post" ], function( _i, method ) { 11225 jQuery[ method ] = function( url, data, callback, type ) { 11226 11227 // Shift arguments if data argument was omitted 11228 if ( isFunction( data ) ) { 11229 type = type || callback; 11230 callback = data; 11231 data = undefined; 11232 } 11233 11234 // The url can be an options object (which then must have .url) 11235 return jQuery.ajax( jQuery.extend( { 11236 url: url, 11237 type: method, 11238 dataType: type, 11239 data: data, 11240 success: callback 11241 }, jQuery.isPlainObject( url ) && url ) ); 11242 }; 11243} ); 11244 11245jQuery.ajaxPrefilter( function( s ) { 11246 var i; 11247 for ( i in s.headers ) { 11248 if ( i.toLowerCase() === "content-type" ) { 11249 s.contentType = s.headers[ i ] || ""; 11250 } 11251 } 11252} ); 11253 11254 11255jQuery._evalUrl = function( url, options, doc ) { 11256 return jQuery.ajax( { 11257 url: url, 11258 11259 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 11260 type: "GET", 11261 dataType: "script", 11262 cache: true, 11263 async: false, 11264 global: false, 11265 11266 // Only evaluate the response if it is successful (gh-4126) 11267 // dataFilter is not invoked for failure responses, so using it instead 11268 // of the default converter is kludgy but it works. 11269 converters: { 11270 "text script": function() {} 11271 }, 11272 dataFilter: function( response ) { 11273 jQuery.globalEval( response, options, doc ); 11274 } 11275 } ); 11276}; 11277 11278 11279jQuery.fn.extend( { 11280 wrapAll: function( html ) { 11281 var wrap; 11282 11283 if ( this[ 0 ] ) { 11284 if ( isFunction( html ) ) { 11285 html = html.call( this[ 0 ] ); 11286 } 11287 11288 // The elements to wrap the target around 11289 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 11290 11291 if ( this[ 0 ].parentNode ) { 11292 wrap.insertBefore( this[ 0 ] ); 11293 } 11294 11295 wrap.map( function() { 11296 var elem = this; 11297 11298 while ( elem.firstElementChild ) { 11299 elem = elem.firstElementChild; 11300 } 11301 11302 return elem; 11303 } ).append( this ); 11304 } 11305 11306 return this; 11307 }, 11308 11309 wrapInner: function( html ) { 11310 if ( isFunction( html ) ) { 11311 return this.each( function( i ) { 11312 jQuery( this ).wrapInner( html.call( this, i ) ); 11313 } ); 11314 } 11315 11316 return this.each( function() { 11317 var self = jQuery( this ), 11318 contents = self.contents(); 11319 11320 if ( contents.length ) { 11321 contents.wrapAll( html ); 11322 11323 } else { 11324 self.append( html ); 11325 } 11326 } ); 11327 }, 11328 11329 wrap: function( html ) { 11330 var htmlIsFunction = isFunction( html ); 11331 11332 return this.each( function( i ) { 11333 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 11334 } ); 11335 }, 11336 11337 unwrap: function( selector ) { 11338 this.parent( selector ).not( "body" ).each( function() { 11339 jQuery( this ).replaceWith( this.childNodes ); 11340 } ); 11341 return this; 11342 } 11343} ); 11344 11345 11346jQuery.expr.pseudos.hidden = function( elem ) { 11347 return !jQuery.expr.pseudos.visible( elem ); 11348}; 11349jQuery.expr.pseudos.visible = function( elem ) { 11350 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 11351}; 11352 11353 11354 11355 11356jQuery.ajaxSettings.xhr = function() { 11357 try { 11358 return new window.XMLHttpRequest(); 11359 } catch ( e ) {} 11360}; 11361 11362var xhrSuccessStatus = { 11363 11364 // File protocol always yields status code 0, assume 200 11365 0: 200, 11366 11367 // Support: IE <=9 only 11368 // trac-1450: sometimes IE returns 1223 when it should be 204 11369 1223: 204 11370 }, 11371 xhrSupported = jQuery.ajaxSettings.xhr(); 11372 11373support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 11374support.ajax = xhrSupported = !!xhrSupported; 11375 11376jQuery.ajaxTransport( function( options ) { 11377 var callback, errorCallback; 11378 11379 // Cross domain only allowed if supported through XMLHttpRequest 11380 if ( support.cors || xhrSupported && !options.crossDomain ) { 11381 return { 11382 send: function( headers, complete ) { 11383 var i, 11384 xhr = options.xhr(); 11385 11386 xhr.open( 11387 options.type, 11388 options.url, 11389 options.async, 11390 options.username, 11391 options.password 11392 ); 11393 11394 // Apply custom fields if provided 11395 if ( options.xhrFields ) { 11396 for ( i in options.xhrFields ) { 11397 xhr[ i ] = options.xhrFields[ i ]; 11398 } 11399 } 11400 11401 // Override mime type if needed 11402 if ( options.mimeType && xhr.overrideMimeType ) { 11403 xhr.overrideMimeType( options.mimeType ); 11404 } 11405 11406 // X-Requested-With header 11407 // For cross-domain requests, seeing as conditions for a preflight are 11408 // akin to a jigsaw puzzle, we simply never set it to be sure. 11409 // (it can always be set on a per-request basis or even using ajaxSetup) 11410 // For same-domain requests, won't change header if already provided. 11411 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 11412 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 11413 } 11414 11415 // Set headers 11416 for ( i in headers ) { 11417 xhr.setRequestHeader( i, headers[ i ] ); 11418 } 11419 11420 // Callback 11421 callback = function( type ) { 11422 return function() { 11423 if ( callback ) { 11424 callback = errorCallback = xhr.onload = 11425 xhr.onerror = xhr.onabort = xhr.ontimeout = 11426 xhr.onreadystatechange = null; 11427 11428 if ( type === "abort" ) { 11429 xhr.abort(); 11430 } else if ( type === "error" ) { 11431 11432 // Support: IE <=9 only 11433 // On a manual native abort, IE9 throws 11434 // errors on any property access that is not readyState 11435 if ( typeof xhr.status !== "number" ) { 11436 complete( 0, "error" ); 11437 } else { 11438 complete( 11439 11440 // File: protocol always yields status 0; see trac-8605, trac-14207 11441 xhr.status, 11442 xhr.statusText 11443 ); 11444 } 11445 } else { 11446 complete( 11447 xhrSuccessStatus[ xhr.status ] || xhr.status, 11448 xhr.statusText, 11449 11450 // Support: IE <=9 only 11451 // IE9 has no XHR2 but throws on binary (trac-11426) 11452 // For XHR2 non-text, let the caller handle it (gh-2498) 11453 ( xhr.responseType || "text" ) !== "text" || 11454 typeof xhr.responseText !== "string" ? 11455 { binary: xhr.response } : 11456 { text: xhr.responseText }, 11457 xhr.getAllResponseHeaders() 11458 ); 11459 } 11460 } 11461 }; 11462 }; 11463 11464 // Listen to events 11465 xhr.onload = callback(); 11466 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 11467 11468 // Support: IE 9 only 11469 // Use onreadystatechange to replace onabort 11470 // to handle uncaught aborts 11471 if ( xhr.onabort !== undefined ) { 11472 xhr.onabort = errorCallback; 11473 } else { 11474 xhr.onreadystatechange = function() { 11475 11476 // Check readyState before timeout as it changes 11477 if ( xhr.readyState === 4 ) { 11478 11479 // Allow onerror to be called first, 11480 // but that will not handle a native abort 11481 // Also, save errorCallback to a variable 11482 // as xhr.onerror cannot be accessed 11483 window.setTimeout( function() { 11484 if ( callback ) { 11485 errorCallback(); 11486 } 11487 } ); 11488 } 11489 }; 11490 } 11491 11492 // Create the abort callback 11493 callback = callback( "abort" ); 11494 11495 try { 11496 11497 // Do send the request (this may raise an exception) 11498 xhr.send( options.hasContent && options.data || null ); 11499 } catch ( e ) { 11500 11501 // trac-14683: Only rethrow if this hasn't been notified as an error yet 11502 if ( callback ) { 11503 throw e; 11504 } 11505 } 11506 }, 11507 11508 abort: function() { 11509 if ( callback ) { 11510 callback(); 11511 } 11512 } 11513 }; 11514 } 11515} ); 11516 11517 11518 11519 11520// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 11521jQuery.ajaxPrefilter( function( s ) { 11522 if ( s.crossDomain ) { 11523 s.contents.script = false; 11524 } 11525} ); 11526 11527// Install script dataType 11528jQuery.ajaxSetup( { 11529 accepts: { 11530 script: "text/javascript, application/javascript, " + 11531 "application/ecmascript, application/x-ecmascript" 11532 }, 11533 contents: { 11534 script: /\b(?:java|ecma)script\b/ 11535 }, 11536 converters: { 11537 "text script": function( text ) { 11538 jQuery.globalEval( text ); 11539 return text; 11540 } 11541 } 11542} ); 11543 11544// Handle cache's special case and crossDomain 11545jQuery.ajaxPrefilter( "script", function( s ) { 11546 if ( s.cache === undefined ) { 11547 s.cache = false; 11548 } 11549 if ( s.crossDomain ) { 11550 s.type = "GET"; 11551 } 11552} ); 11553 11554// Bind script tag hack transport 11555jQuery.ajaxTransport( "script", function( s ) { 11556 11557 // This transport only deals with cross domain or forced-by-attrs requests 11558 if ( s.crossDomain || s.scriptAttrs ) { 11559 var script, callback; 11560 return { 11561 send: function( _, complete ) { 11562 script = jQuery( "<script>" ) 11563 .attr( s.scriptAttrs || {} ) 11564 .prop( { charset: s.scriptCharset, src: s.url } ) 11565 .on( "load error", callback = function( evt ) { 11566 script.remove(); 11567 callback = null; 11568 if ( evt ) { 11569 complete( evt.type === "error" ? 404 : 200, evt.type ); 11570 } 11571 } ); 11572 11573 // Use native DOM manipulation to avoid our domManip AJAX trickery 11574 document.head.appendChild( script[ 0 ] ); 11575 }, 11576 abort: function() { 11577 if ( callback ) { 11578 callback(); 11579 } 11580 } 11581 }; 11582 } 11583} ); 11584 11585 11586 11587 11588var oldCallbacks = [], 11589 rjsonp = /(=)\?(?=&|$)|\?\?/; 11590 11591// Default jsonp settings 11592jQuery.ajaxSetup( { 11593 jsonp: "callback", 11594 jsonpCallback: function() { 11595 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 11596 this[ callback ] = true; 11597 return callback; 11598 } 11599} ); 11600 11601// Detect, normalize options and install callbacks for jsonp requests 11602jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 11603 11604 var callbackName, overwritten, responseContainer, 11605 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 11606 "url" : 11607 typeof s.data === "string" && 11608 ( s.contentType || "" ) 11609 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 11610 rjsonp.test( s.data ) && "data" 11611 ); 11612 11613 // Handle iff the expected data type is "jsonp" or we have a parameter to set 11614 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 11615 11616 // Get callback name, remembering preexisting value associated with it 11617 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 11618 s.jsonpCallback() : 11619 s.jsonpCallback; 11620 11621 // Insert callback into url or form data 11622 if ( jsonProp ) { 11623 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 11624 } else if ( s.jsonp !== false ) { 11625 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 11626 } 11627 11628 // Use data converter to retrieve json after script execution 11629 s.converters[ "script json" ] = function() { 11630 if ( !responseContainer ) { 11631 jQuery.error( callbackName + " was not called" ); 11632 } 11633 return responseContainer[ 0 ]; 11634 }; 11635 11636 // Force json dataType 11637 s.dataTypes[ 0 ] = "json"; 11638 11639 // Install callback 11640 overwritten = window[ callbackName ]; 11641 window[ callbackName ] = function() { 11642 responseContainer = arguments; 11643 }; 11644 11645 // Clean-up function (fires after converters) 11646 jqXHR.always( function() { 11647 11648 // If previous value didn't exist - remove it 11649 if ( overwritten === undefined ) { 11650 jQuery( window ).removeProp( callbackName ); 11651 11652 // Otherwise restore preexisting value 11653 } else { 11654 window[ callbackName ] = overwritten; 11655 } 11656 11657 // Save back as free 11658 if ( s[ callbackName ] ) { 11659 11660 // Make sure that re-using the options doesn't screw things around 11661 s.jsonpCallback = originalSettings.jsonpCallback; 11662 11663 // Save the callback name for future use 11664 oldCallbacks.push( callbackName ); 11665 } 11666 11667 // Call if it was a function and we have a response 11668 if ( responseContainer && isFunction( overwritten ) ) { 11669 overwritten( responseContainer[ 0 ] ); 11670 } 11671 11672 responseContainer = overwritten = undefined; 11673 } ); 11674 11675 // Delegate to script 11676 return "script"; 11677 } 11678} ); 11679 11680 11681 11682 11683// Support: Safari 8 only 11684// In Safari 8 documents created via document.implementation.createHTMLDocument 11685// collapse sibling forms: the second one becomes a child of the first one. 11686// Because of that, this security measure has to be disabled in Safari 8. 11687// https://bugs.webkit.org/show_bug.cgi?id=137337 11688support.createHTMLDocument = ( function() { 11689 var body = document.implementation.createHTMLDocument( "" ).body; 11690 body.innerHTML = "<form></form><form></form>"; 11691 return body.childNodes.length === 2; 11692} )(); 11693 11694 11695// Argument "data" should be string of html 11696// context (optional): If specified, the fragment will be created in this context, 11697// defaults to document 11698// keepScripts (optional): If true, will include scripts passed in the html string 11699jQuery.parseHTML = function( data, context, keepScripts ) { 11700 if ( typeof data !== "string" ) { 11701 return []; 11702 } 11703 if ( typeof context === "boolean" ) { 11704 keepScripts = context; 11705 context = false; 11706 } 11707 11708 var base, parsed, scripts; 11709 11710 if ( !context ) { 11711 11712 // Stop scripts or inline event handlers from being executed immediately 11713 // by using document.implementation 11714 if ( support.createHTMLDocument ) { 11715 context = document.implementation.createHTMLDocument( "" ); 11716 11717 // Set the base href for the created document 11718 // so any parsed elements with URLs 11719 // are based on the document's URL (gh-2965) 11720 base = context.createElement( "base" ); 11721 base.href = document.location.href; 11722 context.head.appendChild( base ); 11723 } else { 11724 context = document; 11725 } 11726 } 11727 11728 parsed = rsingleTag.exec( data ); 11729 scripts = !keepScripts && []; 11730 11731 // Single tag 11732 if ( parsed ) { 11733 return [ context.createElement( parsed[ 1 ] ) ]; 11734 } 11735 11736 parsed = buildFragment( [ data ], context, scripts ); 11737 11738 if ( scripts && scripts.length ) { 11739 jQuery( scripts ).remove(); 11740 } 11741 11742 return jQuery.merge( [], parsed.childNodes ); 11743}; 11744 11745 11746/** 11747 * Load a url into a page 11748 */ 11749jQuery.fn.load = function( url, params, callback ) { 11750 var selector, type, response, 11751 self = this, 11752 off = url.indexOf( " " ); 11753 11754 if ( off > -1 ) { 11755 selector = stripAndCollapse( url.slice( off ) ); 11756 url = url.slice( 0, off ); 11757 } 11758 11759 // If it's a function 11760 if ( isFunction( params ) ) { 11761 11762 // We assume that it's the callback 11763 callback = params; 11764 params = undefined; 11765 11766 // Otherwise, build a param string 11767 } else if ( params && typeof params === "object" ) { 11768 type = "POST"; 11769 } 11770 11771 // If we have elements to modify, make the request 11772 if ( self.length > 0 ) { 11773 jQuery.ajax( { 11774 url: url, 11775 11776 // If "type" variable is undefined, then "GET" method will be used. 11777 // Make value of this field explicit since 11778 // user can override it through ajaxSetup method 11779 type: type || "GET", 11780 dataType: "html", 11781 data: params 11782 } ).done( function( responseText ) { 11783 11784 // Save response for use in complete callback 11785 response = arguments; 11786 11787 self.html( selector ? 11788 11789 // If a selector was specified, locate the right elements in a dummy div 11790 // Exclude scripts to avoid IE 'Permission Denied' errors 11791 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 11792 11793 // Otherwise use the full result 11794 responseText ); 11795 11796 // If the request succeeds, this function gets "data", "status", "jqXHR" 11797 // but they are ignored because response was set above. 11798 // If it fails, this function gets "jqXHR", "status", "error" 11799 } ).always( callback && function( jqXHR, status ) { 11800 self.each( function() { 11801 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 11802 } ); 11803 } ); 11804 } 11805 11806 return this; 11807}; 11808 11809 11810 11811 11812jQuery.expr.pseudos.animated = function( elem ) { 11813 return jQuery.grep( jQuery.timers, function( fn ) { 11814 return elem === fn.elem; 11815 } ).length; 11816}; 11817 11818 11819 11820 11821jQuery.offset = { 11822 setOffset: function( elem, options, i ) { 11823 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 11824 position = jQuery.css( elem, "position" ), 11825 curElem = jQuery( elem ), 11826 props = {}; 11827 11828 // Set position first, in-case top/left are set even on static elem 11829 if ( position === "static" ) { 11830 elem.style.position = "relative"; 11831 } 11832 11833 curOffset = curElem.offset(); 11834 curCSSTop = jQuery.css( elem, "top" ); 11835 curCSSLeft = jQuery.css( elem, "left" ); 11836 calculatePosition = ( position === "absolute" || position === "fixed" ) && 11837 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 11838 11839 // Need to be able to calculate position if either 11840 // top or left is auto and position is either absolute or fixed 11841 if ( calculatePosition ) { 11842 curPosition = curElem.position(); 11843 curTop = curPosition.top; 11844 curLeft = curPosition.left; 11845 11846 } else { 11847 curTop = parseFloat( curCSSTop ) || 0; 11848 curLeft = parseFloat( curCSSLeft ) || 0; 11849 } 11850 11851 if ( isFunction( options ) ) { 11852 11853 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 11854 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 11855 } 11856 11857 if ( options.top != null ) { 11858 props.top = ( options.top - curOffset.top ) + curTop; 11859 } 11860 if ( options.left != null ) { 11861 props.left = ( options.left - curOffset.left ) + curLeft; 11862 } 11863 11864 if ( "using" in options ) { 11865 options.using.call( elem, props ); 11866 11867 } else { 11868 curElem.css( props ); 11869 } 11870 } 11871}; 11872 11873jQuery.fn.extend( { 11874 11875 // offset() relates an element's border box to the document origin 11876 offset: function( options ) { 11877 11878 // Preserve chaining for setter 11879 if ( arguments.length ) { 11880 return options === undefined ? 11881 this : 11882 this.each( function( i ) { 11883 jQuery.offset.setOffset( this, options, i ); 11884 } ); 11885 } 11886 11887 var rect, win, 11888 elem = this[ 0 ]; 11889 11890 if ( !elem ) { 11891 return; 11892 } 11893 11894 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 11895 // Support: IE <=11 only 11896 // Running getBoundingClientRect on a 11897 // disconnected node in IE throws an error 11898 if ( !elem.getClientRects().length ) { 11899 return { top: 0, left: 0 }; 11900 } 11901 11902 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 11903 rect = elem.getBoundingClientRect(); 11904 win = elem.ownerDocument.defaultView; 11905 return { 11906 top: rect.top + win.pageYOffset, 11907 left: rect.left + win.pageXOffset 11908 }; 11909 }, 11910 11911 // position() relates an element's margin box to its offset parent's padding box 11912 // This corresponds to the behavior of CSS absolute positioning 11913 position: function() { 11914 if ( !this[ 0 ] ) { 11915 return; 11916 } 11917 11918 var offsetParent, offset, doc, 11919 elem = this[ 0 ], 11920 parentOffset = { top: 0, left: 0 }; 11921 11922 // position:fixed elements are offset from the viewport, which itself always has zero offset 11923 if ( jQuery.css( elem, "position" ) === "fixed" ) { 11924 11925 // Assume position:fixed implies availability of getBoundingClientRect 11926 offset = elem.getBoundingClientRect(); 11927 11928 } else { 11929 offset = this.offset(); 11930 11931 // Account for the *real* offset parent, which can be the document or its root element 11932 // when a statically positioned element is identified 11933 doc = elem.ownerDocument; 11934 offsetParent = elem.offsetParent || doc.documentElement; 11935 while ( offsetParent && 11936 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 11937 jQuery.css( offsetParent, "position" ) === "static" ) { 11938 11939 offsetParent = offsetParent.parentNode; 11940 } 11941 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 11942 11943 // Incorporate borders into its offset, since they are outside its content origin 11944 parentOffset = jQuery( offsetParent ).offset(); 11945 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 11946 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 11947 } 11948 } 11949 11950 // Subtract parent offsets and element margins 11951 return { 11952 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 11953 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 11954 }; 11955 }, 11956 11957 // This method will return documentElement in the following cases: 11958 // 1) For the element inside the iframe without offsetParent, this method will return 11959 // documentElement of the parent window 11960 // 2) For the hidden or detached element 11961 // 3) For body or html element, i.e. in case of the html node - it will return itself 11962 // 11963 // but those exceptions were never presented as a real life use-cases 11964 // and might be considered as more preferable results. 11965 // 11966 // This logic, however, is not guaranteed and can change at any point in the future 11967 offsetParent: function() { 11968 return this.map( function() { 11969 var offsetParent = this.offsetParent; 11970 11971 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 11972 offsetParent = offsetParent.offsetParent; 11973 } 11974 11975 return offsetParent || documentElement; 11976 } ); 11977 } 11978} ); 11979 11980// Create scrollLeft and scrollTop methods 11981jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 11982 var top = "pageYOffset" === prop; 11983 11984 jQuery.fn[ method ] = function( val ) { 11985 return access( this, function( elem, method, val ) { 11986 11987 // Coalesce documents and windows 11988 var win; 11989 if ( isWindow( elem ) ) { 11990 win = elem; 11991 } else if ( elem.nodeType === 9 ) { 11992 win = elem.defaultView; 11993 } 11994 11995 if ( val === undefined ) { 11996 return win ? win[ prop ] : elem[ method ]; 11997 } 11998 11999 if ( win ) { 12000 win.scrollTo( 12001 !top ? val : win.pageXOffset, 12002 top ? val : win.pageYOffset 12003 ); 12004 12005 } else { 12006 elem[ method ] = val; 12007 } 12008 }, method, val, arguments.length ); 12009 }; 12010} ); 12011 12012// Support: Safari <=7 - 9.1, Chrome <=37 - 49 12013// Add the top/left cssHooks using jQuery.fn.position 12014// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 12015// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 12016// getComputedStyle returns percent when specified for top/left/bottom/right; 12017// rather than make the css module depend on the offset module, just check for it here 12018jQuery.each( [ "top", "left" ], function( _i, prop ) { 12019 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 12020 function( elem, computed ) { 12021 if ( computed ) { 12022 computed = curCSS( elem, prop ); 12023 12024 // If curCSS returns percentage, fallback to offset 12025 return rnumnonpx.test( computed ) ? 12026 jQuery( elem ).position()[ prop ] + "px" : 12027 computed; 12028 } 12029 } 12030 ); 12031} ); 12032 12033 12034// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 12035jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 12036 jQuery.each( { 12037 padding: "inner" + name, 12038 content: type, 12039 "": "outer" + name 12040 }, function( defaultExtra, funcName ) { 12041 12042 // Margin is only for outerHeight, outerWidth 12043 jQuery.fn[ funcName ] = function( margin, value ) { 12044 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 12045 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 12046 12047 return access( this, function( elem, type, value ) { 12048 var doc; 12049 12050 if ( isWindow( elem ) ) { 12051 12052 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 12053 return funcName.indexOf( "outer" ) === 0 ? 12054 elem[ "inner" + name ] : 12055 elem.document.documentElement[ "client" + name ]; 12056 } 12057 12058 // Get document width or height 12059 if ( elem.nodeType === 9 ) { 12060 doc = elem.documentElement; 12061 12062 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 12063 // whichever is greatest 12064 return Math.max( 12065 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 12066 elem.body[ "offset" + name ], doc[ "offset" + name ], 12067 doc[ "client" + name ] 12068 ); 12069 } 12070 12071 return value === undefined ? 12072 12073 // Get width or height on the element, requesting but not forcing parseFloat 12074 jQuery.css( elem, type, extra ) : 12075 12076 // Set width or height on the element 12077 jQuery.style( elem, type, value, extra ); 12078 }, type, chainable ? margin : undefined, chainable ); 12079 }; 12080 } ); 12081} ); 12082 12083 12084jQuery.each( [ 12085 "ajaxStart", 12086 "ajaxStop", 12087 "ajaxComplete", 12088 "ajaxError", 12089 "ajaxSuccess", 12090 "ajaxSend" 12091], function( _i, type ) { 12092 jQuery.fn[ type ] = function( fn ) { 12093 return this.on( type, fn ); 12094 }; 12095} ); 12096 12097 12098 12099 12100jQuery.fn.extend( { 12101 12102 bind: function( types, data, fn ) { 12103 return this.on( types, null, data, fn ); 12104 }, 12105 unbind: function( types, fn ) { 12106 return this.off( types, null, fn ); 12107 }, 12108 12109 delegate: function( selector, types, data, fn ) { 12110 return this.on( types, selector, data, fn ); 12111 }, 12112 undelegate: function( selector, types, fn ) { 12113 12114 // ( namespace ) or ( selector, types [, fn] ) 12115 return arguments.length === 1 ? 12116 this.off( selector, "**" ) : 12117 this.off( types, selector || "**", fn ); 12118 }, 12119 12120 hover: function( fnOver, fnOut ) { 12121 return this 12122 .on( "mouseenter", fnOver ) 12123 .on( "mouseleave", fnOut || fnOver ); 12124 } 12125} ); 12126 12127jQuery.each( 12128 ( "blur focus focusin focusout resize scroll click dblclick " + 12129 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 12130 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 12131 function( _i, name ) { 12132 12133 // Handle event binding 12134 jQuery.fn[ name ] = function( data, fn ) { 12135 return arguments.length > 0 ? 12136 this.on( name, null, data, fn ) : 12137 this.trigger( name ); 12138 }; 12139 } 12140); 12141 12142 12143 12144 12145// Support: Android <=4.0 only 12146// Make sure we trim BOM and NBSP 12147// Require that the "whitespace run" starts from a non-whitespace 12148// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 12149var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 12150 12151// Bind a function to a context, optionally partially applying any 12152// arguments. 12153// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 12154// However, it is not slated for removal any time soon 12155jQuery.proxy = function( fn, context ) { 12156 var tmp, args, proxy; 12157 12158 if ( typeof context === "string" ) { 12159 tmp = fn[ context ]; 12160 context = fn; 12161 fn = tmp; 12162 } 12163 12164 // Quick check to determine if target is callable, in the spec 12165 // this throws a TypeError, but we will just return undefined. 12166 if ( !isFunction( fn ) ) { 12167 return undefined; 12168 } 12169 12170 // Simulated bind 12171 args = slice.call( arguments, 2 ); 12172 proxy = function() { 12173 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 12174 }; 12175 12176 // Set the guid of unique handler to the same of original handler, so it can be removed 12177 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 12178 12179 return proxy; 12180}; 12181 12182jQuery.holdReady = function( hold ) { 12183 if ( hold ) { 12184 jQuery.readyWait++; 12185 } else { 12186 jQuery.ready( true ); 12187 } 12188}; 12189jQuery.isArray = Array.isArray; 12190jQuery.parseJSON = JSON.parse; 12191jQuery.nodeName = nodeName; 12192jQuery.isFunction = isFunction; 12193jQuery.isWindow = isWindow; 12194jQuery.camelCase = camelCase; 12195jQuery.type = toType; 12196 12197jQuery.now = Date.now; 12198 12199jQuery.isNumeric = function( obj ) { 12200 12201 // As of jQuery 3.0, isNumeric is limited to 12202 // strings and numbers (primitives or objects) 12203 // that can be coerced to finite numbers (gh-2662) 12204 var type = jQuery.type( obj ); 12205 return ( type === "number" || type === "string" ) && 12206 12207 // parseFloat NaNs numeric-cast false positives ("") 12208 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 12209 // subtraction forces infinities to NaN 12210 !isNaN( obj - parseFloat( obj ) ); 12211}; 12212 12213jQuery.trim = function( text ) { 12214 return text == null ? 12215 "" : 12216 ( text + "" ).replace( rtrim, "$1" ); 12217}; 12218 12219 12220 12221// Register as a named AMD module, since jQuery can be concatenated with other 12222// files that may use define, but not via a proper concatenation script that 12223// understands anonymous AMD modules. A named AMD is safest and most robust 12224// way to register. Lowercase jquery is used because AMD module names are 12225// derived from file names, and jQuery is normally delivered in a lowercase 12226// file name. Do this after creating the global so that if an AMD module wants 12227// to call noConflict to hide this version of jQuery, it will work. 12228 12229// Note that for maximum portability, libraries that are not jQuery should 12230// declare themselves as anonymous modules, and avoid setting a global if an 12231// AMD loader is present. jQuery is a special case. For more information, see 12232// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 12233 12234if ( true ) { 12235 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 12236 return jQuery; 12237 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 12238 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 12239} 12240 12241 12242 12243 12244var 12245 12246 // Map over jQuery in case of overwrite 12247 _jQuery = window.jQuery, 12248 12249 // Map over the $ in case of overwrite 12250 _$ = window.$; 12251 12252jQuery.noConflict = function( deep ) { 12253 if ( window.$ === jQuery ) { 12254 window.$ = _$; 12255 } 12256 12257 if ( deep && window.jQuery === jQuery ) { 12258 window.jQuery = _jQuery; 12259 } 12260 12261 return jQuery; 12262}; 12263 12264// Expose jQuery and $ identifiers, even in AMD 12265// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 12266// and CommonJS for browser emulators (trac-13566) 12267if ( typeof noGlobal === "undefined" ) { 12268 window.jQuery = window.$ = jQuery; 12269} 12270 12271 12272 12273 12274return jQuery; 12275} ); 12276 12277 12278/***/ }), 12279
vendor: 15,128 bytes, lines 12280-12810
12280/***/ "../node_modules/node-libs-browser/node_modules/punycode/punycode.js": 12281/*!***************************************************************************!*\ 12282 !*** ../node_modules/node-libs-browser/node_modules/punycode/punycode.js ***! 12283 \***************************************************************************/ 12284/*! no static exports found */ 12285/***/ (function(module, exports, __webpack_require__) { 12286 12287/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */ 12288;(function(root) { 12289 12290 /** Detect free variables */ 12291 var freeExports = true && exports && 12292 !exports.nodeType && exports; 12293 var freeModule = true && module && 12294 !module.nodeType && module; 12295 var freeGlobal = typeof global == 'object' && global; 12296 if ( 12297 freeGlobal.global === freeGlobal || 12298 freeGlobal.window === freeGlobal || 12299 freeGlobal.self === freeGlobal 12300 ) { 12301 root = freeGlobal; 12302 } 12303 12304 /** 12305 * The `punycode` object. 12306 * @name punycode 12307 * @type Object 12308 */ 12309 var punycode, 12310 12311 /** Highest positive signed 32-bit float value */ 12312 maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 12313 12314 /** Bootstring parameters */ 12315 base = 36, 12316 tMin = 1, 12317 tMax = 26, 12318 skew = 38, 12319 damp = 700, 12320 initialBias = 72, 12321 initialN = 128, // 0x80 12322 delimiter = '-', // '\x2D' 12323 12324 /** Regular expressions */ 12325 regexPunycode = /^xn--/, 12326 regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars 12327 regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators 12328 12329 /** Error messages */ 12330 errors = { 12331 'overflow': 'Overflow: input needs wider integers to process', 12332 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', 12333 'invalid-input': 'Invalid input' 12334 }, 12335 12336 /** Convenience shortcuts */ 12337 baseMinusTMin = base - tMin, 12338 floor = Math.floor, 12339 stringFromCharCode = String.fromCharCode, 12340 12341 /** Temporary variable */ 12342 key; 12343 12344 /*--------------------------------------------------------------------------*/ 12345 12346 /** 12347 * A generic error utility function. 12348 * @private 12349 * @param {String} type The error type. 12350 * @returns {Error} Throws a `RangeError` with the applicable error message. 12351 */ 12352 function error(type) { 12353 throw new RangeError(errors[type]); 12354 } 12355 12356 /** 12357 * A generic `Array#map` utility function. 12358 * @private 12359 * @param {Array} array The array to iterate over. 12360 * @param {Function} callback The function that gets called for every array 12361 * item. 12362 * @returns {Array} A new array of values returned by the callback function. 12363 */ 12364 function map(array, fn) { 12365 var length = array.length; 12366 var result = []; 12367 while (length--) { 12368 result[length] = fn(array[length]); 12369 } 12370 return result; 12371 } 12372 12373 /** 12374 * A simple `Array#map`-like wrapper to work with domain name strings or email 12375 * addresses. 12376 * @private 12377 * @param {String} domain The domain name or email address. 12378 * @param {Function} callback The function that gets called for every 12379 * character. 12380 * @returns {Array} A new string of characters returned by the callback 12381 * function. 12382 */ 12383 function mapDomain(string, fn) { 12384 var parts = string.split('@'); 12385 var result = ''; 12386 if (parts.length > 1) { 12387 // In email addresses, only the domain name should be punycoded. Leave 12388 // the local part (i.e. everything up to `@`) intact. 12389 result = parts[0] + '@'; 12390 string = parts[1]; 12391 } 12392 // Avoid `split(regex)` for IE8 compatibility. See #17. 12393 string = string.replace(regexSeparators, '\x2E'); 12394 var labels = string.split('.'); 12395 var encoded = map(labels, fn).join('.'); 12396 return result + encoded; 12397 } 12398 12399 /** 12400 * Creates an array containing the numeric code points of each Unicode 12401 * character in the string. While JavaScript uses UCS-2 internally, 12402 * this function will convert a pair of surrogate halves (each of which 12403 * UCS-2 exposes as separate characters) into a single code point, 12404 * matching UTF-16. 12405 * @see `punycode.ucs2.encode` 12406 * @see <https://mathiasbynens.be/notes/javascript-encoding> 12407 * @memberOf punycode.ucs2 12408 * @name decode 12409 * @param {String} string The Unicode input string (UCS-2). 12410 * @returns {Array} The new array of code points. 12411 */ 12412 function ucs2decode(string) { 12413 var output = [], 12414 counter = 0, 12415 length = string.length, 12416 value, 12417 extra; 12418 while (counter < length) { 12419 value = string.charCodeAt(counter++); 12420 if (value >= 0xD800 && value <= 0xDBFF && counter < length) { 12421 // high surrogate, and there is a next character 12422 extra = string.charCodeAt(counter++); 12423 if ((extra & 0xFC00) == 0xDC00) { // low surrogate 12424 output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); 12425 } else { 12426 // unmatched surrogate; only append this code unit, in case the next 12427 // code unit is the high surrogate of a surrogate pair 12428 output.push(value); 12429 counter--; 12430 } 12431 } else { 12432 output.push(value); 12433 } 12434 } 12435 return output; 12436 } 12437 12438 /** 12439 * Creates a string based on an array of numeric code points. 12440 * @see `punycode.ucs2.decode` 12441 * @memberOf punycode.ucs2 12442 * @name encode 12443 * @param {Array} codePoints The array of numeric code points. 12444 * @returns {String} The new Unicode string (UCS-2). 12445 */ 12446 function ucs2encode(array) { 12447 return map(array, function(value) { 12448 var output = ''; 12449 if (value > 0xFFFF) { 12450 value -= 0x10000; 12451 output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); 12452 value = 0xDC00 | value & 0x3FF; 12453 } 12454 output += stringFromCharCode(value); 12455 return output; 12456 }).join(''); 12457 } 12458 12459 /** 12460 * Converts a basic code point into a digit/integer. 12461 * @see `digitToBasic()` 12462 * @private 12463 * @param {Number} codePoint The basic numeric code point value. 12464 * @returns {Number} The numeric value of a basic code point (for use in 12465 * representing integers) in the range `0` to `base - 1`, or `base` if 12466 * the code point does not represent a value. 12467 */ 12468 function basicToDigit(codePoint) { 12469 if (codePoint - 48 < 10) { 12470 return codePoint - 22; 12471 } 12472 if (codePoint - 65 < 26) { 12473 return codePoint - 65; 12474 } 12475 if (codePoint - 97 < 26) { 12476 return codePoint - 97; 12477 } 12478 return base; 12479 } 12480 12481 /** 12482 * Converts a digit/integer into a basic code point. 12483 * @see `basicToDigit()` 12484 * @private 12485 * @param {Number} digit The numeric value of a basic code point. 12486 * @returns {Number} The basic code point whose value (when used for 12487 * representing integers) is `digit`, which needs to be in the range 12488 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is 12489 * used; else, the lowercase form is used. The behavior is undefined 12490 * if `flag` is non-zero and `digit` has no uppercase form. 12491 */ 12492 function digitToBasic(digit, flag) { 12493 // 0..25 map to ASCII a..z or A..Z 12494 // 26..35 map to ASCII 0..9 12495 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); 12496 } 12497 12498 /** 12499 * Bias adaptation function as per section 3.4 of RFC 3492. 12500 * https://tools.ietf.org/html/rfc3492#section-3.4 12501 * @private 12502 */ 12503 function adapt(delta, numPoints, firstTime) { 12504 var k = 0; 12505 delta = firstTime ? floor(delta / damp) : delta >> 1; 12506 delta += floor(delta / numPoints); 12507 for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { 12508 delta = floor(delta / baseMinusTMin); 12509 } 12510 return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); 12511 } 12512 12513 /** 12514 * Converts a Punycode string of ASCII-only symbols to a string of Unicode 12515 * symbols. 12516 * @memberOf punycode 12517 * @param {String} input The Punycode string of ASCII-only symbols. 12518 * @returns {String} The resulting string of Unicode symbols. 12519 */ 12520 function decode(input) { 12521 // Don't use UCS-2 12522 var output = [], 12523 inputLength = input.length, 12524 out, 12525 i = 0, 12526 n = initialN, 12527 bias = initialBias, 12528 basic, 12529 j, 12530 index, 12531 oldi, 12532 w, 12533 k, 12534 digit, 12535 t, 12536 /** Cached calculation results */ 12537 baseMinusT; 12538 12539 // Handle the basic code points: let `basic` be the number of input code 12540 // points before the last delimiter, or `0` if there is none, then copy 12541 // the first basic code points to the output. 12542 12543 basic = input.lastIndexOf(delimiter); 12544 if (basic < 0) { 12545 basic = 0; 12546 } 12547 12548 for (j = 0; j < basic; ++j) { 12549 // if it's not a basic code point 12550 if (input.charCodeAt(j) >= 0x80) { 12551 error('not-basic'); 12552 } 12553 output.push(input.charCodeAt(j)); 12554 } 12555 12556 // Main decoding loop: start just after the last delimiter if any basic code 12557 // points were copied; start at the beginning otherwise. 12558 12559 for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { 12560 12561 // `index` is the index of the next character to be consumed. 12562 // Decode a generalized variable-length integer into `delta`, 12563 // which gets added to `i`. The overflow checking is easier 12564 // if we increase `i` as we go, then subtract off its starting 12565 // value at the end to obtain `delta`. 12566 for (oldi = i, w = 1, k = base; /* no condition */; k += base) { 12567 12568 if (index >= inputLength) { 12569 error('invalid-input'); 12570 } 12571 12572 digit = basicToDigit(input.charCodeAt(index++)); 12573 12574 if (digit >= base || digit > floor((maxInt - i) / w)) { 12575 error('overflow'); 12576 } 12577 12578 i += digit * w; 12579 t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); 12580 12581 if (digit < t) { 12582 break; 12583 } 12584 12585 baseMinusT = base - t; 12586 if (w > floor(maxInt / baseMinusT)) { 12587 error('overflow'); 12588 } 12589 12590 w *= baseMinusT; 12591 12592 } 12593 12594 out = output.length + 1; 12595 bias = adapt(i - oldi, out, oldi == 0); 12596 12597 // `i` was supposed to wrap around from `out` to `0`, 12598 // incrementing `n` each time, so we'll fix that now: 12599 if (floor(i / out) > maxInt - n) { 12600 error('overflow'); 12601 } 12602 12603 n += floor(i / out); 12604 i %= out; 12605 12606 // Insert `n` at position `i` of the output 12607 output.splice(i++, 0, n); 12608 12609 } 12610 12611 return ucs2encode(output); 12612 } 12613 12614 /** 12615 * Converts a string of Unicode symbols (e.g. a domain name label) to a 12616 * Punycode string of ASCII-only symbols. 12617 * @memberOf punycode 12618 * @param {String} input The string of Unicode symbols. 12619 * @returns {String} The resulting Punycode string of ASCII-only symbols. 12620 */ 12621 function encode(input) { 12622 var n, 12623 delta, 12624 handledCPCount, 12625 basicLength, 12626 bias, 12627 j, 12628 m, 12629 q, 12630 k, 12631 t, 12632 currentValue, 12633 output = [], 12634 /** `inputLength` will hold the number of code points in `input`. */ 12635 inputLength, 12636 /** Cached calculation results */ 12637 handledCPCountPlusOne, 12638 baseMinusT, 12639 qMinusT; 12640 12641 // Convert the input in UCS-2 to Unicode 12642 input = ucs2decode(input); 12643 12644 // Cache the length 12645 inputLength = input.length; 12646 12647 // Initialize the state 12648 n = initialN; 12649 delta = 0; 12650 bias = initialBias; 12651 12652 // Handle the basic code points 12653 for (j = 0; j < inputLength; ++j) { 12654 currentValue = input[j]; 12655 if (currentValue < 0x80) { 12656 output.push(stringFromCharCode(currentValue)); 12657 } 12658 } 12659 12660 handledCPCount = basicLength = output.length; 12661 12662 // `handledCPCount` is the number of code points that have been handled; 12663 // `basicLength` is the number of basic code points. 12664 12665 // Finish the basic string - if it is not empty - with a delimiter 12666 if (basicLength) { 12667 output.push(delimiter); 12668 } 12669 12670 // Main encoding loop: 12671 while (handledCPCount < inputLength) { 12672 12673 // All non-basic code points < n have been handled already. Find the next 12674 // larger one: 12675 for (m = maxInt, j = 0; j < inputLength; ++j) { 12676 currentValue = input[j]; 12677 if (currentValue >= n && currentValue < m) { 12678 m = currentValue; 12679 } 12680 } 12681 12682 // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, 12683 // but guard against overflow 12684 handledCPCountPlusOne = handledCPCount + 1; 12685 if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { 12686 error('overflow'); 12687 } 12688 12689 delta += (m - n) * handledCPCountPlusOne; 12690 n = m; 12691 12692 for (j = 0; j < inputLength; ++j) { 12693 currentValue = input[j]; 12694 12695 if (currentValue < n && ++delta > maxInt) { 12696 error('overflow'); 12697 } 12698 12699 if (currentValue == n) { 12700 // Represent delta as a generalized variable-length integer 12701 for (q = delta, k = base; /* no condition */; k += base) { 12702 t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); 12703 if (q < t) { 12704 break; 12705 } 12706 qMinusT = q - t; 12707 baseMinusT = base - t; 12708 output.push( 12709 stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) 12710 ); 12711 q = floor(qMinusT / baseMinusT); 12712 } 12713 12714 output.push(stringFromCharCode(digitToBasic(q, 0))); 12715 bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); 12716 delta = 0; 12717 ++handledCPCount; 12718 } 12719 } 12720 12721 ++delta; 12722 ++n; 12723 12724 } 12725 return output.join(''); 12726 } 12727 12728 /** 12729 * Converts a Punycode string representing a domain name or an email address 12730 * to Unicode. Only the Punycoded parts of the input will be converted, i.e. 12731 * it doesn't matter if you call it on a string that has already been 12732 * converted to Unicode. 12733 * @memberOf punycode 12734 * @param {String} input The Punycoded domain name or email address to 12735 * convert to Unicode. 12736 * @returns {String} The Unicode representation of the given Punycode 12737 * string. 12738 */ 12739 function toUnicode(input) { 12740 return mapDomain(input, function(string) { 12741 return regexPunycode.test(string) 12742 ? decode(string.slice(4).toLowerCase()) 12743 : string; 12744 }); 12745 } 12746 12747 /** 12748 * Converts a Unicode string representing a domain name or an email address to 12749 * Punycode. Only the non-ASCII parts of the domain name will be converted, 12750 * i.e. it doesn't matter if you call it with a domain that's already in 12751 * ASCII. 12752 * @memberOf punycode 12753 * @param {String} input The domain name or email address to convert, as a 12754 * Unicode string. 12755 * @returns {String} The Punycode representation of the given domain name or 12756 * email address. 12757 */ 12758 function toASCII(input) { 12759 return mapDomain(input, function(string) { 12760 return regexNonASCII.test(string) 12761 ? 'xn--' + encode(string) 12762 : string; 12763 }); 12764 } 12765 12766 /*--------------------------------------------------------------------------*/ 12767 12768 /** Define the public API */ 12769 punycode = { 12770 /** 12771 * A string representing the current Punycode.js version number. 12772 * @memberOf punycode 12773 * @type String 12774 */ 12775 'version': '1.4.1', 12776 /** 12777 * An object of methods to convert from JavaScript's internal character 12778 * representation (UCS-2) to Unicode code points, and back. 12779 * @see <https://mathiasbynens.be/notes/javascript-encoding> 12780 * @memberOf punycode 12781 * @type Object 12782 */ 12783 'ucs2': { 12784 'decode': ucs2decode, 12785 'encode': ucs2encode 12786 }, 12787 'decode': decode, 12788 'encode': encode, 12789 'toASCII': toASCII, 12790 'toUnicode': toUnicode 12791 }; 12792 12793 /** Expose `punycode` */ 12794 // Some AMD build optimizers, like r.js, check for specific condition patterns 12795 // like the following: 12796 if ( 12797 true 12798 ) { 12799 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { 12800 return punycode; 12801 }).call(exports, __webpack_require__, exports, module), 12802 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 12803 } else {} 12804 12805}(this)); 12806 12807/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "../node_modules/webpack/buildin/module.js")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "../node_modules/webpack/buildin/global.js"))) 12808 12809/***/ }), 12810
vendor: 19,400 bytes, lines 12811-13346
12811/***/ "../node_modules/object-inspect/index.js": 12812/*!***********************************************!*\ 12813 !*** ../node_modules/object-inspect/index.js ***! 12814 \***********************************************/ 12815/*! no static exports found */ 12816/***/ (function(module, exports, __webpack_require__) { 12817 12818/* WEBPACK VAR INJECTION */(function(global) {var hasMap = typeof Map === 'function' && Map.prototype; 12819var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; 12820var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; 12821var mapForEach = hasMap && Map.prototype.forEach; 12822var hasSet = typeof Set === 'function' && Set.prototype; 12823var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; 12824var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; 12825var setForEach = hasSet && Set.prototype.forEach; 12826var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; 12827var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; 12828var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; 12829var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; 12830var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; 12831var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; 12832var booleanValueOf = Boolean.prototype.valueOf; 12833var objectToString = Object.prototype.toString; 12834var functionToString = Function.prototype.toString; 12835var $match = String.prototype.match; 12836var $slice = String.prototype.slice; 12837var $replace = String.prototype.replace; 12838var $toUpperCase = String.prototype.toUpperCase; 12839var $toLowerCase = String.prototype.toLowerCase; 12840var $test = RegExp.prototype.test; 12841var $concat = Array.prototype.concat; 12842var $join = Array.prototype.join; 12843var $arrSlice = Array.prototype.slice; 12844var $floor = Math.floor; 12845var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; 12846var gOPS = Object.getOwnPropertySymbols; 12847var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; 12848var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; 12849// ie, `has-tostringtag/shams 12850var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') 12851 ? Symbol.toStringTag 12852 : null; 12853var isEnumerable = Object.prototype.propertyIsEnumerable; 12854 12855var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( 12856 [].__proto__ === Array.prototype // eslint-disable-line no-proto 12857 ? function (O) { 12858 return O.__proto__; // eslint-disable-line no-proto 12859 } 12860 : null 12861); 12862 12863function addNumericSeparator(num, str) { 12864 if ( 12865 num === Infinity 12866 || num === -Infinity 12867 || num !== num 12868 || (num && num > -1000 && num < 1000) 12869 || $test.call(/e/, str) 12870 ) { 12871 return str; 12872 } 12873 var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; 12874 if (typeof num === 'number') { 12875 var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) 12876 if (int !== num) { 12877 var intStr = String(int); 12878 var dec = $slice.call(str, intStr.length + 1); 12879 return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); 12880 } 12881 } 12882 return $replace.call(str, sepRegex, '$&_'); 12883} 12884 12885var utilInspect = __webpack_require__(/*! ./util.inspect */ 0); 12886var inspectCustom = utilInspect.custom; 12887var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; 12888 12889module.exports = function inspect_(obj, options, depth, seen) { 12890 var opts = options || {}; 12891 12892 if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { 12893 throw new TypeError('option "quoteStyle" must be "single" or "double"'); 12894 } 12895 if ( 12896 has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' 12897 ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity 12898 : opts.maxStringLength !== null 12899 ) 12900 ) { 12901 throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); 12902 } 12903 var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; 12904 if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { 12905 throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); 12906 } 12907 12908 if ( 12909 has(opts, 'indent') 12910 && opts.indent !== null 12911 && opts.indent !== '\t' 12912 && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) 12913 ) { 12914 throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); 12915 } 12916 if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { 12917 throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); 12918 } 12919 var numericSeparator = opts.numericSeparator; 12920 12921 if (typeof obj === 'undefined') { 12922 return 'undefined'; 12923 } 12924 if (obj === null) { 12925 return 'null'; 12926 } 12927 if (typeof obj === 'boolean') { 12928 return obj ? 'true' : 'false'; 12929 } 12930 12931 if (typeof obj === 'string') { 12932 return inspectString(obj, opts); 12933 } 12934 if (typeof obj === 'number') { 12935 if (obj === 0) { 12936 return Infinity / obj > 0 ? '0' : '-0'; 12937 } 12938 var str = String(obj); 12939 return numericSeparator ? addNumericSeparator(obj, str) : str; 12940 } 12941 if (typeof obj === 'bigint') { 12942 var bigIntStr = String(obj) + 'n'; 12943 return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; 12944 } 12945 12946 var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; 12947 if (typeof depth === 'undefined') { depth = 0; } 12948 if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { 12949 return isArray(obj) ? '[Array]' : '[Object]'; 12950 } 12951 12952 var indent = getIndent(opts, depth); 12953 12954 if (typeof seen === 'undefined') { 12955 seen = []; 12956 } else if (indexOf(seen, obj) >= 0) { 12957 return '[Circular]'; 12958 } 12959 12960 function inspect(value, from, noIndent) { 12961 if (from) { 12962 seen = $arrSlice.call(seen); 12963 seen.push(from); 12964 } 12965 if (noIndent) { 12966 var newOpts = { 12967 depth: opts.depth 12968 }; 12969 if (has(opts, 'quoteStyle')) { 12970 newOpts.quoteStyle = opts.quoteStyle; 12971 } 12972 return inspect_(value, newOpts, depth + 1, seen); 12973 } 12974 return inspect_(value, opts, depth + 1, seen); 12975 } 12976 12977 if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable 12978 var name = nameOf(obj); 12979 var keys = arrObjKeys(obj, inspect); 12980 return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); 12981 } 12982 if (isSymbol(obj)) { 12983 var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); 12984 return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; 12985 } 12986 if (isElement(obj)) { 12987 var s = '<' + $toLowerCase.call(String(obj.nodeName)); 12988 var attrs = obj.attributes || []; 12989 for (var i = 0; i < attrs.length; i++) { 12990 s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); 12991 } 12992 s += '>'; 12993 if (obj.childNodes && obj.childNodes.length) { s += '...'; } 12994 s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>'; 12995 return s; 12996 } 12997 if (isArray(obj)) { 12998 if (obj.length === 0) { return '[]'; } 12999 var xs = arrObjKeys(obj, inspect); 13000 if (indent && !singleLineValues(xs)) { 13001 return '[' + indentedJoin(xs, indent) + ']'; 13002 } 13003 return '[ ' + $join.call(xs, ', ') + ' ]'; 13004 } 13005 if (isError(obj)) { 13006 var parts = arrObjKeys(obj, inspect); 13007 if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) { 13008 return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; 13009 } 13010 if (parts.length === 0) { return '[' + String(obj) + ']'; } 13011 return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; 13012 } 13013 if (typeof obj === 'object' && customInspect) { 13014 if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) { 13015 return utilInspect(obj, { depth: maxDepth - depth }); 13016 } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { 13017 return obj.inspect(); 13018 } 13019 } 13020 if (isMap(obj)) { 13021 var mapParts = []; 13022 if (mapForEach) { 13023 mapForEach.call(obj, function (value, key) { 13024 mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); 13025 }); 13026 } 13027 return collectionOf('Map', mapSize.call(obj), mapParts, indent); 13028 } 13029 if (isSet(obj)) { 13030 var setParts = []; 13031 if (setForEach) { 13032 setForEach.call(obj, function (value) { 13033 setParts.push(inspect(value, obj)); 13034 }); 13035 } 13036 return collectionOf('Set', setSize.call(obj), setParts, indent); 13037 } 13038 if (isWeakMap(obj)) { 13039 return weakCollectionOf('WeakMap'); 13040 } 13041 if (isWeakSet(obj)) { 13042 return weakCollectionOf('WeakSet'); 13043 } 13044 if (isWeakRef(obj)) { 13045 return weakCollectionOf('WeakRef'); 13046 } 13047 if (isNumber(obj)) { 13048 return markBoxed(inspect(Number(obj))); 13049 } 13050 if (isBigInt(obj)) { 13051 return markBoxed(inspect(bigIntValueOf.call(obj))); 13052 } 13053 if (isBoolean(obj)) { 13054 return markBoxed(booleanValueOf.call(obj)); 13055 } 13056 if (isString(obj)) { 13057 return markBoxed(inspect(String(obj))); 13058 } 13059 // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other 13060 /* eslint-env browser */ 13061 if (typeof window !== 'undefined' && obj === window) { 13062 return '{ [object Window] }'; 13063 } 13064 if (obj === global) { 13065 return '{ [object globalThis] }'; 13066 } 13067 if (!isDate(obj) && !isRegExp(obj)) { 13068 var ys = arrObjKeys(obj, inspect); 13069 var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; 13070 var protoTag = obj instanceof Object ? '' : 'null prototype'; 13071 var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; 13072 var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; 13073 var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); 13074 if (ys.length === 0) { return tag + '{}'; } 13075 if (indent) { 13076 return tag + '{' + indentedJoin(ys, indent) + '}'; 13077 } 13078 return tag + '{ ' + $join.call(ys, ', ') + ' }'; 13079 } 13080 return String(obj); 13081}; 13082 13083function wrapQuotes(s, defaultStyle, opts) { 13084 var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; 13085 return quoteChar + s + quoteChar; 13086} 13087 13088function quote(s) { 13089 return $replace.call(String(s), /"/g, '"'); 13090} 13091 13092function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13093function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13094function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13095function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13096function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13097function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13098function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 13099 13100// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives 13101function isSymbol(obj) { 13102 if (hasShammedSymbols) { 13103 return obj && typeof obj === 'object' && obj instanceof Symbol; 13104 } 13105 if (typeof obj === 'symbol') { 13106 return true; 13107 } 13108 if (!obj || typeof obj !== 'object' || !symToString) { 13109 return false; 13110 } 13111 try { 13112 symToString.call(obj); 13113 return true; 13114 } catch (e) {} 13115 return false; 13116} 13117 13118function isBigInt(obj) { 13119 if (!obj || typeof obj !== 'object' || !bigIntValueOf) { 13120 return false; 13121 } 13122 try { 13123 bigIntValueOf.call(obj); 13124 return true; 13125 } catch (e) {} 13126 return false; 13127} 13128 13129var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; 13130function has(obj, key) { 13131 return hasOwn.call(obj, key); 13132} 13133 13134function toStr(obj) { 13135 return objectToString.call(obj); 13136} 13137 13138function nameOf(f) { 13139 if (f.name) { return f.name; } 13140 var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); 13141 if (m) { return m[1]; } 13142 return null; 13143} 13144 13145function indexOf(xs, x) { 13146 if (xs.indexOf) { return xs.indexOf(x); } 13147 for (var i = 0, l = xs.length; i < l; i++) { 13148 if (xs[i] === x) { return i; } 13149 } 13150 return -1; 13151} 13152 13153function isMap(x) { 13154 if (!mapSize || !x || typeof x !== 'object') { 13155 return false; 13156 } 13157 try { 13158 mapSize.call(x); 13159 try { 13160 setSize.call(x); 13161 } catch (s) { 13162 return true; 13163 } 13164 return x instanceof Map; // core-js workaround, pre-v2.5.0 13165 } catch (e) {} 13166 return false; 13167} 13168 13169function isWeakMap(x) { 13170 if (!weakMapHas || !x || typeof x !== 'object') { 13171 return false; 13172 } 13173 try { 13174 weakMapHas.call(x, weakMapHas); 13175 try { 13176 weakSetHas.call(x, weakSetHas); 13177 } catch (s) { 13178 return true; 13179 } 13180 return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 13181 } catch (e) {} 13182 return false; 13183} 13184 13185function isWeakRef(x) { 13186 if (!weakRefDeref || !x || typeof x !== 'object') { 13187 return false; 13188 } 13189 try { 13190 weakRefDeref.call(x); 13191 return true; 13192 } catch (e) {} 13193 return false; 13194} 13195 13196function isSet(x) { 13197 if (!setSize || !x || typeof x !== 'object') { 13198 return false; 13199 } 13200 try { 13201 setSize.call(x); 13202 try { 13203 mapSize.call(x); 13204 } catch (m) { 13205 return true; 13206 } 13207 return x instanceof Set; // core-js workaround, pre-v2.5.0 13208 } catch (e) {} 13209 return false; 13210} 13211 13212function isWeakSet(x) { 13213 if (!weakSetHas || !x || typeof x !== 'object') { 13214 return false; 13215 } 13216 try { 13217 weakSetHas.call(x, weakSetHas); 13218 try { 13219 weakMapHas.call(x, weakMapHas); 13220 } catch (s) { 13221 return true; 13222 } 13223 return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 13224 } catch (e) {} 13225 return false; 13226} 13227 13228function isElement(x) { 13229 if (!x || typeof x !== 'object') { return false; } 13230 if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { 13231 return true; 13232 } 13233 return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; 13234} 13235 13236function inspectString(str, opts) { 13237 if (str.length > opts.maxStringLength) { 13238 var remaining = str.length - opts.maxStringLength; 13239 var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); 13240 return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; 13241 } 13242 // eslint-disable-next-line no-control-regex 13243 var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); 13244 return wrapQuotes(s, 'single', opts); 13245} 13246 13247function lowbyte(c) { 13248 var n = c.charCodeAt(0); 13249 var x = { 13250 8: 'b', 13251 9: 't', 13252 10: 'n', 13253 12: 'f', 13254 13: 'r' 13255 }[n]; 13256 if (x) { return '\\' + x; } 13257 return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); 13258} 13259 13260function markBoxed(str) { 13261 return 'Object(' + str + ')'; 13262} 13263 13264function weakCollectionOf(type) { 13265 return type + ' { ? }'; 13266} 13267 13268function collectionOf(type, size, entries, indent) { 13269 var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); 13270 return type + ' (' + size + ') {' + joinedEntries + '}'; 13271} 13272 13273function singleLineValues(xs) { 13274 for (var i = 0; i < xs.length; i++) { 13275 if (indexOf(xs[i], '\n') >= 0) { 13276 return false; 13277 } 13278 } 13279 return true; 13280} 13281 13282function getIndent(opts, depth) { 13283 var baseIndent; 13284 if (opts.indent === '\t') { 13285 baseIndent = '\t'; 13286 } else if (typeof opts.indent === 'number' && opts.indent > 0) { 13287 baseIndent = $join.call(Array(opts.indent + 1), ' '); 13288 } else { 13289 return null; 13290 } 13291 return { 13292 base: baseIndent, 13293 prev: $join.call(Array(depth + 1), baseIndent) 13294 }; 13295} 13296 13297function indentedJoin(xs, indent) { 13298 if (xs.length === 0) { return ''; } 13299 var lineJoiner = '\n' + indent.prev + indent.base; 13300 return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; 13301} 13302 13303function arrObjKeys(obj, inspect) { 13304 var isArr = isArray(obj); 13305 var xs = []; 13306 if (isArr) { 13307 xs.length = obj.length; 13308 for (var i = 0; i < obj.length; i++) { 13309 xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; 13310 } 13311 } 13312 var syms = typeof gOPS === 'function' ? gOPS(obj) : []; 13313 var symMap; 13314 if (hasShammedSymbols) { 13315 symMap = {}; 13316 for (var k = 0; k < syms.length; k++) { 13317 symMap['$' + syms[k]] = syms[k]; 13318 } 13319 } 13320 13321 for (var key in obj) { // eslint-disable-line no-restricted-syntax 13322 if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue 13323 if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue 13324 if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { 13325 // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section 13326 continue; // eslint-disable-line no-restricted-syntax, no-continue 13327 } else if ($test.call(/[^\w$]/, key)) { 13328 xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); 13329 } else { 13330 xs.push(key + ': ' + inspect(obj[key], obj)); 13331 } 13332 } 13333 if (typeof gOPS === 'function') { 13334 for (var j = 0; j < syms.length; j++) { 13335 if (isEnumerable.call(obj, syms[j])) { 13336 xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); 13337 } 13338 } 13339 } 13340 return xs; 13341} 13342 13343/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "../node_modules/webpack/buildin/global.js"))) 13344 13345/***/ }), 13346
vendor: 419 bytes, lines 13347-13357
13347/***/ "../node_modules/owl.carousel/dist/assets/owl.carousel.css": 13348/*!*****************************************************************!*\ 13349 !*** ../node_modules/owl.carousel/dist/assets/owl.carousel.css ***! 13350 \*****************************************************************/ 13351/*! no static exports found */ 13352/***/ (function(module, exports, __webpack_require__) { 13353 13354// extracted by mini-css-extract-plugin 13355 13356/***/ }), 13357
vendor: 439 bytes, lines 13358-13368
13358/***/ "../node_modules/owl.carousel/dist/assets/owl.theme.default.css": 13359/*!**********************************************************************!*\ 13360 !*** ../node_modules/owl.carousel/dist/assets/owl.theme.default.css ***! 13361 \**********************************************************************/ 13362/*! no static exports found */ 13363/***/ (function(module, exports, __webpack_require__) { 13364 13365// extracted by mini-css-extract-plugin 13366 13367/***/ }), 13368
vendor: 90,847 bytes, lines 13369-16828
13369/***/ "../node_modules/owl.carousel/dist/owl.carousel.js": 13370/*!*********************************************************!*\ 13371 !*** ../node_modules/owl.carousel/dist/owl.carousel.js ***! 13372 \*********************************************************/ 13373/*! no static exports found */ 13374/***/ (function(module, exports, __webpack_require__) { 13375 13376/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery, jQuery) {/** 13377 * Owl Carousel v2.3.4 13378 * Copyright 2013-2018 David Deutsch 13379 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 13380 */ 13381/** 13382 * Owl carousel 13383 * @version 2.3.4 13384 * @author Bartosz Wojciechowski 13385 * @author David Deutsch 13386 * @license The MIT License (MIT) 13387 * @todo Lazy Load Icon 13388 * @todo prevent animationend bubling 13389 * @todo itemsScaleUp 13390 * @todo Test Zepto 13391 * @todo stagePadding calculate wrong active classes 13392 */ 13393;(function($, window, document, undefined) { 13394 13395 /** 13396 * Creates a carousel. 13397 * @class The Owl Carousel. 13398 * @public 13399 * @param {HTMLElement|jQuery} element - The element to create the carousel for. 13400 * @param {Object} [options] - The options 13401 */ 13402 function Owl(element, options) { 13403 13404 /** 13405 * Current settings for the carousel. 13406 * @public 13407 */ 13408 this.settings = null; 13409 13410 /** 13411 * Current options set by the caller including defaults. 13412 * @public 13413 */ 13414 this.options = $.extend({}, Owl.Defaults, options); 13415 13416 /** 13417 * Plugin element. 13418 * @public 13419 */ 13420 this.$element = $(element); 13421 13422 /** 13423 * Proxied event handlers. 13424 * @protected 13425 */ 13426 this._handlers = {}; 13427 13428 /** 13429 * References to the running plugins of this carousel. 13430 * @protected 13431 */ 13432 this._plugins = {}; 13433 13434 /** 13435 * Currently suppressed events to prevent them from being retriggered. 13436 * @protected 13437 */ 13438 this._supress = {}; 13439 13440 /** 13441 * Absolute current position. 13442 * @protected 13443 */ 13444 this._current = null; 13445 13446 /** 13447 * Animation speed in milliseconds. 13448 * @protected 13449 */ 13450 this._speed = null; 13451 13452 /** 13453 * Coordinates of all items in pixel. 13454 * @todo The name of this member is missleading. 13455 * @protected 13456 */ 13457 this._coordinates = []; 13458 13459 /** 13460 * Current breakpoint. 13461 * @todo Real media queries would be nice. 13462 * @protected 13463 */ 13464 this._breakpoint = null; 13465 13466 /** 13467 * Current width of the plugin element. 13468 */ 13469 this._width = null; 13470 13471 /** 13472 * All real items. 13473 * @protected 13474 */ 13475 this._items = []; 13476 13477 /** 13478 * All cloned items. 13479 * @protected 13480 */ 13481 this._clones = []; 13482 13483 /** 13484 * Merge values of all items. 13485 * @todo Maybe this could be part of a plugin. 13486 * @protected 13487 */ 13488 this._mergers = []; 13489 13490 /** 13491 * Widths of all items. 13492 */ 13493 this._widths = []; 13494 13495 /** 13496 * Invalidated parts within the update process. 13497 * @protected 13498 */ 13499 this._invalidated = {}; 13500 13501 /** 13502 * Ordered list of workers for the update process. 13503 * @protected 13504 */ 13505 this._pipe = []; 13506 13507 /** 13508 * Current state information for the drag operation. 13509 * @todo #261 13510 * @protected 13511 */ 13512 this._drag = { 13513 time: null, 13514 target: null, 13515 pointer: null, 13516 stage: { 13517 start: null, 13518 current: null 13519 }, 13520 direction: null 13521 }; 13522 13523 /** 13524 * Current state information and their tags. 13525 * @type {Object} 13526 * @protected 13527 */ 13528 this._states = { 13529 current: {}, 13530 tags: { 13531 'initializing': [ 'busy' ], 13532 'animating': [ 'busy' ], 13533 'dragging': [ 'interacting' ] 13534 } 13535 }; 13536 13537 $.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) { 13538 this._handlers[handler] = $.proxy(this[handler], this); 13539 }, this)); 13540 13541 $.each(Owl.Plugins, $.proxy(function(key, plugin) { 13542 this._plugins[key.charAt(0).toLowerCase() + key.slice(1)] 13543 = new plugin(this); 13544 }, this)); 13545 13546 $.each(Owl.Workers, $.proxy(function(priority, worker) { 13547 this._pipe.push({ 13548 'filter': worker.filter, 13549 'run': $.proxy(worker.run, this) 13550 }); 13551 }, this)); 13552 13553 this.setup(); 13554 this.initialize(); 13555 } 13556 13557 /** 13558 * Default options for the carousel. 13559 * @public 13560 */ 13561 Owl.Defaults = { 13562 items: 3, 13563 loop: false, 13564 center: false, 13565 rewind: false, 13566 checkVisibility: true, 13567 13568 mouseDrag: true, 13569 touchDrag: true, 13570 pullDrag: true, 13571 freeDrag: false, 13572 13573 margin: 0, 13574 stagePadding: 0, 13575 13576 merge: false, 13577 mergeFit: true, 13578 autoWidth: false, 13579 13580 startPosition: 0, 13581 rtl: false, 13582 13583 smartSpeed: 250, 13584 fluidSpeed: false, 13585 dragEndSpeed: false, 13586 13587 responsive: {}, 13588 responsiveRefreshRate: 200, 13589 responsiveBaseElement: window, 13590 13591 fallbackEasing: 'swing', 13592 slideTransition: '', 13593 13594 info: false, 13595 13596 nestedItemSelector: false, 13597 itemElement: 'div', 13598 stageElement: 'div', 13599 13600 refreshClass: 'owl-refresh', 13601 loadedClass: 'owl-loaded', 13602 loadingClass: 'owl-loading', 13603 rtlClass: 'owl-rtl', 13604 responsiveClass: 'owl-responsive', 13605 dragClass: 'owl-drag', 13606 itemClass: 'owl-item', 13607 stageClass: 'owl-stage', 13608 stageOuterClass: 'owl-stage-outer', 13609 grabClass: 'owl-grab' 13610 }; 13611 13612 /** 13613 * Enumeration for width. 13614 * @public 13615 * @readonly 13616 * @enum {String} 13617 */ 13618 Owl.Width = { 13619 Default: 'default', 13620 Inner: 'inner', 13621 Outer: 'outer' 13622 }; 13623 13624 /** 13625 * Enumeration for types. 13626 * @public 13627 * @readonly 13628 * @enum {String} 13629 */ 13630 Owl.Type = { 13631 Event: 'event', 13632 State: 'state' 13633 }; 13634 13635 /** 13636 * Contains all registered plugins. 13637 * @public 13638 */ 13639 Owl.Plugins = {}; 13640 13641 /** 13642 * List of workers involved in the update process. 13643 */ 13644 Owl.Workers = [ { 13645 filter: [ 'width', 'settings' ], 13646 run: function() { 13647 this._width = this.$element.width(); 13648 } 13649 }, { 13650 filter: [ 'width', 'items', 'settings' ], 13651 run: function(cache) { 13652 cache.current = this._items && this._items[this.relative(this._current)]; 13653 } 13654 }, { 13655 filter: [ 'items', 'settings' ], 13656 run: function() { 13657 this.$stage.children('.cloned').remove(); 13658 } 13659 }, { 13660 filter: [ 'width', 'items', 'settings' ], 13661 run: function(cache) { 13662 var margin = this.settings.margin || '', 13663 grid = !this.settings.autoWidth, 13664 rtl = this.settings.rtl, 13665 css = { 13666 'width': 'auto', 13667 'margin-left': rtl ? margin : '', 13668 'margin-right': rtl ? '' : margin 13669 }; 13670 13671 !grid && this.$stage.children().css(css); 13672 13673 cache.css = css; 13674 } 13675 }, { 13676 filter: [ 'width', 'items', 'settings' ], 13677 run: function(cache) { 13678 var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin, 13679 merge = null, 13680 iterator = this._items.length, 13681 grid = !this.settings.autoWidth, 13682 widths = []; 13683 13684 cache.items = { 13685 merge: false, 13686 width: width 13687 }; 13688 13689 while (iterator--) { 13690 merge = this._mergers[iterator]; 13691 merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge; 13692 13693 cache.items.merge = merge > 1 || cache.items.merge; 13694 13695 widths[iterator] = !grid ? this._items[iterator].width() : width * merge; 13696 } 13697 13698 this._widths = widths; 13699 } 13700 }, { 13701 filter: [ 'items', 'settings' ], 13702 run: function() { 13703 var clones = [], 13704 items = this._items, 13705 settings = this.settings, 13706 // TODO: Should be computed from number of min width items in stage 13707 view = Math.max(settings.items * 2, 4), 13708 size = Math.ceil(items.length / 2) * 2, 13709 repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0, 13710 append = '', 13711 prepend = ''; 13712 13713 repeat /= 2; 13714 13715 while (repeat > 0) { 13716 // Switch to only using appended clones 13717 clones.push(this.normalize(clones.length / 2, true)); 13718 append = append + items[clones[clones.length - 1]][0].outerHTML; 13719 clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true)); 13720 prepend = items[clones[clones.length - 1]][0].outerHTML + prepend; 13721 repeat -= 1; 13722 } 13723 13724 this._clones = clones; 13725 13726 $(append).addClass('cloned').appendTo(this.$stage); 13727 $(prepend).addClass('cloned').prependTo(this.$stage); 13728 } 13729 }, { 13730 filter: [ 'width', 'items', 'settings' ], 13731 run: function() { 13732 var rtl = this.settings.rtl ? 1 : -1, 13733 size = this._clones.length + this._items.length, 13734 iterator = -1, 13735 previous = 0, 13736 current = 0, 13737 coordinates = []; 13738 13739 while (++iterator < size) { 13740 previous = coordinates[iterator - 1] || 0; 13741 current = this._widths[this.relative(iterator)] + this.settings.margin; 13742 coordinates.push(previous + current * rtl); 13743 } 13744 13745 this._coordinates = coordinates; 13746 } 13747 }, { 13748 filter: [ 'width', 'items', 'settings' ], 13749 run: function() { 13750 var padding = this.settings.stagePadding, 13751 coordinates = this._coordinates, 13752 css = { 13753 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2, 13754 'padding-left': padding || '', 13755 'padding-right': padding || '' 13756 }; 13757 13758 this.$stage.css(css); 13759 } 13760 }, { 13761 filter: [ 'width', 'items', 'settings' ], 13762 run: function(cache) { 13763 var iterator = this._coordinates.length, 13764 grid = !this.settings.autoWidth, 13765 items = this.$stage.children(); 13766 13767 if (grid && cache.items.merge) { 13768 while (iterator--) { 13769 cache.css.width = this._widths[this.relative(iterator)]; 13770 items.eq(iterator).css(cache.css); 13771 } 13772 } else if (grid) { 13773 cache.css.width = cache.items.width; 13774 items.css(cache.css); 13775 } 13776 } 13777 }, { 13778 filter: [ 'items' ], 13779 run: function() { 13780 this._coordinates.length < 1 && this.$stage.removeAttr('style'); 13781 } 13782 }, { 13783 filter: [ 'width', 'items', 'settings' ], 13784 run: function(cache) { 13785 cache.current = cache.current ? this.$stage.children().index(cache.current) : 0; 13786 cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current)); 13787 this.reset(cache.current); 13788 } 13789 }, { 13790 filter: [ 'position' ], 13791 run: function() { 13792 this.animate(this.coordinates(this._current)); 13793 } 13794 }, { 13795 filter: [ 'width', 'position', 'items', 'settings' ], 13796 run: function() { 13797 var rtl = this.settings.rtl ? 1 : -1, 13798 padding = this.settings.stagePadding * 2, 13799 begin = this.coordinates(this.current()) + padding, 13800 end = begin + this.width() * rtl, 13801 inner, outer, matches = [], i, n; 13802 13803 for (i = 0, n = this._coordinates.length; i < n; i++) { 13804 inner = this._coordinates[i - 1] || 0; 13805 outer = Math.abs(this._coordinates[i]) + padding * rtl; 13806 13807 if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end))) 13808 || (this.op(outer, '<', begin) && this.op(outer, '>', end))) { 13809 matches.push(i); 13810 } 13811 } 13812 13813 this.$stage.children('.active').removeClass('active'); 13814 this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active'); 13815 13816 this.$stage.children('.center').removeClass('center'); 13817 if (this.settings.center) { 13818 this.$stage.children().eq(this.current()).addClass('center'); 13819 } 13820 } 13821 } ]; 13822 13823 /** 13824 * Create the stage DOM element 13825 */ 13826 Owl.prototype.initializeStage = function() { 13827 this.$stage = this.$element.find('.' + this.settings.stageClass); 13828 13829 // if the stage is already in the DOM, grab it and skip stage initialization 13830 if (this.$stage.length) { 13831 return; 13832 } 13833 13834 this.$element.addClass(this.options.loadingClass); 13835 13836 // create stage 13837 this.$stage = $('<' + this.settings.stageElement + '>', { 13838 "class": this.settings.stageClass 13839 }).wrap( $( '<div/>', { 13840 "class": this.settings.stageOuterClass 13841 })); 13842 13843 // append stage 13844 this.$element.append(this.$stage.parent()); 13845 }; 13846 13847 /** 13848 * Create item DOM elements 13849 */ 13850 Owl.prototype.initializeItems = function() { 13851 var $items = this.$element.find('.owl-item'); 13852 13853 // if the items are already in the DOM, grab them and skip item initialization 13854 if ($items.length) { 13855 this._items = $items.get().map(function(item) { 13856 return $(item); 13857 }); 13858 13859 this._mergers = this._items.map(function() { 13860 return 1; 13861 }); 13862 13863 this.refresh(); 13864 13865 return; 13866 } 13867 13868 // append content 13869 this.replace(this.$element.children().not(this.$stage.parent())); 13870 13871 // check visibility 13872 if (this.isVisible()) { 13873 // update view 13874 this.refresh(); 13875 } else { 13876 // invalidate width 13877 this.invalidate('width'); 13878 } 13879 13880 this.$element 13881 .removeClass(this.options.loadingClass) 13882 .addClass(this.options.loadedClass); 13883 }; 13884 13885 /** 13886 * Initializes the carousel. 13887 * @protected 13888 */ 13889 Owl.prototype.initialize = function() { 13890 this.enter('initializing'); 13891 this.trigger('initialize'); 13892 13893 this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl); 13894 13895 if (this.settings.autoWidth && !this.is('pre-loading')) { 13896 var imgs, nestedSelector, width; 13897 imgs = this.$element.find('img'); 13898 nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; 13899 width = this.$element.children(nestedSelector).width(); 13900 13901 if (imgs.length && width <= 0) { 13902 this.preloadAutoWidthImages(imgs); 13903 } 13904 } 13905 13906 this.initializeStage(); 13907 this.initializeItems(); 13908 13909 // register event handlers 13910 this.registerEventHandlers(); 13911 13912 this.leave('initializing'); 13913 this.trigger('initialized'); 13914 }; 13915 13916 /** 13917 * @returns {Boolean} visibility of $element 13918 * if you know the carousel will always be visible you can set `checkVisibility` to `false` to 13919 * prevent the expensive browser layout forced reflow the $element.is(':visible') does 13920 */ 13921 Owl.prototype.isVisible = function() { 13922 return this.settings.checkVisibility 13923 ? this.$element.is(':visible') 13924 : true; 13925 }; 13926 13927 /** 13928 * Setups the current settings. 13929 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8? 13930 * @todo Support for media queries by using `matchMedia` would be nice. 13931 * @public 13932 */ 13933 Owl.prototype.setup = function() { 13934 var viewport = this.viewport(), 13935 overwrites = this.options.responsive, 13936 match = -1, 13937 settings = null; 13938 13939 if (!overwrites) { 13940 settings = $.extend({}, this.options); 13941 } else { 13942 $.each(overwrites, function(breakpoint) { 13943 if (breakpoint <= viewport && breakpoint > match) { 13944 match = Number(breakpoint); 13945 } 13946 }); 13947 13948 settings = $.extend({}, this.options, overwrites[match]); 13949 if (typeof settings.stagePadding === 'function') { 13950 settings.stagePadding = settings.stagePadding(); 13951 } 13952 delete settings.responsive; 13953 13954 // responsive class 13955 if (settings.responsiveClass) { 13956 this.$element.attr('class', 13957 this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match) 13958 ); 13959 } 13960 } 13961 13962 this.trigger('change', { property: { name: 'settings', value: settings } }); 13963 this._breakpoint = match; 13964 this.settings = settings; 13965 this.invalidate('settings'); 13966 this.trigger('changed', { property: { name: 'settings', value: this.settings } }); 13967 }; 13968 13969 /** 13970 * Updates option logic if necessery. 13971 * @protected 13972 */ 13973 Owl.prototype.optionsLogic = function() { 13974 if (this.settings.autoWidth) { 13975 this.settings.stagePadding = false; 13976 this.settings.merge = false; 13977 } 13978 }; 13979 13980 /** 13981 * Prepares an item before add. 13982 * @todo Rename event parameter `content` to `item`. 13983 * @protected 13984 * @returns {jQuery|HTMLElement} - The item container. 13985 */ 13986 Owl.prototype.prepare = function(item) { 13987 var event = this.trigger('prepare', { content: item }); 13988 13989 if (!event.data) { 13990 event.data = $('<' + this.settings.itemElement + '/>') 13991 .addClass(this.options.itemClass).append(item) 13992 } 13993 13994 this.trigger('prepared', { content: event.data }); 13995 13996 return event.data; 13997 }; 13998 13999 /** 14000 * Updates the view. 14001 * @public 14002 */ 14003 Owl.prototype.update = function() { 14004 var i = 0, 14005 n = this._pipe.length, 14006 filter = $.proxy(function(p) { return this[p] }, this._invalidated), 14007 cache = {}; 14008 14009 while (i < n) { 14010 if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) { 14011 this._pipe[i].run(cache); 14012 } 14013 i++; 14014 } 14015 14016 this._invalidated = {}; 14017 14018 !this.is('valid') && this.enter('valid'); 14019 }; 14020 14021 /** 14022 * Gets the width of the view. 14023 * @public 14024 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return. 14025 * @returns {Number} - The width of the view in pixel. 14026 */ 14027 Owl.prototype.width = function(dimension) { 14028 dimension = dimension || Owl.Width.Default; 14029 switch (dimension) { 14030 case Owl.Width.Inner: 14031 case Owl.Width.Outer: 14032 return this._width; 14033 default: 14034 return this._width - this.settings.stagePadding * 2 + this.settings.margin; 14035 } 14036 }; 14037 14038 /** 14039 * Refreshes the carousel primarily for adaptive purposes. 14040 * @public 14041 */ 14042 Owl.prototype.refresh = function() { 14043 this.enter('refreshing'); 14044 this.trigger('refresh'); 14045 14046 this.setup(); 14047 14048 this.optionsLogic(); 14049 14050 this.$element.addClass(this.options.refreshClass); 14051 14052 this.update(); 14053 14054 this.$element.removeClass(this.options.refreshClass); 14055 14056 this.leave('refreshing'); 14057 this.trigger('refreshed'); 14058 }; 14059 14060 /** 14061 * Checks window `resize` event. 14062 * @protected 14063 */ 14064 Owl.prototype.onThrottledResize = function() { 14065 window.clearTimeout(this.resizeTimer); 14066 this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate); 14067 }; 14068 14069 /** 14070 * Checks window `resize` event. 14071 * @protected 14072 */ 14073 Owl.prototype.onResize = function() { 14074 if (!this._items.length) { 14075 return false; 14076 } 14077 14078 if (this._width === this.$element.width()) { 14079 return false; 14080 } 14081 14082 if (!this.isVisible()) { 14083 return false; 14084 } 14085 14086 this.enter('resizing'); 14087 14088 if (this.trigger('resize').isDefaultPrevented()) { 14089 this.leave('resizing'); 14090 return false; 14091 } 14092 14093 this.invalidate('width'); 14094 14095 this.refresh(); 14096 14097 this.leave('resizing'); 14098 this.trigger('resized'); 14099 }; 14100 14101 /** 14102 * Registers event handlers. 14103 * @todo Check `msPointerEnabled` 14104 * @todo #261 14105 * @protected 14106 */ 14107 Owl.prototype.registerEventHandlers = function() { 14108 if ($.support.transition) { 14109 this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this)); 14110 } 14111 14112 if (this.settings.responsive !== false) { 14113 this.on(window, 'resize', this._handlers.onThrottledResize); 14114 } 14115 14116 if (this.settings.mouseDrag) { 14117 this.$element.addClass(this.options.dragClass); 14118 this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this)); 14119 this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false }); 14120 } 14121 14122 if (this.settings.touchDrag){ 14123 this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this)); 14124 this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this)); 14125 } 14126 }; 14127 14128 /** 14129 * Handles `touchstart` and `mousedown` events. 14130 * @todo Horizontal swipe threshold as option 14131 * @todo #261 14132 * @protected 14133 * @param {Event} event - The event arguments. 14134 */ 14135 Owl.prototype.onDragStart = function(event) { 14136 var stage = null; 14137 14138 if (event.which === 3) { 14139 return; 14140 } 14141 14142 if ($.support.transform) { 14143 stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(','); 14144 stage = { 14145 x: stage[stage.length === 16 ? 12 : 4], 14146 y: stage[stage.length === 16 ? 13 : 5] 14147 }; 14148 } else { 14149 stage = this.$stage.position(); 14150 stage = { 14151 x: this.settings.rtl ? 14152 stage.left + this.$stage.width() - this.width() + this.settings.margin : 14153 stage.left, 14154 y: stage.top 14155 }; 14156 } 14157 14158 if (this.is('animating')) { 14159 $.support.transform ? this.animate(stage.x) : this.$stage.stop() 14160 this.invalidate('position'); 14161 } 14162 14163 this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown'); 14164 14165 this.speed(0); 14166 14167 this._drag.time = new Date().getTime(); 14168 this._drag.target = $(event.target); 14169 this._drag.stage.start = stage; 14170 this._drag.stage.current = stage; 14171 this._drag.pointer = this.pointer(event); 14172 14173 $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this)); 14174 14175 $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) { 14176 var delta = this.difference(this._drag.pointer, this.pointer(event)); 14177 14178 $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this)); 14179 14180 if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) { 14181 return; 14182 } 14183 14184 event.preventDefault(); 14185 14186 this.enter('dragging'); 14187 this.trigger('drag'); 14188 }, this)); 14189 }; 14190 14191 /** 14192 * Handles the `touchmove` and `mousemove` events. 14193 * @todo #261 14194 * @protected 14195 * @param {Event} event - The event arguments. 14196 */ 14197 Owl.prototype.onDragMove = function(event) { 14198 var minimum = null, 14199 maximum = null, 14200 pull = null, 14201 delta = this.difference(this._drag.pointer, this.pointer(event)), 14202 stage = this.difference(this._drag.stage.start, delta); 14203 14204 if (!this.is('dragging')) { 14205 return; 14206 } 14207 14208 event.preventDefault(); 14209 14210 if (this.settings.loop) { 14211 minimum = this.coordinates(this.minimum()); 14212 maximum = this.coordinates(this.maximum() + 1) - minimum; 14213 stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum; 14214 } else { 14215 minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()); 14216 maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()); 14217 pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0; 14218 stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull); 14219 } 14220 14221 this._drag.stage.current = stage; 14222 14223 this.animate(stage.x); 14224 }; 14225 14226 /** 14227 * Handles the `touchend` and `mouseup` events. 14228 * @todo #261 14229 * @todo Threshold for click event 14230 * @protected 14231 * @param {Event} event - The event arguments. 14232 */ 14233 Owl.prototype.onDragEnd = function(event) { 14234 var delta = this.difference(this._drag.pointer, this.pointer(event)), 14235 stage = this._drag.stage.current, 14236 direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right'; 14237 14238 $(document).off('.owl.core'); 14239 14240 this.$element.removeClass(this.options.grabClass); 14241 14242 if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) { 14243 this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed); 14244 this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction)); 14245 this.invalidate('position'); 14246 this.update(); 14247 14248 this._drag.direction = direction; 14249 14250 if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) { 14251 this._drag.target.one('click.owl.core', function() { return false; }); 14252 } 14253 } 14254 14255 if (!this.is('dragging')) { 14256 return; 14257 } 14258 14259 this.leave('dragging'); 14260 this.trigger('dragged'); 14261 }; 14262 14263 /** 14264 * Gets absolute position of the closest item for a coordinate. 14265 * @todo Setting `freeDrag` makes `closest` not reusable. See #165. 14266 * @protected 14267 * @param {Number} coordinate - The coordinate in pixel. 14268 * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`. 14269 * @return {Number} - The absolute position of the closest item. 14270 */ 14271 Owl.prototype.closest = function(coordinate, direction) { 14272 var position = -1, 14273 pull = 30, 14274 width = this.width(), 14275 coordinates = this.coordinates(); 14276 14277 if (!this.settings.freeDrag) { 14278 // check closest item 14279 $.each(coordinates, $.proxy(function(index, value) { 14280 // on a left pull, check on current index 14281 if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) { 14282 position = index; 14283 // on a right pull, check on previous index 14284 // to do so, subtract width from value and set position = index + 1 14285 } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) { 14286 position = index + 1; 14287 } else if (this.op(coordinate, '<', value) 14288 && this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) { 14289 position = direction === 'left' ? index + 1 : index; 14290 } 14291 return position === -1; 14292 }, this)); 14293 } 14294 14295 if (!this.settings.loop) { 14296 // non loop boundries 14297 if (this.op(coordinate, '>', coordinates[this.minimum()])) { 14298 position = coordinate = this.minimum(); 14299 } else if (this.op(coordinate, '<', coordinates[this.maximum()])) { 14300 position = coordinate = this.maximum(); 14301 } 14302 } 14303 14304 return position; 14305 }; 14306 14307 /** 14308 * Animates the stage. 14309 * @todo #270 14310 * @public 14311 * @param {Number} coordinate - The coordinate in pixels. 14312 */ 14313 Owl.prototype.animate = function(coordinate) { 14314 var animate = this.speed() > 0; 14315 14316 this.is('animating') && this.onTransitionEnd(); 14317 14318 if (animate) { 14319 this.enter('animating'); 14320 this.trigger('translate'); 14321 } 14322 14323 if ($.support.transform3d && $.support.transition) { 14324 this.$stage.css({ 14325 transform: 'translate3d(' + coordinate + 'px,0px,0px)', 14326 transition: (this.speed() / 1000) + 's' + ( 14327 this.settings.slideTransition ? ' ' + this.settings.slideTransition : '' 14328 ) 14329 }); 14330 } else if (animate) { 14331 this.$stage.animate({ 14332 left: coordinate + 'px' 14333 }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this)); 14334 } else { 14335 this.$stage.css({ 14336 left: coordinate + 'px' 14337 }); 14338 } 14339 }; 14340 14341 /** 14342 * Checks whether the carousel is in a specific state or not. 14343 * @param {String} state - The state to check. 14344 * @returns {Boolean} - The flag which indicates if the carousel is busy. 14345 */ 14346 Owl.prototype.is = function(state) { 14347 return this._states.current[state] && this._states.current[state] > 0; 14348 }; 14349 14350 /** 14351 * Sets the absolute position of the current item. 14352 * @public 14353 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged. 14354 * @returns {Number} - The absolute position of the current item. 14355 */ 14356 Owl.prototype.current = function(position) { 14357 if (position === undefined) { 14358 return this._current; 14359 } 14360 14361 if (this._items.length === 0) { 14362 return undefined; 14363 } 14364 14365 position = this.normalize(position); 14366 14367 if (this._current !== position) { 14368 var event = this.trigger('change', { property: { name: 'position', value: position } }); 14369 14370 if (event.data !== undefined) { 14371 position = this.normalize(event.data); 14372 } 14373 14374 this._current = position; 14375 14376 this.invalidate('position'); 14377 14378 this.trigger('changed', { property: { name: 'position', value: this._current } }); 14379 } 14380 14381 return this._current; 14382 }; 14383 14384 /** 14385 * Invalidates the given part of the update routine. 14386 * @param {String} [part] - The part to invalidate. 14387 * @returns {Array.<String>} - The invalidated parts. 14388 */ 14389 Owl.prototype.invalidate = function(part) { 14390 if ($.type(part) === 'string') { 14391 this._invalidated[part] = true; 14392 this.is('valid') && this.leave('valid'); 14393 } 14394 return $.map(this._invalidated, function(v, i) { return i }); 14395 }; 14396 14397 /** 14398 * Resets the absolute position of the current item. 14399 * @public 14400 * @param {Number} position - The absolute position of the new item. 14401 */ 14402 Owl.prototype.reset = function(position) { 14403 position = this.normalize(position); 14404 14405 if (position === undefined) { 14406 return; 14407 } 14408 14409 this._speed = 0; 14410 this._current = position; 14411 14412 this.suppress([ 'translate', 'translated' ]); 14413 14414 this.animate(this.coordinates(position)); 14415 14416 this.release([ 'translate', 'translated' ]); 14417 }; 14418 14419 /** 14420 * Normalizes an absolute or a relative position of an item. 14421 * @public 14422 * @param {Number} position - The absolute or relative position to normalize. 14423 * @param {Boolean} [relative=false] - Whether the given position is relative or not. 14424 * @returns {Number} - The normalized position. 14425 */ 14426 Owl.prototype.normalize = function(position, relative) { 14427 var n = this._items.length, 14428 m = relative ? 0 : this._clones.length; 14429 14430 if (!this.isNumeric(position) || n < 1) { 14431 position = undefined; 14432 } else if (position < 0 || position >= n + m) { 14433 position = ((position - m / 2) % n + n) % n + m / 2; 14434 } 14435 14436 return position; 14437 }; 14438 14439 /** 14440 * Converts an absolute position of an item into a relative one. 14441 * @public 14442 * @param {Number} position - The absolute position to convert. 14443 * @returns {Number} - The converted position. 14444 */ 14445 Owl.prototype.relative = function(position) { 14446 position -= this._clones.length / 2; 14447 return this.normalize(position, true); 14448 }; 14449 14450 /** 14451 * Gets the maximum position for the current item. 14452 * @public 14453 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. 14454 * @returns {Number} 14455 */ 14456 Owl.prototype.maximum = function(relative) { 14457 var settings = this.settings, 14458 maximum = this._coordinates.length, 14459 iterator, 14460 reciprocalItemsWidth, 14461 elementWidth; 14462 14463 if (settings.loop) { 14464 maximum = this._clones.length / 2 + this._items.length - 1; 14465 } else if (settings.autoWidth || settings.merge) { 14466 iterator = this._items.length; 14467 if (iterator) { 14468 reciprocalItemsWidth = this._items[--iterator].width(); 14469 elementWidth = this.$element.width(); 14470 while (iterator--) { 14471 reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin; 14472 if (reciprocalItemsWidth > elementWidth) { 14473 break; 14474 } 14475 } 14476 } 14477 maximum = iterator + 1; 14478 } else if (settings.center) { 14479 maximum = this._items.length - 1; 14480 } else { 14481 maximum = this._items.length - settings.items; 14482 } 14483 14484 if (relative) { 14485 maximum -= this._clones.length / 2; 14486 } 14487 14488 return Math.max(maximum, 0); 14489 }; 14490 14491 /** 14492 * Gets the minimum position for the current item. 14493 * @public 14494 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. 14495 * @returns {Number} 14496 */ 14497 Owl.prototype.minimum = function(relative) { 14498 return relative ? 0 : this._clones.length / 2; 14499 }; 14500 14501 /** 14502 * Gets an item at the specified relative position. 14503 * @public 14504 * @param {Number} [position] - The relative position of the item. 14505 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given. 14506 */ 14507 Owl.prototype.items = function(position) { 14508 if (position === undefined) { 14509 return this._items.slice(); 14510 } 14511 14512 position = this.normalize(position, true); 14513 return this._items[position]; 14514 }; 14515 14516 /** 14517 * Gets an item at the specified relative position. 14518 * @public 14519 * @param {Number} [position] - The relative position of the item. 14520 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given. 14521 */ 14522 Owl.prototype.mergers = function(position) { 14523 if (position === undefined) { 14524 return this._mergers.slice(); 14525 } 14526 14527 position = this.normalize(position, true); 14528 return this._mergers[position]; 14529 }; 14530 14531 /** 14532 * Gets the absolute positions of clones for an item. 14533 * @public 14534 * @param {Number} [position] - The relative position of the item. 14535 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given. 14536 */ 14537 Owl.prototype.clones = function(position) { 14538 var odd = this._clones.length / 2, 14539 even = odd + this._items.length, 14540 map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 }; 14541 14542 if (position === undefined) { 14543 return $.map(this._clones, function(v, i) { return map(i) }); 14544 } 14545 14546 return $.map(this._clones, function(v, i) { return v === position ? map(i) : null }); 14547 }; 14548 14549 /** 14550 * Sets the current animation speed. 14551 * @public 14552 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged. 14553 * @returns {Number} - The current animation speed in milliseconds. 14554 */ 14555 Owl.prototype.speed = function(speed) { 14556 if (speed !== undefined) { 14557 this._speed = speed; 14558 } 14559 14560 return this._speed; 14561 }; 14562 14563 /** 14564 * Gets the coordinate of an item. 14565 * @todo The name of this method is missleanding. 14566 * @public 14567 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`. 14568 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates. 14569 */ 14570 Owl.prototype.coordinates = function(position) { 14571 var multiplier = 1, 14572 newPosition = position - 1, 14573 coordinate; 14574 14575 if (position === undefined) { 14576 return $.map(this._coordinates, $.proxy(function(coordinate, index) { 14577 return this.coordinates(index); 14578 }, this)); 14579 } 14580 14581 if (this.settings.center) { 14582 if (this.settings.rtl) { 14583 multiplier = -1; 14584 newPosition = position + 1; 14585 } 14586 14587 coordinate = this._coordinates[position]; 14588 coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier; 14589 } else { 14590 coordinate = this._coordinates[newPosition] || 0; 14591 } 14592 14593 coordinate = Math.ceil(coordinate); 14594 14595 return coordinate; 14596 }; 14597 14598 /** 14599 * Calculates the speed for a translation. 14600 * @protected 14601 * @param {Number} from - The absolute position of the start item. 14602 * @param {Number} to - The absolute position of the target item. 14603 * @param {Number} [factor=undefined] - The time factor in milliseconds. 14604 * @returns {Number} - The time in milliseconds for the translation. 14605 */ 14606 Owl.prototype.duration = function(from, to, factor) { 14607 if (factor === 0) { 14608 return 0; 14609 } 14610 14611 return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed)); 14612 }; 14613 14614 /** 14615 * Slides to the specified item. 14616 * @public 14617 * @param {Number} position - The position of the item. 14618 * @param {Number} [speed] - The time in milliseconds for the transition. 14619 */ 14620 Owl.prototype.to = function(position, speed) { 14621 var current = this.current(), 14622 revert = null, 14623 distance = position - this.relative(current), 14624 direction = (distance > 0) - (distance < 0), 14625 items = this._items.length, 14626 minimum = this.minimum(), 14627 maximum = this.maximum(); 14628 14629 if (this.settings.loop) { 14630 if (!this.settings.rewind && Math.abs(distance) > items / 2) { 14631 distance += direction * -1 * items; 14632 } 14633 14634 position = current + distance; 14635 revert = ((position - minimum) % items + items) % items + minimum; 14636 14637 if (revert !== position && revert - distance <= maximum && revert - distance > 0) { 14638 current = revert - distance; 14639 position = revert; 14640 this.reset(current); 14641 } 14642 } else if (this.settings.rewind) { 14643 maximum += 1; 14644 position = (position % maximum + maximum) % maximum; 14645 } else { 14646 position = Math.max(minimum, Math.min(maximum, position)); 14647 } 14648 14649 this.speed(this.duration(current, position, speed)); 14650 this.current(position); 14651 14652 if (this.isVisible()) { 14653 this.update(); 14654 } 14655 }; 14656 14657 /** 14658 * Slides to the next item. 14659 * @public 14660 * @param {Number} [speed] - The time in milliseconds for the transition. 14661 */ 14662 Owl.prototype.next = function(speed) { 14663 speed = speed || false; 14664 this.to(this.relative(this.current()) + 1, speed); 14665 }; 14666 14667 /** 14668 * Slides to the previous item. 14669 * @public 14670 * @param {Number} [speed] - The time in milliseconds for the transition. 14671 */ 14672 Owl.prototype.prev = function(speed) { 14673 speed = speed || false; 14674 this.to(this.relative(this.current()) - 1, speed); 14675 }; 14676 14677 /** 14678 * Handles the end of an animation. 14679 * @protected 14680 * @param {Event} event - The event arguments. 14681 */ 14682 Owl.prototype.onTransitionEnd = function(event) { 14683 14684 // if css2 animation then event object is undefined 14685 if (event !== undefined) { 14686 event.stopPropagation(); 14687 14688 // Catch only owl-stage transitionEnd event 14689 if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) { 14690 return false; 14691 } 14692 } 14693 14694 this.leave('animating'); 14695 this.trigger('translated'); 14696 }; 14697 14698 /** 14699 * Gets viewport width. 14700 * @protected 14701 * @return {Number} - The width in pixel. 14702 */ 14703 Owl.prototype.viewport = function() { 14704 var width; 14705 if (this.options.responsiveBaseElement !== window) { 14706 width = $(this.options.responsiveBaseElement).width(); 14707 } else if (window.innerWidth) { 14708 width = window.innerWidth; 14709 } else if (document.documentElement && document.documentElement.clientWidth) { 14710 width = document.documentElement.clientWidth; 14711 } else { 14712 console.warn('Can not detect viewport width.'); 14713 } 14714 return width; 14715 }; 14716 14717 /** 14718 * Replaces the current content. 14719 * @public 14720 * @param {HTMLElement|jQuery|String} content - The new content. 14721 */ 14722 Owl.prototype.replace = function(content) { 14723 this.$stage.empty(); 14724 this._items = []; 14725 14726 if (content) { 14727 content = (content instanceof jQuery) ? content : $(content); 14728 } 14729 14730 if (this.settings.nestedItemSelector) { 14731 content = content.find('.' + this.settings.nestedItemSelector); 14732 } 14733 14734 content.filter(function() { 14735 return this.nodeType === 1; 14736 }).each($.proxy(function(index, item) { 14737 item = this.prepare(item); 14738 this.$stage.append(item); 14739 this._items.push(item); 14740 this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 14741 }, this)); 14742 14743 this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0); 14744 14745 this.invalidate('items'); 14746 }; 14747 14748 /** 14749 * Adds an item. 14750 * @todo Use `item` instead of `content` for the event arguments. 14751 * @public 14752 * @param {HTMLElement|jQuery|String} content - The item content to add. 14753 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end. 14754 */ 14755 Owl.prototype.add = function(content, position) { 14756 var current = this.relative(this._current); 14757 14758 position = position === undefined ? this._items.length : this.normalize(position, true); 14759 content = content instanceof jQuery ? content : $(content); 14760 14761 this.trigger('add', { content: content, position: position }); 14762 14763 content = this.prepare(content); 14764 14765 if (this._items.length === 0 || position === this._items.length) { 14766 this._items.length === 0 && this.$stage.append(content); 14767 this._items.length !== 0 && this._items[position - 1].after(content); 14768 this._items.push(content); 14769 this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 14770 } else { 14771 this._items[position].before(content); 14772 this._items.splice(position, 0, content); 14773 this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 14774 } 14775 14776 this._items[current] && this.reset(this._items[current].index()); 14777 14778 this.invalidate('items'); 14779 14780 this.trigger('added', { content: content, position: position }); 14781 }; 14782 14783 /** 14784 * Removes an item by its position. 14785 * @todo Use `item` instead of `content` for the event arguments. 14786 * @public 14787 * @param {Number} position - The relative position of the item to remove. 14788 */ 14789 Owl.prototype.remove = function(position) { 14790 position = this.normalize(position, true); 14791 14792 if (position === undefined) { 14793 return; 14794 } 14795 14796 this.trigger('remove', { content: this._items[position], position: position }); 14797 14798 this._items[position].remove(); 14799 this._items.splice(position, 1); 14800 this._mergers.splice(position, 1); 14801 14802 this.invalidate('items'); 14803 14804 this.trigger('removed', { content: null, position: position }); 14805 }; 14806 14807 /** 14808 * Preloads images with auto width. 14809 * @todo Replace by a more generic approach 14810 * @protected 14811 */ 14812 Owl.prototype.preloadAutoWidthImages = function(images) { 14813 images.each($.proxy(function(i, element) { 14814 this.enter('pre-loading'); 14815 element = $(element); 14816 $(new Image()).one('load', $.proxy(function(e) { 14817 element.attr('src', e.target.src); 14818 element.css('opacity', 1); 14819 this.leave('pre-loading'); 14820 !this.is('pre-loading') && !this.is('initializing') && this.refresh(); 14821 }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina')); 14822 }, this)); 14823 }; 14824 14825 /** 14826 * Destroys the carousel. 14827 * @public 14828 */ 14829 Owl.prototype.destroy = function() { 14830 14831 this.$element.off('.owl.core'); 14832 this.$stage.off('.owl.core'); 14833 $(document).off('.owl.core'); 14834 14835 if (this.settings.responsive !== false) { 14836 window.clearTimeout(this.resizeTimer); 14837 this.off(window, 'resize', this._handlers.onThrottledResize); 14838 } 14839 14840 for (var i in this._plugins) { 14841 this._plugins[i].destroy(); 14842 } 14843 14844 this.$stage.children('.cloned').remove(); 14845 14846 this.$stage.unwrap(); 14847 this.$stage.children().contents().unwrap(); 14848 this.$stage.children().unwrap(); 14849 this.$stage.remove(); 14850 this.$element 14851 .removeClass(this.options.refreshClass) 14852 .removeClass(this.options.loadingClass) 14853 .removeClass(this.options.loadedClass) 14854 .removeClass(this.options.rtlClass) 14855 .removeClass(this.options.dragClass) 14856 .removeClass(this.options.grabClass) 14857 .attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), '')) 14858 .removeData('owl.carousel'); 14859 }; 14860 14861 /** 14862 * Operators to calculate right-to-left and left-to-right. 14863 * @protected 14864 * @param {Number} [a] - The left side operand. 14865 * @param {String} [o] - The operator. 14866 * @param {Number} [b] - The right side operand. 14867 */ 14868 Owl.prototype.op = function(a, o, b) { 14869 var rtl = this.settings.rtl; 14870 switch (o) { 14871 case '<': 14872 return rtl ? a > b : a < b; 14873 case '>': 14874 return rtl ? a < b : a > b; 14875 case '>=': 14876 return rtl ? a <= b : a >= b; 14877 case '<=': 14878 return rtl ? a >= b : a <= b; 14879 default: 14880 break; 14881 } 14882 }; 14883 14884 /** 14885 * Attaches to an internal event. 14886 * @protected 14887 * @param {HTMLElement} element - The event source. 14888 * @param {String} event - The event name. 14889 * @param {Function} listener - The event handler to attach. 14890 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not. 14891 */ 14892 Owl.prototype.on = function(element, event, listener, capture) { 14893 if (element.addEventListener) { 14894 element.addEventListener(event, listener, capture); 14895 } else if (element.attachEvent) { 14896 element.attachEvent('on' + event, listener); 14897 } 14898 }; 14899 14900 /** 14901 * Detaches from an internal event. 14902 * @protected 14903 * @param {HTMLElement} element - The event source. 14904 * @param {String} event - The event name. 14905 * @param {Function} listener - The attached event handler to detach. 14906 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not. 14907 */ 14908 Owl.prototype.off = function(element, event, listener, capture) { 14909 if (element.removeEventListener) { 14910 element.removeEventListener(event, listener, capture); 14911 } else if (element.detachEvent) { 14912 element.detachEvent('on' + event, listener); 14913 } 14914 }; 14915 14916 /** 14917 * Triggers a public event. 14918 * @todo Remove `status`, `relatedTarget` should be used instead. 14919 * @protected 14920 * @param {String} name - The event name. 14921 * @param {*} [data=null] - The event data. 14922 * @param {String} [namespace=carousel] - The event namespace. 14923 * @param {String} [state] - The state which is associated with the event. 14924 * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not. 14925 * @returns {Event} - The event arguments. 14926 */ 14927 Owl.prototype.trigger = function(name, data, namespace, state, enter) { 14928 var status = { 14929 item: { count: this._items.length, index: this.current() } 14930 }, handler = $.camelCase( 14931 $.grep([ 'on', name, namespace ], function(v) { return v }) 14932 .join('-').toLowerCase() 14933 ), event = $.Event( 14934 [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(), 14935 $.extend({ relatedTarget: this }, status, data) 14936 ); 14937 14938 if (!this._supress[name]) { 14939 $.each(this._plugins, function(name, plugin) { 14940 if (plugin.onTrigger) { 14941 plugin.onTrigger(event); 14942 } 14943 }); 14944 14945 this.register({ type: Owl.Type.Event, name: name }); 14946 this.$element.trigger(event); 14947 14948 if (this.settings && typeof this.settings[handler] === 'function') { 14949 this.settings[handler].call(this, event); 14950 } 14951 } 14952 14953 return event; 14954 }; 14955 14956 /** 14957 * Enters a state. 14958 * @param name - The state name. 14959 */ 14960 Owl.prototype.enter = function(name) { 14961 $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) { 14962 if (this._states.current[name] === undefined) { 14963 this._states.current[name] = 0; 14964 } 14965 14966 this._states.current[name]++; 14967 }, this)); 14968 }; 14969 14970 /** 14971 * Leaves a state. 14972 * @param name - The state name. 14973 */ 14974 Owl.prototype.leave = function(name) { 14975 $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) { 14976 this._states.current[name]--; 14977 }, this)); 14978 }; 14979 14980 /** 14981 * Registers an event or state. 14982 * @public 14983 * @param {Object} object - The event or state to register. 14984 */ 14985 Owl.prototype.register = function(object) { 14986 if (object.type === Owl.Type.Event) { 14987 if (!$.event.special[object.name]) { 14988 $.event.special[object.name] = {}; 14989 } 14990 14991 if (!$.event.special[object.name].owl) { 14992 var _default = $.event.special[object.name]._default; 14993 $.event.special[object.name]._default = function(e) { 14994 if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) { 14995 return _default.apply(this, arguments); 14996 } 14997 return e.namespace && e.namespace.indexOf('owl') > -1; 14998 }; 14999 $.event.special[object.name].owl = true; 15000 } 15001 } else if (object.type === Owl.Type.State) { 15002 if (!this._states.tags[object.name]) { 15003 this._states.tags[object.name] = object.tags; 15004 } else { 15005 this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags); 15006 } 15007 15008 this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) { 15009 return $.inArray(tag, this._states.tags[object.name]) === i; 15010 }, this)); 15011 } 15012 }; 15013 15014 /** 15015 * Suppresses events. 15016 * @protected 15017 * @param {Array.<String>} events - The events to suppress. 15018 */ 15019 Owl.prototype.suppress = function(events) { 15020 $.each(events, $.proxy(function(index, event) { 15021 this._supress[event] = true; 15022 }, this)); 15023 }; 15024 15025 /** 15026 * Releases suppressed events. 15027 * @protected 15028 * @param {Array.<String>} events - The events to release. 15029 */ 15030 Owl.prototype.release = function(events) { 15031 $.each(events, $.proxy(function(index, event) { 15032 delete this._supress[event]; 15033 }, this)); 15034 }; 15035 15036 /** 15037 * Gets unified pointer coordinates from event. 15038 * @todo #261 15039 * @protected 15040 * @param {Event} - The `mousedown` or `touchstart` event. 15041 * @returns {Object} - Contains `x` and `y` coordinates of current pointer position. 15042 */ 15043 Owl.prototype.pointer = function(event) { 15044 var result = { x: null, y: null }; 15045 15046 event = event.originalEvent || event || window.event; 15047 15048 event = event.touches && event.touches.length ? 15049 event.touches[0] : event.changedTouches && event.changedTouches.length ? 15050 event.changedTouches[0] : event; 15051 15052 if (event.pageX) { 15053 result.x = event.pageX; 15054 result.y = event.pageY; 15055 } else { 15056 result.x = event.clientX; 15057 result.y = event.clientY; 15058 } 15059 15060 return result; 15061 }; 15062 15063 /** 15064 * Determines if the input is a Number or something that can be coerced to a Number 15065 * @protected 15066 * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested 15067 * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number 15068 */ 15069 Owl.prototype.isNumeric = function(number) { 15070 return !isNaN(parseFloat(number)); 15071 }; 15072 15073 /** 15074 * Gets the difference of two vectors. 15075 * @todo #261 15076 * @protected 15077 * @param {Object} - The first vector. 15078 * @param {Object} - The second vector. 15079 * @returns {Object} - The difference. 15080 */ 15081 Owl.prototype.difference = function(first, second) { 15082 return { 15083 x: first.x - second.x, 15084 y: first.y - second.y 15085 }; 15086 }; 15087 15088 /** 15089 * The jQuery Plugin for the Owl Carousel 15090 * @todo Navigation plugin `next` and `prev` 15091 * @public 15092 */ 15093 $.fn.owlCarousel = function(option) { 15094 var args = Array.prototype.slice.call(arguments, 1); 15095 15096 return this.each(function() { 15097 var $this = $(this), 15098 data = $this.data('owl.carousel'); 15099 15100 if (!data) { 15101 data = new Owl(this, typeof option == 'object' && option); 15102 $this.data('owl.carousel', data); 15103 15104 $.each([ 15105 'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove' 15106 ], function(i, event) { 15107 data.register({ type: Owl.Type.Event, name: event }); 15108 data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) { 15109 if (e.namespace && e.relatedTarget !== this) { 15110 this.suppress([ event ]); 15111 data[event].apply(this, [].slice.call(arguments, 1)); 15112 this.release([ event ]); 15113 } 15114 }, data)); 15115 }); 15116 } 15117 15118 if (typeof option == 'string' && option.charAt(0) !== '_') { 15119 data[option].apply(data, args); 15120 } 15121 }); 15122 }; 15123 15124 /** 15125 * The constructor for the jQuery Plugin 15126 * @public 15127 */ 15128 $.fn.owlCarousel.Constructor = Owl; 15129 15130})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 15131 15132/** 15133 * AutoRefresh Plugin 15134 * @version 2.3.4 15135 * @author Artus Kolanowski 15136 * @author David Deutsch 15137 * @license The MIT License (MIT) 15138 */ 15139;(function($, window, document, undefined) { 15140 15141 /** 15142 * Creates the auto refresh plugin. 15143 * @class The Auto Refresh Plugin 15144 * @param {Owl} carousel - The Owl Carousel 15145 */ 15146 var AutoRefresh = function(carousel) { 15147 /** 15148 * Reference to the core. 15149 * @protected 15150 * @type {Owl} 15151 */ 15152 this._core = carousel; 15153 15154 /** 15155 * Refresh interval. 15156 * @protected 15157 * @type {number} 15158 */ 15159 this._interval = null; 15160 15161 /** 15162 * Whether the element is currently visible or not. 15163 * @protected 15164 * @type {Boolean} 15165 */ 15166 this._visible = null; 15167 15168 /** 15169 * All event handlers. 15170 * @protected 15171 * @type {Object} 15172 */ 15173 this._handlers = { 15174 'initialized.owl.carousel': $.proxy(function(e) { 15175 if (e.namespace && this._core.settings.autoRefresh) { 15176 this.watch(); 15177 } 15178 }, this) 15179 }; 15180 15181 // set default options 15182 this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options); 15183 15184 // register event handlers 15185 this._core.$element.on(this._handlers); 15186 }; 15187 15188 /** 15189 * Default options. 15190 * @public 15191 */ 15192 AutoRefresh.Defaults = { 15193 autoRefresh: true, 15194 autoRefreshInterval: 500 15195 }; 15196 15197 /** 15198 * Watches the element. 15199 */ 15200 AutoRefresh.prototype.watch = function() { 15201 if (this._interval) { 15202 return; 15203 } 15204 15205 this._visible = this._core.isVisible(); 15206 this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval); 15207 }; 15208 15209 /** 15210 * Refreshes the element. 15211 */ 15212 AutoRefresh.prototype.refresh = function() { 15213 if (this._core.isVisible() === this._visible) { 15214 return; 15215 } 15216 15217 this._visible = !this._visible; 15218 15219 this._core.$element.toggleClass('owl-hidden', !this._visible); 15220 15221 this._visible && (this._core.invalidate('width') && this._core.refresh()); 15222 }; 15223 15224 /** 15225 * Destroys the plugin. 15226 */ 15227 AutoRefresh.prototype.destroy = function() { 15228 var handler, property; 15229 15230 window.clearInterval(this._interval); 15231 15232 for (handler in this._handlers) { 15233 this._core.$element.off(handler, this._handlers[handler]); 15234 } 15235 for (property in Object.getOwnPropertyNames(this)) { 15236 typeof this[property] != 'function' && (this[property] = null); 15237 } 15238 }; 15239 15240 $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh; 15241 15242})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 15243 15244/** 15245 * Lazy Plugin 15246 * @version 2.3.4 15247 * @author Bartosz Wojciechowski 15248 * @author David Deutsch 15249 * @license The MIT License (MIT) 15250 */ 15251;(function($, window, document, undefined) { 15252 15253 /** 15254 * Creates the lazy plugin. 15255 * @class The Lazy Plugin 15256 * @param {Owl} carousel - The Owl Carousel 15257 */ 15258 var Lazy = function(carousel) { 15259 15260 /** 15261 * Reference to the core. 15262 * @protected 15263 * @type {Owl} 15264 */ 15265 this._core = carousel; 15266 15267 /** 15268 * Already loaded items. 15269 * @protected 15270 * @type {Array.<jQuery>} 15271 */ 15272 this._loaded = []; 15273 15274 /** 15275 * Event handlers. 15276 * @protected 15277 * @type {Object} 15278 */ 15279 this._handlers = { 15280 'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) { 15281 if (!e.namespace) { 15282 return; 15283 } 15284 15285 if (!this._core.settings || !this._core.settings.lazyLoad) { 15286 return; 15287 } 15288 15289 if ((e.property && e.property.name == 'position') || e.type == 'initialized') { 15290 var settings = this._core.settings, 15291 n = (settings.center && Math.ceil(settings.items / 2) || settings.items), 15292 i = ((settings.center && n * -1) || 0), 15293 position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i, 15294 clones = this._core.clones().length, 15295 load = $.proxy(function(i, v) { this.load(v) }, this); 15296 //TODO: Need documentation for this new option 15297 if (settings.lazyLoadEager > 0) { 15298 n += settings.lazyLoadEager; 15299 // If the carousel is looping also preload images that are to the "left" 15300 if (settings.loop) { 15301 position -= settings.lazyLoadEager; 15302 n++; 15303 } 15304 } 15305 15306 while (i++ < n) { 15307 this.load(clones / 2 + this._core.relative(position)); 15308 clones && $.each(this._core.clones(this._core.relative(position)), load); 15309 position++; 15310 } 15311 } 15312 }, this) 15313 }; 15314 15315 // set the default options 15316 this._core.options = $.extend({}, Lazy.Defaults, this._core.options); 15317 15318 // register event handler 15319 this._core.$element.on(this._handlers); 15320 }; 15321 15322 /** 15323 * Default options. 15324 * @public 15325 */ 15326 Lazy.Defaults = { 15327 lazyLoad: false, 15328 lazyLoadEager: 0 15329 }; 15330 15331 /** 15332 * Loads all resources of an item at the specified position. 15333 * @param {Number} position - The absolute position of the item. 15334 * @protected 15335 */ 15336 Lazy.prototype.load = function(position) { 15337 var $item = this._core.$stage.children().eq(position), 15338 $elements = $item && $item.find('.owl-lazy'); 15339 15340 if (!$elements || $.inArray($item.get(0), this._loaded) > -1) { 15341 return; 15342 } 15343 15344 $elements.each($.proxy(function(index, element) { 15345 var $element = $(element), image, 15346 url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset'); 15347 15348 this._core.trigger('load', { element: $element, url: url }, 'lazy'); 15349 15350 if ($element.is('img')) { 15351 $element.one('load.owl.lazy', $.proxy(function() { 15352 $element.css('opacity', 1); 15353 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 15354 }, this)).attr('src', url); 15355 } else if ($element.is('source')) { 15356 $element.one('load.owl.lazy', $.proxy(function() { 15357 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 15358 }, this)).attr('srcset', url); 15359 } else { 15360 image = new Image(); 15361 image.onload = $.proxy(function() { 15362 $element.css({ 15363 'background-image': 'url("' + url + '")', 15364 'opacity': '1' 15365 }); 15366 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 15367 }, this); 15368 image.src = url; 15369 } 15370 }, this)); 15371 15372 this._loaded.push($item.get(0)); 15373 }; 15374 15375 /** 15376 * Destroys the plugin. 15377 * @public 15378 */ 15379 Lazy.prototype.destroy = function() { 15380 var handler, property; 15381 15382 for (handler in this.handlers) { 15383 this._core.$element.off(handler, this.handlers[handler]); 15384 } 15385 for (property in Object.getOwnPropertyNames(this)) { 15386 typeof this[property] != 'function' && (this[property] = null); 15387 } 15388 }; 15389 15390 $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy; 15391 15392})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 15393 15394/** 15395 * AutoHeight Plugin 15396 * @version 2.3.4 15397 * @author Bartosz Wojciechowski 15398 * @author David Deutsch 15399 * @license The MIT License (MIT) 15400 */ 15401;(function($, window, document, undefined) { 15402 15403 /** 15404 * Creates the auto height plugin. 15405 * @class The Auto Height Plugin 15406 * @param {Owl} carousel - The Owl Carousel 15407 */ 15408 var AutoHeight = function(carousel) { 15409 /** 15410 * Reference to the core. 15411 * @protected 15412 * @type {Owl} 15413 */ 15414 this._core = carousel; 15415 15416 this._previousHeight = null; 15417 15418 /** 15419 * All event handlers. 15420 * @protected 15421 * @type {Object} 15422 */ 15423 this._handlers = { 15424 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) { 15425 if (e.namespace && this._core.settings.autoHeight) { 15426 this.update(); 15427 } 15428 }, this), 15429 'changed.owl.carousel': $.proxy(function(e) { 15430 if (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){ 15431 this.update(); 15432 } 15433 }, this), 15434 'loaded.owl.lazy': $.proxy(function(e) { 15435 if (e.namespace && this._core.settings.autoHeight 15436 && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) { 15437 this.update(); 15438 } 15439 }, this) 15440 }; 15441 15442 // set default options 15443 this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options); 15444 15445 // register event handlers 15446 this._core.$element.on(this._handlers); 15447 this._intervalId = null; 15448 var refThis = this; 15449 15450 // These changes have been taken from a PR by gavrochelegnou proposed in #1575 15451 // and have been made compatible with the latest jQuery version 15452 $(window).on('load', function() { 15453 if (refThis._core.settings.autoHeight) { 15454 refThis.update(); 15455 } 15456 }); 15457 15458 // Autoresize the height of the carousel when window is resized 15459 // When carousel has images, the height is dependent on the width 15460 // and should also change on resize 15461 $(window).resize(function() { 15462 if (refThis._core.settings.autoHeight) { 15463 if (refThis._intervalId != null) { 15464 clearTimeout(refThis._intervalId); 15465 } 15466 15467 refThis._intervalId = setTimeout(function() { 15468 refThis.update(); 15469 }, 250); 15470 } 15471 }); 15472 15473 }; 15474 15475 /** 15476 * Default options. 15477 * @public 15478 */ 15479 AutoHeight.Defaults = { 15480 autoHeight: false, 15481 autoHeightClass: 'owl-height' 15482 }; 15483 15484 /** 15485 * Updates the view. 15486 */ 15487 AutoHeight.prototype.update = function() { 15488 var start = this._core._current, 15489 end = start + this._core.settings.items, 15490 lazyLoadEnabled = this._core.settings.lazyLoad, 15491 visible = this._core.$stage.children().toArray().slice(start, end), 15492 heights = [], 15493 maxheight = 0; 15494 15495 $.each(visible, function(index, item) { 15496 heights.push($(item).height()); 15497 }); 15498 15499 maxheight = Math.max.apply(null, heights); 15500 15501 if (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) { 15502 maxheight = this._previousHeight; 15503 } 15504 15505 this._previousHeight = maxheight; 15506 15507 this._core.$stage.parent() 15508 .height(maxheight) 15509 .addClass(this._core.settings.autoHeightClass); 15510 }; 15511 15512 AutoHeight.prototype.destroy = function() { 15513 var handler, property; 15514 15515 for (handler in this._handlers) { 15516 this._core.$element.off(handler, this._handlers[handler]); 15517 } 15518 for (property in Object.getOwnPropertyNames(this)) { 15519 typeof this[property] !== 'function' && (this[property] = null); 15520 } 15521 }; 15522 15523 $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight; 15524 15525})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 15526 15527/** 15528 * Video Plugin 15529 * @version 2.3.4 15530 * @author Bartosz Wojciechowski 15531 * @author David Deutsch 15532 * @license The MIT License (MIT) 15533 */ 15534;(function($, window, document, undefined) { 15535 15536 /** 15537 * Creates the video plugin. 15538 * @class The Video Plugin 15539 * @param {Owl} carousel - The Owl Carousel 15540 */ 15541 var Video = function(carousel) { 15542 /** 15543 * Reference to the core. 15544 * @protected 15545 * @type {Owl} 15546 */ 15547 this._core = carousel; 15548 15549 /** 15550 * Cache all video URLs. 15551 * @protected 15552 * @type {Object} 15553 */ 15554 this._videos = {}; 15555 15556 /** 15557 * Current playing item. 15558 * @protected 15559 * @type {jQuery} 15560 */ 15561 this._playing = null; 15562 15563 /** 15564 * All event handlers. 15565 * @todo The cloned content removale is too late 15566 * @protected 15567 * @type {Object} 15568 */ 15569 this._handlers = { 15570 'initialized.owl.carousel': $.proxy(function(e) { 15571 if (e.namespace) { 15572 this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] }); 15573 } 15574 }, this), 15575 'resize.owl.carousel': $.proxy(function(e) { 15576 if (e.namespace && this._core.settings.video && this.isInFullScreen()) { 15577 e.preventDefault(); 15578 } 15579 }, this), 15580 'refreshed.owl.carousel': $.proxy(function(e) { 15581 if (e.namespace && this._core.is('resizing')) { 15582 this._core.$stage.find('.cloned .owl-video-frame').remove(); 15583 } 15584 }, this), 15585 'changed.owl.carousel': $.proxy(function(e) { 15586 if (e.namespace && e.property.name === 'position' && this._playing) { 15587 this.stop(); 15588 } 15589 }, this), 15590 'prepared.owl.carousel': $.proxy(function(e) { 15591 if (!e.namespace) { 15592 return; 15593 } 15594 15595 var $element = $(e.content).find('.owl-video'); 15596 15597 if ($element.length) { 15598 $element.css('display', 'none'); 15599 this.fetch($element, $(e.content)); 15600 } 15601 }, this) 15602 }; 15603 15604 // set default options 15605 this._core.options = $.extend({}, Video.Defaults, this._core.options); 15606 15607 // register event handlers 15608 this._core.$element.on(this._handlers); 15609 15610 this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) { 15611 this.play(e); 15612 }, this)); 15613 }; 15614 15615 /** 15616 * Default options. 15617 * @public 15618 */ 15619 Video.Defaults = { 15620 video: false, 15621 videoHeight: false, 15622 videoWidth: false 15623 }; 15624 15625 /** 15626 * Gets the video ID and the type (YouTube/Vimeo/vzaar only). 15627 * @protected 15628 * @param {jQuery} target - The target containing the video data. 15629 * @param {jQuery} item - The item containing the video. 15630 */ 15631 Video.prototype.fetch = function(target, item) { 15632 var type = (function() { 15633 if (target.attr('data-vimeo-id')) { 15634 return 'vimeo'; 15635 } else if (target.attr('data-vzaar-id')) { 15636 return 'vzaar' 15637 } else { 15638 return 'youtube'; 15639 } 15640 })(), 15641 id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'), 15642 width = target.attr('data-width') || this._core.settings.videoWidth, 15643 height = target.attr('data-height') || this._core.settings.videoHeight, 15644 url = target.attr('href'); 15645 15646 if (url) { 15647 15648 /* 15649 Parses the id's out of the following urls (and probably more): 15650 https://www.youtube.com/watch?v=:id 15651 https://youtu.be/:id 15652 https://vimeo.com/:id 15653 https://vimeo.com/channels/:channel/:id 15654 https://vimeo.com/groups/:group/videos/:id 15655 https://app.vzaar.com/videos/:id 15656 15657 Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F 15658 */ 15659 15660 id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); 15661 15662 if (id[3].indexOf('youtu') > -1) { 15663 type = 'youtube'; 15664 } else if (id[3].indexOf('vimeo') > -1) { 15665 type = 'vimeo'; 15666 } else if (id[3].indexOf('vzaar') > -1) { 15667 type = 'vzaar'; 15668 } else { 15669 throw new Error('Video URL not supported.'); 15670 } 15671 id = id[6]; 15672 } else { 15673 throw new Error('Missing video URL.'); 15674 } 15675 15676 this._videos[url] = { 15677 type: type, 15678 id: id, 15679 width: width, 15680 height: height 15681 }; 15682 15683 item.attr('data-video', url); 15684 15685 this.thumbnail(target, this._videos[url]); 15686 }; 15687 15688 /** 15689 * Creates video thumbnail. 15690 * @protected 15691 * @param {jQuery} target - The target containing the video data. 15692 * @param {Object} info - The video info object. 15693 * @see `fetch` 15694 */ 15695 Video.prototype.thumbnail = function(target, video) { 15696 var tnLink, 15697 icon, 15698 path, 15699 dimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '', 15700 customTn = target.find('img'), 15701 srcType = 'src', 15702 lazyClass = '', 15703 settings = this._core.settings, 15704 create = function(path) { 15705 icon = '<div class="owl-video-play-icon"></div>'; 15706 15707 if (settings.lazyLoad) { 15708 tnLink = $('<div/>',{ 15709 "class": 'owl-video-tn ' + lazyClass, 15710 "srcType": path 15711 }); 15712 } else { 15713 tnLink = $( '<div/>', { 15714 "class": "owl-video-tn", 15715 "style": 'opacity:1;background-image:url(' + path + ')' 15716 }); 15717 } 15718 target.after(tnLink); 15719 target.after(icon); 15720 }; 15721 15722 // wrap video content into owl-video-wrapper div 15723 target.wrap( $( '<div/>', { 15724 "class": "owl-video-wrapper", 15725 "style": dimensions 15726 })); 15727 15728 if (this._core.settings.lazyLoad) { 15729 srcType = 'data-src'; 15730 lazyClass = 'owl-lazy'; 15731 } 15732 15733 // custom thumbnail 15734 if (customTn.length) { 15735 create(customTn.attr(srcType)); 15736 customTn.remove(); 15737 return false; 15738 } 15739 15740 if (video.type === 'youtube') { 15741 path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg"; 15742 create(path); 15743 } else if (video.type === 'vimeo') { 15744 $.ajax({ 15745 type: 'GET', 15746 url: '//vimeo.com/api/v2/video/' + video.id + '.json', 15747 jsonp: 'callback', 15748 dataType: 'jsonp', 15749 success: function(data) { 15750 path = data[0].thumbnail_large; 15751 create(path); 15752 } 15753 }); 15754 } else if (video.type === 'vzaar') { 15755 $.ajax({ 15756 type: 'GET', 15757 url: '//vzaar.com/api/videos/' + video.id + '.json', 15758 jsonp: 'callback', 15759 dataType: 'jsonp', 15760 success: function(data) { 15761 path = data.framegrab_url; 15762 create(path); 15763 } 15764 }); 15765 } 15766 }; 15767 15768 /** 15769 * Stops the current video. 15770 * @public 15771 */ 15772 Video.prototype.stop = function() { 15773 this._core.trigger('stop', null, 'video'); 15774 this._playing.find('.owl-video-frame').remove(); 15775 this._playing.removeClass('owl-video-playing'); 15776 this._playing = null; 15777 this._core.leave('playing'); 15778 this._core.trigger('stopped', null, 'video'); 15779 }; 15780 15781 /** 15782 * Starts the current video. 15783 * @public 15784 * @param {Event} event - The event arguments. 15785 */ 15786 Video.prototype.play = function(event) { 15787 var target = $(event.target), 15788 item = target.closest('.' + this._core.settings.itemClass), 15789 video = this._videos[item.attr('data-video')], 15790 width = video.width || '100%', 15791 height = video.height || this._core.$stage.height(), 15792 html, 15793 iframe; 15794 15795 if (this._playing) { 15796 return; 15797 } 15798 15799 this._core.enter('playing'); 15800 this._core.trigger('play', null, 'video'); 15801 15802 item = this._core.items(this._core.relative(item.index())); 15803 15804 this._core.reset(item.index()); 15805 15806 html = $( '<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>' ); 15807 html.attr( 'height', height ); 15808 html.attr( 'width', width ); 15809 if (video.type === 'youtube') { 15810 html.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id ); 15811 } else if (video.type === 'vimeo') { 15812 html.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' ); 15813 } else if (video.type === 'vzaar') { 15814 html.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' ); 15815 } 15816 15817 iframe = $(html).wrap( '<div class="owl-video-frame" />' ).insertAfter(item.find('.owl-video')); 15818 15819 this._playing = item.addClass('owl-video-playing'); 15820 }; 15821 15822 /** 15823 * Checks whether an video is currently in full screen mode or not. 15824 * @todo Bad style because looks like a readonly method but changes members. 15825 * @protected 15826 * @returns {Boolean} 15827 */ 15828 Video.prototype.isInFullScreen = function() { 15829 var element = document.fullscreenElement || document.mozFullScreenElement || 15830 document.webkitFullscreenElement; 15831 15832 return element && $(element).parent().hasClass('owl-video-frame'); 15833 }; 15834 15835 /** 15836 * Destroys the plugin. 15837 */ 15838 Video.prototype.destroy = function() { 15839 var handler, property; 15840 15841 this._core.$element.off('click.owl.video'); 15842 15843 for (handler in this._handlers) { 15844 this._core.$element.off(handler, this._handlers[handler]); 15845 } 15846 for (property in Object.getOwnPropertyNames(this)) { 15847 typeof this[property] != 'function' && (this[property] = null); 15848 } 15849 }; 15850 15851 $.fn.owlCarousel.Constructor.Plugins.Video = Video; 15852 15853})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 15854 15855/** 15856 * Animate Plugin 15857 * @version 2.3.4 15858 * @author Bartosz Wojciechowski 15859 * @author David Deutsch 15860 * @license The MIT License (MIT) 15861 */ 15862;(function($, window, document, undefined) { 15863 15864 /** 15865 * Creates the animate plugin. 15866 * @class The Navigation Plugin 15867 * @param {Owl} scope - The Owl Carousel 15868 */ 15869 var Animate = function(scope) { 15870 this.core = scope; 15871 this.core.options = $.extend({}, Animate.Defaults, this.core.options); 15872 this.swapping = true; 15873 this.previous = undefined; 15874 this.next = undefined; 15875 15876 this.handlers = { 15877 'change.owl.carousel': $.proxy(function(e) { 15878 if (e.namespace && e.property.name == 'position') { 15879 this.previous = this.core.current(); 15880 this.next = e.property.value; 15881 } 15882 }, this), 15883 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) { 15884 if (e.namespace) { 15885 this.swapping = e.type == 'translated'; 15886 } 15887 }, this), 15888 'translate.owl.carousel': $.proxy(function(e) { 15889 if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) { 15890 this.swap(); 15891 } 15892 }, this) 15893 }; 15894 15895 this.core.$element.on(this.handlers); 15896 }; 15897 15898 /** 15899 * Default options. 15900 * @public 15901 */ 15902 Animate.Defaults = { 15903 animateOut: false, 15904 animateIn: false 15905 }; 15906 15907 /** 15908 * Toggles the animation classes whenever an translations starts. 15909 * @protected 15910 * @returns {Boolean|undefined} 15911 */ 15912 Animate.prototype.swap = function() { 15913 15914 if (this.core.settings.items !== 1) { 15915 return; 15916 } 15917 15918 if (!$.support.animation || !$.support.transition) { 15919 return; 15920 } 15921 15922 this.core.speed(0); 15923 15924 var left, 15925 clear = $.proxy(this.clear, this), 15926 previous = this.core.$stage.children().eq(this.previous), 15927 next = this.core.$stage.children().eq(this.next), 15928 incoming = this.core.settings.animateIn, 15929 outgoing = this.core.settings.animateOut; 15930 15931 if (this.core.current() === this.previous) { 15932 return; 15933 } 15934 15935 if (outgoing) { 15936 left = this.core.coordinates(this.previous) - this.core.coordinates(this.next); 15937 previous.one($.support.animation.end, clear) 15938 .css( { 'left': left + 'px' } ) 15939 .addClass('animated owl-animated-out') 15940 .addClass(outgoing); 15941 } 15942 15943 if (incoming) { 15944 next.one($.support.animation.end, clear) 15945 .addClass('animated owl-animated-in') 15946 .addClass(incoming); 15947 } 15948 }; 15949 15950 Animate.prototype.clear = function(e) { 15951 $(e.target).css( { 'left': '' } ) 15952 .removeClass('animated owl-animated-out owl-animated-in') 15953 .removeClass(this.core.settings.animateIn) 15954 .removeClass(this.core.settings.animateOut); 15955 this.core.onTransitionEnd(); 15956 }; 15957 15958 /** 15959 * Destroys the plugin. 15960 * @public 15961 */ 15962 Animate.prototype.destroy = function() { 15963 var handler, property; 15964 15965 for (handler in this.handlers) { 15966 this.core.$element.off(handler, this.handlers[handler]); 15967 } 15968 for (property in Object.getOwnPropertyNames(this)) { 15969 typeof this[property] != 'function' && (this[property] = null); 15970 } 15971 }; 15972 15973 $.fn.owlCarousel.Constructor.Plugins.Animate = Animate; 15974 15975})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 15976 15977/** 15978 * Autoplay Plugin 15979 * @version 2.3.4 15980 * @author Bartosz Wojciechowski 15981 * @author Artus Kolanowski 15982 * @author David Deutsch 15983 * @author Tom De Caluwé 15984 * @license The MIT License (MIT) 15985 */ 15986;(function($, window, document, undefined) { 15987 15988 /** 15989 * Creates the autoplay plugin. 15990 * @class The Autoplay Plugin 15991 * @param {Owl} scope - The Owl Carousel 15992 */ 15993 var Autoplay = function(carousel) { 15994 /** 15995 * Reference to the core. 15996 * @protected 15997 * @type {Owl} 15998 */ 15999 this._core = carousel; 16000 16001 /** 16002 * The autoplay timeout id. 16003 * @type {Number} 16004 */ 16005 this._call = null; 16006 16007 /** 16008 * Depending on the state of the plugin, this variable contains either 16009 * the start time of the timer or the current timer value if it's 16010 * paused. Since we start in a paused state we initialize the timer 16011 * value. 16012 * @type {Number} 16013 */ 16014 this._time = 0; 16015 16016 /** 16017 * Stores the timeout currently used. 16018 * @type {Number} 16019 */ 16020 this._timeout = 0; 16021 16022 /** 16023 * Indicates whenever the autoplay is paused. 16024 * @type {Boolean} 16025 */ 16026 this._paused = true; 16027 16028 /** 16029 * All event handlers. 16030 * @protected 16031 * @type {Object} 16032 */ 16033 this._handlers = { 16034 'changed.owl.carousel': $.proxy(function(e) { 16035 if (e.namespace && e.property.name === 'settings') { 16036 if (this._core.settings.autoplay) { 16037 this.play(); 16038 } else { 16039 this.stop(); 16040 } 16041 } else if (e.namespace && e.property.name === 'position' && this._paused) { 16042 // Reset the timer. This code is triggered when the position 16043 // of the carousel was changed through user interaction. 16044 this._time = 0; 16045 } 16046 }, this), 16047 'initialized.owl.carousel': $.proxy(function(e) { 16048 if (e.namespace && this._core.settings.autoplay) { 16049 this.play(); 16050 } 16051 }, this), 16052 'play.owl.autoplay': $.proxy(function(e, t, s) { 16053 if (e.namespace) { 16054 this.play(t, s); 16055 } 16056 }, this), 16057 'stop.owl.autoplay': $.proxy(function(e) { 16058 if (e.namespace) { 16059 this.stop(); 16060 } 16061 }, this), 16062 'mouseover.owl.autoplay': $.proxy(function() { 16063 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 16064 this.pause(); 16065 } 16066 }, this), 16067 'mouseleave.owl.autoplay': $.proxy(function() { 16068 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 16069 this.play(); 16070 } 16071 }, this), 16072 'touchstart.owl.core': $.proxy(function() { 16073 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 16074 this.pause(); 16075 } 16076 }, this), 16077 'touchend.owl.core': $.proxy(function() { 16078 if (this._core.settings.autoplayHoverPause) { 16079 this.play(); 16080 } 16081 }, this) 16082 }; 16083 16084 // register event handlers 16085 this._core.$element.on(this._handlers); 16086 16087 // set default options 16088 this._core.options = $.extend({}, Autoplay.Defaults, this._core.options); 16089 }; 16090 16091 /** 16092 * Default options. 16093 * @public 16094 */ 16095 Autoplay.Defaults = { 16096 autoplay: false, 16097 autoplayTimeout: 5000, 16098 autoplayHoverPause: false, 16099 autoplaySpeed: false 16100 }; 16101 16102 /** 16103 * Transition to the next slide and set a timeout for the next transition. 16104 * @private 16105 * @param {Number} [speed] - The animation speed for the animations. 16106 */ 16107 Autoplay.prototype._next = function(speed) { 16108 this._call = window.setTimeout( 16109 $.proxy(this._next, this, speed), 16110 this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read() 16111 ); 16112 16113 if (this._core.is('interacting') || document.hidden) { 16114 return; 16115 } 16116 this._core.next(speed || this._core.settings.autoplaySpeed); 16117 } 16118 16119 /** 16120 * Reads the current timer value when the timer is playing. 16121 * @public 16122 */ 16123 Autoplay.prototype.read = function() { 16124 return new Date().getTime() - this._time; 16125 }; 16126 16127 /** 16128 * Starts the autoplay. 16129 * @public 16130 * @param {Number} [timeout] - The interval before the next animation starts. 16131 * @param {Number} [speed] - The animation speed for the animations. 16132 */ 16133 Autoplay.prototype.play = function(timeout, speed) { 16134 var elapsed; 16135 16136 if (!this._core.is('rotating')) { 16137 this._core.enter('rotating'); 16138 } 16139 16140 timeout = timeout || this._core.settings.autoplayTimeout; 16141 16142 // Calculate the elapsed time since the last transition. If the carousel 16143 // wasn't playing this calculation will yield zero. 16144 elapsed = Math.min(this._time % (this._timeout || timeout), timeout); 16145 16146 if (this._paused) { 16147 // Start the clock. 16148 this._time = this.read(); 16149 this._paused = false; 16150 } else { 16151 // Clear the active timeout to allow replacement. 16152 window.clearTimeout(this._call); 16153 } 16154 16155 // Adjust the origin of the timer to match the new timeout value. 16156 this._time += this.read() % timeout - elapsed; 16157 16158 this._timeout = timeout; 16159 this._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed); 16160 }; 16161 16162 /** 16163 * Stops the autoplay. 16164 * @public 16165 */ 16166 Autoplay.prototype.stop = function() { 16167 if (this._core.is('rotating')) { 16168 // Reset the clock. 16169 this._time = 0; 16170 this._paused = true; 16171 16172 window.clearTimeout(this._call); 16173 this._core.leave('rotating'); 16174 } 16175 }; 16176 16177 /** 16178 * Pauses the autoplay. 16179 * @public 16180 */ 16181 Autoplay.prototype.pause = function() { 16182 if (this._core.is('rotating') && !this._paused) { 16183 // Pause the clock. 16184 this._time = this.read(); 16185 this._paused = true; 16186 16187 window.clearTimeout(this._call); 16188 } 16189 }; 16190 16191 /** 16192 * Destroys the plugin. 16193 */ 16194 Autoplay.prototype.destroy = function() { 16195 var handler, property; 16196 16197 this.stop(); 16198 16199 for (handler in this._handlers) { 16200 this._core.$element.off(handler, this._handlers[handler]); 16201 } 16202 for (property in Object.getOwnPropertyNames(this)) { 16203 typeof this[property] != 'function' && (this[property] = null); 16204 } 16205 }; 16206 16207 $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay; 16208 16209})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 16210 16211/** 16212 * Navigation Plugin 16213 * @version 2.3.4 16214 * @author Artus Kolanowski 16215 * @author David Deutsch 16216 * @license The MIT License (MIT) 16217 */ 16218;(function($, window, document, undefined) { 16219 'use strict'; 16220 16221 /** 16222 * Creates the navigation plugin. 16223 * @class The Navigation Plugin 16224 * @param {Owl} carousel - The Owl Carousel. 16225 */ 16226 var Navigation = function(carousel) { 16227 /** 16228 * Reference to the core. 16229 * @protected 16230 * @type {Owl} 16231 */ 16232 this._core = carousel; 16233 16234 /** 16235 * Indicates whether the plugin is initialized or not. 16236 * @protected 16237 * @type {Boolean} 16238 */ 16239 this._initialized = false; 16240 16241 /** 16242 * The current paging indexes. 16243 * @protected 16244 * @type {Array} 16245 */ 16246 this._pages = []; 16247 16248 /** 16249 * All DOM elements of the user interface. 16250 * @protected 16251 * @type {Object} 16252 */ 16253 this._controls = {}; 16254 16255 /** 16256 * Markup for an indicator. 16257 * @protected 16258 * @type {Array.<String>} 16259 */ 16260 this._templates = []; 16261 16262 /** 16263 * The carousel element. 16264 * @type {jQuery} 16265 */ 16266 this.$element = this._core.$element; 16267 16268 /** 16269 * Overridden methods of the carousel. 16270 * @protected 16271 * @type {Object} 16272 */ 16273 this._overrides = { 16274 next: this._core.next, 16275 prev: this._core.prev, 16276 to: this._core.to 16277 }; 16278 16279 /** 16280 * All event handlers. 16281 * @protected 16282 * @type {Object} 16283 */ 16284 this._handlers = { 16285 'prepared.owl.carousel': $.proxy(function(e) { 16286 if (e.namespace && this._core.settings.dotsData) { 16287 this._templates.push('<div class="' + this._core.settings.dotClass + '">' + 16288 $(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>'); 16289 } 16290 }, this), 16291 'added.owl.carousel': $.proxy(function(e) { 16292 if (e.namespace && this._core.settings.dotsData) { 16293 this._templates.splice(e.position, 0, this._templates.pop()); 16294 } 16295 }, this), 16296 'remove.owl.carousel': $.proxy(function(e) { 16297 if (e.namespace && this._core.settings.dotsData) { 16298 this._templates.splice(e.position, 1); 16299 } 16300 }, this), 16301 'changed.owl.carousel': $.proxy(function(e) { 16302 if (e.namespace && e.property.name == 'position') { 16303 this.draw(); 16304 } 16305 }, this), 16306 'initialized.owl.carousel': $.proxy(function(e) { 16307 if (e.namespace && !this._initialized) { 16308 this._core.trigger('initialize', null, 'navigation'); 16309 this.initialize(); 16310 this.update(); 16311 this.draw(); 16312 this._initialized = true; 16313 this._core.trigger('initialized', null, 'navigation'); 16314 } 16315 }, this), 16316 'refreshed.owl.carousel': $.proxy(function(e) { 16317 if (e.namespace && this._initialized) { 16318 this._core.trigger('refresh', null, 'navigation'); 16319 this.update(); 16320 this.draw(); 16321 this._core.trigger('refreshed', null, 'navigation'); 16322 } 16323 }, this) 16324 }; 16325 16326 // set default options 16327 this._core.options = $.extend({}, Navigation.Defaults, this._core.options); 16328 16329 // register event handlers 16330 this.$element.on(this._handlers); 16331 }; 16332 16333 /** 16334 * Default options. 16335 * @public 16336 * @todo Rename `slideBy` to `navBy` 16337 */ 16338 Navigation.Defaults = { 16339 nav: false, 16340 navText: [ 16341 '<span aria-label="' + 'Previous' + '">‹</span>', 16342 '<span aria-label="' + 'Next' + '">›</span>' 16343 ], 16344 navSpeed: false, 16345 navElement: 'button type="button" role="presentation"', 16346 navContainer: false, 16347 navContainerClass: 'owl-nav', 16348 navClass: [ 16349 'owl-prev', 16350 'owl-next' 16351 ], 16352 slideBy: 1, 16353 dotClass: 'owl-dot', 16354 dotsClass: 'owl-dots', 16355 dots: true, 16356 dotsEach: false, 16357 dotsData: false, 16358 dotsSpeed: false, 16359 dotsContainer: false 16360 }; 16361 16362 /** 16363 * Initializes the layout of the plugin and extends the carousel. 16364 * @protected 16365 */ 16366 Navigation.prototype.initialize = function() { 16367 var override, 16368 settings = this._core.settings; 16369 16370 // create DOM structure for relative navigation 16371 this._controls.$relative = (settings.navContainer ? $(settings.navContainer) 16372 : $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled'); 16373 16374 this._controls.$previous = $('<' + settings.navElement + '>') 16375 .addClass(settings.navClass[0]) 16376 .html(settings.navText[0]) 16377 .prependTo(this._controls.$relative) 16378 .on('click', $.proxy(function(e) { 16379 this.prev(settings.navSpeed); 16380 }, this)); 16381 this._controls.$next = $('<' + settings.navElement + '>') 16382 .addClass(settings.navClass[1]) 16383 .html(settings.navText[1]) 16384 .appendTo(this._controls.$relative) 16385 .on('click', $.proxy(function(e) { 16386 this.next(settings.navSpeed); 16387 }, this)); 16388 16389 // create DOM structure for absolute navigation 16390 if (!settings.dotsData) { 16391 this._templates = [ $('<button role="button">') 16392 .addClass(settings.dotClass) 16393 .append($('<span>')) 16394 .prop('outerHTML') ]; 16395 } 16396 16397 this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer) 16398 : $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled'); 16399 16400 this._controls.$absolute.on('click', 'button', $.proxy(function(e) { 16401 var index = $(e.target).parent().is(this._controls.$absolute) 16402 ? $(e.target).index() : $(e.target).parent().index(); 16403 16404 e.preventDefault(); 16405 16406 this.to(index, settings.dotsSpeed); 16407 }, this)); 16408 16409 /*$el.on('focusin', function() { 16410 $(document).off(".carousel"); 16411 16412 $(document).on('keydown.carousel', function(e) { 16413 if(e.keyCode == 37) { 16414 $el.trigger('prev.owl') 16415 } 16416 if(e.keyCode == 39) { 16417 $el.trigger('next.owl') 16418 } 16419 }); 16420 });*/ 16421 16422 // override public methods of the carousel 16423 for (override in this._overrides) { 16424 this._core[override] = $.proxy(this[override], this); 16425 } 16426 }; 16427 16428 /** 16429 * Destroys the plugin. 16430 * @protected 16431 */ 16432 Navigation.prototype.destroy = function() { 16433 var handler, control, property, override, settings; 16434 settings = this._core.settings; 16435 16436 for (handler in this._handlers) { 16437 this.$element.off(handler, this._handlers[handler]); 16438 } 16439 for (control in this._controls) { 16440 if (control === '$relative' && settings.navContainer) { 16441 this._controls[control].html(''); 16442 } else { 16443 this._controls[control].remove(); 16444 } 16445 } 16446 for (override in this.overides) { 16447 this._core[override] = this._overrides[override]; 16448 } 16449 for (property in Object.getOwnPropertyNames(this)) { 16450 typeof this[property] != 'function' && (this[property] = null); 16451 } 16452 }; 16453 16454 /** 16455 * Updates the internal state. 16456 * @protected 16457 */ 16458 Navigation.prototype.update = function() { 16459 var i, j, k, 16460 lower = this._core.clones().length / 2, 16461 upper = lower + this._core.items().length, 16462 maximum = this._core.maximum(true), 16463 settings = this._core.settings, 16464 size = settings.center || settings.autoWidth || settings.dotsData 16465 ? 1 : settings.dotsEach || settings.items; 16466 16467 if (settings.slideBy !== 'page') { 16468 settings.slideBy = Math.min(settings.slideBy, settings.items); 16469 } 16470 16471 if (settings.dots || settings.slideBy == 'page') { 16472 this._pages = []; 16473 16474 for (i = lower, j = 0, k = 0; i < upper; i++) { 16475 if (j >= size || j === 0) { 16476 this._pages.push({ 16477 start: Math.min(maximum, i - lower), 16478 end: i - lower + size - 1 16479 }); 16480 if (Math.min(maximum, i - lower) === maximum) { 16481 break; 16482 } 16483 j = 0, ++k; 16484 } 16485 j += this._core.mergers(this._core.relative(i)); 16486 } 16487 } 16488 }; 16489 16490 /** 16491 * Draws the user interface. 16492 * @todo The option `dotsData` wont work. 16493 * @protected 16494 */ 16495 Navigation.prototype.draw = function() { 16496 var difference, 16497 settings = this._core.settings, 16498 disabled = this._core.items().length <= settings.items, 16499 index = this._core.relative(this._core.current()), 16500 loop = settings.loop || settings.rewind; 16501 16502 this._controls.$relative.toggleClass('disabled', !settings.nav || disabled); 16503 16504 if (settings.nav) { 16505 this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true)); 16506 this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true)); 16507 } 16508 16509 this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled); 16510 16511 if (settings.dots) { 16512 difference = this._pages.length - this._controls.$absolute.children().length; 16513 16514 if (settings.dotsData && difference !== 0) { 16515 this._controls.$absolute.html(this._templates.join('')); 16516 } else if (difference > 0) { 16517 this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0])); 16518 } else if (difference < 0) { 16519 this._controls.$absolute.children().slice(difference).remove(); 16520 } 16521 16522 this._controls.$absolute.find('.active').removeClass('active'); 16523 this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active'); 16524 } 16525 }; 16526 16527 /** 16528 * Extends event data. 16529 * @protected 16530 * @param {Event} event - The event object which gets thrown. 16531 */ 16532 Navigation.prototype.onTrigger = function(event) { 16533 var settings = this._core.settings; 16534 16535 event.page = { 16536 index: $.inArray(this.current(), this._pages), 16537 count: this._pages.length, 16538 size: settings && (settings.center || settings.autoWidth || settings.dotsData 16539 ? 1 : settings.dotsEach || settings.items) 16540 }; 16541 }; 16542 16543 /** 16544 * Gets the current page position of the carousel. 16545 * @protected 16546 * @returns {Number} 16547 */ 16548 Navigation.prototype.current = function() { 16549 var current = this._core.relative(this._core.current()); 16550 return $.grep(this._pages, $.proxy(function(page, index) { 16551 return page.start <= current && page.end >= current; 16552 }, this)).pop(); 16553 }; 16554 16555 /** 16556 * Gets the current succesor/predecessor position. 16557 * @protected 16558 * @returns {Number} 16559 */ 16560 Navigation.prototype.getPosition = function(successor) { 16561 var position, length, 16562 settings = this._core.settings; 16563 16564 if (settings.slideBy == 'page') { 16565 position = $.inArray(this.current(), this._pages); 16566 length = this._pages.length; 16567 successor ? ++position : --position; 16568 position = this._pages[((position % length) + length) % length].start; 16569 } else { 16570 position = this._core.relative(this._core.current()); 16571 length = this._core.items().length; 16572 successor ? position += settings.slideBy : position -= settings.slideBy; 16573 } 16574 16575 return position; 16576 }; 16577 16578 /** 16579 * Slides to the next item or page. 16580 * @public 16581 * @param {Number} [speed=false] - The time in milliseconds for the transition. 16582 */ 16583 Navigation.prototype.next = function(speed) { 16584 $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed); 16585 }; 16586 16587 /** 16588 * Slides to the previous item or page. 16589 * @public 16590 * @param {Number} [speed=false] - The time in milliseconds for the transition. 16591 */ 16592 Navigation.prototype.prev = function(speed) { 16593 $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed); 16594 }; 16595 16596 /** 16597 * Slides to the specified item or page. 16598 * @public 16599 * @param {Number} position - The position of the item or page. 16600 * @param {Number} [speed] - The time in milliseconds for the transition. 16601 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not. 16602 */ 16603 Navigation.prototype.to = function(position, speed, standard) { 16604 var length; 16605 16606 if (!standard && this._pages.length) { 16607 length = this._pages.length; 16608 $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed); 16609 } else { 16610 $.proxy(this._overrides.to, this._core)(position, speed); 16611 } 16612 }; 16613 16614 $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation; 16615 16616})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 16617 16618/** 16619 * Hash Plugin 16620 * @version 2.3.4 16621 * @author Artus Kolanowski 16622 * @author David Deutsch 16623 * @license The MIT License (MIT) 16624 */ 16625;(function($, window, document, undefined) { 16626 'use strict'; 16627 16628 /** 16629 * Creates the hash plugin. 16630 * @class The Hash Plugin 16631 * @param {Owl} carousel - The Owl Carousel 16632 */ 16633 var Hash = function(carousel) { 16634 /** 16635 * Reference to the core. 16636 * @protected 16637 * @type {Owl} 16638 */ 16639 this._core = carousel; 16640 16641 /** 16642 * Hash index for the items. 16643 * @protected 16644 * @type {Object} 16645 */ 16646 this._hashes = {}; 16647 16648 /** 16649 * The carousel element. 16650 * @type {jQuery} 16651 */ 16652 this.$element = this._core.$element; 16653 16654 /** 16655 * All event handlers. 16656 * @protected 16657 * @type {Object} 16658 */ 16659 this._handlers = { 16660 'initialized.owl.carousel': $.proxy(function(e) { 16661 if (e.namespace && this._core.settings.startPosition === 'URLHash') { 16662 $(window).trigger('hashchange.owl.navigation'); 16663 } 16664 }, this), 16665 'prepared.owl.carousel': $.proxy(function(e) { 16666 if (e.namespace) { 16667 var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash'); 16668 16669 if (!hash) { 16670 return; 16671 } 16672 16673 this._hashes[hash] = e.content; 16674 } 16675 }, this), 16676 'changed.owl.carousel': $.proxy(function(e) { 16677 if (e.namespace && e.property.name === 'position') { 16678 var current = this._core.items(this._core.relative(this._core.current())), 16679 hash = $.map(this._hashes, function(item, hash) { 16680 return item === current ? hash : null; 16681 }).join(); 16682 16683 if (!hash || window.location.hash.slice(1) === hash) { 16684 return; 16685 } 16686 16687 window.location.hash = hash; 16688 } 16689 }, this) 16690 }; 16691 16692 // set default options 16693 this._core.options = $.extend({}, Hash.Defaults, this._core.options); 16694 16695 // register the event handlers 16696 this.$element.on(this._handlers); 16697 16698 // register event listener for hash navigation 16699 $(window).on('hashchange.owl.navigation', $.proxy(function(e) { 16700 var hash = window.location.hash.substring(1), 16701 items = this._core.$stage.children(), 16702 position = this._hashes[hash] && items.index(this._hashes[hash]); 16703 16704 if (position === undefined || position === this._core.current()) { 16705 return; 16706 } 16707 16708 this._core.to(this._core.relative(position), false, true); 16709 }, this)); 16710 }; 16711 16712 /** 16713 * Default options. 16714 * @public 16715 */ 16716 Hash.Defaults = { 16717 URLhashListener: false 16718 }; 16719 16720 /** 16721 * Destroys the plugin. 16722 * @public 16723 */ 16724 Hash.prototype.destroy = function() { 16725 var handler, property; 16726 16727 $(window).off('hashchange.owl.navigation'); 16728 16729 for (handler in this._handlers) { 16730 this._core.$element.off(handler, this._handlers[handler]); 16731 } 16732 for (property in Object.getOwnPropertyNames(this)) { 16733 typeof this[property] != 'function' && (this[property] = null); 16734 } 16735 }; 16736 16737 $.fn.owlCarousel.Constructor.Plugins.Hash = Hash; 16738 16739})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 16740 16741/** 16742 * Support Plugin 16743 * 16744 * @version 2.3.4 16745 * @author Vivid Planet Software GmbH 16746 * @author Artus Kolanowski 16747 * @author David Deutsch 16748 * @license The MIT License (MIT) 16749 */ 16750;(function($, window, document, undefined) { 16751 16752 var style = $('<support>').get(0).style, 16753 prefixes = 'Webkit Moz O ms'.split(' '), 16754 events = { 16755 transition: { 16756 end: { 16757 WebkitTransition: 'webkitTransitionEnd', 16758 MozTransition: 'transitionend', 16759 OTransition: 'oTransitionEnd', 16760 transition: 'transitionend' 16761 } 16762 }, 16763 animation: { 16764 end: { 16765 WebkitAnimation: 'webkitAnimationEnd', 16766 MozAnimation: 'animationend', 16767 OAnimation: 'oAnimationEnd', 16768 animation: 'animationend' 16769 } 16770 } 16771 }, 16772 tests = { 16773 csstransforms: function() { 16774 return !!test('transform'); 16775 }, 16776 csstransforms3d: function() { 16777 return !!test('perspective'); 16778 }, 16779 csstransitions: function() { 16780 return !!test('transition'); 16781 }, 16782 cssanimations: function() { 16783 return !!test('animation'); 16784 } 16785 }; 16786 16787 function test(property, prefixed) { 16788 var result = false, 16789 upper = property.charAt(0).toUpperCase() + property.slice(1); 16790 16791 $.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) { 16792 if (style[property] !== undefined) { 16793 result = prefixed ? property : true; 16794 return false; 16795 } 16796 }); 16797 16798 return result; 16799 } 16800 16801 function prefixed(property) { 16802 return test(property, true); 16803 } 16804 16805 if (tests.csstransitions()) { 16806 /* jshint -W053 */ 16807 $.support.transition = new String(prefixed('transition')) 16808 $.support.transition.end = events.transition.end[ $.support.transition ]; 16809 } 16810 16811 if (tests.cssanimations()) { 16812 /* jshint -W053 */ 16813 $.support.animation = new String(prefixed('animation')) 16814 $.support.animation.end = events.animation.end[ $.support.animation ]; 16815 } 16816 16817 if (tests.csstransforms()) { 16818 /* jshint -W053 */ 16819 $.support.transform = new String(prefixed('transform')); 16820 $.support.transform3d = tests.csstransforms3d(); 16821 } 16822 16823})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 16824 16825/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js"))) 16826 16827/***/ }), 16828
vendor: 1,896 bytes, lines 16829-16882
16829/***/ "../node_modules/set-function-length/index.js": 16830/*!****************************************************!*\ 16831 !*** ../node_modules/set-function-length/index.js ***! 16832 \****************************************************/ 16833/*! no static exports found */ 16834/***/ (function(module, exports, __webpack_require__) { 16835 16836"use strict"; 16837 16838 16839var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js"); 16840var define = __webpack_require__(/*! define-data-property */ "../node_modules/define-data-property/index.js"); 16841var hasDescriptors = __webpack_require__(/*! has-property-descriptors */ "../node_modules/has-property-descriptors/index.js")(); 16842var gOPD = __webpack_require__(/*! gopd */ "../node_modules/gopd/index.js"); 16843 16844var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js"); 16845var $floor = GetIntrinsic('%Math.floor%'); 16846 16847/** @type {import('.')} */ 16848module.exports = function setFunctionLength(fn, length) { 16849 if (typeof fn !== 'function') { 16850 throw new $TypeError('`fn` is not a function'); 16851 } 16852 if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { 16853 throw new $TypeError('`length` must be a positive 32-bit integer'); 16854 } 16855 16856 var loose = arguments.length > 2 && !!arguments[2]; 16857 16858 var functionLengthIsConfigurable = true; 16859 var functionLengthIsWritable = true; 16860 if ('length' in fn && gOPD) { 16861 var desc = gOPD(fn, 'length'); 16862 if (desc && !desc.configurable) { 16863 functionLengthIsConfigurable = false; 16864 } 16865 if (desc && !desc.writable) { 16866 functionLengthIsWritable = false; 16867 } 16868 } 16869 16870 if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { 16871 if (hasDescriptors) { 16872 define(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true); 16873 } else { 16874 define(/** @type {Parameters<define>[0]} */ (fn), 'length', length); 16875 } 16876 } 16877 return fn; 16878}; 16879 16880 16881/***/ }), 16882
vendor: 4,475 bytes, lines 16883-17023
16883/***/ "../node_modules/side-channel/index.js": 16884/*!*********************************************!*\ 16885 !*** ../node_modules/side-channel/index.js ***! 16886 \*********************************************/ 16887/*! no static exports found */ 16888/***/ (function(module, exports, __webpack_require__) { 16889 16890"use strict"; 16891 16892 16893var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "../node_modules/get-intrinsic/index.js"); 16894var callBound = __webpack_require__(/*! call-bind/callBound */ "../node_modules/call-bind/callBound.js"); 16895var inspect = __webpack_require__(/*! object-inspect */ "../node_modules/object-inspect/index.js"); 16896 16897var $TypeError = __webpack_require__(/*! es-errors/type */ "../node_modules/es-errors/type.js"); 16898var $WeakMap = GetIntrinsic('%WeakMap%', true); 16899var $Map = GetIntrinsic('%Map%', true); 16900 16901var $weakMapGet = callBound('WeakMap.prototype.get', true); 16902var $weakMapSet = callBound('WeakMap.prototype.set', true); 16903var $weakMapHas = callBound('WeakMap.prototype.has', true); 16904var $mapGet = callBound('Map.prototype.get', true); 16905var $mapSet = callBound('Map.prototype.set', true); 16906var $mapHas = callBound('Map.prototype.has', true); 16907 16908/* 16909* This function traverses the list returning the node corresponding to the given key. 16910* 16911* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list. By doing so, all the recently used nodes can be accessed relatively quickly. 16912*/ 16913/** @type {import('.').listGetNode} */ 16914var listGetNode = function (list, key) { // eslint-disable-line consistent-return 16915 /** @type {typeof list | NonNullable<(typeof list)['next']>} */ 16916 var prev = list; 16917 /** @type {(typeof list)['next']} */ 16918 var curr; 16919 for (; (curr = prev.next) !== null; prev = curr) { 16920 if (curr.key === key) { 16921 prev.next = curr.next; 16922 // eslint-disable-next-line no-extra-parens 16923 curr.next = /** @type {NonNullable<typeof list.next>} */ (list.next); 16924 list.next = curr; // eslint-disable-line no-param-reassign 16925 return curr; 16926 } 16927 } 16928}; 16929 16930/** @type {import('.').listGet} */ 16931var listGet = function (objects, key) { 16932 var node = listGetNode(objects, key); 16933 return node && node.value; 16934}; 16935/** @type {import('.').listSet} */ 16936var listSet = function (objects, key, value) { 16937 var node = listGetNode(objects, key); 16938 if (node) { 16939 node.value = value; 16940 } else { 16941 // Prepend the new node to the beginning of the list 16942 objects.next = /** @type {import('.').ListNode<typeof value>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens 16943 key: key, 16944 next: objects.next, 16945 value: value 16946 }); 16947 } 16948}; 16949/** @type {import('.').listHas} */ 16950var listHas = function (objects, key) { 16951 return !!listGetNode(objects, key); 16952}; 16953 16954/** @type {import('.')} */ 16955module.exports = function getSideChannel() { 16956 /** @type {WeakMap<object, unknown>} */ var $wm; 16957 /** @type {Map<object, unknown>} */ var $m; 16958 /** @type {import('.').RootNode<unknown>} */ var $o; 16959 16960 /** @type {import('.').Channel} */ 16961 var channel = { 16962 assert: function (key) { 16963 if (!channel.has(key)) { 16964 throw new $TypeError('Side channel does not contain ' + inspect(key)); 16965 } 16966 }, 16967 get: function (key) { // eslint-disable-line consistent-return 16968 if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { 16969 if ($wm) { 16970 return $weakMapGet($wm, key); 16971 } 16972 } else if ($Map) { 16973 if ($m) { 16974 return $mapGet($m, key); 16975 } 16976 } else { 16977 if ($o) { // eslint-disable-line no-lonely-if 16978 return listGet($o, key); 16979 } 16980 } 16981 }, 16982 has: function (key) { 16983 if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { 16984 if ($wm) { 16985 return $weakMapHas($wm, key); 16986 } 16987 } else if ($Map) { 16988 if ($m) { 16989 return $mapHas($m, key); 16990 } 16991 } else { 16992 if ($o) { // eslint-disable-line no-lonely-if 16993 return listHas($o, key); 16994 } 16995 } 16996 return false; 16997 }, 16998 set: function (key, value) { 16999 if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { 17000 if (!$wm) { 17001 $wm = new $WeakMap(); 17002 } 17003 $weakMapSet($wm, key, value); 17004 } else if ($Map) { 17005 if (!$m) { 17006 $m = new $Map(); 17007 } 17008 $mapSet($m, key, value); 17009 } else { 17010 if (!$o) { 17011 // Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head 17012 $o = { key: {}, next: null }; 17013 } 17014 listSet($o, key, value); 17015 } 17016 } 17017 }; 17018 return channel; 17019}; 17020 17021 17022/***/ }), 17023
vendor: 829 bytes, lines 17024-17058
17024/***/ "../node_modules/url/node_modules/qs/lib/formats.js": 17025/*!**********************************************************!*\ 17026 !*** ../node_modules/url/node_modules/qs/lib/formats.js ***! 17027 \**********************************************************/ 17028/*! no static exports found */ 17029/***/ (function(module, exports, __webpack_require__) { 17030 17031"use strict"; 17032 17033 17034var replace = String.prototype.replace; 17035var percentTwenties = /%20/g; 17036 17037var Format = { 17038 RFC1738: 'RFC1738', 17039 RFC3986: 'RFC3986' 17040}; 17041 17042module.exports = { 17043 'default': Format.RFC3986, 17044 formatters: { 17045 RFC1738: function (value) { 17046 return replace.call(value, percentTwenties, '+'); 17047 }, 17048 RFC3986: function (value) { 17049 return String(value); 17050 } 17051 }, 17052 RFC1738: Format.RFC1738, 17053 RFC3986: Format.RFC3986 17054}; 17055 17056 17057/***/ }), 17058
vendor: 766 bytes, lines 17059-17081
17059/***/ "../node_modules/url/node_modules/qs/lib/index.js": 17060/*!********************************************************!*\ 17061 !*** ../node_modules/url/node_modules/qs/lib/index.js ***! 17062 \********************************************************/ 17063/*! no static exports found */ 17064/***/ (function(module, exports, __webpack_require__) { 17065 17066"use strict"; 17067 17068 17069var stringify = __webpack_require__(/*! ./stringify */ "../node_modules/url/node_modules/qs/lib/stringify.js"); 17070var parse = __webpack_require__(/*! ./parse */ "../node_modules/url/node_modules/qs/lib/parse.js"); 17071var formats = __webpack_require__(/*! ./formats */ "../node_modules/url/node_modules/qs/lib/formats.js"); 17072 17073module.exports = { 17074 formats: formats, 17075 parse: parse, 17076 stringify: stringify 17077}; 17078 17079 17080/***/ }), 17081
vendor: 11,234 bytes, lines 17082-17381
17082/***/ "../node_modules/url/node_modules/qs/lib/parse.js": 17083/*!********************************************************!*\ 17084 !*** ../node_modules/url/node_modules/qs/lib/parse.js ***! 17085 \********************************************************/ 17086/*! no static exports found */ 17087/***/ (function(module, exports, __webpack_require__) { 17088 17089"use strict"; 17090 17091 17092var utils = __webpack_require__(/*! ./utils */ "../node_modules/url/node_modules/qs/lib/utils.js"); 17093 17094var has = Object.prototype.hasOwnProperty; 17095var isArray = Array.isArray; 17096 17097var defaults = { 17098 allowDots: false, 17099 allowEmptyArrays: false, 17100 allowPrototypes: false, 17101 allowSparse: false, 17102 arrayLimit: 20, 17103 charset: 'utf-8', 17104 charsetSentinel: false, 17105 comma: false, 17106 decodeDotInKeys: true, 17107 decoder: utils.decode, 17108 delimiter: '&', 17109 depth: 5, 17110 duplicates: 'combine', 17111 ignoreQueryPrefix: false, 17112 interpretNumericEntities: false, 17113 parameterLimit: 1000, 17114 parseArrays: true, 17115 plainObjects: false, 17116 strictNullHandling: false 17117}; 17118 17119var interpretNumericEntities = function (str) { 17120 return str.replace(/&#(\d+);/g, function ($0, numberStr) { 17121 return String.fromCharCode(parseInt(numberStr, 10)); 17122 }); 17123}; 17124 17125var parseArrayValue = function (val, options) { 17126 if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { 17127 return val.split(','); 17128 } 17129 17130 return val; 17131}; 17132 17133// This is what browsers will submit when the â character occurs in an 17134// application/x-www-form-urlencoded body and the encoding of the page containing 17135// the form is iso-8859-1, or when the submitted form has an accept-charset 17136// attribute of iso-8859-1. Presumably also with other charsets that do not contain 17137// the â character, such as us-ascii. 17138var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') 17139 17140// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. 17141var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('â') 17142 17143var parseValues = function parseQueryStringValues(str, options) { 17144 var obj = { __proto__: null }; 17145 17146 var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; 17147 var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; 17148 var parts = cleanStr.split(options.delimiter, limit); 17149 var skipIndex = -1; // Keep track of where the utf8 sentinel was found 17150 var i; 17151 17152 var charset = options.charset; 17153 if (options.charsetSentinel) { 17154 for (i = 0; i < parts.length; ++i) { 17155 if (parts[i].indexOf('utf8=') === 0) { 17156 if (parts[i] === charsetSentinel) { 17157 charset = 'utf-8'; 17158 } else if (parts[i] === isoSentinel) { 17159 charset = 'iso-8859-1'; 17160 } 17161 skipIndex = i; 17162 i = parts.length; // The eslint settings do not allow break; 17163 } 17164 } 17165 } 17166 17167 for (i = 0; i < parts.length; ++i) { 17168 if (i === skipIndex) { 17169 continue; 17170 } 17171 var part = parts[i]; 17172 17173 var bracketEqualsPos = part.indexOf(']='); 17174 var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; 17175 17176 var key, val; 17177 if (pos === -1) { 17178 key = options.decoder(part, defaults.decoder, charset, 'key'); 17179 val = options.strictNullHandling ? null : ''; 17180 } else { 17181 key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); 17182 val = utils.maybeMap( 17183 parseArrayValue(part.slice(pos + 1), options), 17184 function (encodedVal) { 17185 return options.decoder(encodedVal, defaults.decoder, charset, 'value'); 17186 } 17187 ); 17188 } 17189 17190 if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { 17191 val = interpretNumericEntities(val); 17192 } 17193 17194 if (part.indexOf('[]=') > -1) { 17195 val = isArray(val) ? [val] : val; 17196 } 17197 17198 var existing = has.call(obj, key); 17199 if (existing && options.duplicates === 'combine') { 17200 obj[key] = utils.combine(obj[key], val); 17201 } else if (!existing || options.duplicates === 'last') { 17202 obj[key] = val; 17203 } 17204 } 17205 17206 return obj; 17207}; 17208 17209var parseObject = function (chain, val, options, valuesParsed) { 17210 var leaf = valuesParsed ? val : parseArrayValue(val, options); 17211 17212 for (var i = chain.length - 1; i >= 0; --i) { 17213 var obj; 17214 var root = chain[i]; 17215 17216 if (root === '[]' && options.parseArrays) { 17217 obj = options.allowEmptyArrays && leaf === '' ? [] : [].concat(leaf); 17218 } else { 17219 obj = options.plainObjects ? Object.create(null) : {}; 17220 var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; 17221 var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot; 17222 var index = parseInt(decodedRoot, 10); 17223 if (!options.parseArrays && decodedRoot === '') { 17224 obj = { 0: leaf }; 17225 } else if ( 17226 !isNaN(index) 17227 && root !== decodedRoot 17228 && String(index) === decodedRoot 17229 && index >= 0 17230 && (options.parseArrays && index <= options.arrayLimit) 17231 ) { 17232 obj = []; 17233 obj[index] = leaf; 17234 } else if (decodedRoot !== '__proto__') { 17235 obj[decodedRoot] = leaf; 17236 } 17237 } 17238 17239 leaf = obj; 17240 } 17241 17242 return leaf; 17243}; 17244 17245var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { 17246 if (!givenKey) { 17247 return; 17248 } 17249 17250 // Transform dot notation to bracket notation 17251 var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; 17252 17253 // The regex chunks 17254 17255 var brackets = /(\[[^[\]]*])/; 17256 var child = /(\[[^[\]]*])/g; 17257 17258 // Get the parent 17259 17260 var segment = options.depth > 0 && brackets.exec(key); 17261 var parent = segment ? key.slice(0, segment.index) : key; 17262 17263 // Stash the parent if it exists 17264 17265 var keys = []; 17266 if (parent) { 17267 // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties 17268 if (!options.plainObjects && has.call(Object.prototype, parent)) { 17269 if (!options.allowPrototypes) { 17270 return; 17271 } 17272 } 17273 17274 keys.push(parent); 17275 } 17276 17277 // Loop through children appending to the array until we hit depth 17278 17279 var i = 0; 17280 while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { 17281 i += 1; 17282 if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { 17283 if (!options.allowPrototypes) { 17284 return; 17285 } 17286 } 17287 keys.push(segment[1]); 17288 } 17289 17290 // If there's a remainder, just add whatever is left 17291 17292 if (segment) { 17293 keys.push('[' + key.slice(segment.index) + ']'); 17294 } 17295 17296 return parseObject(keys, val, options, valuesParsed); 17297}; 17298 17299var normalizeParseOptions = function normalizeParseOptions(opts) { 17300 if (!opts) { 17301 return defaults; 17302 } 17303 17304 if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') { 17305 throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided'); 17306 } 17307 17308 if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') { 17309 throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided'); 17310 } 17311 17312 if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') { 17313 throw new TypeError('Decoder has to be a function.'); 17314 } 17315 17316 if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { 17317 throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); 17318 } 17319 var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; 17320 17321 var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates; 17322 17323 if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') { 17324 throw new TypeError('The duplicates option must be either combine, first, or last'); 17325 } 17326 17327 var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; 17328 17329 return { 17330 allowDots: allowDots, 17331 allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, 17332 allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, 17333 allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, 17334 arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, 17335 charset: charset, 17336 charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, 17337 comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, 17338 decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys, 17339 decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, 17340 delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, 17341 // eslint-disable-next-line no-implicit-coercion, no-extra-parens 17342 depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, 17343 duplicates: duplicates, 17344 ignoreQueryPrefix: opts.ignoreQueryPrefix === true, 17345 interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, 17346 parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, 17347 parseArrays: opts.parseArrays !== false, 17348 plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, 17349 strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling 17350 }; 17351}; 17352 17353module.exports = function (str, opts) { 17354 var options = normalizeParseOptions(opts); 17355 17356 if (str === '' || str === null || typeof str === 'undefined') { 17357 return options.plainObjects ? Object.create(null) : {}; 17358 } 17359 17360 var tempObj = typeof str === 'string' ? parseValues(str, options) : str; 17361 var obj = options.plainObjects ? Object.create(null) : {}; 17362 17363 // Iterate over the keys and setup the new object 17364 17365 var keys = Object.keys(tempObj); 17366 for (var i = 0; i < keys.length; ++i) { 17367 var key = keys[i]; 17368 var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); 17369 obj = utils.merge(obj, newObj, options); 17370 } 17371 17372 if (options.allowSparse === true) { 17373 return obj; 17374 } 17375 17376 return utils.compact(obj); 17377}; 17378 17379 17380/***/ }), 17381
vendor: 11,887 bytes, lines 17382-17744
17382/***/ "../node_modules/url/node_modules/qs/lib/stringify.js": 17383/*!************************************************************!*\ 17384 !*** ../node_modules/url/node_modules/qs/lib/stringify.js ***! 17385 \************************************************************/ 17386/*! no static exports found */ 17387/***/ (function(module, exports, __webpack_require__) { 17388 17389"use strict"; 17390 17391 17392var getSideChannel = __webpack_require__(/*! side-channel */ "../node_modules/side-channel/index.js"); 17393var utils = __webpack_require__(/*! ./utils */ "../node_modules/url/node_modules/qs/lib/utils.js"); 17394var formats = __webpack_require__(/*! ./formats */ "../node_modules/url/node_modules/qs/lib/formats.js"); 17395var has = Object.prototype.hasOwnProperty; 17396 17397var arrayPrefixGenerators = { 17398 brackets: function brackets(prefix) { 17399 return prefix + '[]'; 17400 }, 17401 comma: 'comma', 17402 indices: function indices(prefix, key) { 17403 return prefix + '[' + key + ']'; 17404 }, 17405 repeat: function repeat(prefix) { 17406 return prefix; 17407 } 17408}; 17409 17410var isArray = Array.isArray; 17411var push = Array.prototype.push; 17412var pushToArray = function (arr, valueOrArray) { 17413 push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); 17414}; 17415 17416var toISO = Date.prototype.toISOString; 17417 17418var defaultFormat = formats['default']; 17419var defaults = { 17420 addQueryPrefix: false, 17421 allowDots: false, 17422 allowEmptyArrays: false, 17423 arrayFormat: 'indices', 17424 charset: 'utf-8', 17425 charsetSentinel: false, 17426 delimiter: '&', 17427 encode: true, 17428 encodeDotInKeys: false, 17429 encoder: utils.encode, 17430 encodeValuesOnly: false, 17431 format: defaultFormat, 17432 formatter: formats.formatters[defaultFormat], 17433 // deprecated 17434 indices: false, 17435 serializeDate: function serializeDate(date) { 17436 return toISO.call(date); 17437 }, 17438 skipNulls: false, 17439 strictNullHandling: false 17440}; 17441 17442var isNonNullishPrimitive = function isNonNullishPrimitive(v) { 17443 return typeof v === 'string' 17444 || typeof v === 'number' 17445 || typeof v === 'boolean' 17446 || typeof v === 'symbol' 17447 || typeof v === 'bigint'; 17448}; 17449 17450var sentinel = {}; 17451 17452var stringify = function stringify( 17453 object, 17454 prefix, 17455 generateArrayPrefix, 17456 commaRoundTrip, 17457 allowEmptyArrays, 17458 strictNullHandling, 17459 skipNulls, 17460 encodeDotInKeys, 17461 encoder, 17462 filter, 17463 sort, 17464 allowDots, 17465 serializeDate, 17466 format, 17467 formatter, 17468 encodeValuesOnly, 17469 charset, 17470 sideChannel 17471) { 17472 var obj = object; 17473 17474 var tmpSc = sideChannel; 17475 var step = 0; 17476 var findFlag = false; 17477 while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { 17478 // Where object last appeared in the ref tree 17479 var pos = tmpSc.get(object); 17480 step += 1; 17481 if (typeof pos !== 'undefined') { 17482 if (pos === step) { 17483 throw new RangeError('Cyclic object value'); 17484 } else { 17485 findFlag = true; // Break while 17486 } 17487 } 17488 if (typeof tmpSc.get(sentinel) === 'undefined') { 17489 step = 0; 17490 } 17491 } 17492 17493 if (typeof filter === 'function') { 17494 obj = filter(prefix, obj); 17495 } else if (obj instanceof Date) { 17496 obj = serializeDate(obj); 17497 } else if (generateArrayPrefix === 'comma' && isArray(obj)) { 17498 obj = utils.maybeMap(obj, function (value) { 17499 if (value instanceof Date) { 17500 return serializeDate(value); 17501 } 17502 return value; 17503 }); 17504 } 17505 17506 if (obj === null) { 17507 if (strictNullHandling) { 17508 return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix; 17509 } 17510 17511 obj = ''; 17512 } 17513 17514 if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { 17515 if (encoder) { 17516 var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); 17517 return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; 17518 } 17519 return [formatter(prefix) + '=' + formatter(String(obj))]; 17520 } 17521 17522 var values = []; 17523 17524 if (typeof obj === 'undefined') { 17525 return values; 17526 } 17527 17528 var objKeys; 17529 if (generateArrayPrefix === 'comma' && isArray(obj)) { 17530 // we need to join elements in 17531 if (encodeValuesOnly && encoder) { 17532 obj = utils.maybeMap(obj, encoder); 17533 } 17534 objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; 17535 } else if (isArray(filter)) { 17536 objKeys = filter; 17537 } else { 17538 var keys = Object.keys(obj); 17539 objKeys = sort ? keys.sort(sort) : keys; 17540 } 17541 17542 var encodedPrefix = encodeDotInKeys ? prefix.replace(/\./g, '%2E') : prefix; 17543 17544 var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix; 17545 17546 if (allowEmptyArrays && isArray(obj) && obj.length === 0) { 17547 return adjustedPrefix + '[]'; 17548 } 17549 17550 for (var j = 0; j < objKeys.length; ++j) { 17551 var key = objKeys[j]; 17552 var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; 17553 17554 if (skipNulls && value === null) { 17555 continue; 17556 } 17557 17558 var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\./g, '%2E') : key; 17559 var keyPrefix = isArray(obj) 17560 ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix 17561 : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']'); 17562 17563 sideChannel.set(object, step); 17564 var valueSideChannel = getSideChannel(); 17565 valueSideChannel.set(sentinel, sideChannel); 17566 pushToArray(values, stringify( 17567 value, 17568 keyPrefix, 17569 generateArrayPrefix, 17570 commaRoundTrip, 17571 allowEmptyArrays, 17572 strictNullHandling, 17573 skipNulls, 17574 encodeDotInKeys, 17575 generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, 17576 filter, 17577 sort, 17578 allowDots, 17579 serializeDate, 17580 format, 17581 formatter, 17582 encodeValuesOnly, 17583 charset, 17584 valueSideChannel 17585 )); 17586 } 17587 17588 return values; 17589}; 17590 17591var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { 17592 if (!opts) { 17593 return defaults; 17594 } 17595 17596 if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') { 17597 throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided'); 17598 } 17599 17600 if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') { 17601 throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided'); 17602 } 17603 17604 if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { 17605 throw new TypeError('Encoder has to be a function.'); 17606 } 17607 17608 var charset = opts.charset || defaults.charset; 17609 if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { 17610 throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); 17611 } 17612 17613 var format = formats['default']; 17614 if (typeof opts.format !== 'undefined') { 17615 if (!has.call(formats.formatters, opts.format)) { 17616 throw new TypeError('Unknown format option provided.'); 17617 } 17618 format = opts.format; 17619 } 17620 var formatter = formats.formatters[format]; 17621 17622 var filter = defaults.filter; 17623 if (typeof opts.filter === 'function' || isArray(opts.filter)) { 17624 filter = opts.filter; 17625 } 17626 17627 var arrayFormat; 17628 if (opts.arrayFormat in arrayPrefixGenerators) { 17629 arrayFormat = opts.arrayFormat; 17630 } else if ('indices' in opts) { 17631 arrayFormat = opts.indices ? 'indices' : 'repeat'; 17632 } else { 17633 arrayFormat = defaults.arrayFormat; 17634 } 17635 17636 if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') { 17637 throw new TypeError('`commaRoundTrip` must be a boolean, or absent'); 17638 } 17639 17640 var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; 17641 17642 return { 17643 addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, 17644 allowDots: allowDots, 17645 allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, 17646 arrayFormat: arrayFormat, 17647 charset: charset, 17648 charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, 17649 commaRoundTrip: opts.commaRoundTrip, 17650 delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, 17651 encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, 17652 encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys, 17653 encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, 17654 encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, 17655 filter: filter, 17656 format: format, 17657 formatter: formatter, 17658 serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, 17659 skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, 17660 sort: typeof opts.sort === 'function' ? opts.sort : null, 17661 strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling 17662 }; 17663}; 17664 17665module.exports = function (object, opts) { 17666 var obj = object; 17667 var options = normalizeStringifyOptions(opts); 17668 17669 var objKeys; 17670 var filter; 17671 17672 if (typeof options.filter === 'function') { 17673 filter = options.filter; 17674 obj = filter('', obj); 17675 } else if (isArray(options.filter)) { 17676 filter = options.filter; 17677 objKeys = filter; 17678 } 17679 17680 var keys = []; 17681 17682 if (typeof obj !== 'object' || obj === null) { 17683 return ''; 17684 } 17685 17686 var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat]; 17687 var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip; 17688 17689 if (!objKeys) { 17690 objKeys = Object.keys(obj); 17691 } 17692 17693 if (options.sort) { 17694 objKeys.sort(options.sort); 17695 } 17696 17697 var sideChannel = getSideChannel(); 17698 for (var i = 0; i < objKeys.length; ++i) { 17699 var key = objKeys[i]; 17700 17701 if (options.skipNulls && obj[key] === null) { 17702 continue; 17703 } 17704 pushToArray(keys, stringify( 17705 obj[key], 17706 key, 17707 generateArrayPrefix, 17708 commaRoundTrip, 17709 options.allowEmptyArrays, 17710 options.strictNullHandling, 17711 options.skipNulls, 17712 options.encodeDotInKeys, 17713 options.encode ? options.encoder : null, 17714 options.filter, 17715 options.sort, 17716 options.allowDots, 17717 options.serializeDate, 17718 options.format, 17719 options.formatter, 17720 options.encodeValuesOnly, 17721 options.charset, 17722 sideChannel 17723 )); 17724 } 17725 17726 var joined = keys.join(options.delimiter); 17727 var prefix = options.addQueryPrefix === true ? '?' : ''; 17728 17729 if (options.charsetSentinel) { 17730 if (options.charset === 'iso-8859-1') { 17731 // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark 17732 prefix += 'utf8=%26%2310003%3B&'; 17733 } else { 17734 // encodeURIComponent('â') 17735 prefix += 'utf8=%E2%9C%93&'; 17736 } 17737 } 17738 17739 return joined.length > 0 ? prefix + joined : ''; 17740}; 17741 17742 17743/***/ }), 17744
vendor: 7,238 bytes, lines 17745-18008
17745/***/ "../node_modules/url/node_modules/qs/lib/utils.js": 17746/*!********************************************************!*\ 17747 !*** ../node_modules/url/node_modules/qs/lib/utils.js ***! 17748 \********************************************************/ 17749/*! no static exports found */ 17750/***/ (function(module, exports, __webpack_require__) { 17751 17752"use strict"; 17753 17754 17755var formats = __webpack_require__(/*! ./formats */ "../node_modules/url/node_modules/qs/lib/formats.js"); 17756 17757var has = Object.prototype.hasOwnProperty; 17758var isArray = Array.isArray; 17759 17760var hexTable = (function () { 17761 var array = []; 17762 for (var i = 0; i < 256; ++i) { 17763 array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); 17764 } 17765 17766 return array; 17767}()); 17768 17769var compactQueue = function compactQueue(queue) { 17770 while (queue.length > 1) { 17771 var item = queue.pop(); 17772 var obj = item.obj[item.prop]; 17773 17774 if (isArray(obj)) { 17775 var compacted = []; 17776 17777 for (var j = 0; j < obj.length; ++j) { 17778 if (typeof obj[j] !== 'undefined') { 17779 compacted.push(obj[j]); 17780 } 17781 } 17782 17783 item.obj[item.prop] = compacted; 17784 } 17785 } 17786}; 17787 17788var arrayToObject = function arrayToObject(source, options) { 17789 var obj = options && options.plainObjects ? Object.create(null) : {}; 17790 for (var i = 0; i < source.length; ++i) { 17791 if (typeof source[i] !== 'undefined') { 17792 obj[i] = source[i]; 17793 } 17794 } 17795 17796 return obj; 17797}; 17798 17799var merge = function merge(target, source, options) { 17800 /* eslint no-param-reassign: 0 */ 17801 if (!source) { 17802 return target; 17803 } 17804 17805 if (typeof source !== 'object') { 17806 if (isArray(target)) { 17807 target.push(source); 17808 } else if (target && typeof target === 'object') { 17809 if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { 17810 target[source] = true; 17811 } 17812 } else { 17813 return [target, source]; 17814 } 17815 17816 return target; 17817 } 17818 17819 if (!target || typeof target !== 'object') { 17820 return [target].concat(source); 17821 } 17822 17823 var mergeTarget = target; 17824 if (isArray(target) && !isArray(source)) { 17825 mergeTarget = arrayToObject(target, options); 17826 } 17827 17828 if (isArray(target) && isArray(source)) { 17829 source.forEach(function (item, i) { 17830 if (has.call(target, i)) { 17831 var targetItem = target[i]; 17832 if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { 17833 target[i] = merge(targetItem, item, options); 17834 } else { 17835 target.push(item); 17836 } 17837 } else { 17838 target[i] = item; 17839 } 17840 }); 17841 return target; 17842 } 17843 17844 return Object.keys(source).reduce(function (acc, key) { 17845 var value = source[key]; 17846 17847 if (has.call(acc, key)) { 17848 acc[key] = merge(acc[key], value, options); 17849 } else { 17850 acc[key] = value; 17851 } 17852 return acc; 17853 }, mergeTarget); 17854}; 17855 17856var assign = function assignSingleSource(target, source) { 17857 return Object.keys(source).reduce(function (acc, key) { 17858 acc[key] = source[key]; 17859 return acc; 17860 }, target); 17861}; 17862 17863var decode = function (str, decoder, charset) { 17864 var strWithoutPlus = str.replace(/\+/g, ' '); 17865 if (charset === 'iso-8859-1') { 17866 // unescape never throws, no try...catch needed: 17867 return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); 17868 } 17869 // utf-8 17870 try { 17871 return decodeURIComponent(strWithoutPlus); 17872 } catch (e) { 17873 return strWithoutPlus; 17874 } 17875}; 17876 17877var encode = function encode(str, defaultEncoder, charset, kind, format) { 17878 // This code was originally written by Brian White (mscdex) for the io.js core querystring library. 17879 // It has been adapted here for stricter adherence to RFC 3986 17880 if (str.length === 0) { 17881 return str; 17882 } 17883 17884 var string = str; 17885 if (typeof str === 'symbol') { 17886 string = Symbol.prototype.toString.call(str); 17887 } else if (typeof str !== 'string') { 17888 string = String(str); 17889 } 17890 17891 if (charset === 'iso-8859-1') { 17892 return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { 17893 return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; 17894 }); 17895 } 17896 17897 var out = ''; 17898 for (var i = 0; i < string.length; ++i) { 17899 var c = string.charCodeAt(i); 17900 17901 if ( 17902 c === 0x2D // - 17903 || c === 0x2E // . 17904 || c === 0x5F // _ 17905 || c === 0x7E // ~ 17906 || (c >= 0x30 && c <= 0x39) // 0-9 17907 || (c >= 0x41 && c <= 0x5A) // a-z 17908 || (c >= 0x61 && c <= 0x7A) // A-Z 17909 || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( ) 17910 ) { 17911 out += string.charAt(i); 17912 continue; 17913 } 17914 17915 if (c < 0x80) { 17916 out = out + hexTable[c]; 17917 continue; 17918 } 17919 17920 if (c < 0x800) { 17921 out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); 17922 continue; 17923 } 17924 17925 if (c < 0xD800 || c >= 0xE000) { 17926 out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); 17927 continue; 17928 } 17929 17930 i += 1; 17931 c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); 17932 /* eslint operator-linebreak: [2, "before"] */ 17933 out += hexTable[0xF0 | (c >> 18)] 17934 + hexTable[0x80 | ((c >> 12) & 0x3F)] 17935 + hexTable[0x80 | ((c >> 6) & 0x3F)] 17936 + hexTable[0x80 | (c & 0x3F)]; 17937 } 17938 17939 return out; 17940}; 17941 17942var compact = function compact(value) { 17943 var queue = [{ obj: { o: value }, prop: 'o' }]; 17944 var refs = []; 17945 17946 for (var i = 0; i < queue.length; ++i) { 17947 var item = queue[i]; 17948 var obj = item.obj[item.prop]; 17949 17950 var keys = Object.keys(obj); 17951 for (var j = 0; j < keys.length; ++j) { 17952 var key = keys[j]; 17953 var val = obj[key]; 17954 if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { 17955 queue.push({ obj: obj, prop: key }); 17956 refs.push(val); 17957 } 17958 } 17959 } 17960 17961 compactQueue(queue); 17962 17963 return value; 17964}; 17965 17966var isRegExp = function isRegExp(obj) { 17967 return Object.prototype.toString.call(obj) === '[object RegExp]'; 17968}; 17969 17970var isBuffer = function isBuffer(obj) { 17971 if (!obj || typeof obj !== 'object') { 17972 return false; 17973 } 17974 17975 return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); 17976}; 17977 17978var combine = function combine(a, b) { 17979 return [].concat(a, b); 17980}; 17981 17982var maybeMap = function maybeMap(val, fn) { 17983 if (isArray(val)) { 17984 var mapped = []; 17985 for (var i = 0; i < val.length; i += 1) { 17986 mapped.push(fn(val[i])); 17987 } 17988 return mapped; 17989 } 17990 return fn(val); 17991}; 17992 17993module.exports = { 17994 arrayToObject: arrayToObject, 17995 assign: assign, 17996 combine: combine, 17997 compact: compact, 17998 decode: decode, 17999 encode: encode, 18000 isBuffer: isBuffer, 18001 isRegExp: isRegExp, 18002 maybeMap: maybeMap, 18003 merge: merge 18004}; 18005 18006 18007/***/ }), 18008
vendor: 23,945 bytes, lines 18009-18796
18009/***/ "../node_modules/url/url.js": 18010/*!**********************************!*\ 18011 !*** ../node_modules/url/url.js ***! 18012 \**********************************/ 18013/*! no static exports found */ 18014/***/ (function(module, exports, __webpack_require__) { 18015 18016"use strict"; 18017/* 18018 * Copyright Joyent, Inc. and other Node contributors. 18019 * 18020 * Permission is hereby granted, free of charge, to any person obtaining a 18021 * copy of this software and associated documentation files (the 18022 * "Software"), to deal in the Software without restriction, including 18023 * without limitation the rights to use, copy, modify, merge, publish, 18024 * distribute, sublicense, and/or sell copies of the Software, and to permit 18025 * persons to whom the Software is furnished to do so, subject to the 18026 * following conditions: 18027 * 18028 * The above copyright notice and this permission notice shall be included 18029 * in all copies or substantial portions of the Software. 18030 * 18031 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18032 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18033 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 18034 * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18035 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 18036 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 18037 * USE OR OTHER DEALINGS IN THE SOFTWARE. 18038 */ 18039 18040 18041 18042var punycode = __webpack_require__(/*! punycode */ "../node_modules/node-libs-browser/node_modules/punycode/punycode.js"); 18043 18044function Url() { 18045 this.protocol = null; 18046 this.slashes = null; 18047 this.auth = null; 18048 this.host = null; 18049 this.port = null; 18050 this.hostname = null; 18051 this.hash = null; 18052 this.search = null; 18053 this.query = null; 18054 this.pathname = null; 18055 this.path = null; 18056 this.href = null; 18057} 18058 18059// Reference: RFC 3986, RFC 1808, RFC 2396 18060 18061/* 18062 * define these here so at least they only have to be 18063 * compiled once on the first module load. 18064 */ 18065var protocolPattern = /^([a-z0-9.+-]+:)/i, 18066 portPattern = /:[0-9]*$/, 18067 18068 // Special case for a simple path URL 18069 simplePathPattern = /^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/, 18070 18071 /* 18072 * RFC 2396: characters reserved for delimiting URLs. 18073 * We actually just auto-escape these. 18074 */ 18075 delims = [ 18076 '<', '>', '"', '`', ' ', '\r', '\n', '\t' 18077 ], 18078 18079 // RFC 2396: characters not allowed for various reasons. 18080 unwise = [ 18081 '{', '}', '|', '\\', '^', '`' 18082 ].concat(delims), 18083 18084 // Allowed by RFCs, but cause of XSS attacks. Always escape these. 18085 autoEscape = ['\''].concat(unwise), 18086 /* 18087 * Characters that are never ever allowed in a hostname. 18088 * Note that any invalid chars are also handled, but these 18089 * are the ones that are *expected* to be seen, so we fast-path 18090 * them. 18091 */ 18092 nonHostChars = [ 18093 '%', '/', '?', ';', '#' 18094 ].concat(autoEscape), 18095 hostEndingChars = [ 18096 '/', '?', '#' 18097 ], 18098 hostnameMaxLen = 255, 18099 hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, 18100 hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, 18101 // protocols that can allow "unsafe" and "unwise" chars. 18102 unsafeProtocol = { 18103 javascript: true, 18104 'javascript:': true 18105 }, 18106 // protocols that never have a hostname. 18107 hostlessProtocol = { 18108 javascript: true, 18109 'javascript:': true 18110 }, 18111 // protocols that always contain a // bit. 18112 slashedProtocol = { 18113 http: true, 18114 https: true, 18115 ftp: true, 18116 gopher: true, 18117 file: true, 18118 'http:': true, 18119 'https:': true, 18120 'ftp:': true, 18121 'gopher:': true, 18122 'file:': true 18123 }, 18124 querystring = __webpack_require__(/*! qs */ "../node_modules/url/node_modules/qs/lib/index.js"); 18125 18126function urlParse(url, parseQueryString, slashesDenoteHost) { 18127 if (url && typeof url === 'object' && url instanceof Url) { return url; } 18128 18129 var u = new Url(); 18130 u.parse(url, parseQueryString, slashesDenoteHost); 18131 return u; 18132} 18133 18134Url.prototype.parse = function (url, parseQueryString, slashesDenoteHost) { 18135 if (typeof url !== 'string') { 18136 throw new TypeError("Parameter 'url' must be a string, not " + typeof url); 18137 } 18138 18139 /* 18140 * Copy chrome, IE, opera backslash-handling behavior. 18141 * Back slashes before the query string get converted to forward slashes 18142 * See: https://code.google.com/p/chromium/issues/detail?id=25916 18143 */ 18144 var queryIndex = url.indexOf('?'), 18145 splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#', 18146 uSplit = url.split(splitter), 18147 slashRegex = /\\/g; 18148 uSplit[0] = uSplit[0].replace(slashRegex, '/'); 18149 url = uSplit.join(splitter); 18150 18151 var rest = url; 18152 18153 /* 18154 * trim before proceeding. 18155 * This is to support parse stuff like " http://foo.com \n" 18156 */ 18157 rest = rest.trim(); 18158 18159 if (!slashesDenoteHost && url.split('#').length === 1) { 18160 // Try fast path regexp 18161 var simplePath = simplePathPattern.exec(rest); 18162 if (simplePath) { 18163 this.path = rest; 18164 this.href = rest; 18165 this.pathname = simplePath[1]; 18166 if (simplePath[2]) { 18167 this.search = simplePath[2]; 18168 if (parseQueryString) { 18169 this.query = querystring.parse(this.search.substr(1)); 18170 } else { 18171 this.query = this.search.substr(1); 18172 } 18173 } else if (parseQueryString) { 18174 this.search = ''; 18175 this.query = {}; 18176 } 18177 return this; 18178 } 18179 } 18180 18181 var proto = protocolPattern.exec(rest); 18182 if (proto) { 18183 proto = proto[0]; 18184 var lowerProto = proto.toLowerCase(); 18185 this.protocol = lowerProto; 18186 rest = rest.substr(proto.length); 18187 } 18188 18189 /* 18190 * figure out if it's got a host 18191 * user@server is *always* interpreted as a hostname, and url 18192 * resolution will treat //foo/bar as host=foo,path=bar because that's 18193 * how the browser resolves relative URLs. 18194 */ 18195 if (slashesDenoteHost || proto || rest.match(/^\/\/[^@/]+@[^@/]+/)) { 18196 var slashes = rest.substr(0, 2) === '//'; 18197 if (slashes && !(proto && hostlessProtocol[proto])) { 18198 rest = rest.substr(2); 18199 this.slashes = true; 18200 } 18201 } 18202 18203 if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) { 18204 18205 /* 18206 * there's a hostname. 18207 * the first instance of /, ?, ;, or # ends the host. 18208 * 18209 * If there is an @ in the hostname, then non-host chars *are* allowed 18210 * to the left of the last @ sign, unless some host-ending character 18211 * comes *before* the @-sign. 18212 * URLs are obnoxious. 18213 * 18214 * ex: 18215 * http://a@b@c/ => user:a@b host:c 18216 * http://a@b?@c => user:a host:c path:/?@c 18217 */ 18218 18219 /* 18220 * v0.12 TODO(isaacs): This is not quite how Chrome does things. 18221 * Review our test case against browsers more comprehensively. 18222 */ 18223 18224 // find the first instance of any hostEndingChars 18225 var hostEnd = -1; 18226 for (var i = 0; i < hostEndingChars.length; i++) { 18227 var hec = rest.indexOf(hostEndingChars[i]); 18228 if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; } 18229 } 18230 18231 /* 18232 * at this point, either we have an explicit point where the 18233 * auth portion cannot go past, or the last @ char is the decider. 18234 */ 18235 var auth, atSign; 18236 if (hostEnd === -1) { 18237 // atSign can be anywhere. 18238 atSign = rest.lastIndexOf('@'); 18239 } else { 18240 /* 18241 * atSign must be in auth portion. 18242 * http://a@b/c@d => host:b auth:a path:/c@d 18243 */ 18244 atSign = rest.lastIndexOf('@', hostEnd); 18245 } 18246 18247 /* 18248 * Now we have a portion which is definitely the auth. 18249 * Pull that off. 18250 */ 18251 if (atSign !== -1) { 18252 auth = rest.slice(0, atSign); 18253 rest = rest.slice(atSign + 1); 18254 this.auth = decodeURIComponent(auth); 18255 } 18256 18257 // the host is the remaining to the left of the first non-host char 18258 hostEnd = -1; 18259 for (var i = 0; i < nonHostChars.length; i++) { 18260 var hec = rest.indexOf(nonHostChars[i]); 18261 if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; } 18262 } 18263 // if we still have not hit it, then the entire thing is a host. 18264 if (hostEnd === -1) { hostEnd = rest.length; } 18265 18266 this.host = rest.slice(0, hostEnd); 18267 rest = rest.slice(hostEnd); 18268 18269 // pull out port. 18270 this.parseHost(); 18271 18272 /* 18273 * we've indicated that there is a hostname, 18274 * so even if it's empty, it has to be present. 18275 */ 18276 this.hostname = this.hostname || ''; 18277 18278 /* 18279 * if hostname begins with [ and ends with ] 18280 * assume that it's an IPv6 address. 18281 */ 18282 var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; 18283 18284 // validate a little. 18285 if (!ipv6Hostname) { 18286 var hostparts = this.hostname.split(/\./); 18287 for (var i = 0, l = hostparts.length; i < l; i++) { 18288 var part = hostparts[i]; 18289 if (!part) { continue; } 18290 if (!part.match(hostnamePartPattern)) { 18291 var newpart = ''; 18292 for (var j = 0, k = part.length; j < k; j++) { 18293 if (part.charCodeAt(j) > 127) { 18294 /* 18295 * we replace non-ASCII char with a temporary placeholder 18296 * we need this to make sure size of hostname is not 18297 * broken by replacing non-ASCII by nothing 18298 */ 18299 newpart += 'x'; 18300 } else { 18301 newpart += part[j]; 18302 } 18303 } 18304 // we test again with ASCII char only 18305 if (!newpart.match(hostnamePartPattern)) { 18306 var validParts = hostparts.slice(0, i); 18307 var notHost = hostparts.slice(i + 1); 18308 var bit = part.match(hostnamePartStart); 18309 if (bit) { 18310 validParts.push(bit[1]); 18311 notHost.unshift(bit[2]); 18312 } 18313 if (notHost.length) { 18314 rest = '/' + notHost.join('.') + rest; 18315 } 18316 this.hostname = validParts.join('.'); 18317 break; 18318 } 18319 } 18320 } 18321 } 18322 18323 if (this.hostname.length > hostnameMaxLen) { 18324 this.hostname = ''; 18325 } else { 18326 // hostnames are always lower case. 18327 this.hostname = this.hostname.toLowerCase(); 18328 } 18329 18330 if (!ipv6Hostname) { 18331 /* 18332 * IDNA Support: Returns a punycoded representation of "domain". 18333 * It only converts parts of the domain name that 18334 * have non-ASCII characters, i.e. it doesn't matter if 18335 * you call it with a domain that already is ASCII-only. 18336 */ 18337 this.hostname = punycode.toASCII(this.hostname); 18338 } 18339 18340 var p = this.port ? ':' + this.port : ''; 18341 var h = this.hostname || ''; 18342 this.host = h + p; 18343 this.href += this.host; 18344 18345 /* 18346 * strip [ and ] from the hostname 18347 * the host field still retains them, though 18348 */ 18349 if (ipv6Hostname) { 18350 this.hostname = this.hostname.substr(1, this.hostname.length - 2); 18351 if (rest[0] !== '/') { 18352 rest = '/' + rest; 18353 } 18354 } 18355 } 18356 18357 /* 18358 * now rest is set to the post-host stuff. 18359 * chop off any delim chars. 18360 */ 18361 if (!unsafeProtocol[lowerProto]) { 18362 18363 /* 18364 * First, make 100% sure that any "autoEscape" chars get 18365 * escaped, even if encodeURIComponent doesn't think they 18366 * need to be. 18367 */ 18368 for (var i = 0, l = autoEscape.length; i < l; i++) { 18369 var ae = autoEscape[i]; 18370 if (rest.indexOf(ae) === -1) { continue; } 18371 var esc = encodeURIComponent(ae); 18372 if (esc === ae) { 18373 esc = escape(ae); 18374 } 18375 rest = rest.split(ae).join(esc); 18376 } 18377 } 18378 18379 // chop off from the tail first. 18380 var hash = rest.indexOf('#'); 18381 if (hash !== -1) { 18382 // got a fragment string. 18383 this.hash = rest.substr(hash); 18384 rest = rest.slice(0, hash); 18385 } 18386 var qm = rest.indexOf('?'); 18387 if (qm !== -1) { 18388 this.search = rest.substr(qm); 18389 this.query = rest.substr(qm + 1); 18390 if (parseQueryString) { 18391 this.query = querystring.parse(this.query); 18392 } 18393 rest = rest.slice(0, qm); 18394 } else if (parseQueryString) { 18395 // no query string, but parseQueryString still requested 18396 this.search = ''; 18397 this.query = {}; 18398 } 18399 if (rest) { this.pathname = rest; } 18400 if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { 18401 this.pathname = '/'; 18402 } 18403 18404 // to support http.request 18405 if (this.pathname || this.search) { 18406 var p = this.pathname || ''; 18407 var s = this.search || ''; 18408 this.path = p + s; 18409 } 18410 18411 // finally, reconstruct the href based on what has been validated. 18412 this.href = this.format(); 18413 return this; 18414}; 18415 18416// format a parsed object into a url string 18417function urlFormat(obj) { 18418 /* 18419 * ensure it's an object, and not a string url. 18420 * If it's an obj, this is a no-op. 18421 * this way, you can call url_format() on strings 18422 * to clean up potentially wonky urls. 18423 */ 18424 if (typeof obj === 'string') { obj = urlParse(obj); } 18425 if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); } 18426 return obj.format(); 18427} 18428 18429Url.prototype.format = function () { 18430 var auth = this.auth || ''; 18431 if (auth) { 18432 auth = encodeURIComponent(auth); 18433 auth = auth.replace(/%3A/i, ':'); 18434 auth += '@'; 18435 } 18436 18437 var protocol = this.protocol || '', 18438 pathname = this.pathname || '', 18439 hash = this.hash || '', 18440 host = false, 18441 query = ''; 18442 18443 if (this.host) { 18444 host = auth + this.host; 18445 } else if (this.hostname) { 18446 host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']'); 18447 if (this.port) { 18448 host += ':' + this.port; 18449 } 18450 } 18451 18452 if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) { 18453 query = querystring.stringify(this.query, { 18454 arrayFormat: 'repeat', 18455 addQueryPrefix: false 18456 }); 18457 } 18458 18459 var search = this.search || (query && ('?' + query)) || ''; 18460 18461 if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; } 18462 18463 /* 18464 * only the slashedProtocols get the //. Not mailto:, xmpp:, etc. 18465 * unless they had them to begin with. 18466 */ 18467 if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) { 18468 host = '//' + (host || ''); 18469 if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; } 18470 } else if (!host) { 18471 host = ''; 18472 } 18473 18474 if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; } 18475 if (search && search.charAt(0) !== '?') { search = '?' + search; } 18476 18477 pathname = pathname.replace(/[?#]/g, function (match) { 18478 return encodeURIComponent(match); 18479 }); 18480 search = search.replace('#', '%23'); 18481 18482 return protocol + host + pathname + search + hash; 18483}; 18484 18485function urlResolve(source, relative) { 18486 return urlParse(source, false, true).resolve(relative); 18487} 18488 18489Url.prototype.resolve = function (relative) { 18490 return this.resolveObject(urlParse(relative, false, true)).format(); 18491}; 18492 18493function urlResolveObject(source, relative) { 18494 if (!source) { return relative; } 18495 return urlParse(source, false, true).resolveObject(relative); 18496} 18497 18498Url.prototype.resolveObject = function (relative) { 18499 if (typeof relative === 'string') { 18500 var rel = new Url(); 18501 rel.parse(relative, false, true); 18502 relative = rel; 18503 } 18504 18505 var result = new Url(); 18506 var tkeys = Object.keys(this); 18507 for (var tk = 0; tk < tkeys.length; tk++) { 18508 var tkey = tkeys[tk]; 18509 result[tkey] = this[tkey]; 18510 } 18511 18512 /* 18513 * hash is always overridden, no matter what. 18514 * even href="" will remove it. 18515 */ 18516 result.hash = relative.hash; 18517 18518 // if the relative url is empty, then there's nothing left to do here. 18519 if (relative.href === '') { 18520 result.href = result.format(); 18521 return result; 18522 } 18523 18524 // hrefs like //foo/bar always cut to the protocol. 18525 if (relative.slashes && !relative.protocol) { 18526 // take everything except the protocol from relative 18527 var rkeys = Object.keys(relative); 18528 for (var rk = 0; rk < rkeys.length; rk++) { 18529 var rkey = rkeys[rk]; 18530 if (rkey !== 'protocol') { result[rkey] = relative[rkey]; } 18531 } 18532 18533 // urlParse appends trailing / to urls like http://www.example.com 18534 if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) { 18535 result.pathname = '/'; 18536 result.path = result.pathname; 18537 } 18538 18539 result.href = result.format(); 18540 return result; 18541 } 18542 18543 if (relative.protocol && relative.protocol !== result.protocol) { 18544 /* 18545 * if it's a known url protocol, then changing 18546 * the protocol does weird things 18547 * first, if it's not file:, then we MUST have a host, 18548 * and if there was a path 18549 * to begin with, then we MUST have a path. 18550 * if it is file:, then the host is dropped, 18551 * because that's known to be hostless. 18552 * anything else is assumed to be absolute. 18553 */ 18554 if (!slashedProtocol[relative.protocol]) { 18555 var keys = Object.keys(relative); 18556 for (var v = 0; v < keys.length; v++) { 18557 var k = keys[v]; 18558 result[k] = relative[k]; 18559 } 18560 result.href = result.format(); 18561 return result; 18562 } 18563 18564 result.protocol = relative.protocol; 18565 if (!relative.host && !hostlessProtocol[relative.protocol]) { 18566 var relPath = (relative.pathname || '').split('/'); 18567 while (relPath.length && !(relative.host = relPath.shift())) { } 18568 if (!relative.host) { relative.host = ''; } 18569 if (!relative.hostname) { relative.hostname = ''; } 18570 if (relPath[0] !== '') { relPath.unshift(''); } 18571 if (relPath.length < 2) { relPath.unshift(''); } 18572 result.pathname = relPath.join('/'); 18573 } else { 18574 result.pathname = relative.pathname; 18575 } 18576 result.search = relative.search; 18577 result.query = relative.query; 18578 result.host = relative.host || ''; 18579 result.auth = relative.auth; 18580 result.hostname = relative.hostname || relative.host; 18581 result.port = relative.port; 18582 // to support http.request 18583 if (result.pathname || result.search) { 18584 var p = result.pathname || ''; 18585 var s = result.search || ''; 18586 result.path = p + s; 18587 } 18588 result.slashes = result.slashes || relative.slashes; 18589 result.href = result.format(); 18590 return result; 18591 } 18592 18593 var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/', 18594 isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/', 18595 mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname), 18596 removeAllDots = mustEndAbs, 18597 srcPath = result.pathname && result.pathname.split('/') || [], 18598 relPath = relative.pathname && relative.pathname.split('/') || [], 18599 psychotic = result.protocol && !slashedProtocol[result.protocol]; 18600 18601 /* 18602 * if the url is a non-slashed url, then relative 18603 * links like ../.. should be able 18604 * to crawl up to the hostname, as well. This is strange. 18605 * result.protocol has already been set by now. 18606 * Later on, put the first path part into the host field. 18607 */ 18608 if (psychotic) { 18609 result.hostname = ''; 18610 result.port = null; 18611 if (result.host) { 18612 if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); } 18613 } 18614 result.host = ''; 18615 if (relative.protocol) { 18616 relative.hostname = null; 18617 relative.port = null; 18618 if (relative.host) { 18619 if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); } 18620 } 18621 relative.host = null; 18622 } 18623 mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); 18624 } 18625 18626 if (isRelAbs) { 18627 // it's absolute. 18628 result.host = relative.host || relative.host === '' ? relative.host : result.host; 18629 result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname; 18630 result.search = relative.search; 18631 result.query = relative.query; 18632 srcPath = relPath; 18633 // fall through to the dot-handling below. 18634 } else if (relPath.length) { 18635 /* 18636 * it's relative 18637 * throw away the existing file, and take the new path instead. 18638 */ 18639 if (!srcPath) { srcPath = []; } 18640 srcPath.pop(); 18641 srcPath = srcPath.concat(relPath); 18642 result.search = relative.search; 18643 result.query = relative.query; 18644 } else if (relative.search != null) { 18645 /* 18646 * just pull out the search. 18647 * like href='?foo'. 18648 * Put this after the other two cases because it simplifies the booleans 18649 */ 18650 if (psychotic) { 18651 result.host = srcPath.shift(); 18652 result.hostname = result.host; 18653 /* 18654 * occationaly the auth can get stuck only in host 18655 * this especially happens in cases like 18656 * url.resolveObject('mailto:local1@domain1', 'local2@domain2') 18657 */ 18658 var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; 18659 if (authInHost) { 18660 result.auth = authInHost.shift(); 18661 result.hostname = authInHost.shift(); 18662 result.host = result.hostname; 18663 } 18664 } 18665 result.search = relative.search; 18666 result.query = relative.query; 18667 // to support http.request 18668 if (result.pathname !== null || result.search !== null) { 18669 result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); 18670 } 18671 result.href = result.format(); 18672 return result; 18673 } 18674 18675 if (!srcPath.length) { 18676 /* 18677 * no path at all. easy. 18678 * we've already handled the other stuff above. 18679 */ 18680 result.pathname = null; 18681 // to support http.request 18682 if (result.search) { 18683 result.path = '/' + result.search; 18684 } else { 18685 result.path = null; 18686 } 18687 result.href = result.format(); 18688 return result; 18689 } 18690 18691 /* 18692 * if a url ENDs in . or .., then it must get a trailing slash. 18693 * however, if it ends in anything else non-slashy, 18694 * then it must NOT get a trailing slash. 18695 */ 18696 var last = srcPath.slice(-1)[0]; 18697 var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''; 18698 18699 /* 18700 * strip single dots, resolve double dots to parent dir 18701 * if the path tries to go above the root, `up` ends up > 0 18702 */ 18703 var up = 0; 18704 for (var i = srcPath.length; i >= 0; i--) { 18705 last = srcPath[i]; 18706 if (last === '.') { 18707 srcPath.splice(i, 1); 18708 } else if (last === '..') { 18709 srcPath.splice(i, 1); 18710 up++; 18711 } else if (up) { 18712 srcPath.splice(i, 1); 18713 up--; 18714 } 18715 } 18716 18717 // if the path is allowed to go above the root, restore leading ..s 18718 if (!mustEndAbs && !removeAllDots) { 18719 for (; up--; up) { 18720 srcPath.unshift('..'); 18721 } 18722 } 18723 18724 if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { 18725 srcPath.unshift(''); 18726 } 18727 18728 if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { 18729 srcPath.push(''); 18730 } 18731 18732 var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/'); 18733 18734 // put the host back 18735 if (psychotic) { 18736 result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; 18737 result.host = result.hostname; 18738 /* 18739 * occationaly the auth can get stuck only in host 18740 * this especially happens in cases like 18741 * url.resolveObject('mailto:local1@domain1', 'local2@domain2') 18742 */ 18743 var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; 18744 if (authInHost) { 18745 result.auth = authInHost.shift(); 18746 result.hostname = authInHost.shift(); 18747 result.host = result.hostname; 18748 } 18749 } 18750 18751 mustEndAbs = mustEndAbs || (result.host && srcPath.length); 18752 18753 if (mustEndAbs && !isAbsolute) { 18754 srcPath.unshift(''); 18755 } 18756 18757 if (srcPath.length > 0) { 18758 result.pathname = srcPath.join('/'); 18759 } else { 18760 result.pathname = null; 18761 result.path = null; 18762 } 18763 18764 // to support request.http 18765 if (result.pathname !== null || result.search !== null) { 18766 result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); 18767 } 18768 result.auth = relative.auth || result.auth; 18769 result.slashes = result.slashes || relative.slashes; 18770 result.href = result.format(); 18771 return result; 18772}; 18773 18774Url.prototype.parseHost = function () { 18775 var host = this.host; 18776 var port = portPattern.exec(host); 18777 if (port) { 18778 port = port[0]; 18779 if (port !== ':') { 18780 this.port = port.substr(1); 18781 } 18782 host = host.substr(0, host.length - port.length); 18783 } 18784 if (host) { this.hostname = host; } 18785}; 18786 18787exports.parse = urlParse; 18788exports.resolve = urlResolve; 18789exports.resolveObject = urlResolveObject; 18790exports.format = urlFormat; 18791 18792exports.Url = Url; 18793 18794 18795/***/ }), 18796
vendor: 767 bytes, lines 18797-18827
18797/***/ "../node_modules/webpack/buildin/global.js": 18798/*!*************************************************!*\ 18799 !*** ../node_modules/webpack/buildin/global.js ***! 18800 \*************************************************/ 18801/*! no static exports found */ 18802/***/ (function(module, exports) { 18803 18804var g; 18805 18806// This works in non-strict mode 18807g = (function() { 18808 return this; 18809})(); 18810 18811try { 18812 // This works if eval is allowed (see CSP) 18813 g = g || new Function("return this")(); 18814} catch (e) { 18815 // This works if the window reference is available 18816 if (typeof window === "object") g = window; 18817} 18818 18819// g can still be undefined, but nothing to do about it... 18820// We return undefined, instead of nothing here, so it's 18821// easier to handle this case. if(!global) { ...} 18822 18823module.exports = g; 18824 18825 18826/***/ }), 18827
vendor: 792 bytes, lines 18828-18860
18828/***/ "../node_modules/webpack/buildin/module.js": 18829/*!*************************************************!*\ 18830 !*** ../node_modules/webpack/buildin/module.js ***! 18831 \*************************************************/ 18832/*! no static exports found */ 18833/***/ (function(module, exports) { 18834 18835module.exports = function(module) { 18836 if (!module.webpackPolyfill) { 18837 module.deprecate = function() {}; 18838 module.paths = []; 18839 // module.parent = undefined by default 18840 if (!module.children) module.children = []; 18841 Object.defineProperty(module, "loaded", { 18842 enumerable: true, 18843 get: function() { 18844 return module.l; 18845 } 18846 }); 18847 Object.defineProperty(module, "id", { 18848 enumerable: true, 18849 get: function() { 18850 return module.i; 18851 } 18852 }); 18853 module.webpackPolyfill = 1; 18854 } 18855 return module; 18856}; 18857 18858 18859/***/ }), 18860
18861/***/ "./assets/js/app.js": 18862/*!**************************!*\ 18863 !*** ./assets/js/app.js ***! 18864 \**************************/ 18865/*! no exports provided */ 18866/***/ (function(module, __webpack_exports__, __webpack_require__) { 18867 18868"use strict"; 18869__webpack_require__.r(__webpack_exports__); 18870/* WEBPACK VAR INJECTION */(function(jQuery) {/* harmony import */ var _app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app/jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 18871/* harmony import */ var _app_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app/utils.js */ "./assets/js/app/utils.js"); 18872/* harmony import */ var _app_accordion_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/accordion.js */ "./assets/js/app/accordion.js"); 18873/* harmony import */ var _app_anchor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/anchor.js */ "./assets/js/app/anchor.js"); 18874/* harmony import */ var _app_fixedheader_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app/fixedheader.js */ "./assets/js/app/fixedheader.js"); 18875/* harmony import */ var _app_heightline_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app/heightline.js */ "./assets/js/app/heightline.js"); 18876/* harmony import */ var _app_responsive_table_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./app/responsive-table.js */ "./assets/js/app/responsive-table.js"); 18877/* harmony import */ var _app_slidebar_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./app/slidebar.js */ "./assets/js/app/slidebar.js"); 18878/* harmony import */ var _app_tab_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./app/tab.js */ "./assets/js/app/tab.js"); 18879/* harmony import */ var _app_current_nav_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./app/current-nav.js */ "./assets/js/app/current-nav.js"); 18880/* harmony import */ var _app_format_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./app/format.js */ "./assets/js/app/format.js"); 18881/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! owl.carousel */ "../node_modules/owl.carousel/dist/owl.carousel.js"); 18882/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(owl_carousel__WEBPACK_IMPORTED_MODULE_11__); 18883/* harmony import */ var font_awesome_scss_font_awesome_scss__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! font-awesome/scss/font-awesome.scss */ "../node_modules/font-awesome/scss/font-awesome.scss"); 18884/* harmony import */ var font_awesome_scss_font_awesome_scss__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(font_awesome_scss_font_awesome_scss__WEBPACK_IMPORTED_MODULE_12__); 18885/* harmony import */ var owl_carousel_dist_assets_owl_carousel_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! owl.carousel/dist/assets/owl.carousel.css */ "../node_modules/owl.carousel/dist/assets/owl.carousel.css"); 18886/* harmony import */ var owl_carousel_dist_assets_owl_carousel_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(owl_carousel_dist_assets_owl_carousel_css__WEBPACK_IMPORTED_MODULE_13__); 18887/* harmony import */ var owl_carousel_dist_assets_owl_theme_default_css__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! owl.carousel/dist/assets/owl.theme.default.css */ "../node_modules/owl.carousel/dist/assets/owl.theme.default.css"); 18888/* harmony import */ var owl_carousel_dist_assets_owl_theme_default_css__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(owl_carousel_dist_assets_owl_theme_default_css__WEBPACK_IMPORTED_MODULE_14__); 18889function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 18890function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 18891function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 18892function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 18893function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 18894function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 18895 18896 18897 18898 18899 18900 18901 18902 18903 18904 18905 18906 18907 18908 18909 18910var App = /*#__PURE__*/_createClass(function App() { 18911 _classCallCheck(this, App); 18912 this.Utils = new _app_utils_js__WEBPACK_IMPORTED_MODULE_1__["default"](); 18913 this.Accordion = new _app_accordion_js__WEBPACK_IMPORTED_MODULE_2__["default"](); 18914 this.Anchor = new _app_anchor_js__WEBPACK_IMPORTED_MODULE_3__["default"]();
18915 this.FixedHeader = new _app_fixedheader_js__WEBPACK_IMPORTED_MODULE_4__["default"](); 18916 this.HeightLine = new _app_heightline_js__WEBPACK_IMPORTED_MODULE_5__["default"](); 18917 this.ResponsiveTable = new _app_responsive_table_js__WEBPACK_IMPORTED_MODULE_6__["default"](); 18918 this.Slidebar = new _app_slidebar_js__WEBPACK_IMPORTED_MODULE_7__["default"](); 18919 this.CurrentNav = new _app_current_nav_js__WEBPACK_IMPORTED_MODULE_9__["default"](); 18920 this.Tab = new _app_tab_js__WEBPACK_IMPORTED_MODULE_8__["default"](); 18921 18922 //SPã¡ãã¥ã¼ã®é«ãåå¾ 18923 function menuHight() { 18924 var win = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(window).innerWidth(); 18925 if (win > 750) { 18926 return false; 18927 } 18928 var $smpHeaderHeight = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.l-header').height(); 18929 var windowHeight = window.innerHeight; 18930 var winH = windowHeight - $smpHeaderHeight; 18931 console.log($smpHeaderHeight); 18932 18933 //åããã¿ã¼ã²ãããåå¾ 18934 var targetSlidebarWrap = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar-menu'), 18935 targetSlidebarMenu = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar__parent'), 18936 targetSlidebarBtn = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar-menu__parent'); 18937 18938 //ããå®è¡(ã¯ãªãã¯ãããå¦çãå®è¡ãã) 18939 targetSlidebarBtn.on('click', function () { 18940 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-slidebar-menu').toggleClass('is-active'); 18941 }); 18942 } 18943 18944 //ããã¿ã¼ã¡ãã¥ã¼SPã¹ã©ã¤ã 18945 function menuSlide() { 18946 var win = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(window).innerWidth(); 18947 if (win > 750) { 18948 return false; 18949 } 18950 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.l-footer__block').on('click', function () { 18951 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).children(".l-footer__menutitle").toggleClass('is-open'); 18952 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).children(".l-footer__menulist.is-sub").slideToggle(); 18953 }); 18954 } 18955 //owlcarousel 18956 function owlCarousel() { 18957 var owls = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.owl-carousel'); 18958 if (owls.length === 0) { 18959 return false; 18960 } 18961 //->ã¹ã©ã¤ãã¼ 18962 owls.imagesLoaded(function () { 18963 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual__slider').owlCarousel({ 18964 items: 3, 18965 margin: 0, 18966 dots: true, 18967 loop: true, 18968 nav: true, 18969 autoplayHoverPause: true, 18970 autoplay: true, 18971 autoplaySpeed: 500, 18972 center: true, 18973 navText: ['<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/img-mainvisual-prev.png" />', '<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/img-mainvisual-next.png" />'], 18974 //navText: ['<img src="/assets/images/img-mainvisual-prev.png" />','<img src="/assets/images/img-mainvisual-next.png" />'], 18975 responsive: { 18976 // breakpoint from 0 up 18977 0: { 18978 items: 1, 18979 autoWidth: false, 18980 autoHeight: false, 18981 nav: false 18982 }, 18983 // breakpoint from 750 up 18984 950: { 18985 items: 3, 18986 autoWidth: true, 18987 autoHeight: true, 18988 nav: true 18989 } 18990 } 18991 }); 18992 }); 18993 18994 //->ã«ã«ã¼ã»ã« 18995 owls.imagesLoaded(function () { 18996 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual__carousel').owlCarousel({ 18997 items: 1, 18998 margin: 16, 18999 dots: true, 19000 loop: true, 19001 nav: true, 19002 autoplayHoverPause: true, 19003 autoplay: false, 19004 autoplaySpeed: 500, 19005 autoWidth: false, 19006 autoHeight: false, 19007 center: true, 19008 navText: ['<div class="c-main-visual__nav is-left"><i class="fa fa-angle-left" aria-hidden="true"></i></div>', '<div class="c-main-visual__nav is-right"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'], 19009 responsive: { 19010 // breakpoint from 0 up 19011 0: { 19012 stagePadding: 32 19013 }, 19014 // breakpoint from 750 up 19015 750: { 19016 stagePadding: 64 19017 }, 19018 // breakpoint from 950 up 19019 950: { 19020 stagePadding: 156 19021 }, 19022 1400: { 19023 stagePadding: 312 19024 } 19025 } 19026 }); 19027 }); 19028 //->ã«ã«ã¼ã»ã«_ãã¼ãã« 19029 owls.imagesLoaded(function () { 19030 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual__carousel.is-normal').owlCarousel({ 19031 items: 1, 19032 margin: 8, 19033 dots: true, 19034 loop: true, 19035 nav: true, 19036 autoplayHoverPause: true, 19037 autoplay: false, 19038 autoplaySpeed: 500, 19039 autoWidth: false, 19040 autoHeight: false, 19041 center: true, 19042 navText: ['<div class="c-main-visual__nav is-left"><i class="fa fa-angle-left" aria-hidden="true"></i></div>', '<div class="c-main-visual__nav is-right"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'], 19043 responsive: { 19044 // breakpoint from 0 up 19045 0: { 19046 stagePadding: 32 19047 }, 19048 // breakpoint from 750 up 19049 750: { 19050 stagePadding: 64 19051 }, 19052 // breakpoint from 950 up 19053 950: { 19054 stagePadding: 156 19055 }, 19056 1400: { 19057 stagePadding: 312 19058 } 19059 } 19060 }); 19061 }); 19062 //->ã«ã«ã¼ã»ã«_ã¬ã¤ã¤ã¼ 19063 owls.imagesLoaded(function () { 19064 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-main-visual-layer__carousel').owlCarousel({ 19065 items: 1, 19066 margin: 0, 19067 dots: true, 19068 loop: true, 19069 nav: false, 19070 autoplayHoverPause: true, 19071 autoplay: true, 19072 autoplaySpeed: 500, 19073 autoWidth: false, 19074 autoHeight: false, 19075 center: true, 19076 navText: ['<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-prev.svg" />', '<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-next.svg" />'] 19077 //navText: ['<img src="/assets/images/icon-slider-prev.svg" />','<img src="/assets/images/icon-slider-next.svg" />'], 19078 }); 19079 }); 19080 //->ã«ã¼ã_ã«ã«ã¼ã»ã« 19081 owls.imagesLoaded(function () { 19082 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.js-card-slider').owlCarousel({ 19083 margin: 36, 19084 dots: false, 19085 loop: true, 19086 nav: false, 19087 autoplayHoverPause: true, 19088 autoplay: false, 19089 autoplaySpeed: 500, 19090 autoWidth: false, 19091 autoHeight: true, 19092 navText: ['<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-prev.svg" />', '<img src="/wp-content/themes/glasiaous-co-html/dist/assets/images/icon-slider-next.svg" />'], 19093 //navText: ['<img src="/assets/images/icon-slider-prev.svg" />','<img src="/assets/images/icon-slider-next.svg" />'], 19094 responsive: { 19095 // breakpoint from 0 up 19096 0: { 19097 margin: 16, 19098 items: 1, 19099 loop: true, 19100 stagePadding: 50 19101 }, 19102 // breakpoint from 750 up 19103 750: { 19104 margin: 36, 19105 items: 3, 19106 loop: true, 19107 stagePadding: 0 19108 } 19109 } 19110 }); 19111 }); 19112 owls.imagesLoaded(function () { 19113 var $sliderItem = Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.js-pickup'); 19114 if (!$sliderItem) return false;
19115 if ($sliderItem.find('.c-banner-pickup__item').length < 3) { 19116 $sliderItem.toggleClass('owl-carousel'); 19117 return false; 19118 } 19119 $sliderItem.owlCarousel({ 19120 margin: 30, 19121 dots: true, 19122 loop: true, 19123 nav: true, 19124 autoplayHoverPause: true, 19125 autoplay: true, 19126 autoplaySpeed: 500, 19127 autoWidth: true, 19128 autoHeight: false, 19129 navText: ['<span class="is-slide-prev"></span>', '<span class="is-slide-next"></span>'], 19130 responsive: { 19131 // breakpoint from 0 up 19132 0: { 19133 items: 1, 19134 center: true, 19135 stagePadding: 20, 19136 navText: ['<span class="is-slide-prev"></span>', '<span class="is-slide-next"></span>'] 19137 }, 19138 // breakpoint from 750 up 19139 750: { 19140 margin: 30, 19141 navText: ['<span class="is-slide-prev"></span>', '<span class="is-slide-next"></span>'] 19142 } 19143 } 19144 }); 19145 }); 19146 } 19147 Object(_app_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function () { 19148 menuSlide(); 19149 owlCarousel(); 19150 }); 19151}); 19152window.GApp = new App(); 19153(function ($) { 19154 var growApp = function growApp() {}; 19155 /* 19156 * userAgentåå¾ 19157 * */ 19158 var Agent = window.navigator.userAgent.toLowerCase(); 19159 var _ua = function (u) { 19160 return { 19161 Tablet: u.indexOf("windows") != -1 && u.indexOf("touch") != -1 && u.indexOf("tablet pc") == -1 || u.indexOf("ipad") != -1 || u.indexOf("android") != -1 && u.indexOf("mobile") == -1 || u.indexOf("firefox") != -1 && u.indexOf("tablet") != -1 || u.indexOf("kindle") != -1 || u.indexOf("silk") != -1 || u.indexOf("playbook") != -1, 19162 Mobile: u.indexOf("windows") != -1 && u.indexOf("phone") != -1 || u.indexOf("iphone") != -1 || u.indexOf("ipod") != -1 || u.indexOf("android") != -1 && u.indexOf("mobile") != -1 || u.indexOf("firefox") != -1 && u.indexOf("mobile") != -1 || u.indexOf("blackberry") != -1 19163 }; 19164 }(Agent); 19165 growApp.prototype.changeViewPort = function () {}; 19166 19167 /* 19168 * 19169 * ã¹ããã¡ãã¥ã¼ã®é«ããåå¾ãã 19170 * 19171 * */ 19172 growApp.prototype.menuHight = function () { 19173 var win = $(window).innerWidth(); 19174 if (win > 750) { 19175 return false; 19176 } 19177 var $smpHeaderHeight = $('.l-header').height(); 19178 var windowHeight = window.innerHeight; 19179 var winH = windowHeight - $smpHeaderHeight; 19180 console.log($smpHeaderHeight); 19181 19182 //åããã¿ã¼ã²ãããåå¾ 19183 var targetSlidebarWrap = $('.c-slidebar-menu'), 19184 targetSlidebarMenu = $('.c-slidebar__parent'), 19185 targetSlidebarBtn = $('.c-slidebar-menu__parent'); 19186 19187 //ããå®è¡(ã¯ãªãã¯ãããå¦çãå®è¡ãã) 19188 targetSlidebarBtn.on('click', function () { 19189 $('.c-slidebar-menu').toggleClass('is-active'); 19190 }); 19191 }; 19192 growApp.prototype.footerMenu = function () { 19193 var win = $(window).innerWidth(); 19194 if (win > 750) { 19195 return false; 19196 } 19197 $('.c-footer-menu__block').on('click', function () { 19198 $(this).children(".c-footer-menu__title").toggleClass('is-open'); 19199 $(this).children(".c-footer-menu__list.is-sub").slideToggle(); 19200 }); 19201 }; 19202 growApp.prototype.buttonWrap = function () { 19203 var button = $(".c-button"); 19204 button.wrapInner("<span></span>"); 19205 }; 19206 growApp.prototype.addScrollClass = function () { 19207 $(window).on('scroll', function () { 19208 var scrollPosition = $(this).scrollTop(); 19209 var body = $("body"); 19210 if (scrollPosition > 0) { 19211 body.addClass("is-scroll"); 19212 } else { 19213 body.removeClass("is-scroll"); 19214 } 19215 }); 19216 }; 19217 growApp.prototype.diagnosisBannerClose = function () { 19218 $(".c-banner-diagnosis__close").on("click", function () { 19219 $(".c-banner-diagnosis").fadeOut(300); 19220 }); 19221 }; 19222 $(function () { 19223 var app = new growApp(); 19224 app.changeViewPort(); 19225 // app.menuHight(); 19226 app.footerMenu(); 19227 app.buttonWrap(); 19228 app.addScrollClass(); 19229 app.diagnosisBannerClose(); 19230 }); 19231})(jQuery); 19232/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js"))) 19233 19234/***/ }), 19235
19236/***/ "./assets/js/app/accordion.js": 19237/*!************************************!*\ 19238 !*** ./assets/js/app/accordion.js ***! 19239 \************************************/ 19240/*! exports provided: default */ 19241/***/ (function(module, __webpack_exports__, __webpack_require__) { 19242 19243"use strict"; 19244__webpack_require__.r(__webpack_exports__); 19245/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Accordion; }); 19246/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 19247function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 19248function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 19249function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 19250function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 19251function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 19252function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 19253/* 19254 * ==================================================================== 19255 * Grow Template 19256 * @package Grow Template 19257 * @author GrowGroup.Inc <[email protected]> 19258 * @license MIT Licence 19259 * ==================================================================== 19260 * 19261 * # example: 19262 * <div class="c-panel js-accordion"> 19263 * <div class="c-panel__title" data-accordion-title> 19264 * Title 19265 * </div> 19266 * <div class="c-panel__content" data-accordion-content> 19267 * Content 19268 * </div> 19269 * </div> 19270 * 19271 */ 19272 19273 19274var defaultOptions = { 19275 selector: '.js-accordion', 19276 titleTargetAttr: 'data-accordion-title', 19277 contentTargetAttr: 'data-accordion-content', 19278 speed: 300, 19279 defaultOpen: false 19280}; 19281var Accordion = /*#__PURE__*/function () { 19282 /** 19283 * åæå 19284 * @param options 19285 */ 19286 function Accordion(options) { 19287 _classCallCheck(this, Accordion); 19288 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 19289 this.init(); 19290 } 19291 19292 /** 19293 * åæå 19294 */ 19295 return _createClass(Accordion, [{ 19296 key: "init", 19297 value: function init() { 19298 // ã¿ã¼ã²ãããåå¾ãã 19299 this.targetAll = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector); 19300 19301 // ã¿ã¼ã²ãããåå¨ããªãå ´åã¯å®è¡ããªã 19302 if (!this.targetAll.length) { 19303 return false; 19304 } 19305 // å®è¡ãã 19306 this.run(); 19307 } 19308 19309 /** 19310 * å®è¡ãã 19311 */ 19312 }, { 19313 key: "run", 19314 value: function run() { 19315 for (var i = 0; i < this.targetAll.length; i++) { 19316 var target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.targetAll[i]); 19317 target.title = target.find('*[' + this.options.titleTargetAttr + ']'); 19318 target.content = target.find('*[' + this.options.contentTargetAttr + ']'); 19319 this.accordion(target); 19320 if (this.options.defaultOpen) { 19321 target.content.slideDown(); 19322 } 19323 } 19324 } 19325 19326 /** 19327 * ã¢ã³ã¼ãã£ãªã³ã®åä½ 19328 * @param el 19329 */ 19330 }, { 19331 key: "accordion", 19332 value: function accordion(el) { 19333 var _this = this; 19334 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el.title).on('click', function (e) { 19335 e.preventDefault(); 19336 el.content.slideToggle(_this.options.speed); 19337 el.content.closest(_this.options.selector).toggleClass('is-open'); 19338 }); 19339 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el.title).on('mouseover', function (e) { 19340 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_this).css('cursor', 'pointer'); 19341 }); 19342 } 19343 }]); 19344}(); 19345 19346 19347/***/ }), 19348
19349/***/ "./assets/js/app/anchor.js": 19350/*!*********************************!*\ 19351 !*** ./assets/js/app/anchor.js ***! 19352 \*********************************/ 19353/*! exports provided: default */ 19354/***/ (function(module, __webpack_exports__, __webpack_require__) { 19355 19356"use strict"; 19357__webpack_require__.r(__webpack_exports__); 19358/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Anchor; }); 19359/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 19360/* 19361 * ==================================================================== 19362 * Grow Template 19363 * @package Grow Template 19364 * @author GrowGroup.Inc <[email protected]> 19365 * @license MIT Licence 19366 * ==================================================================== 19367 * # example: 19368 * <a class="js-anchor" data-anchor-taget=".target-selector"> 19369 * Link 19370 * </a> 19371 * 19372 */ 19373 19374 19375function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 19376function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 19377function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 19378function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 19379function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 19380function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 19381 19382 19383/** 19384 * ããã©ã«ããªãã·ã§ã³ 19385 * @type {{}} 19386 */ 19387var defaultOptions = { 19388 selector: '.js-anchor', 19389 dataSelector: 'anchor-target', 19390 scrollSpeed: 300, 19391 easing: 'linear' 19392}; 19393var Anchor = /*#__PURE__*/function () { 19394 function Anchor(options) { 19395 _classCallCheck(this, Anchor); 19396 // ãªãã·ã§ã³ãã»ãã 19397 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 19398 this.init(); 19399 } 19400 19401 /** 19402 * åæå 19403 * @param e ã¿ã¼ã²ããã¨ãªãã¨ã¬ã¡ã³ã 19404 */ 19405 return _createClass(Anchor, [{ 19406 key: "init", 19407 value: function init() { 19408 this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector); 19409 this.onClick(); 19410 } 19411 19412 /** 19413 * ã¯ãªãã¯æã®ã¤ãã³ã 19414 */ 19415 }, { 19416 key: "onClick", 19417 value: function onClick() { 19418 var self = this; 19419 this.target.on('click', function (e) { 19420 e.preventDefault(); 19421 19422 // ã¹ã¯ãã¼ã«å ã®ã¿ã¼ã²ãããæå® 19423 var anchorTargetSelector = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).data(self.options.dataSelector); 19424 if (typeof anchorTargetSelector === 'undefined') { 19425 var href = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).attr('href'); 19426 var anchorTargetSelector = href.match(/#(\S*)/g); 19427 if (typeof anchorTargetSelector[0] === 'undefined') { 19428 throw new Error('ã¿ã¼ã²ããã¨ãªãè¦ç´ ãåå¾ã§ãã¾ããã§ããã'); 19429 return false; 19430 } 19431 anchorTargetSelector = anchorTargetSelector[0]; 19432 } 19433 var anchorTarget = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(anchorTargetSelector); 19434 if (anchorTarget.length === 0) { 19435 throw new Error('ã¿ã¼ã²ããã¨ãªãè¦ç´ ãåå¾ã§ãã¾ããã§ããã'); 19436 return false;
19437 } 19438 var top = anchorTarget.offset().top - 72; 19439 19440 // ã¹ã¯ãã¼ã«ããã 19441 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('body,html').animate({ 19442 scrollTop: top 19443 }, { 19444 duration: self.options.scrollSpeed, 19445 easing: self.options.easing 19446 }); 19447 }); 19448 } 19449 }]); 19450}(); 19451 19452 19453/***/ }), 19454
19455/***/ "./assets/js/app/current-nav.js": 19456/*!**************************************!*\ 19457 !*** ./assets/js/app/current-nav.js ***! 19458 \**************************************/ 19459/*! exports provided: default */ 19460/***/ (function(module, __webpack_exports__, __webpack_require__) { 19461 19462"use strict"; 19463__webpack_require__.r(__webpack_exports__); 19464/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CurrentNav; }); 19465/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 19466/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! url */ "../node_modules/url/url.js"); 19467/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(url__WEBPACK_IMPORTED_MODULE_1__); 19468function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 19469function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 19470function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 19471function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 19472function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 19473function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 19474 19475 19476var defaultOptions = { 19477 targetSelector: '.js-current-nav', 19478 // å®è¡ããã»ã¬ã¯ã¿ 19479 activeClass: "is-current", 19480 // ä»ä¸ããã¯ã©ã¹ 19481 include_children: true 19482}; 19483var CurrentNav = /*#__PURE__*/function () { 19484 function CurrentNav(options) { 19485 _classCallCheck(this, CurrentNav); 19486 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 19487 this.init(); 19488 } 19489 return _createClass(CurrentNav, [{ 19490 key: "init", 19491 value: function init() { 19492 // ããã²ã¼ã·ã§ã³ã®ã¿ã¼ã²ãã 19493 this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.targetSelector); 19494 19495 // ä»ä¸ããã¯ã©ã¹ 19496 this.activeClass = this.options.activeClass; 19497 19498 // ç¾å¨ã®URLã®ãã¹ 19499 this.currentPathname = window.location.pathname; 19500 if (this.target.length === 0 || typeof this.currentPathname === "undefined") { 19501 return false; 19502 } 19503 this.run(); 19504 } 19505 19506 /** 19507 * ã¿ã¼ã²ãããã»ãã 19508 * @param selector 19509 */ 19510 }, { 19511 key: "setTarget", 19512 value: function setTarget(selector) { 19513 this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(selector); 19514 } 19515 19516 /** 19517 * ãªã»ãã 19518 */ 19519 }, { 19520 key: "reset", 19521 value: function reset() { 19522 this.target.removeClass("is-current"); 19523 } 19524 19525 /** 19526 * å®è¡ 19527 */ 19528 }, { 19529 key: "run", 19530 value: function run() { 19531 this.reset(); 19532 for (var i = this.target.length - 1; i >= 0; i--) { 19533 var href = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.target[i]).attr('href'); 19534 var href = this.isHttp(href); 19535 href = this.isIndexPage(href); 19536 if (this.isMatch(href)) { 19537 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.target[i]).addClass(this.activeClass); 19538 } 19539 } 19540 } 19541 }, { 19542 key: "isMatch", 19543 value: function isMatch(path) { 19544 path = path.replace(/^(.*(?:\.\.?))/, ''); 19545 if (this.currentPathname === path) { 19546 return true; 19547 } 19548 if (this.options.include_children === true) { 19549 if (path === "/") { 19550 return false;
19551 } 19552 if (this.currentPathname.match(path) || this.currentPathname === path) { 19553 return true; 19554 } 19555 } 19556 return false; 19557 } 19558 }, { 19559 key: "isHttp", 19560 value: function isHttp(targetHref) { 19561 var match = targetHref.match(/^http/g); 19562 if (!_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].isEmptyObject(match) && match[0] === "http") { 19563 return url__WEBPACK_IMPORTED_MODULE_1___default.a.parse(targetHref).pathname; 19564 } 19565 return targetHref; 19566 } 19567 }, { 19568 key: "isIndexPage", 19569 value: function isIndexPage(targetHref) { 19570 var targetMatch = targetHref.substr(-1, 1); 19571 var locationMatch = this.currentPathname.substr(-1, 1); 19572 if (targetMatch === "/" && locationMatch === "/") { 19573 return targetHref; 19574 } 19575 if (targetMatch === "l" && locationMatch === "/") { 19576 this.currentPathname = this.currentPathname + "index.html"; 19577 } 19578 if (targetMatch === "/" && locationMatch === "l") { 19579 return targetHref + "index.html"; 19580 } 19581 return targetHref; 19582 } 19583 }]); 19584}(); 19585 19586 19587/***/ }), 19588
19589/***/ "./assets/js/app/fixedheader.js": 19590/*!**************************************!*\ 19591 !*** ./assets/js/app/fixedheader.js ***! 19592 \**************************************/ 19593/*! exports provided: default */ 19594/***/ (function(module, __webpack_exports__, __webpack_require__) { 19595 19596"use strict"; 19597__webpack_require__.r(__webpack_exports__); 19598/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Fixedheader; }); 19599/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 19600function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 19601function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 19602function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 19603function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 19604function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 19605function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 19606/* 19607 * ==================================================================== 19608 * Grow Template 19609 * @package Grow Template 19610 * @author GrowGroup.Inc <[email protected]> 19611 * @license MIT Licence 19612 * ==================================================================== 19613 * 19614 * # example: 19615 * <header class="l-header js-fixedheader"> 19616 * Content 19617 * </header> 19618 * 19619 */ 19620 19621var defaultOptions = { 19622 selector: '.js-fixedheader', 19623 // å®è¡ããã»ã¬ã¯ã¿ 19624 offset: 50, 19625 // å®è¡ãããªãã»ãããã¯ã»ã«æ°, 19626 cssClass: ".l-global-navigation", 19627 // CSSãå®ç¾©ããã¦ããã¯ã©ã¹ 19628 activeClass: "is-fixed", 19629 // æå¹ãªæã«ä»ä¸ããã¯ã©ã¹ 19630 mobile: false // ã¢ãã¤ã«æã«ã©ãåä½ããã 19631}; 19632var Fixedheader = /*#__PURE__*/function () { 19633 function Fixedheader(options) { 19634 _classCallCheck(this, Fixedheader); 19635 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 19636 this.init(); 19637 } 19638 19639 /** 19640 * åæåãã 19641 */ 19642 return _createClass(Fixedheader, [{ 19643 key: "init", 19644 value: function init() { 19645 this.target = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector); 19646 this.isFixed = this.isFixed.bind(this); 19647 this.run = this.run.bind(this); 19648 if (screen.width > 768 && this.options.mobile || this.options.mobile === false) { 19649 window.requestAnimationFrame(this.run); 19650 } 19651 } 19652 19653 /** 19654 * å®è¡ 19655 */ 19656 }, { 19657 key: "run", 19658 value: function run() { 19659 if (this.isFixed()) { 19660 this.target.addClass(this.options.activeClass); 19661 } else { 19662 this.target.removeClass(this.options.activeClass); 19663 } 19664 window.requestAnimationFrame(this.run); 19665 } 19666 19667 /** 19668 * 夿ãã 19669 * @returns {boolean} 19670 */ 19671 }, { 19672 key: "isFixed", 19673 value: function isFixed() { 19674 // ãªãã»ããããé«ãã夿ãã 19675 return window.pageYOffset > this.options.offset ? true : false; 19676 } 19677 }]); 19678}(); 19679 19680 19681/***/ }), 19682
19683/***/ "./assets/js/app/format.js": 19684/*!*********************************!*\ 19685 !*** ./assets/js/app/format.js ***! 19686 \*********************************/ 19687/*! exports provided: default */ 19688/***/ (function(module, __webpack_exports__, __webpack_require__) { 19689 19690"use strict"; 19691__webpack_require__.r(__webpack_exports__); 19692/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 19693 19694var buildFormat = function buildFormat() { 19695 var $toc = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', { 19696 id: 'toc_container' 19697 }); 19698 var $list = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<ul />', { 19699 "class": 'toc_list' 19700 }); 19701 var $groups = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.u-format-group'); 19702 if ($groups.length === 0) { 19703 return false; 19704 } 19705 // ãã©ã¼ãããã°ã«ã¼ããã¨ã®å¦ç 19706 for (var i = 0; i < $groups.length; i++) { 19707 var $_list = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<ul />'); 19708 var $group = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($groups[i]); 19709 var group_title = $group.find('.u-format-group__title').text(); 19710 var $group_li = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<li />'); 19711 var groupid = 'formatgroup_' + (i + 1); 19712 $group.attr('id', groupid); 19713 $list.append($group_li.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<a />', { 19714 text: i + 1 + '. ' + group_title, 19715 href: '#' + groupid 19716 }))); 19717 // ãã©ã¼ããããã¨ã®å¦ç 19718 var $formats = $group.find('.u-format-group__content').find('.u-format'); 19719 var $_ul = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<ul />'); 19720 for (var m = 0; m < $formats.length; m++) { 19721 var $format = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($formats[m]); 19722 var $format_title = $format.find('.u-format__title'); 19723 var $format_content = $format.find('.u-format__content'); 19724 var formatid = 'format_' + (i + 1) + (m + 1); 19725 $format.find('.u-format__title').attr('id', formatid); 19726 var format_title = $format_title.text(); 19727 var format_number = i + 1 + '.' + (m + 1) + '. '; 19728 $format_title.text(format_number + format_title); 19729 $_ul.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<li />').append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<a />', { 19730 href: '#' + formatid, 19731 text: format_number + format_title 19732 }))); 19733 19734 // ã³ã¼ãã追å 19735 var $code = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', { 19736 "class": 'u-format__code' 19737 }); 19738 $code.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', { 19739 "class": 'u-format__code__title', 19740 text: format_number + format_title 19741 })); 19742 var formathtml = $format.find('.u-format__content').html(); 19743 $code.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<pre />', { 19744 text: formathtml.trim() 19745 })); 19746 $format.append($code); 19747 } 19748 $group_li.append($_ul); 19749 $_list.append($group_li); 19750 $list.append($_list); 19751 } 19752 $toc.append($list); 19753 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('.c-breadcrumb').after(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div />', { 19754 "class": 'l-container' 19755 }).append($toc)); 19756}; 19757/* harmony default export */ __webpack_exports__["default"] = (buildFormat); 19758 19759/***/ }), 19760
19761/***/ "./assets/js/app/heightline.js": 19762/*!*************************************!*\ 19763 !*** ./assets/js/app/heightline.js ***! 19764 \*************************************/ 19765/*! exports provided: default */ 19766/***/ (function(module, __webpack_exports__, __webpack_require__) { 19767 19768"use strict"; 19769__webpack_require__.r(__webpack_exports__); 19770/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Heightline; }); 19771/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 19772/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ "./assets/js/app/utils.js"); 19773/* harmony import */ var imagesloaded__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! imagesloaded */ "../node_modules/imagesloaded/imagesloaded.js"); 19774/* harmony import */ var imagesloaded__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(imagesloaded__WEBPACK_IMPORTED_MODULE_2__); 19775function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 19776function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 19777function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 19778function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 19779function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 19780function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 19781/* 19782 * ==================================================================== 19783 * Grow Template 19784 * @package Grow Template 19785 * @author GrowGroup.Inc <[email protected]> 19786 * @license MIT Licence 19787 * ==================================================================== 19788 * 19789 * # example: 19790 * <div class="js-heightline"></div> 19791 * <div class="js-heightline"></div> 19792 * <div class="js-heightline"></div> 19793 * 19794 * or 19795 * 19796 * <div class="c-example" data-heightline-group="example1"></div> 19797 * <div class="c-example" data-heightline-group="example1"></div> 19798 * <div class="c-example" data-heightline-group="example1"></div> 19799 * <div class="c-example" data-heightline-group="example2"></div> 19800 * <div class="c-example" data-heightline-group="example2"></div> 19801 * <div class="c-example" data-heightline-group="example2"></div> 19802 * 19803 */ 19804 19805 19806 19807imagesloaded__WEBPACK_IMPORTED_MODULE_2___default.a.makeJQueryPlugin(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 19808var util = new _utils_js__WEBPACK_IMPORTED_MODULE_1__["default"](); 19809var defaultOptions = { 19810 columns: 3, 19811 selector: ".js-heightline", 19812 dataAttribute: "heightline-group", 19813 property: "minHeight", 19814 // or min-height 19815 mobile: true, 19816 responsive: { 19817 "640": { 19818 columns: 2 19819 } 19820 } 19821}; 19822var Heightline = /*#__PURE__*/function () { 19823 /** 19824 * åæå 19825 * @param options 19826 */ 19827 function Heightline(options) { 19828 _classCallCheck(this, Heightline); 19829 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 19830 this.init(); 19831 } 19832 19833 /** 19834 * åæå 19835 */ 19836 return _createClass(Heightline, [{ 19837 key: "init",
19838 value: function init() { 19839 var _this = this; 19840 // ã¿ã¼ã²ããã¨ãªãè¦ç´ ãã»ãããã 19841 19842 this.elements = document.querySelectorAll(this.options.selector); 19843 this.bulkElements = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("*[data-" + this.options.dataAttribute + "]"); 19844 // æå¤§ã®é«ããæ ¼ç´ 19845 this.maxHeight = 0; 19846 this.currentColumns = 0; 19847 this.setResposiveOption(); 19848 if (this.options.mobile === false && util.isMobile()) { 19849 return false; 19850 } 19851 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector + "," + "*[data-" + this.options.dataAttribute + "]").imagesLoaded(function () { 19852 _this.run(); 19853 _this.bulkRun(); 19854 }); 19855 } 19856 19857 /** 19858 * ã¬ã¹ãã³ã·ãã®è¨å® 19859 */ 19860 }, { 19861 key: "setResposiveOption", 19862 value: function setResposiveOption() { 19863 if (this.options.responsive) { 19864 for (var width in this.options.responsive) { 19865 if (screen.width < width) { 19866 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(this.options.responsive[width], this.options); 19867 } 19868 } 19869 } 19870 } 19871 19872 /** 19873 * å®è¡ãã 19874 */ 19875 }, { 19876 key: "run", 19877 value: function run() { 19878 var tempElements = []; 19879 var currentColumns = 0; 19880 var columns = this.options.columns; 19881 for (var i = 0; i < this.elements.length; i++) { 19882 var element = this.elements[i]; 19883 if (this.maxHeight < element.clientHeight) { 19884 this.maxHeight = element.clientHeight; 19885 } 19886 element.originalHeight = element.clientHeight; 19887 tempElements.push(element); 19888 currentColumns++; 19889 // ã«ã©ã ãå¤å®ããæå¾ã®ã«ã©ã ã ã£ããå®è¡ãã 19890 if (columns && (currentColumns % columns === 0 || i + 1 === this.elements.length)) { 19891 for (var it = 0; it < tempElements.length; it++) { 19892 tempElements[it].style[this.options.property] = this.maxHeight + "px"; 19893 } 19894 this.maxHeight = 0; 19895 tempElements = []; 19896 } 19897 } 19898 19899 // ã«ã©ã ãæå®ããã¦ããªãæ 19900 if (typeof columns === "undefined" || columns) { 19901 for (var i = 0; i < this.elements.length; i++) { 19902 this.elements[i].style[this.options.property] = this.maxHeight + "px"; 19903 } 19904 } 19905 } 19906 19907 /** 19908 * ãã¼ã¿å±æ§ã®ã°ã«ã¼ãã«å¿ãã¦é«ãããããã 19909 */ 19910 }, { 19911 key: "bulkRun", 19912 value: function bulkRun() { 19913 var els = {}; 19914 var elColumn = this.options.columns; 19915 var self = this; 19916 for (var i = 0; i < this.bulkElements.length; i++) { 19917 var el = this.bulkElements[i]; 19918 var groupKey = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el).data(this.options.dataAttribute); 19919 var groupcolumns = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el).data("heightline-column"); 19920 if (!_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].isArray(els[groupKey])) { 19921 els[groupKey] = []; 19922 } 19923 if (typeof groupcolumns === "undefined") { 19924 groupcolumns = elColumn; 19925 } 19926 els[groupKey].push({ 19927 columns: groupcolumns, 19928 el: el 19929 }); 19930 } 19931 for (var key in els) { 19932 var tempElements = []; 19933 var currentColumns = 0; 19934 var columns; 19935 var groupEl = els[key]; 19936 for (var gi = 0; gi < groupEl.length; gi++) { 19937 var singleEl = groupEl[gi].el; 19938 if (this.maxHeight < singleEl.clientHeight) { 19939 this.maxHeight = singleEl.clientHeight; 19940 } 19941 singleEl.originalHeight = singleEl.clientHeight; 19942 tempElements.push(singleEl); 19943 columns = groupEl[gi].columns; 19944 currentColumns++; 19945 if (columns && (currentColumns % columns === 0 || i + 1 === tempElements.length)) { 19946 for (var it = 0; it < tempElements.length; it++) { 19947 tempElements[it].style[this.options.property] = this.maxHeight + "px"; 19948 } 19949 this.maxHeight = 0; 19950 tempElements = []; 19951 } 19952 } 19953 if (typeof columns === "undefined" || columns) { 19954 for (var gi = 0; gi < tempElements.length; gi++) { 19955 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(tempElements[gi]).css(this.options.property, this.maxHeight + "px"); 19956 } 19957 } 19958 this.maxHeight = 0; 19959 } 19960 } 19961 19962 /** 19963 * ãªã»ãã 19964 */ 19965 }, { 19966 key: "reset", 19967 value: function reset() { 19968 for (var i = 0; i < this.elements.length; i++) { 19969 this.elements[i].style[this.options.property] = this.elements[i].originalHeight + "px"; 19970 } 19971 } 19972 }]); 19973}(); 19974 19975 19976/***/ }), 19977
19978/***/ "./assets/js/app/jquery-shim.js": 19979/*!**************************************!*\ 19980 !*** ./assets/js/app/jquery-shim.js ***! 19981 \**************************************/ 19982/*! exports provided: default */ 19983/***/ (function(module, __webpack_exports__, __webpack_require__) { 19984 19985"use strict"; 19986__webpack_require__.r(__webpack_exports__); 19987/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery) {var $ = __webpack_provided_window_dot_jQuery; 19988/* harmony default export */ __webpack_exports__["default"] = ($); 19989/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "../node_modules/jquery/dist/jquery.js"))) 19990 19991/***/ }), 19992
19993/***/ "./assets/js/app/responsive-table.js": 19994/*!*******************************************!*\ 19995 !*** ./assets/js/app/responsive-table.js ***! 19996 \*******************************************/ 19997/*! exports provided: default */ 19998/***/ (function(module, __webpack_exports__, __webpack_require__) { 19999 20000"use strict"; 20001__webpack_require__.r(__webpack_exports__); 20002/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ResponsiveTable; }); 20003/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 20004function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 20005function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 20006function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 20007function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 20008function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 20009function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 20010/* 20011 * ==================================================================== 20012 * Grow Template 20013 * @package Grow Template 20014 * @author GrowGroup.Inc <[email protected]> 20015 * @license MIT Licence 20016 * ==================================================================== 20017 * 20018 * # example: 20019 * <table class="c-table js-table"> 20020 * <tbody> 20021 * <tr> 20022 * <th> 20023 * title 20024 * </th> 20025 * <td> 20026 * content 20027 * </td> 20028 * </tr> 20029 * </tbody> 20030 * </table> 20031 * 20032 */ 20033 20034var defaultOptions = { 20035 selector: ".js-table,.tablepress" 20036}; 20037var ResponsiveTable = /*#__PURE__*/function () { 20038 function ResponsiveTable(options) { 20039 _classCallCheck(this, ResponsiveTable); 20040 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 20041 this.init(); 20042 } 20043 20044 /** 20045 * åæå 20046 */ 20047 return _createClass(ResponsiveTable, [{ 20048 key: "init", 20049 value: function init() { 20050 this.tables = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector); 20051 this.run(); 20052 } 20053 20054 /** 20055 * å®è¡ 20056 */ 20057 }, { 20058 key: "run", 20059 value: function run() { 20060 for (var i = 0; i < this.tables.length; i++) { 20061 var wrapper = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div class="js-responsive-table"></div>'); 20062 var table = this.tables[i]; 20063 wrapper.append(Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(table).clone()); 20064 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(table).after(wrapper); 20065 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(table).remove(); 20066 } 20067 } 20068 }]); 20069}(); 20070 20071 20072/***/ }), 20073
20074/***/ "./assets/js/app/slidebar.js": 20075/*!***********************************!*\ 20076 !*** ./assets/js/app/slidebar.js ***! 20077 \***********************************/ 20078/*! exports provided: default */ 20079/***/ (function(module, __webpack_exports__, __webpack_require__) { 20080 20081"use strict"; 20082__webpack_require__.r(__webpack_exports__); 20083/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Slidebar; }); 20084/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 20085function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 20086function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 20087function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 20088function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 20089function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 20090function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 20091/* 20092 * ==================================================================== 20093 * Grow Template 20094 * @package Grow Template 20095 * @author GrowGroup.Inc <[email protected]> 20096 * @license MIT Licence 20097 * ==================================================================== 20098 * 20099 * # example: 20100 * 20101 * <div class="js-slidebar-menu"> 20102 * <ul> 20103 * <li>menu</li> 20104 * <li>menu</li> 20105 * <li>menu</li> 20106 * </ul> 20107 * </div> 20108 * 20109 * <a href="#" class="js-slidebar-button"><i class="fa fa-bars"></i></a> 20110 * 20111 * <div class="js-slidebar-container"> 20112 * content 20113 * </div> 20114 * 20115 */ 20116 20117 20118 20119/** 20120 * ããã©ã«ããªãã·ã§ã³ 20121 * @type {{}} 20122 */ 20123var defaultOptions = { 20124 containerSelector: '.js-slidebar-container', 20125 buttonSelector: '.js-slidebar-button', 20126 menuSelector: '.js-slidebar-menu', 20127 slideSpeed: 500 20128}; 20129var Slidebar = /*#__PURE__*/function () { 20130 function Slidebar(options) { 20131 _classCallCheck(this, Slidebar); 20132 // ãªãã·ã§ã³ãã»ãã 20133 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(defaultOptions, options); 20134 // ãªã¼ãã³ 20135 this.isActive = false; 20136 this.init(); 20137 } 20138 20139 /** 20140 * åæå 20141 */ 20142 return _createClass(Slidebar, [{ 20143 key: "init", 20144 value: function init() { 20145 this.menu = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.menuSelector); 20146 this.button = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.buttonSelector); 20147 this.container = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.containerSelector); 20148 this.trigger(); 20149 this.bodyTrigger(); 20150 this.toggle = this.toggle.bind(this); 20151 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("body").addClass('slidebar-init'); 20152 } 20153 20154 /** 20155 * ã¯ãªãã¯æã®ããªã¬ã¼ 20156 */ 20157 }, { 20158 key: "trigger", 20159 value: function trigger() { 20160 var self = this; 20161 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(document).on('click', this.options.buttonSelector, function (e) { 20162 e.preventDefault();
20163 self.toggle(); 20164 }); 20165 } 20166 20167 /** 20168 * ééåä½ 20169 */ 20170 }, { 20171 key: "toggle", 20172 value: function toggle() { 20173 if (this.isActive === false) { 20174 this.open(); 20175 } else { 20176 this.close(); 20177 } 20178 } 20179 }, { 20180 key: "bodyTrigger", 20181 value: function bodyTrigger() { 20182 var self = this; 20183 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(document).on('click', this.options.containerSelector, function (e) { 20184 if (self.isActive) { 20185 self.close(); 20186 } 20187 }); 20188 } 20189 }, { 20190 key: "open", 20191 value: function open() { 20192 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("body").addClass('is-slidebar-active'); 20193 this.isActive = true; 20194 } 20195 }, { 20196 key: "close", 20197 value: function close() { 20198 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])("body").removeClass('is-slidebar-active'); 20199 this.isActive = false; 20200 } 20201 }]); 20202}(); 20203 20204 20205/***/ }), 20206
20207/***/ "./assets/js/app/tab.js": 20208/*!******************************!*\ 20209 !*** ./assets/js/app/tab.js ***! 20210 \******************************/ 20211/*! exports provided: default */ 20212/***/ (function(module, __webpack_exports__, __webpack_require__) { 20213 20214"use strict"; 20215__webpack_require__.r(__webpack_exports__); 20216/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Tab; }); 20217/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 20218function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 20219function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 20220function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 20221function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 20222function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 20223function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 20224/* 20225 * ==================================================================== 20226 * Grow Template 20227 * @package Grow Template 20228 * @author GrowGroup.Inc <[email protected]> 20229 * @license MIT Licence 20230 * ==================================================================== 20231 */ 20232 20233var defaultOptions = { 20234 selector: '.js-tabs', 20235 // å®è¡ããã¿ããå æ¬ããã»ã¬ã¯ã¿ 20236 activeClass: 'is-active', 20237 // æå¹æã«ä»ä¸ãã class 20238 navsClass: '.c-tabs__navs,.js-tabs-nav', 20239 // ããã²ã¼ã·ã§ã³ã®ã¯ã©ã¹ 20240 navTargetAttr: 'data-tab-target', 20241 paneNameAttr: 'data-tab-name', 20242 paneClass: '.c-tabs__content,.js-tabs-content' 20243}; 20244var Tab = /*#__PURE__*/function () { 20245 function Tab(options) { 20246 _classCallCheck(this, Tab); 20247 this.$tabs = null; 20248 this.options = _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].extend(options, defaultOptions); 20249 this.init(); 20250 } 20251 20252 /** 20253 * åæå 20254 */ 20255 return _createClass(Tab, [{ 20256 key: "init", 20257 value: function init() { 20258 this.$tabs = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.options.selector); 20259 for (var i = 0; i < this.$tabs.length; i++) { 20260 var $tab = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.$tabs[i]); 20261 var $navs = $tab.find('*[' + this.options.navTargetAttr + ']'); 20262 var $panes = $tab.find('*[' + this.options.paneNameAttr + ']'); 20263 if (!$navs.eq(0).hasClass(this.options.activeClass)) { 20264 $navs.eq(0).addClass(this.options.activeClass); 20265 } 20266 if (!$panes.eq(0).hasClass(this.options.activeClass)) { 20267 $panes.eq(0).addClass(this.options.activeClass); 20268 } 20269 this.onClick($navs, $panes); 20270 } 20271 } 20272 20273 /** 20274 * ã¯ãªãã¯æã®åä½ 20275 */ 20276 }, { 20277 key: "onClick", 20278 value: function onClick($navs, $panes) { 20279 var self = this; 20280 $navs.on('click', function (e) { 20281 e.preventDefault(); 20282 $panes.removeClass(self.options.activeClass); 20283 $navs.removeClass(self.options.activeClass); 20284 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).addClass(self.options.activeClass); 20285 var targetName = Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).attr(self.options.navTargetAttr); 20286 for (var i = 0; i < $panes.length; i++) { 20287 if (targetName === Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($panes[i]).attr(self.options.paneNameAttr)) { 20288 Object(_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"])($panes[i]).addClass(self.options.activeClass); 20289 } 20290 } 20291 }); 20292 } 20293 }]); 20294}(); 20295 20296 20297/***/ }), 20298
20299/***/ "./assets/js/app/utils.js": 20300/*!********************************!*\ 20301 !*** ./assets/js/app/utils.js ***! 20302 \********************************/ 20303/*! exports provided: default */ 20304/***/ (function(module, __webpack_exports__, __webpack_require__) { 20305 20306"use strict"; 20307__webpack_require__.r(__webpack_exports__); 20308/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Utils; }); 20309/* harmony import */ var _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery-shim.js */ "./assets/js/app/jquery-shim.js"); 20310function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 20311function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 20312function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 20313function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 20314function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 20315function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 20316/* 20317 * ==================================================================== 20318 * Grow Template 20319 * @package Grow Template 20320 * @author GrowGroup.Inc <[email protected]> 20321 * @license MIT Licence 20322 * ==================================================================== 20323 */ 20324 20325 20326var toString = Object.prototype.toString; 20327var nativeIsArray = Array.isArray; 20328var nativeKeys = Object.keys; 20329var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; 20330var Utils = /*#__PURE__*/function () { 20331 function Utils() { 20332 var _this = this; 20333 _classCallCheck(this, Utils); 20334 _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function (key, name) { 20335 _this['is' + name] = function (obj) { 20336 return toString.call(obj) === '[object ' + name + ']'; 20337 }; 20338 }); 20339 } 20340 20341 /** 20342 * åä½ã夿 20343 * @param i 20344 * @param units 20345 */ 20346 return _createClass(Utils, [{ 20347 key: "unit", 20348 value: function unit(i, units) { 20349 if (typeof i === "string" && !i.match(/^[\-0-9\.]+$/)) { 20350 return i; 20351 } else { 20352 return "" + i + units; 20353 } 20354 } 20355 20356 /** 20357 * 20358 * é åãã©ãã 20359 * @param collection 20360 * @returns {boolean} 20361 */ 20362 }, { 20363 key: "isArrayLike", 20364 value: function isArrayLike(collection) { 20365 var length = collection.length; 20366 return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; 20367 } 20368 20369 /** 20370 * ãªãã¸ã§ã¯ããã©ãã 20371 * @param obj 20372 * @returns {boolean} 20373 */ 20374 }, { 20375 key: "isObject", 20376 value: function isObject(obj) { 20377 var type = _typeof(obj); 20378 return type === 'function' || type === 'object' && !!obj; 20379 } 20380 20381 /** 20382 * é åãå¤å¥ 20383 * @type {*|Function} 20384 */ 20385 }, { 20386 key: "isArray", 20387 value: function isArray(obj) { 20388 return nativeIsArray || function (obj) { 20389 return toString.call(obj) === '[object Array]'; 20390 }; 20391 } 20392 }, { 20393 key: "keys", 20394 value: function keys(obj) { 20395 if (!this.isObject(obj)) return []; 20396 if (nativeKeys) return nativeKeys(obj); 20397 var keys = []; 20398 for (var key in obj) if (_jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].inArray(obj, key)) keys.push(key); 20399 return keys; 20400 } 20401 20402 /** 20403 * ãªãã¸ã§ã¯ãã空ãã©ãã夿 20404 * @param obj 20405 * @returns {boolean} 20406 */ 20407 }, { 20408 key: "isEmpty", 20409 value: function isEmpty(obj) { 20410 if (obj == null) return true; 20411 if (this.isArrayLike(obj) && (this.isArray(obj) || this.isString(obj) || this.isArguments(obj))) return obj.length === 0; 20412 return this.keys(obj).length === 0; 20413 } 20414 }, { 20415 key: "isMobile", 20416 value: function isMobile() { 20417 var ua = navigator.userAgent; 20418 if (screen.width < 768) { 20419 return true; 20420 } 20421 var isMobile = { 20422 Android: function Android() { 20423 return ua.match(/Android/i); 20424 }, 20425 BlackBerry: function BlackBerry() { 20426 return ua.match(/BlackBerry/i); 20427 }, 20428 iPhone: function iPhone() { 20429 return ua.match(/iPhone/i); 20430 }, 20431 Opera: function Opera() { 20432 return ua.match(/Opera Mini/i); 20433 }, 20434 Windows: function Windows() { 20435 return ua.match(/IEMobile/i); 20436 }, 20437 any: function any() { 20438 return isMobile.Android() || isMobile.BlackBerry() || isMobile.iPhone() || isMobile.Opera() || isMobile.Windows(); 20439 } 20440 }; 20441 if (!this.isEmpty(isMobile.any())) { 20442 return true; 20443 } 20444 return false;
20445 } 20446 20447 /** 20448 * ã¯ã¨ãªããã¼ã¹ 20449 * @param string 20450 * @returns {{}} 20451 */ 20452 }, { 20453 key: "parseQueryString", 20454 value: function parseQueryString(string) { 20455 var parsed = {}; 20456 string = string !== undefined ? string : window.location.search; 20457 if (typeof string === "string" && string.length > 0) { 20458 if (string[0] === '?') { 20459 string = string.substring(1); 20460 } 20461 string = string.split('&'); 20462 for (var i = 0, length = string.length; i < length; i++) { 20463 var element = string[i], 20464 eqPos = element.indexOf('='), 20465 keyValue, 20466 elValue; 20467 if (eqPos >= 0) { 20468 keyValue = element.substr(0, eqPos); 20469 elValue = element.substr(eqPos + 1); 20470 } else { 20471 keyValue = element; 20472 elValue = ''; 20473 } 20474 elValue = decodeURIComponent(elValue); 20475 if (parsed[keyValue] === undefined) { 20476 parsed[keyValue] = elValue; 20477 } else if (parsed[keyValue] instanceof Array) { 20478 parsed[keyValue].push(elValue); 20479 } else { 20480 parsed[keyValue] = [parsed[keyValue], elValue]; 20481 } 20482 } 20483 } 20484 return parsed; 20485 } 20486 20487 /** 20488 * ã¯ã¨ãªãæå®ãããã¼ããåå¾ãã 20489 * @param key 20490 * @param string 20491 * @returns {boolean} 20492 */ 20493 }, { 20494 key: "getQueryString", 20495 value: function getQueryString(key, string) { 20496 var string = string !== undefined ? string : window.location.search; 20497 var queries = this.parseQueryString(); 20498 var match = false; 20499 _jquery_shim_js__WEBPACK_IMPORTED_MODULE_0__["default"].each(queries, function (qkey, value) { 20500 if (key === qkey) { 20501 match = value; 20502 return false; 20503 } 20504 }); 20505 return match; 20506 } 20507 }, { 20508 key: "requestAnimationFrame", 20509 value: function requestAnimationFrame() { 20510 var requestAnimFrame = window.requestAnimationFrame; 20511 var lastTime = Date.now(); 20512 if (this.isMobile() || !requestAnimFrame) { 20513 requestAnimFrame = function requestAnimFrame(callback) { 20514 var deltaTime = Date.now() - lastTime; 20515 var delay = Math.max(0, 1000 / 60 - deltaTime); 20516 return window.setTimeout(function () { 20517 lastTime = Date.now(); 20518 callback(); 20519 }, delay); 20520 }; 20521 } 20522 return requestAnimFrame; 20523 } 20524 }]); 20525}(); 20526 20527 20528/***/ })
20528, 20529 20530/***/ 0: 20531/*!********************************!*\ 20532 !*** ./util.inspect (ignored) ***! 20533 \********************************/ 20534/*! no static exports found */ 20535/***/ (function(module, exports) { 20536 20537/* (ignored) */ 20538 20539/***/ }) 20540 20541/******/ }); 20542//# sourceMappingURL=app.js.map
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.