vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ "./
4Resources/Private/JavaScript/language-switch.js": 5/*!*********************************************************!*\ 6 !*** ./Resources/Private/JavaScript/language-switch.js ***! 7 \*********************************************************/ 8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 9 10"use strict"; 11__webpack_require__.r(__webpack_exports__); 12/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 13/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 14 15 16(function ($) { 17 document 18 .getElementById('country-switcher') 19 .addEventListener('change', switcher); 20 21 document 22 .getElementById('submit-switch-language') 23 .addEventListener('click', switchLanguage); 24 25 const languageSwitcher = document.getElementById( 26 'language-switcher' 27 ); 28 29 function switcher(e) { 30 console.log(languageSwitcher); 31 for (let language of languageSwitcher) { 32 if ( 33 language.getAttribute('data-market') == 34 e.target.options[e.target.selectedIndex].text 35 ) { 36 language.classList.remove('hide'); 37 } else { 38 language.classList.add('hide'); 39 } 40 } 41 42 // Setze die erste sichtbare Option als ausgewählt 43 languageSwitcher.value = Array.from( 44 languageSwitcher.options 45 ).find((option) => !option.classList.contains('hide')).value; 46 } 47 48 function switchLanguage(e) { 49 window.location.href = languageSwitcher.value; 50 } 51 52 $('.open-popup-link').magnificPopup({ 53 type: 'inline', 54 midClick: true, // Allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source in href. 55 }); 56})((jquery__WEBPACK_IMPORTED_MODULE_0___default())); 57 58 59/***/ }), 60
61/***/ "./Resources/Private/JavaScript/main.js": 62/*!**********************************************!*\ 63 !*** ./Resources/Private/JavaScript/main.js ***! 64 \**********************************************/ 65/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 66 67"use strict"; 68__webpack_require__.r(__webpack_exports__); 69/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.esm.js"); 70/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 71/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__); 72/* harmony import */ var aos__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! aos */ "./node_modules/aos/dist/aos.js"); 73/* harmony import */ var aos__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(aos__WEBPACK_IMPORTED_MODULE_2__); 74/* harmony import */ var magnific_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! magnific-popup */ "./node_modules/magnific-popup/dist/jquery.magnific-popup.js"); 75/* harmony import */ var magnific_popup__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(magnific_popup__WEBPACK_IMPORTED_MODULE_3__); 76/* harmony import */ var _module_powermail__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./module/powermail */ "./Resources/Private/JavaScript/module/powermail.js"); 77/* harmony import */ var _module_newsletter_contact__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./module/newsletter-contact */ "./Resources/Private/JavaScript/module/newsletter-contact.js"); 78/* harmony import */ var _language_switch_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./language-switch.js */ "./Resources/Private/JavaScript/language-switch.js"); 79// Import all of Bootstrap's JS 80 81 82 83 84 85 86 87globalThis = globalThis || window; 88 89//make it global 90globalThis.AOS = (aos__WEBPACK_IMPORTED_MODULE_2___default()); 91globalThis.bootstrap = bootstrap__WEBPACK_IMPORTED_MODULE_0__; 92globalThis.jQuery = globalThis.$ = (jquery__WEBPACK_IMPORTED_MODULE_1___default()); 93 94/** 95 * setup the html allow list for bootstrap e.g. tooltip 96 */ 97function tooltipAllowList() { 98 var myDefaultAllowList = bootstrap__WEBPACK_IMPORTED_MODULE_0__.Tooltip.Default.allowList; 99 // To allow table elements 100 myDefaultAllowList.table = ['class']; 101 myDefaultAllowList.td = []; 102 myDefaultAllowList.tbody = []; 103 myDefaultAllowList.tr = []; 104 myDefaultAllowList.th = []; 105} 106 107//load "sub modules" 108 109 110function scrollFunction() { 111 let scrollTop = 112 document.body.scrollTop || document.documentElement.scrollTop; 113 if (scrollTop > 80) { 114 document.documentElement.classList.add('small-navbar'); 115 } else if (scrollTop < 10) { 116 document.documentElement.classList.remove('small-navbar'); 117 } 118} 119window.addEventListener('scroll', scrollFunction); 120jquery__WEBPACK_IMPORTED_MODULE_1___default()(($) => { 121 aos__WEBPACK_IMPORTED_MODULE_2___default().init({ easing: 'ease-in-out-sine' }); 122 tooltipAllowList(); 123 const tooltipTriggerList = document.querySelectorAll( 124 '[data-bs-toggle="tooltip"]' 125 ); 126 const tooltipList = [...tooltipTriggerList].map( 127 (tooltipTriggerEl) => new bootstrap__WEBPACK_IMPORTED_MODULE_0__.Tooltip(tooltipTriggerEl) 128 ); 129 _module_powermail__WEBPACK_IMPORTED_MODULE_4__["default"].init(); 130 131 /*** Cookie-Einstellungen Link manipulieren, da im Backend kein Javascript Link gespeichert werden kann! ***/ 132 if (jQuery("a[href*='#ccm-cookie-widget']")) { 133 jQuery("a[href*='#ccm-cookie-widget']") 134 .attr('onclick', 'CCM.openWidget();return false;') 135 .attr('href', '#'); 136 } 137}); 138 139document.addEventListener('DOMContentLoaded', function () { 140 let activeFormClass = null; // Merken, welches Formular aktiv war 141 142 // Conversion-Zuordnung zu Formularen 143 const formConversionMap = { 144 powermail_form_2: function () { 145 console.log('form2'); 146 // Pushen eines benutzerdefinierten Events in den dataLayer 147 window.dataLayer = window.dataLayer || []; 148 dataLayer.push({ 149 event: 'kontaktformular_express_2', 150 }); 151 }, 152 powermail_form_3: function () { 153 console.log('form3'); 154 // Pushen eines benutzerdefinierten Events in den dataLayer 155 window.dataLayer = window.dataLayer || []; 156 dataLayer.push({ 157 event: 'kontaktformular_express_1', 158 }); 159 }, 160 powermail_form_11: function () { 161 console.log('form11'); 162 // Pushen eines benutzerdefinierten Events in den dataLayer 163 window.dataLayer = window.dataLayer || []; 164 dataLayer.push({ 165 event: 'kontaktformular_konfigurator_2', 166 }); 167 }, 168 powermail_form_14: function () { 169 console.log('form14'); 170 // Pushen eines benutzerdefinierten Events in den dataLayer 171 window.dataLayer = window.dataLayer || []; 172 dataLayer.push({ 173 event: 'kontaktformular_konfigurator_1', 174 }); 175 }, 176 }; 177 178 // Beim Klick auf einen Submit-Button merken wir uns, welches Formular es war 179 document 180 .querySelectorAll('form.powermail_form') 181 .forEach(function (form) { 182 const classList = Array.from(form.classList);
183 const knownClass = classList.find((cls) => 184 cls.startsWith('powermail_form_') 185 ); 186 187 const submitButton = form.querySelector('input[type="submit"]'); 188 if (submitButton && knownClass) { 189 submitButton.addEventListener('click', function () { 190 activeFormClass = knownClass; 191 }); 192 } 193 }); 194 195 // Beobachte den DOM nach dem div.powermail_create 196 const observer = new MutationObserver(function (mutations) { 197 mutations.forEach(function (mutation) { 198 // Ãberprüfe, ob das div.powermail_create jetzt im DOM vorhanden ist 199 if (mutation.type === 'childList') { 200 const powermailCreateDiv = document.querySelector( 201 '.powermail_create' 202 ); 203 204 if ( 205 powermailCreateDiv && 206 activeFormClass && 207 formConversionMap[activeFormClass] 208 ) { 209 formConversionMap[activeFormClass](); // passendes Tracking auslösen 210 activeFormClass = null; // zurücksetzen 211 } 212 } 213 }); 214 }); 215 216 // Starte die Beobachtung des gesamten Body, um das div.powermail_create zu finden 217 observer.observe(document.body, { 218 childList: true, 219 subtree: true, 220 }); 221 222 const modelModals = document.querySelectorAll('.model3d-iframe'); 223 224 modelModals.forEach((el) => { 225 const modalEl = document.getElementById(el.dataset.modalId); 226 const containerEl = document.getElementById( 227 el.getAttribute('id') 228 ); 229 modalEl.addEventListener('show.bs.modal', () => { 230 if (!containerEl.querySelector('iframe')) { 231 const iframe = document.createElement('iframe'); 232 let data = el.dataset.iframeData ? JSON.parse(el.dataset.iframeData) : {}; 233 iframe.src = el.dataset.iframeSrc; 234 iframe.name = el.dataset.iframeName; 235 iframe.style = el.dataset.iframeStyle; 236 iframe.innerHTML = "<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen:<br>"; 237 iframe.innerHTML+= "Sie können die eingebettete Seite über den folgenden Verweis aufrufen:<br>"; 238 iframe.innerHTML+= "<a class='video-btn' href='" + data?.button2?.url + "'>" + data?.button2?.text + "</a></p>"; 239 containerEl.replaceWith(iframe); 240 } 241 }); 242 }); 243}); 244 245 246/***/ }), 247
248/***/ "./Resources/Private/JavaScript/module/newsletter-contact.js": 249/*!*******************************************************************!*\ 250 !*** ./Resources/Private/JavaScript/module/newsletter-contact.js ***! 251 \*******************************************************************/ 252/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 253 254"use strict"; 255__webpack_require__.r(__webpack_exports__); 256/* harmony export */ __webpack_require__.d(__webpack_exports__, { 257/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 258/* harmony export */ }); 259/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 260/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 261 262class NewsletterContact { 263 constructor() { 264 jquery__WEBPACK_IMPORTED_MODULE_0___default()(function() { 265 console.log( jquery__WEBPACK_IMPORTED_MODULE_0___default()('.frame-layout-main-two-cols-collapse .powermail_fieldset.powermail_fieldset_66')); 266 jquery__WEBPACK_IMPORTED_MODULE_0___default()('.frame-layout-main-two-cols-collapse .powermail_fieldset.powermail_fieldset_66').each(function () { 267 console.log('BUILD ACCORDION'); 268 let $fieldset = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this); 269 let $legendText = $fieldset.find('legend').text(); 270 let $accordion = jquery__WEBPACK_IMPORTED_MODULE_0___default()(`<div class="accordion" id="accordionFormCollapse"> 271 <div class="accordion-item"> 272 <h2 class="accordion-header"> 273 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseAdditionalInformation" aria-expanded="false" aria-controls="collapseAdditionalInformation"> 274 ${$legendText} 275 </button> 276 </h2> 277 <div id="collapseAdditionalInformation" class="accordion-collapse collapse collapsed" data-bs-parent="#accordionFormCollapse"> 278 <div class="accordion-body"> 279 </div> 280 </div> 281 </div> 282 </div>`); 283 $accordion.insertAfter($fieldset); 284 $fieldset.appendTo($accordion.find('.accordion-body') ); 285 $fieldset.find('legend').hide(); 286 287 }); 288 }); 289 } 290} 291 292let newsletterContact = new NewsletterContact(); 293/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (newsletterContact); 294 295/***/ }), 296
297/***/ "./Resources/Private/JavaScript/module/powermail.js": 298/*!**********************************************************!*\ 299 !*** ./Resources/Private/JavaScript/module/powermail.js ***! 300 \**********************************************************/ 301/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 302 303"use strict"; 304__webpack_require__.r(__webpack_exports__); 305/* harmony export */ __webpack_require__.d(__webpack_exports__, { 306/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 307/* harmony export */ }); 308class PowermailExtention { 309 310 #forms; 311 312 constructor() { 313 314 } 315 init() { 316 this.#forms = document.querySelectorAll('.powermail_form'); 317 /* document.querySelectorAll('.g-recaptcha').forEach((el, index) => { 318 let widgetId = grecaptcha.render(el, { 319 'sitekey': el.getAttribute('data-sitekey') 320 }); 321 el.setAttribute('data-widget-id', widgetId); // Speichert die ID für spätere Verwendung 322 });*/ 323 this.#forms.forEach(function(form) { 324 let formValidation = form.powermailFormValidation; 325 326 formValidation.addValidator('grecaptcha', function(field) { 327 let $form = $(field).closest('form'); // Dem Formular zuordnen 328 // Ãberprüfen, ob das aktuelle Feld das reCAPTCHA-Feld ist 329 if ( (field.hasAttribute('name') && field.getAttribute('name') === 'g-recaptcha-response') 330 // oder ob es das letzte Eingabefeld im Formular ist und kein reCAPTCHA-Feld vorhanden ist 331 || $(field).is($form.find('input').last()) && $form.find('[name="g-recaptcha-response"]').length == 0) { 332 333 console.log("grecaptcha field:", field); 334 // Die Widget-ID des reCAPTCHA holen 335 let widgetId = $form.find('.g-recaptcha').attr('data-widget-id'); 336 337 console.log('widgetId:', widgetId, $form.find('.g-recaptcha')); 338 if (typeof grecaptcha !== "undefined" && typeof grecaptcha.getResponse == "function" && grecaptcha.getResponse(widgetId).length !== 0) { 339 console.log("reCAPTCHA resolved for form:", $form); 340 $form.find(".g-recaptcha iframe").css("border", "none"); 341 return false; // Validierung erfolgreich 342 } else { 343 console.log("No captcha for form:", $form); 344 $(field).attr('data-powermail-grecaptcha-message', 'reCAPTCHA validation failed'); 345 $form.find(".g-recaptcha iframe").css("border", "4px solid var(--pm-red)"); 346 $form.find(".recaptcha-placeholder").css("border", "4px solid var(--pm-red)"); 347 return true; // Validierung schlägt fehl 348 } 349 } 350 return false; // Falls das Feld nicht `g-recaptcha-response` ist 351 }); 352 }); 353 } 354} 355let powermail = new PowermailExtention(); 356/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (powermail); 357 358/***/ }), 359
vendor: 9,944 bytes, lines 360-583
360/***/ "./node_modules/@popperjs/core/lib/createPopper.js": 361/*!*********************************************************!*\ 362 !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! 363 \*********************************************************/ 364/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 365 366"use strict"; 367__webpack_require__.r(__webpack_exports__); 368/* harmony export */ __webpack_require__.d(__webpack_exports__, { 369/* harmony export */ createPopper: () => (/* binding */ createPopper), 370/* harmony export */ detectOverflow: () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]), 371/* harmony export */ popperGenerator: () => (/* binding */ popperGenerator) 372/* harmony export */ }); 373/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js"); 374/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 375/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); 376/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 377/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js"); 378/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js"); 379/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js"); 380/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 381/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 382 383 384 385 386 387 388 389 390 391var DEFAULT_OPTIONS = { 392 placement: 'bottom', 393 modifiers: [], 394 strategy: 'absolute' 395}; 396 397function areValidElements() { 398 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 399 args[_key] = arguments[_key]; 400 } 401 402 return !args.some(function (element) { 403 return !(element && typeof element.getBoundingClientRect === 'function'); 404 }); 405} 406 407function popperGenerator(generatorOptions) { 408 if (generatorOptions === void 0) { 409 generatorOptions = {}; 410 } 411 412 var _generatorOptions = generatorOptions, 413 _generatorOptions$def = _generatorOptions.defaultModifiers, 414 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 415 _generatorOptions$def2 = _generatorOptions.defaultOptions, 416 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 417 return function createPopper(reference, popper, options) { 418 if (options === void 0) { 419 options = defaultOptions; 420 } 421 422 var state = { 423 placement: 'bottom', 424 orderedModifiers: [], 425 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 426 modifiersData: {}, 427 elements: { 428 reference: reference, 429 popper: popper 430 }, 431 attributes: {}, 432 styles: {} 433 }; 434 var effectCleanupFns = []; 435 var isDestroyed = false; 436 var instance = { 437 state: state, 438 setOptions: function setOptions(setOptionsAction) { 439 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 440 cleanupModifierEffects(); 441 state.options = Object.assign({}, defaultOptions, state.options, options); 442 state.scrollParents = { 443 reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [], 444 popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper) 445 }; // Orders the modifiers based on their dependencies and `phase` 446 // properties 447 448 var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 449 450 state.orderedModifiers = orderedModifiers.filter(function (m) { 451 return m.enabled; 452 }); 453 runModifierEffects(); 454 return instance.update(); 455 }, 456 // Sync update â it will always be executed, even if not necessary. This 457 // is useful for low frequency updates where sync behavior simplifies the 458 // logic. 459 // For high frequency updates (e.g. `resize` and `scroll` events), always 460 // prefer the async Popper#update method 461 forceUpdate: function forceUpdate() { 462 if (isDestroyed) { 463 return; 464 } 465 466 var _state$elements = state.elements, 467 reference = _state$elements.reference, 468 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 469 // anymore 470 471 if (!areValidElements(reference, popper)) { 472 return; 473 } // Store the reference and popper rects to be read by modifiers 474 475 476 state.rects = { 477 reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(popper), state.options.strategy === 'fixed'), 478 popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(popper) 479 }; // Modifiers have the ability to reset the current update cycle. The 480 // most common use case for this is the `flip` modifier changing the 481 // placement, which then needs to re-run all the modifiers, because the 482 // logic was previously ran for the previous placement and is therefore 483 // stale/incorrect 484 485 state.reset = false; 486 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 487 // is filled with the initial data specified by the modifier. This means 488 // it doesn't persist and is fresh on each update. 489 // To ensure persistent data, use `${name}#persistent` 490 491 state.orderedModifiers.forEach(function (modifier) { 492 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 493 }); 494 495 for (var index = 0; index < state.orderedModifiers.length; index++) { 496 if (state.reset === true) { 497 state.reset = false; 498 index = -1; 499 continue; 500 } 501 502 var _state$orderedModifie = state.orderedModifiers[index], 503 fn = _state$orderedModifie.fn, 504 _state$orderedModifie2 = _state$orderedModifie.options, 505 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 506 name = _state$orderedModifie.name; 507 508 if (typeof fn === 'function') { 509 state = fn({ 510 state: state, 511 options: _options, 512 name: name, 513 instance: instance 514 }) || state; 515 } 516 } 517 }, 518 // Async and optimistically optimized update â it will not be executed if 519 // not necessary (debounced to run at most once-per-tick) 520 update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__["default"])(function () { 521 return new Promise(function (resolve) { 522 instance.forceUpdate(); 523 resolve(state); 524 }); 525 }), 526 destroy: function destroy() { 527 cleanupModifierEffects(); 528 isDestroyed = true; 529 } 530 }; 531 532 if (!areValidElements(reference, popper)) { 533 return instance; 534 } 535 536 instance.setOptions(options).then(function (state) { 537 if (!isDestroyed && options.onFirstUpdate) { 538 options.onFirstUpdate(state); 539 } 540 }); // Modifiers have the ability to execute arbitrary code before the first 541 // update cycle runs. They will be executed in the same order as the update 542 // cycle. This is useful when a modifier adds some persistent data that 543 // other modifiers need to use, but the modifier is run after the dependent 544 // one. 545 546 function runModifierEffects() { 547 state.orderedModifiers.forEach(function (_ref) { 548 var name = _ref.name, 549 _ref$options = _ref.options, 550 options = _ref$options === void 0 ? {} : _ref$options, 551 effect = _ref.effect; 552 553 if (typeof effect === 'function') { 554 var cleanupFn = effect({ 555 state: state, 556 name: name, 557 instance: instance, 558 options: options 559 }); 560 561 var noopFn = function noopFn() {}; 562 563 effectCleanupFns.push(cleanupFn || noopFn); 564 } 565 }); 566 } 567 568 function cleanupModifierEffects() { 569 effectCleanupFns.forEach(function (fn) { 570 return fn(); 571 }); 572 effectCleanupFns = []; 573 } 574 575 return instance; 576 }; 577} 578var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 579 580 581 582/***/ }), 583
vendor: 1,418 bytes, lines 584-621
584/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": 585/*!***************************************************************!*\ 586 !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! 587 \***************************************************************/ 588/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 589 590"use strict"; 591__webpack_require__.r(__webpack_exports__); 592/* harmony export */ __webpack_require__.d(__webpack_exports__, { 593/* harmony export */ "default": () => (/* binding */ contains) 594/* harmony export */ }); 595/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 596 597function contains(parent, child) { 598 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 599 600 if (parent.contains(child)) { 601 return true; 602 } // then fallback to custom implementation with Shadow DOM support 603 else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) { 604 var next = child; 605 606 do { 607 if (next && parent.isSameNode(next)) { 608 return true; 609 } // $FlowFixMe[prop-missing]: need a better way to handle this... 610 611 612 next = next.parentNode || next.host; 613 } while (next); 614 } // Give up, the result is false 615 616 617 return false; 618} 619 620/***/ }), 621
vendor: 2,806 bytes, lines 622-680
622/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": 623/*!****************************************************************************!*\ 624 !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! 625 \****************************************************************************/ 626/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 627 628"use strict"; 629__webpack_require__.r(__webpack_exports__); 630/* harmony export */ __webpack_require__.d(__webpack_exports__, { 631/* harmony export */ "default": () => (/* binding */ getBoundingClientRect) 632/* harmony export */ }); 633/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 634/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 635/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 636/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"); 637 638 639 640 641function getBoundingClientRect(element, includeScale, isFixedStrategy) { 642 if (includeScale === void 0) { 643 includeScale = false; 644 } 645 646 if (isFixedStrategy === void 0) { 647 isFixedStrategy = false; 648 } 649 650 var clientRect = element.getBoundingClientRect(); 651 var scaleX = 1; 652 var scaleY = 1; 653 654 if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { 655 scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1; 656 scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1; 657 } 658 659 var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) : window, 660 visualViewport = _ref.visualViewport; 661 662 var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])() && isFixedStrategy; 663 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 664 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 665 var width = clientRect.width / scaleX; 666 var height = clientRect.height / scaleY; 667 return { 668 width: width, 669 height: height, 670 top: y, 671 right: x + width, 672 bottom: y + height, 673 left: x, 674 x: x, 675 y: y 676 }; 677} 678 679/***/ }), 680
vendor: 6,916 bytes, lines 681-778
681/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": 682/*!**********************************************************************!*\ 683 !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! 684 \**********************************************************************/ 685/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 686 687"use strict"; 688__webpack_require__.r(__webpack_exports__); 689/* harmony export */ __webpack_require__.d(__webpack_exports__, { 690/* harmony export */ "default": () => (/* binding */ getClippingRect) 691/* harmony export */ }); 692/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 693/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js"); 694/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js"); 695/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); 696/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 697/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 698/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 699/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 700/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 701/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 702/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); 703/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 704/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); 705/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721function getInnerBoundingClientRect(element, strategy) { 722 var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, false, strategy === 'fixed'); 723 rect.top = rect.top + element.clientTop; 724 rect.left = rect.left + element.clientLeft; 725 rect.bottom = rect.top + element.clientHeight; 726 rect.right = rect.left + element.clientWidth; 727 rect.width = element.clientWidth; 728 rect.height = element.clientHeight; 729 rect.x = rect.left; 730 rect.y = rect.top; 731 return rect; 732} 733 734function getClientRectFromMixedType(element, clippingParent, strategy) { 735 return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element))); 736} // A "clipping parent" is an overflowable container with the characteristic of 737// clipping (or hiding) overflowing elements with a position different from 738// `initial` 739 740 741function getClippingParents(element) { 742 var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element)); 743 var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0; 744 var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element; 745 746 if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) { 747 return []; 748 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 749 750 751 return clippingParents.filter(function (clippingParent) { 752 return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body'; 753 }); 754} // Gets the maximum area that the element is visible in due to any number of 755// clipping parents 756 757 758function getClippingRect(element, boundary, rootBoundary, strategy) { 759 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 760 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 761 var firstClippingParent = clippingParents[0]; 762 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 763 var rect = getClientRectFromMixedType(element, clippingParent, strategy); 764 accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top); 765 accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right); 766 accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom); 767 accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left); 768 return accRect; 769 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 770 clippingRect.width = clippingRect.right - clippingRect.left; 771 clippingRect.height = clippingRect.bottom - clippingRect.top; 772 clippingRect.x = clippingRect.left; 773 clippingRect.y = clippingRect.top; 774 return clippingRect; 775} 776 777/***/ }), 778
vendor: 4,352 bytes, lines 779-858
779/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": 780/*!***********************************************************************!*\ 781 !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! 782 \***********************************************************************/ 783/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 784 785"use strict"; 786__webpack_require__.r(__webpack_exports__); 787/* harmony export */ __webpack_require__.d(__webpack_exports__, { 788/* harmony export */ "default": () => (/* binding */ getCompositeRect) 789/* harmony export */ }); 790/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 791/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js"); 792/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 793/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 794/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 795/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 796/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 797/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 798 799 800 801 802 803 804 805 806 807function isElementScaled(element) { 808 var rect = element.getBoundingClientRect(); 809 var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1; 810 var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1; 811 return scaleX !== 1 || scaleY !== 1; 812} // Returns the composite rect of an element relative to its offsetParent. 813// Composite means it takes into account transforms as well as layout. 814 815 816function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 817 if (isFixed === void 0) { 818 isFixed = false; 819 } 820 821 var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent); 822 var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent); 823 var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent); 824 var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled, isFixed); 825 var scroll = { 826 scrollLeft: 0, 827 scrollTop: 0 828 }; 829 var offsets = { 830 x: 0, 831 y: 0 832 }; 833 834 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 835 if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 836 (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) { 837 scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent); 838 } 839 840 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) { 841 offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true); 842 offsets.x += offsetParent.clientLeft; 843 offsets.y += offsetParent.clientTop; 844 } else if (documentElement) { 845 offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement); 846 } 847 } 848 849 return { 850 x: rect.left + scroll.scrollLeft - offsets.x, 851 y: rect.top + scroll.scrollTop - offsets.y, 852 width: rect.width, 853 height: rect.height 854 }; 855} 856 857/***/ }), 858
vendor: 934 bytes, lines 859-877
859/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": 860/*!***********************************************************************!*\ 861 !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! 862 \***********************************************************************/ 863/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 864 865"use strict"; 866__webpack_require__.r(__webpack_exports__); 867/* harmony export */ __webpack_require__.d(__webpack_exports__, { 868/* harmony export */ "default": () => (/* binding */ getComputedStyle) 869/* harmony export */ }); 870/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 871 872function getComputedStyle(element) { 873 return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element); 874} 875 876/***/ }), 877
vendor: 1,105 bytes, lines 878-898
878/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": 879/*!*************************************************************************!*\ 880 !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! 881 \*************************************************************************/ 882/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 883 884"use strict"; 885__webpack_require__.r(__webpack_exports__); 886/* harmony export */ __webpack_require__.d(__webpack_exports__, { 887/* harmony export */ "default": () => (/* binding */ getDocumentElement) 888/* harmony export */ }); 889/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 890 891function getDocumentElement(element) { 892 // $FlowFixMe[incompatible-return]: assume body is always available 893 return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 894 element.document) || window.document).documentElement; 895} 896 897/***/ }), 898
vendor: 2,858 bytes, lines 899-946
899/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": 900/*!**********************************************************************!*\ 901 !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! 902 \**********************************************************************/ 903/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 904 905"use strict"; 906__webpack_require__.r(__webpack_exports__); 907/* harmony export */ __webpack_require__.d(__webpack_exports__, { 908/* harmony export */ "default": () => (/* binding */ getDocumentRect) 909/* harmony export */ }); 910/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 911/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 912/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 913/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 914/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 915 916 917 918 919 // Gets the entire size of the scrollable document area, even extending outside 920// of the `<html>` and `<body>` rect bounds if horizontally scrollable 921 922function getDocumentRect(element) { 923 var _element$ownerDocumen; 924 925 var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 926 var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 927 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 928 var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 929 var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 930 var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); 931 var y = -winScroll.scrollTop; 932 933 if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') { 934 x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width; 935 } 936 937 return { 938 width: width, 939 height: height, 940 x: x, 941 y: y 942 }; 943} 944 945/***/ }), 946
vendor: 766 bytes, lines 947-966
947/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": 948/*!***************************************************************************!*\ 949 !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! 950 \***************************************************************************/ 951/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 952 953"use strict"; 954__webpack_require__.r(__webpack_exports__); 955/* harmony export */ __webpack_require__.d(__webpack_exports__, { 956/* harmony export */ "default": () => (/* binding */ getHTMLElementScroll) 957/* harmony export */ }); 958function getHTMLElementScroll(element) { 959 return { 960 scrollLeft: element.scrollLeft, 961 scrollTop: element.scrollTop 962 }; 963} 964 965/***/ }), 966
vendor: 1,550 bytes, lines 967-1006
967/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": 968/*!********************************************************************!*\ 969 !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! 970 \********************************************************************/ 971/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 972 973"use strict"; 974__webpack_require__.r(__webpack_exports__); 975/* harmony export */ __webpack_require__.d(__webpack_exports__, { 976/* harmony export */ "default": () => (/* binding */ getLayoutRect) 977/* harmony export */ }); 978/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 979 // Returns the layout rect of an element relative to its offsetParent. Layout 980// means it doesn't take into account transforms. 981 982function getLayoutRect(element) { 983 var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed. 984 // Fixes https://github.com/popperjs/popper-core/issues/1223 985 986 var width = element.offsetWidth; 987 var height = element.offsetHeight; 988 989 if (Math.abs(clientRect.width - width) <= 1) { 990 width = clientRect.width; 991 } 992 993 if (Math.abs(clientRect.height - height) <= 1) { 994 height = clientRect.height; 995 } 996 997 return { 998 x: element.offsetLeft, 999 y: element.offsetTop, 1000 width: width, 1001 height: height 1002 }; 1003} 1004 1005/***/ }), 1006
vendor: 693 bytes, lines 1007-1023
1007/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": 1008/*!******************************************************************!*\ 1009 !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! 1010 \******************************************************************/ 1011/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1012 1013"use strict"; 1014__webpack_require__.r(__webpack_exports__); 1015/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1016/* harmony export */ "default": () => (/* binding */ getNodeName) 1017/* harmony export */ }); 1018function getNodeName(element) { 1019 return element ? (element.nodeName || '').toLowerCase() : null; 1020} 1021 1022/***/ }), 1023
vendor: 1,724 bytes, lines 1024-1052
1024/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": 1025/*!********************************************************************!*\ 1026 !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! 1027 \********************************************************************/ 1028/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1029 1030"use strict"; 1031__webpack_require__.r(__webpack_exports__); 1032/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1033/* harmony export */ "default": () => (/* binding */ getNodeScroll) 1034/* harmony export */ }); 1035/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 1036/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1037/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1038/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js"); 1039 1040 1041 1042 1043function getNodeScroll(node) { 1044 if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) { 1045 return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node); 1046 } else { 1047 return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node); 1048 } 1049} 1050 1051/***/ }), 1052
vendor: 4,972 bytes, lines 1053-1142
1053/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": 1054/*!**********************************************************************!*\ 1055 !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! 1056 \**********************************************************************/ 1057/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1058 1059"use strict"; 1060__webpack_require__.r(__webpack_exports__); 1061/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1062/* harmony export */ "default": () => (/* binding */ getOffsetParent) 1063/* harmony export */ }); 1064/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1065/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1066/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1067/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1068/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js"); 1069/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 1070/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js"); 1071 1072 1073 1074 1075 1076 1077 1078 1079function getTrueOffsetParent(element) { 1080 if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837 1081 (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') { 1082 return null; 1083 } 1084 1085 return element.offsetParent; 1086} // `.offsetParent` reports `null` for fixed elements, while absolute elements 1087// return the containing block 1088 1089 1090function getContainingBlock(element) { 1091 var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])()); 1092 var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])()); 1093 1094 if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { 1095 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 1096 var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 1097 1098 if (elementCss.position === 'fixed') { 1099 return null; 1100 } 1101 } 1102 1103 var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); 1104 1105 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) { 1106 currentNode = currentNode.host; 1107 } 1108 1109 while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(currentNode)) < 0) { 1110 var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that 1111 // create a containing block. 1112 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 1113 1114 if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { 1115 return currentNode; 1116 } else { 1117 currentNode = currentNode.parentNode; 1118 } 1119 } 1120 1121 return null; 1122} // Gets the closest ancestor positioned element. Handles some edge cases, 1123// such as table ancestors and cross browser bugs. 1124 1125 1126function getOffsetParent(element) { 1127 var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element); 1128 var offsetParent = getTrueOffsetParent(element); 1129 1130 while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') { 1131 offsetParent = getTrueOffsetParent(offsetParent); 1132 } 1133 1134 if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) { 1135 return window; 1136 } 1137 1138 return offsetParent || getContainingBlock(element) || window; 1139} 1140 1141/***/ }), 1142
vendor: 1,900 bytes, lines 1143-1178
1143/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": 1144/*!********************************************************************!*\ 1145 !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! 1146 \********************************************************************/ 1147/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1148 1149"use strict"; 1150__webpack_require__.r(__webpack_exports__); 1151/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1152/* harmony export */ "default": () => (/* binding */ getParentNode) 1153/* harmony export */ }); 1154/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1155/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1156/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1157 1158 1159 1160function getParentNode(element) { 1161 if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') { 1162 return element; 1163 } 1164 1165 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 1166 // $FlowFixMe[incompatible-return] 1167 // $FlowFixMe[prop-missing] 1168 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 1169 element.parentNode || ( // DOM Element detected 1170 (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected 1171 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 1172 (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback 1173 1174 ); 1175} 1176 1177/***/ }), 1178
vendor: 1,878 bytes, lines 1179-1212
1179/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": 1180/*!**********************************************************************!*\ 1181 !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! 1182 \**********************************************************************/ 1183/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1184 1185"use strict"; 1186__webpack_require__.r(__webpack_exports__); 1187/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1188/* harmony export */ "default": () => (/* binding */ getScrollParent) 1189/* harmony export */ }); 1190/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 1191/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 1192/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1193/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1194 1195 1196 1197 1198function getScrollParent(node) { 1199 if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) { 1200 // $FlowFixMe[incompatible-return]: assume body is always available 1201 return node.ownerDocument.body; 1202 } 1203 1204 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) { 1205 return node; 1206 } 1207 1208 return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node)); 1209} 1210 1211/***/ }), 1212
vendor: 2,234 bytes, lines 1213-1261
1213/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": 1214/*!**********************************************************************!*\ 1215 !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! 1216 \**********************************************************************/ 1217/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1218 1219"use strict"; 1220__webpack_require__.r(__webpack_exports__); 1221/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1222/* harmony export */ "default": () => (/* binding */ getViewportRect) 1223/* harmony export */ }); 1224/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1225/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1226/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 1227/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"); 1228 1229 1230 1231 1232function getViewportRect(element, strategy) { 1233 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 1234 var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 1235 var visualViewport = win.visualViewport; 1236 var width = html.clientWidth; 1237 var height = html.clientHeight; 1238 var x = 0; 1239 var y = 0; 1240 1241 if (visualViewport) { 1242 width = visualViewport.width; 1243 height = visualViewport.height; 1244 var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); 1245 1246 if (layoutViewport || !layoutViewport && strategy === 'fixed') { 1247 x = visualViewport.offsetLeft; 1248 y = visualViewport.offsetTop; 1249 } 1250 } 1251 1252 return { 1253 width: width, 1254 height: height, 1255 x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element), 1256 y: y 1257 }; 1258} 1259 1260/***/ }), 1261
vendor: 842 bytes, lines 1262-1287
1262/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": 1263/*!****************************************************************!*\ 1264 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! 1265 \****************************************************************/ 1266/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1267 1268"use strict"; 1269__webpack_require__.r(__webpack_exports__); 1270/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1271/* harmony export */ "default": () => (/* binding */ getWindow) 1272/* harmony export */ }); 1273function getWindow(node) { 1274 if (node == null) { 1275 return window; 1276 } 1277 1278 if (node.toString() !== '[object Window]') { 1279 var ownerDocument = node.ownerDocument; 1280 return ownerDocument ? ownerDocument.defaultView || window : window; 1281 } 1282 1283 return node; 1284} 1285 1286/***/ }), 1287
vendor: 1,039 bytes, lines 1288-1312
1288/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": 1289/*!**********************************************************************!*\ 1290 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! 1291 \**********************************************************************/ 1292/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1293 1294"use strict"; 1295__webpack_require__.r(__webpack_exports__); 1296/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1297/* harmony export */ "default": () => (/* binding */ getWindowScroll) 1298/* harmony export */ }); 1299/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1300 1301function getWindowScroll(node) { 1302 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node); 1303 var scrollLeft = win.pageXOffset; 1304 var scrollTop = win.pageYOffset; 1305 return { 1306 scrollLeft: scrollLeft, 1307 scrollTop: scrollTop 1308 }; 1309} 1310 1311/***/ }), 1312
vendor: 1,913 bytes, lines 1313-1342
1313/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": 1314/*!**************************************************************************!*\ 1315 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! 1316 \**************************************************************************/ 1317/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1318 1319"use strict"; 1320__webpack_require__.r(__webpack_exports__); 1321/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1322/* harmony export */ "default": () => (/* binding */ getWindowScrollBarX) 1323/* harmony export */ }); 1324/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 1325/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1326/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 1327 1328 1329 1330function getWindowScrollBarX(element) { 1331 // If <html> has a CSS width greater than the viewport, then this will be 1332 // incorrect for RTL. 1333 // Popper 1 is broken in this case and never had a bug report so let's assume 1334 // it's not an issue. I don't think anyone ever specifies width on <html> 1335 // anyway. 1336 // Browsers where the left scrollbar doesn't cause an issue report `0` for 1337 // this (e.g. Edge 2019, IE11, Safari) 1338 return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft; 1339} 1340 1341/***/ }), 1342
vendor: 1,585 bytes, lines 1343-1382
1343/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": 1344/*!*****************************************************************!*\ 1345 !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! 1346 \*****************************************************************/ 1347/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1348 1349"use strict"; 1350__webpack_require__.r(__webpack_exports__); 1351/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1352/* harmony export */ isElement: () => (/* binding */ isElement), 1353/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement), 1354/* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot) 1355/* harmony export */ }); 1356/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1357 1358 1359function isElement(node) { 1360 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element; 1361 return node instanceof OwnElement || node instanceof Element; 1362} 1363 1364function isHTMLElement(node) { 1365 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement; 1366 return node instanceof OwnElement || node instanceof HTMLElement; 1367} 1368 1369function isShadowRoot(node) { 1370 // IE 11 has no ShadowRoot 1371 if (typeof ShadowRoot === 'undefined') { 1372 return false; 1373 } 1374 1375 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot; 1376 return node instanceof OwnElement || node instanceof ShadowRoot; 1377} 1378 1379 1380 1381/***/ }), 1382
vendor: 949 bytes, lines 1383-1401
1383/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js": 1384/*!***********************************************************************!*\ 1385 !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***! 1386 \***********************************************************************/ 1387/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1388 1389"use strict"; 1390__webpack_require__.r(__webpack_exports__); 1391/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1392/* harmony export */ "default": () => (/* binding */ isLayoutViewport) 1393/* harmony export */ }); 1394/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js"); 1395 1396function isLayoutViewport() { 1397 return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__["default"])()); 1398} 1399 1400/***/ }), 1401
vendor: 1,223 bytes, lines 1402-1426
1402/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": 1403/*!*********************************************************************!*\ 1404 !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! 1405 \*********************************************************************/ 1406/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1407 1408"use strict"; 1409__webpack_require__.r(__webpack_exports__); 1410/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1411/* harmony export */ "default": () => (/* binding */ isScrollParent) 1412/* harmony export */ }); 1413/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1414 1415function isScrollParent(element) { 1416 // Firefox wants us to check `-x` and `-y` variations as well 1417 var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element), 1418 overflow = _getComputedStyle.overflow, 1419 overflowX = _getComputedStyle.overflowX, 1420 overflowY = _getComputedStyle.overflowY; 1421 1422 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 1423} 1424 1425/***/ }), 1426
vendor: 940 bytes, lines 1427-1445
1427/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": 1428/*!*********************************************************************!*\ 1429 !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! 1430 \*********************************************************************/ 1431/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1432 1433"use strict"; 1434__webpack_require__.r(__webpack_exports__); 1435/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1436/* harmony export */ "default": () => (/* binding */ isTableElement) 1437/* harmony export */ }); 1438/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1439 1440function isTableElement(element) { 1441 return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0; 1442} 1443 1444/***/ }), 1445
vendor: 2,529 bytes, lines 1446-1489
1446/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": 1447/*!************************************************************************!*\ 1448 !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! 1449 \************************************************************************/ 1450/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1451 1452"use strict"; 1453__webpack_require__.r(__webpack_exports__); 1454/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1455/* harmony export */ "default": () => (/* binding */ listScrollParents) 1456/* harmony export */ }); 1457/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js"); 1458/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 1459/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1460/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 1461 1462 1463 1464 1465/* 1466given a DOM element, return the list of all scroll parents, up the list of ancesors 1467until we get to the top window object. This list is what we attach scroll listeners 1468to, because if any of these parent elements scroll, we'll need to re-calculate the 1469reference element's position. 1470*/ 1471 1472function listScrollParents(element, list) { 1473 var _element$ownerDocumen; 1474 1475 if (list === void 0) { 1476 list = []; 1477 } 1478 1479 var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 1480 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 1481 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent); 1482 var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent; 1483 var updatedList = list.concat(target); 1484 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 1485 updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target))); 1486} 1487 1488/***/ }), 1489
vendor: 3,198 bytes, lines 1490-1557
1490/***/ "./node_modules/@popperjs/core/lib/enums.js": 1491/*!**************************************************!*\ 1492 !*** ./node_modules/@popperjs/core/lib/enums.js ***! 1493 \**************************************************/ 1494/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1495 1496"use strict"; 1497__webpack_require__.r(__webpack_exports__); 1498/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1499/* harmony export */ afterMain: () => (/* binding */ afterMain), 1500/* harmony export */ afterRead: () => (/* binding */ afterRead), 1501/* harmony export */ afterWrite: () => (/* binding */ afterWrite), 1502/* harmony export */ auto: () => (/* binding */ auto), 1503/* harmony export */ basePlacements: () => (/* binding */ basePlacements), 1504/* harmony export */ beforeMain: () => (/* binding */ beforeMain), 1505/* harmony export */ beforeRead: () => (/* binding */ beforeRead), 1506/* harmony export */ beforeWrite: () => (/* binding */ beforeWrite), 1507/* harmony export */ bottom: () => (/* binding */ bottom), 1508/* harmony export */ clippingParents: () => (/* binding */ clippingParents), 1509/* harmony export */ end: () => (/* binding */ end), 1510/* harmony export */ left: () => (/* binding */ left), 1511/* harmony export */ main: () => (/* binding */ main), 1512/* harmony export */ modifierPhases: () => (/* binding */ modifierPhases), 1513/* harmony export */ placements: () => (/* binding */ placements), 1514/* harmony export */ popper: () => (/* binding */ popper), 1515/* harmony export */ read: () => (/* binding */ read), 1516/* harmony export */ reference: () => (/* binding */ reference), 1517/* harmony export */ right: () => (/* binding */ right), 1518/* harmony export */ start: () => (/* binding */ start), 1519/* harmony export */ top: () => (/* binding */ top), 1520/* harmony export */ variationPlacements: () => (/* binding */ variationPlacements), 1521/* harmony export */ viewport: () => (/* binding */ viewport), 1522/* harmony export */ write: () => (/* binding */ write) 1523/* harmony export */ }); 1524var top = 'top'; 1525var bottom = 'bottom'; 1526var right = 'right'; 1527var left = 'left'; 1528var auto = 'auto'; 1529var basePlacements = [top, bottom, right, left]; 1530var start = 'start'; 1531var end = 'end'; 1532var clippingParents = 'clippingParents'; 1533var viewport = 'viewport'; 1534var popper = 'popper'; 1535var reference = 'reference'; 1536var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 1537 return acc.concat([placement + "-" + start, placement + "-" + end]); 1538}, []); 1539var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 1540 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 1541}, []); // modifiers that need to read the DOM 1542 1543var beforeRead = 'beforeRead'; 1544var read = 'read'; 1545var afterRead = 'afterRead'; // pure-logic modifiers 1546 1547var beforeMain = 'beforeMain'; 1548var main = 'main'; 1549var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 1550 1551var beforeWrite = 'beforeWrite'; 1552var write = 'write'; 1553var afterWrite = 'afterWrite'; 1554var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 1555 1556/***/ }), 1557
vendor: 6,022 bytes, lines 1558-1622
1558/***/ "./node_modules/@popperjs/core/lib/index.js": 1559/*!**************************************************!*\ 1560 !*** ./node_modules/@popperjs/core/lib/index.js ***! 1561 \**************************************************/ 1562/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1563 1564"use strict"; 1565__webpack_require__.r(__webpack_exports__); 1566/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1567/* harmony export */ afterMain: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain), 1568/* harmony export */ afterRead: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead), 1569/* harmony export */ afterWrite: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite), 1570/* harmony export */ applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles), 1571/* harmony export */ arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow), 1572/* harmony export */ auto: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto), 1573/* harmony export */ basePlacements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements), 1574/* harmony export */ beforeMain: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain), 1575/* harmony export */ beforeRead: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead), 1576/* harmony export */ beforeWrite: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite), 1577/* harmony export */ bottom: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom), 1578/* harmony export */ clippingParents: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents), 1579/* harmony export */ computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles), 1580/* harmony export */ createPopper: () => (/* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper), 1581/* harmony export */ createPopperBase: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper), 1582/* harmony export */ createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper), 1583/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__["default"]), 1584/* harmony export */ end: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end), 1585/* harmony export */ eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners), 1586/* harmony export */ flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip), 1587/* harmony export */ hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide), 1588/* harmony export */ left: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left), 1589/* harmony export */ main: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main), 1590/* harmony export */ modifierPhases: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases), 1591/* harmony export */ offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset), 1592/* harmony export */ placements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements), 1593/* harmony export */ popper: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper), 1594/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator), 1595/* harmony export */ popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets), 1596/* harmony export */ preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow), 1597/* harmony export */ read: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read), 1598/* harmony export */ reference: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference), 1599/* harmony export */ right: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right), 1600/* harmony export */ start: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start), 1601/* harmony export */ top: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top), 1602/* harmony export */ variationPlacements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements), 1603/* harmony export */ viewport: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport), 1604/* harmony export */ write: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write) 1605/* harmony export */ }); 1606/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1607/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); 1608/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 1609/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1610/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ "./node_modules/@popperjs/core/lib/popper.js"); 1611/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); 1612 1613 // eslint-disable-next-line import/no-unused-modules 1614 1615 // eslint-disable-next-line import/no-unused-modules 1616 1617 // eslint-disable-next-line import/no-unused-modules 1618 1619 1620 1621/***/ }), 1622
vendor: 3,689 bytes, lines 1623-1722
1623/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": 1624/*!******************************************************************!*\ 1625 !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! 1626 \******************************************************************/ 1627/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1628 1629"use strict"; 1630__webpack_require__.r(__webpack_exports__); 1631/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1632/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1633/* harmony export */ }); 1634/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1635/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1636 1637 // This modifier takes the styles prepared by the `computeStyles` modifier 1638// and applies them to the HTMLElements such as popper and arrow 1639 1640function applyStyles(_ref) { 1641 var state = _ref.state; 1642 Object.keys(state.elements).forEach(function (name) { 1643 var style = state.styles[name] || {}; 1644 var attributes = state.attributes[name] || {}; 1645 var element = state.elements[name]; // arrow is optional + virtual elements 1646 1647 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { 1648 return; 1649 } // Flow doesn't support to extend this property, but it's the most 1650 // effective way to apply styles to an HTMLElement 1651 // $FlowFixMe[cannot-write] 1652 1653 1654 Object.assign(element.style, style); 1655 Object.keys(attributes).forEach(function (name) { 1656 var value = attributes[name]; 1657 1658 if (value === false) { 1659 element.removeAttribute(name); 1660 } else { 1661 element.setAttribute(name, value === true ? '' : value); 1662 } 1663 }); 1664 }); 1665} 1666 1667function effect(_ref2) { 1668 var state = _ref2.state; 1669 var initialStyles = { 1670 popper: { 1671 position: state.options.strategy, 1672 left: '0', 1673 top: '0', 1674 margin: '0' 1675 }, 1676 arrow: { 1677 position: 'absolute' 1678 }, 1679 reference: {} 1680 }; 1681 Object.assign(state.elements.popper.style, initialStyles.popper); 1682 state.styles = initialStyles; 1683 1684 if (state.elements.arrow) { 1685 Object.assign(state.elements.arrow.style, initialStyles.arrow); 1686 } 1687 1688 return function () { 1689 Object.keys(state.elements).forEach(function (name) { 1690 var element = state.elements[name]; 1691 var attributes = state.attributes[name] || {}; 1692 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 1693 1694 var style = styleProperties.reduce(function (style, property) { 1695 style[property] = ''; 1696 return style; 1697 }, {}); // arrow is optional + virtual elements 1698 1699 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { 1700 return; 1701 } 1702 1703 Object.assign(element.style, style); 1704 Object.keys(attributes).forEach(function (attribute) { 1705 element.removeAttribute(attribute); 1706 }); 1707 }); 1708 }; 1709} // eslint-disable-next-line import/no-unused-modules 1710 1711 1712/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1713 name: 'applyStyles', 1714 enabled: true, 1715 phase: 'write', 1716 fn: applyStyles, 1717 effect: effect, 1718 requires: ['computeStyles'] 1719}); 1720 1721/***/ }), 1722
vendor: 5,990 bytes, lines 1723-1835
1723/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js": 1724/*!************************************************************!*\ 1725 !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***! 1726 \************************************************************/ 1727/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1728 1729"use strict"; 1730__webpack_require__.r(__webpack_exports__); 1731/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1732/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1733/* harmony export */ }); 1734/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1735/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 1736/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); 1737/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 1738/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 1739/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); 1740/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); 1741/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); 1742/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1743 1744 1745 1746 1747 1748 1749 1750 1751 // eslint-disable-next-line import/no-unused-modules 1752 1753var toPaddingObject = function toPaddingObject(padding, state) { 1754 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 1755 placement: state.placement 1756 })) : padding; 1757 return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements)); 1758}; 1759 1760function arrow(_ref) { 1761 var _state$modifiersData$; 1762 1763 var state = _ref.state, 1764 name = _ref.name, 1765 options = _ref.options; 1766 var arrowElement = state.elements.arrow; 1767 var popperOffsets = state.modifiersData.popperOffsets; 1768 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement); 1769 var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement); 1770 var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0; 1771 var len = isVertical ? 'height' : 'width'; 1772 1773 if (!arrowElement || !popperOffsets) { 1774 return; 1775 } 1776 1777 var paddingObject = toPaddingObject(options.padding, state); 1778 var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement); 1779 var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left; 1780 var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right; 1781 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 1782 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 1783 var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement); 1784 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 1785 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 1786 // outside of the popper bounds 1787 1788 var min = paddingObject[minProp]; 1789 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 1790 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 1791 var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting... 1792 1793 var axisProp = axis; 1794 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 1795} 1796 1797function effect(_ref2) { 1798 var state = _ref2.state, 1799 options = _ref2.options; 1800 var _options$element = options.element, 1801 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 1802 1803 if (arrowElement == null) { 1804 return; 1805 } // CSS selector 1806 1807 1808 if (typeof arrowElement === 'string') { 1809 arrowElement = state.elements.popper.querySelector(arrowElement); 1810 1811 if (!arrowElement) { 1812 return; 1813 } 1814 } 1815 1816 if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__["default"])(state.elements.popper, arrowElement)) { 1817 return; 1818 } 1819 1820 state.elements.arrow = arrowElement; 1821} // eslint-disable-next-line import/no-unused-modules 1822 1823 1824/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1825 name: 'arrow', 1826 enabled: true, 1827 phase: 'main', 1828 fn: arrow, 1829 effect: effect, 1830 requires: ['popperOffsets'], 1831 requiresIfExists: ['preventOverflow'] 1832}); 1833 1834/***/ }), 1835
vendor: 8,489 bytes, lines 1836-2027
1836/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": 1837/*!********************************************************************!*\ 1838 !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! 1839 \********************************************************************/ 1840/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1841 1842"use strict"; 1843__webpack_require__.r(__webpack_exports__); 1844/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1845/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), 1846/* harmony export */ mapToStyles: () => (/* binding */ mapToStyles) 1847/* harmony export */ }); 1848/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1849/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 1850/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1851/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1852/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1853/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1854/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 1855/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 1856 1857 1858 1859 1860 1861 1862 1863 // eslint-disable-next-line import/no-unused-modules 1864 1865var unsetSides = { 1866 top: 'auto', 1867 right: 'auto', 1868 bottom: 'auto', 1869 left: 'auto' 1870}; // Round the offsets to the nearest suitable subpixel based on the DPR. 1871// Zooming can change the DPR, but it seems to report a value that will 1872// cleanly divide the values into the appropriate subpixels. 1873 1874function roundOffsetsByDPR(_ref, win) { 1875 var x = _ref.x, 1876 y = _ref.y; 1877 var dpr = win.devicePixelRatio || 1; 1878 return { 1879 x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0, 1880 y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0 1881 }; 1882} 1883 1884function mapToStyles(_ref2) { 1885 var _Object$assign2; 1886 1887 var popper = _ref2.popper, 1888 popperRect = _ref2.popperRect, 1889 placement = _ref2.placement, 1890 variation = _ref2.variation, 1891 offsets = _ref2.offsets, 1892 position = _ref2.position, 1893 gpuAcceleration = _ref2.gpuAcceleration, 1894 adaptive = _ref2.adaptive, 1895 roundOffsets = _ref2.roundOffsets, 1896 isFixed = _ref2.isFixed; 1897 var _offsets$x = offsets.x, 1898 x = _offsets$x === void 0 ? 0 : _offsets$x, 1899 _offsets$y = offsets.y, 1900 y = _offsets$y === void 0 ? 0 : _offsets$y; 1901 1902 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 1903 x: x, 1904 y: y 1905 }) : { 1906 x: x, 1907 y: y 1908 }; 1909 1910 x = _ref3.x; 1911 y = _ref3.y; 1912 var hasX = offsets.hasOwnProperty('x'); 1913 var hasY = offsets.hasOwnProperty('y'); 1914 var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left; 1915 var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; 1916 var win = window; 1917 1918 if (adaptive) { 1919 var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper); 1920 var heightProp = 'clientHeight'; 1921 var widthProp = 'clientWidth'; 1922 1923 if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) { 1924 offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper); 1925 1926 if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') { 1927 heightProp = 'scrollHeight'; 1928 widthProp = 'scrollWidth'; 1929 } 1930 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 1931 1932 1933 offsetParent = offsetParent; 1934 1935 if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { 1936 sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom; 1937 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] 1938 offsetParent[heightProp]; 1939 y -= offsetY - popperRect.height; 1940 y *= gpuAcceleration ? 1 : -1; 1941 } 1942 1943 if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { 1944 sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right; 1945 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] 1946 offsetParent[widthProp]; 1947 x -= offsetX - popperRect.width; 1948 x *= gpuAcceleration ? 1 : -1; 1949 } 1950 } 1951 1952 var commonStyles = Object.assign({ 1953 position: position 1954 }, adaptive && unsetSides); 1955 1956 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 1957 x: x, 1958 y: y 1959 }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) : { 1960 x: x, 1961 y: y 1962 }; 1963 1964 x = _ref4.x; 1965 y = _ref4.y; 1966 1967 if (gpuAcceleration) { 1968 var _Object$assign; 1969 1970 return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); 1971 } 1972 1973 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 1974} 1975 1976function computeStyles(_ref5) { 1977 var state = _ref5.state, 1978 options = _ref5.options; 1979 var _options$gpuAccelerat = options.gpuAcceleration, 1980 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 1981 _options$adaptive = options.adaptive, 1982 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 1983 _options$roundOffsets = options.roundOffsets, 1984 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 1985 var commonStyles = { 1986 placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement), 1987 variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement), 1988 popper: state.elements.popper, 1989 popperRect: state.rects.popper, 1990 gpuAcceleration: gpuAcceleration, 1991 isFixed: state.options.strategy === 'fixed' 1992 }; 1993 1994 if (state.modifiersData.popperOffsets != null) { 1995 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 1996 offsets: state.modifiersData.popperOffsets, 1997 position: state.options.strategy, 1998 adaptive: adaptive, 1999 roundOffsets: roundOffsets 2000 }))); 2001 } 2002 2003 if (state.modifiersData.arrow != null) { 2004 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 2005 offsets: state.modifiersData.arrow, 2006 position: 'absolute', 2007 adaptive: false, 2008 roundOffsets: roundOffsets 2009 }))); 2010 } 2011 2012 state.attributes.popper = Object.assign({}, state.attributes.popper, { 2013 'data-popper-placement': state.placement 2014 }); 2015} // eslint-disable-next-line import/no-unused-modules 2016 2017 2018/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2019 name: 'computeStyles', 2020 enabled: true, 2021 phase: 'beforeWrite', 2022 fn: computeStyles, 2023 data: {} 2024}); 2025 2026/***/ }), 2027
vendor: 2,190 bytes, lines 2028-2091
2028/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": 2029/*!*********************************************************************!*\ 2030 !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! 2031 \*********************************************************************/ 2032/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2033 2034"use strict"; 2035__webpack_require__.r(__webpack_exports__); 2036/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2037/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2038/* harmony export */ }); 2039/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 2040 // eslint-disable-next-line import/no-unused-modules 2041 2042var passive = { 2043 passive: true 2044}; 2045 2046function effect(_ref) { 2047 var state = _ref.state, 2048 instance = _ref.instance, 2049 options = _ref.options; 2050 var _options$scroll = options.scroll, 2051 scroll = _options$scroll === void 0 ? true : _options$scroll, 2052 _options$resize = options.resize, 2053 resize = _options$resize === void 0 ? true : _options$resize; 2054 var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper); 2055 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 2056 2057 if (scroll) { 2058 scrollParents.forEach(function (scrollParent) { 2059 scrollParent.addEventListener('scroll', instance.update, passive); 2060 }); 2061 } 2062 2063 if (resize) { 2064 window.addEventListener('resize', instance.update, passive); 2065 } 2066 2067 return function () { 2068 if (scroll) { 2069 scrollParents.forEach(function (scrollParent) { 2070 scrollParent.removeEventListener('scroll', instance.update, passive); 2071 }); 2072 } 2073 2074 if (resize) { 2075 window.removeEventListener('resize', instance.update, passive); 2076 } 2077 }; 2078} // eslint-disable-next-line import/no-unused-modules 2079 2080 2081/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2082 name: 'eventListeners', 2083 enabled: true, 2084 phase: 'write', 2085 fn: function fn() {}, 2086 effect: effect, 2087 data: {} 2088}); 2089 2090/***/ }), 2091
vendor: 7,538 bytes, lines 2092-2259
2092/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js": 2093/*!***********************************************************!*\ 2094 !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***! 2095 \***********************************************************/ 2096/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2097 2098"use strict"; 2099__webpack_require__.r(__webpack_exports__); 2100/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2101/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2102/* harmony export */ }); 2103/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js"); 2104/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2105/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js"); 2106/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2107/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js"); 2108/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2109/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2110 2111 2112 2113 2114 2115 2116 // eslint-disable-next-line import/no-unused-modules 2117 2118function getExpandedFallbackPlacements(placement) { 2119 if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) { 2120 return []; 2121 } 2122 2123 var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement); 2124 return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)]; 2125} 2126 2127function flip(_ref) { 2128 var state = _ref.state, 2129 options = _ref.options, 2130 name = _ref.name; 2131 2132 if (state.modifiersData[name]._skip) { 2133 return; 2134 } 2135 2136 var _options$mainAxis = options.mainAxis, 2137 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 2138 _options$altAxis = options.altAxis, 2139 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 2140 specifiedFallbackPlacements = options.fallbackPlacements, 2141 padding = options.padding, 2142 boundary = options.boundary, 2143 rootBoundary = options.rootBoundary, 2144 altBoundary = options.altBoundary, 2145 _options$flipVariatio = options.flipVariations, 2146 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 2147 allowedAutoPlacements = options.allowedAutoPlacements; 2148 var preferredPlacement = state.options.placement; 2149 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement); 2150 var isBasePlacement = basePlacement === preferredPlacement; 2151 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 2152 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 2153 return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, { 2154 placement: placement, 2155 boundary: boundary, 2156 rootBoundary: rootBoundary, 2157 padding: padding, 2158 flipVariations: flipVariations, 2159 allowedAutoPlacements: allowedAutoPlacements 2160 }) : placement); 2161 }, []); 2162 var referenceRect = state.rects.reference; 2163 var popperRect = state.rects.popper; 2164 var checksMap = new Map(); 2165 var makeFallbackChecks = true; 2166 var firstFittingPlacement = placements[0]; 2167 2168 for (var i = 0; i < placements.length; i++) { 2169 var placement = placements[i]; 2170 2171 var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); 2172 2173 var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start; 2174 var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0; 2175 var len = isVertical ? 'width' : 'height'; 2176 var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, { 2177 placement: placement, 2178 boundary: boundary, 2179 rootBoundary: rootBoundary, 2180 altBoundary: altBoundary, 2181 padding: padding 2182 }); 2183 var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; 2184 2185 if (referenceRect[len] > popperRect[len]) { 2186 mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); 2187 } 2188 2189 var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); 2190 var checks = []; 2191 2192 if (checkMainAxis) { 2193 checks.push(overflow[_basePlacement] <= 0); 2194 } 2195 2196 if (checkAltAxis) { 2197 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 2198 } 2199 2200 if (checks.every(function (check) { 2201 return check; 2202 })) { 2203 firstFittingPlacement = placement; 2204 makeFallbackChecks = false; 2205 break; 2206 } 2207 2208 checksMap.set(placement, checks); 2209 } 2210 2211 if (makeFallbackChecks) { 2212 // `2` may be desired in some cases â research later 2213 var numberOfChecks = flipVariations ? 3 : 1; 2214 2215 var _loop = function _loop(_i) { 2216 var fittingPlacement = placements.find(function (placement) { 2217 var checks = checksMap.get(placement); 2218 2219 if (checks) { 2220 return checks.slice(0, _i).every(function (check) { 2221 return check; 2222 }); 2223 } 2224 }); 2225 2226 if (fittingPlacement) { 2227 firstFittingPlacement = fittingPlacement; 2228 return "break"; 2229 } 2230 }; 2231 2232 for (var _i = numberOfChecks; _i > 0; _i--) { 2233 var _ret = _loop(_i); 2234 2235 if (_ret === "break") break; 2236 } 2237 } 2238 2239 if (state.placement !== firstFittingPlacement) { 2240 state.modifiersData[name]._skip = true; 2241 state.placement = firstFittingPlacement; 2242 state.reset = true; 2243 } 2244} // eslint-disable-next-line import/no-unused-modules 2245 2246 2247/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2248 name: 'flip', 2249 enabled: true, 2250 phase: 'main', 2251 fn: flip, 2252 requiresIfExists: ['offset'], 2253 data: { 2254 _skip: false 2255 } 2256}); 2257 2258/***/ }), 2259
vendor: 3,074 bytes, lines 2260-2336
2260/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js": 2261/*!***********************************************************!*\ 2262 !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***! 2263 \***********************************************************/ 2264/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2265 2266"use strict"; 2267__webpack_require__.r(__webpack_exports__); 2268/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2269/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2270/* harmony export */ }); 2271/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2272/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2273 2274 2275 2276function getSideOffsets(overflow, rect, preventedOffsets) { 2277 if (preventedOffsets === void 0) { 2278 preventedOffsets = { 2279 x: 0, 2280 y: 0 2281 }; 2282 } 2283 2284 return { 2285 top: overflow.top - rect.height - preventedOffsets.y, 2286 right: overflow.right - rect.width + preventedOffsets.x, 2287 bottom: overflow.bottom - rect.height + preventedOffsets.y, 2288 left: overflow.left - rect.width - preventedOffsets.x 2289 }; 2290} 2291 2292function isAnySideFullyClipped(overflow) { 2293 return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) { 2294 return overflow[side] >= 0; 2295 }); 2296} 2297 2298function hide(_ref) { 2299 var state = _ref.state, 2300 name = _ref.name; 2301 var referenceRect = state.rects.reference; 2302 var popperRect = state.rects.popper; 2303 var preventedOffsets = state.modifiersData.preventOverflow; 2304 var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { 2305 elementContext: 'reference' 2306 }); 2307 var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { 2308 altBoundary: true 2309 }); 2310 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 2311 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 2312 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 2313 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 2314 state.modifiersData[name] = { 2315 referenceClippingOffsets: referenceClippingOffsets, 2316 popperEscapeOffsets: popperEscapeOffsets, 2317 isReferenceHidden: isReferenceHidden, 2318 hasPopperEscaped: hasPopperEscaped 2319 }; 2320 state.attributes.popper = Object.assign({}, state.attributes.popper, { 2321 'data-popper-reference-hidden': isReferenceHidden, 2322 'data-popper-escaped': hasPopperEscaped 2323 }); 2324} // eslint-disable-next-line import/no-unused-modules 2325 2326 2327/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2328 name: 'hide', 2329 enabled: true, 2330 phase: 'main', 2331 requiresIfExists: ['preventOverflow'], 2332 fn: hide 2333}); 2334 2335/***/ }), 2336
vendor: 3,139 bytes, lines 2337-2376
2337/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js": 2338/*!************************************************************!*\ 2339 !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***! 2340 \************************************************************/ 2341/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2342 2343"use strict"; 2344__webpack_require__.r(__webpack_exports__); 2345/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2346/* harmony export */ applyStyles: () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]), 2347/* harmony export */ arrow: () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]), 2348/* harmony export */ computeStyles: () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]), 2349/* harmony export */ eventListeners: () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]), 2350/* harmony export */ flip: () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]), 2351/* harmony export */ hide: () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]), 2352/* harmony export */ offset: () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]), 2353/* harmony export */ popperOffsets: () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]), 2354/* harmony export */ preventOverflow: () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]) 2355/* harmony export */ }); 2356/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2357/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); 2358/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2359/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2360/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); 2361/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); 2362/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); 2363/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2364/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375/***/ }), 2376
vendor: 2,812 bytes, lines 2377-2447
2377/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js": 2378/*!*************************************************************!*\ 2379 !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***! 2380 \*************************************************************/ 2381/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2382 2383"use strict"; 2384__webpack_require__.r(__webpack_exports__); 2385/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2386/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), 2387/* harmony export */ distanceAndSkiddingToXY: () => (/* binding */ distanceAndSkiddingToXY) 2388/* harmony export */ }); 2389/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2390/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2391 2392 // eslint-disable-next-line import/no-unused-modules 2393 2394function distanceAndSkiddingToXY(placement, rects, offset) { 2395 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); 2396 var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1; 2397 2398 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 2399 placement: placement 2400 })) : offset, 2401 skidding = _ref[0], 2402 distance = _ref[1]; 2403 2404 skidding = skidding || 0; 2405 distance = (distance || 0) * invertDistance; 2406 return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? { 2407 x: distance, 2408 y: skidding 2409 } : { 2410 x: skidding, 2411 y: distance 2412 }; 2413} 2414 2415function offset(_ref2) { 2416 var state = _ref2.state, 2417 options = _ref2.options, 2418 name = _ref2.name; 2419 var _options$offset = options.offset, 2420 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 2421 var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) { 2422 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 2423 return acc; 2424 }, {}); 2425 var _data$state$placement = data[state.placement], 2426 x = _data$state$placement.x, 2427 y = _data$state$placement.y; 2428 2429 if (state.modifiersData.popperOffsets != null) { 2430 state.modifiersData.popperOffsets.x += x; 2431 state.modifiersData.popperOffsets.y += y; 2432 } 2433 2434 state.modifiersData[name] = data; 2435} // eslint-disable-next-line import/no-unused-modules 2436 2437 2438/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2439 name: 'offset', 2440 enabled: true, 2441 phase: 'main', 2442 requires: ['popperOffsets'], 2443 fn: offset 2444}); 2445 2446/***/ }), 2447
vendor: 1,555 bytes, lines 2448-2487
2448/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": 2449/*!********************************************************************!*\ 2450 !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! 2451 \********************************************************************/ 2452/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2453 2454"use strict"; 2455__webpack_require__.r(__webpack_exports__); 2456/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2457/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2458/* harmony export */ }); 2459/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); 2460 2461 2462function popperOffsets(_ref) { 2463 var state = _ref.state, 2464 name = _ref.name; 2465 // Offsets are the actual position the popper needs to have to be 2466 // properly positioned near its reference element 2467 // This is the most basic placement, and will be adjusted by 2468 // the modifiers in the next step 2469 state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 2470 reference: state.rects.reference, 2471 element: state.rects.popper, 2472 strategy: 'absolute', 2473 placement: state.placement 2474 }); 2475} // eslint-disable-next-line import/no-unused-modules 2476 2477 2478/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2479 name: 'popperOffsets', 2480 enabled: true, 2481 phase: 'read', 2482 fn: popperOffsets, 2483 data: {} 2484}); 2485 2486/***/ }), 2487
vendor: 9,904 bytes, lines 2488-2654
2488/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js": 2489/*!**********************************************************************!*\ 2490 !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***! 2491 \**********************************************************************/ 2492/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2493 2494"use strict"; 2495__webpack_require__.r(__webpack_exports__); 2496/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2497/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2498/* harmony export */ }); 2499/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2500/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2501/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 2502/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js"); 2503/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); 2504/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 2505/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 2506/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2507/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2508/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); 2509/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522function preventOverflow(_ref) { 2523 var state = _ref.state, 2524 options = _ref.options, 2525 name = _ref.name; 2526 var _options$mainAxis = options.mainAxis, 2527 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 2528 _options$altAxis = options.altAxis, 2529 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 2530 boundary = options.boundary, 2531 rootBoundary = options.rootBoundary, 2532 altBoundary = options.altBoundary, 2533 padding = options.padding, 2534 _options$tether = options.tether, 2535 tether = _options$tether === void 0 ? true : _options$tether, 2536 _options$tetherOffset = options.tetherOffset, 2537 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 2538 var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, { 2539 boundary: boundary, 2540 rootBoundary: rootBoundary, 2541 padding: padding, 2542 altBoundary: altBoundary 2543 }); 2544 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement); 2545 var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement); 2546 var isBasePlacement = !variation; 2547 var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement); 2548 var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis); 2549 var popperOffsets = state.modifiersData.popperOffsets; 2550 var referenceRect = state.rects.reference; 2551 var popperRect = state.rects.popper; 2552 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 2553 placement: state.placement 2554 })) : tetherOffset; 2555 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 2556 mainAxis: tetherOffsetValue, 2557 altAxis: tetherOffsetValue 2558 } : Object.assign({ 2559 mainAxis: 0, 2560 altAxis: 0 2561 }, tetherOffsetValue); 2562 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 2563 var data = { 2564 x: 0, 2565 y: 0 2566 }; 2567 2568 if (!popperOffsets) { 2569 return; 2570 } 2571 2572 if (checkMainAxis) { 2573 var _offsetModifierState$; 2574 2575 var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; 2576 var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; 2577 var len = mainAxis === 'y' ? 'height' : 'width'; 2578 var offset = popperOffsets[mainAxis]; 2579 var min = offset + overflow[mainSide]; 2580 var max = offset - overflow[altSide]; 2581 var additive = tether ? -popperRect[len] / 2 : 0; 2582 var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len]; 2583 var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 2584 // outside the reference bounds 2585 2586 var arrowElement = state.elements.arrow; 2587 var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : { 2588 width: 0, 2589 height: 0 2590 }; 2591 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])(); 2592 var arrowPaddingMin = arrowPaddingObject[mainSide]; 2593 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 2594 // to include its full size in the calculation. If the reference is small 2595 // and near the edge of a boundary, the popper can overflow even if the 2596 // reference is not overflowing as well (e.g. virtual elements with no 2597 // width or height) 2598 2599 var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]); 2600 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 2601 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 2602 var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow); 2603 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 2604 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 2605 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 2606 var tetherMax = offset + maxOffset - offsetModifierValue; 2607 var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max); 2608 popperOffsets[mainAxis] = preventedOffset; 2609 data[mainAxis] = preventedOffset - offset; 2610 } 2611 2612 if (checkAltAxis) { 2613 var _offsetModifierState$2; 2614 2615 var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; 2616 2617 var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; 2618 2619 var _offset = popperOffsets[altAxis]; 2620 2621 var _len = altAxis === 'y' ? 'height' : 'width'; 2622 2623 var _min = _offset + overflow[_mainSide]; 2624 2625 var _max = _offset - overflow[_altSide]; 2626 2627 var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1; 2628 2629 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 2630 2631 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 2632 2633 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 2634 2635 var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 2636 2637 popperOffsets[altAxis] = _preventedOffset; 2638 data[altAxis] = _preventedOffset - _offset; 2639 } 2640 2641 state.modifiersData[name] = data; 2642} // eslint-disable-next-line import/no-unused-modules 2643 2644 2645/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2646 name: 'preventOverflow', 2647 enabled: true, 2648 phase: 'main', 2649 fn: preventOverflow, 2650 requiresIfExists: ['offset'] 2651}); 2652 2653/***/ }), 2654
vendor: 2,564 bytes, lines 2655-2688
2655/***/ "./node_modules/@popperjs/core/lib/popper-lite.js": 2656/*!********************************************************!*\ 2657 !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! 2658 \********************************************************/ 2659/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2660 2661"use strict"; 2662__webpack_require__.r(__webpack_exports__); 2663/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2664/* harmony export */ createPopper: () => (/* binding */ createPopper), 2665/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers), 2666/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"]), 2667/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator) 2668/* harmony export */ }); 2669/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 2670/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2671/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2672/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2673/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2674/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2675 2676 2677 2678 2679 2680var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]]; 2681var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({ 2682 defaultModifiers: defaultModifiers 2683}); // eslint-disable-next-line import/no-unused-modules 2684 2685 2686 2687/***/ }), 2688
vendor: 5,503 bytes, lines 2689-2748
2689/***/ "./node_modules/@popperjs/core/lib/popper.js": 2690/*!***************************************************!*\ 2691 !*** ./node_modules/@popperjs/core/lib/popper.js ***! 2692 \***************************************************/ 2693/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2694 2695"use strict"; 2696__webpack_require__.r(__webpack_exports__); 2697/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2698/* harmony export */ applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles), 2699/* harmony export */ arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow), 2700/* harmony export */ computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles), 2701/* harmony export */ createPopper: () => (/* binding */ createPopper), 2702/* harmony export */ createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper), 2703/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers), 2704/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]), 2705/* harmony export */ eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners), 2706/* harmony export */ flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip), 2707/* harmony export */ hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide), 2708/* harmony export */ offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset), 2709/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator), 2710/* harmony export */ popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets), 2711/* harmony export */ preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow) 2712/* harmony export */ }); 2713/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 2714/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2715/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2716/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2717/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2718/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2719/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); 2720/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); 2721/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); 2722/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); 2723/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); 2724/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); 2725/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]]; 2737var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({ 2738 defaultModifiers: defaultModifiers 2739}); // eslint-disable-next-line import/no-unused-modules 2740 2741 // eslint-disable-next-line import/no-unused-modules 2742 2743 // eslint-disable-next-line import/no-unused-modules 2744 2745 2746 2747/***/ }), 2748
vendor: 3,096 bytes, lines 2749-2809
2749/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js": 2750/*!***********************************************************************!*\ 2751 !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***! 2752 \***********************************************************************/ 2753/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2754 2755"use strict"; 2756__webpack_require__.r(__webpack_exports__); 2757/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2758/* harmony export */ "default": () => (/* binding */ computeAutoPlacement) 2759/* harmony export */ }); 2760/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2761/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2762/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2763/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2764 2765 2766 2767 2768function computeAutoPlacement(state, options) { 2769 if (options === void 0) { 2770 options = {}; 2771 } 2772 2773 var _options = options, 2774 placement = _options.placement, 2775 boundary = _options.boundary, 2776 rootBoundary = _options.rootBoundary, 2777 padding = _options.padding, 2778 flipVariations = _options.flipVariations, 2779 _options$allowedAutoP = _options.allowedAutoPlacements, 2780 allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP; 2781 var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement); 2782 var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) { 2783 return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation; 2784 }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; 2785 var allowedPlacements = placements.filter(function (placement) { 2786 return allowedAutoPlacements.indexOf(placement) >= 0; 2787 }); 2788 2789 if (allowedPlacements.length === 0) { 2790 allowedPlacements = placements; 2791 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 2792 2793 2794 var overflows = allowedPlacements.reduce(function (acc, placement) { 2795 acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, { 2796 placement: placement, 2797 boundary: boundary, 2798 rootBoundary: rootBoundary, 2799 padding: padding 2800 })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)]; 2801 return acc; 2802 }, {}); 2803 return Object.keys(overflows).sort(function (a, b) { 2804 return overflows[a] - overflows[b]; 2805 }); 2806} 2807 2808/***/ }), 2809
vendor: 3,194 bytes, lines 2810-2897
2810/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": 2811/*!*****************************************************************!*\ 2812 !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! 2813 \*****************************************************************/ 2814/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2815 2816"use strict"; 2817__webpack_require__.r(__webpack_exports__); 2818/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2819/* harmony export */ "default": () => (/* binding */ computeOffsets) 2820/* harmony export */ }); 2821/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2822/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2823/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 2824/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2825 2826 2827 2828 2829function computeOffsets(_ref) { 2830 var reference = _ref.reference, 2831 element = _ref.element, 2832 placement = _ref.placement; 2833 var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null; 2834 var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null; 2835 var commonX = reference.x + reference.width / 2 - element.width / 2; 2836 var commonY = reference.y + reference.height / 2 - element.height / 2; 2837 var offsets; 2838 2839 switch (basePlacement) { 2840 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top: 2841 offsets = { 2842 x: commonX, 2843 y: reference.y - element.height 2844 }; 2845 break; 2846 2847 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom: 2848 offsets = { 2849 x: commonX, 2850 y: reference.y + reference.height 2851 }; 2852 break; 2853 2854 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right: 2855 offsets = { 2856 x: reference.x + reference.width, 2857 y: commonY 2858 }; 2859 break; 2860 2861 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left: 2862 offsets = { 2863 x: reference.x - element.width, 2864 y: commonY 2865 }; 2866 break; 2867 2868 default: 2869 offsets = { 2870 x: reference.x, 2871 y: reference.y 2872 }; 2873 } 2874 2875 var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null; 2876 2877 if (mainAxis != null) { 2878 var len = mainAxis === 'y' ? 'height' : 'width'; 2879 2880 switch (variation) { 2881 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start: 2882 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 2883 break; 2884 2885 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end: 2886 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 2887 break; 2888 2889 default: 2890 } 2891 } 2892 2893 return offsets; 2894} 2895 2896/***/ }), 2897
vendor: 850 bytes, lines 2898-2926
2898/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": 2899/*!***********************************************************!*\ 2900 !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! 2901 \***********************************************************/ 2902/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2903 2904"use strict"; 2905__webpack_require__.r(__webpack_exports__); 2906/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2907/* harmony export */ "default": () => (/* binding */ debounce) 2908/* harmony export */ }); 2909function debounce(fn) { 2910 var pending; 2911 return function () { 2912 if (!pending) { 2913 pending = new Promise(function (resolve) { 2914 Promise.resolve().then(function () { 2915 pending = undefined; 2916 resolve(fn()); 2917 }); 2918 }); 2919 } 2920 2921 return pending; 2922 }; 2923} 2924 2925/***/ }), 2926
vendor: 6,226 bytes, lines 2927-3014
2927/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": 2928/*!*****************************************************************!*\ 2929 !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! 2930 \*****************************************************************/ 2931/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2932 2933"use strict"; 2934__webpack_require__.r(__webpack_exports__); 2935/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2936/* harmony export */ "default": () => (/* binding */ detectOverflow) 2937/* harmony export */ }); 2938/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js"); 2939/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 2940/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 2941/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); 2942/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); 2943/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2944/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 2945/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); 2946/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); 2947 2948 2949 2950 2951 2952 2953 2954 2955 // eslint-disable-next-line import/no-unused-modules 2956 2957function detectOverflow(state, options) { 2958 if (options === void 0) { 2959 options = {}; 2960 } 2961 2962 var _options = options, 2963 _options$placement = _options.placement, 2964 placement = _options$placement === void 0 ? state.placement : _options$placement, 2965 _options$strategy = _options.strategy, 2966 strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, 2967 _options$boundary = _options.boundary, 2968 boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary, 2969 _options$rootBoundary = _options.rootBoundary, 2970 rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary, 2971 _options$elementConte = _options.elementContext, 2972 elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte, 2973 _options$altBoundary = _options.altBoundary, 2974 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 2975 _options$padding = _options.padding, 2976 padding = _options$padding === void 0 ? 0 : _options$padding; 2977 var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements)); 2978 var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; 2979 var popperRect = state.rects.popper; 2980 var element = state.elements[altBoundary ? altContext : elementContext]; 2981 var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary, strategy); 2982 var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference); 2983 var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({ 2984 reference: referenceClientRect, 2985 element: popperRect, 2986 strategy: 'absolute', 2987 placement: placement 2988 }); 2989 var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets)); 2990 var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 2991 // 0 or negative = within the clipping rect 2992 2993 var overflowOffsets = { 2994 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 2995 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 2996 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 2997 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 2998 }; 2999 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 3000 3001 if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) { 3002 var offset = offsetData[placement]; 3003 Object.keys(overflowOffsets).forEach(function (key) { 3004 var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1; 3005 var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x'; 3006 overflowOffsets[key] += offset[axis] * multiply; 3007 }); 3008 } 3009 3010 return overflowOffsets; 3011} 3012 3013/***/ }), 3014
vendor: 742 bytes, lines 3015-3034
3015/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": 3016/*!******************************************************************!*\ 3017 !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! 3018 \******************************************************************/ 3019/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3020 3021"use strict"; 3022__webpack_require__.r(__webpack_exports__); 3023/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3024/* harmony export */ "default": () => (/* binding */ expandToHashMap) 3025/* harmony export */ }); 3026function expandToHashMap(value, keys) { 3027 return keys.reduce(function (hashMap, key) { 3028 hashMap[key] = value; 3029 return hashMap; 3030 }, {}); 3031} 3032 3033/***/ }), 3034
vendor: 637 bytes, lines 3035-3051
3035/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js": 3036/*!*************************************************************!*\ 3037 !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***! 3038 \*************************************************************/ 3039/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3040 3041"use strict"; 3042__webpack_require__.r(__webpack_exports__); 3043/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3044/* harmony export */ "default": () => (/* binding */ getAltAxis) 3045/* harmony export */ }); 3046function getAltAxis(axis) { 3047 return axis === 'x' ? 'y' : 'x'; 3048} 3049 3050/***/ }), 3051
vendor: 678 bytes, lines 3052-3069
3052/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": 3053/*!*******************************************************************!*\ 3054 !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! 3055 \*******************************************************************/ 3056/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3057 3058"use strict"; 3059__webpack_require__.r(__webpack_exports__); 3060/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3061/* harmony export */ "default": () => (/* binding */ getBasePlacement) 3062/* harmony export */ }); 3063 3064function getBasePlacement(placement) { 3065 return placement.split('-')[0]; 3066} 3067 3068/***/ }), 3069
vendor: 715 bytes, lines 3070-3091
3070/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": 3071/*!*********************************************************************!*\ 3072 !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! 3073 \*********************************************************************/ 3074/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3075 3076"use strict"; 3077__webpack_require__.r(__webpack_exports__); 3078/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3079/* harmony export */ "default": () => (/* binding */ getFreshSideObject) 3080/* harmony export */ }); 3081function getFreshSideObject() { 3082 return { 3083 top: 0, 3084 right: 0, 3085 bottom: 0, 3086 left: 0 3087 }; 3088} 3089 3090/***/ }), 3091
vendor: 755 bytes, lines 3092-3108
3092/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": 3093/*!***************************************************************************!*\ 3094 !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! 3095 \***************************************************************************/ 3096/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3097 3098"use strict"; 3099__webpack_require__.r(__webpack_exports__); 3100/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3101/* harmony export */ "default": () => (/* binding */ getMainAxisFromPlacement) 3102/* harmony export */ }); 3103function getMainAxisFromPlacement(placement) { 3104 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 3105} 3106 3107/***/ }), 3108
vendor: 856 bytes, lines 3109-3133
3109/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js": 3110/*!***********************************************************************!*\ 3111 !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***! 3112 \***********************************************************************/ 3113/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3114 3115"use strict"; 3116__webpack_require__.r(__webpack_exports__); 3117/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3118/* harmony export */ "default": () => (/* binding */ getOppositePlacement) 3119/* harmony export */ }); 3120var hash = { 3121 left: 'right', 3122 right: 'left', 3123 bottom: 'top', 3124 top: 'bottom' 3125}; 3126function getOppositePlacement(placement) { 3127 return placement.replace(/left|right|bottom|top/g, function (matched) { 3128 return hash[matched]; 3129 }); 3130} 3131 3132/***/ }), 3133
vendor: 862 bytes, lines 3134-3156
3134/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js": 3135/*!********************************************************************************!*\ 3136 !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***! 3137 \********************************************************************************/ 3138/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3139 3140"use strict"; 3141__webpack_require__.r(__webpack_exports__); 3142/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3143/* harmony export */ "default": () => (/* binding */ getOppositeVariationPlacement) 3144/* harmony export */ }); 3145var hash = { 3146 start: 'end', 3147 end: 'start' 3148}; 3149function getOppositeVariationPlacement(placement) { 3150 return placement.replace(/start|end/g, function (matched) { 3151 return hash[matched]; 3152 }); 3153} 3154 3155/***/ }), 3156
vendor: 653 bytes, lines 3157-3173
3157/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": 3158/*!***************************************************************!*\ 3159 !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! 3160 \***************************************************************/ 3161/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3162 3163"use strict"; 3164__webpack_require__.r(__webpack_exports__); 3165/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3166/* harmony export */ "default": () => (/* binding */ getVariation) 3167/* harmony export */ }); 3168function getVariation(placement) { 3169 return placement.split('-')[1]; 3170} 3171 3172/***/ }), 3173
vendor: 713 bytes, lines 3174-3192
3174/***/ "./node_modules/@popperjs/core/lib/utils/math.js": 3175/*!*******************************************************!*\ 3176 !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! 3177 \*******************************************************/ 3178/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3179 3180"use strict"; 3181__webpack_require__.r(__webpack_exports__); 3182/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3183/* harmony export */ max: () => (/* binding */ max), 3184/* harmony export */ min: () => (/* binding */ min), 3185/* harmony export */ round: () => (/* binding */ round) 3186/* harmony export */ }); 3187var max = Math.max; 3188var min = Math.min; 3189var round = Math.round; 3190 3191/***/ }), 3192
vendor: 1,087 bytes, lines 3193-3220
3193/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": 3194/*!**************************************************************!*\ 3195 !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! 3196 \**************************************************************/ 3197/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3198 3199"use strict"; 3200__webpack_require__.r(__webpack_exports__); 3201/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3202/* harmony export */ "default": () => (/* binding */ mergeByName) 3203/* harmony export */ }); 3204function mergeByName(modifiers) { 3205 var merged = modifiers.reduce(function (merged, current) { 3206 var existing = merged[current.name]; 3207 merged[current.name] = existing ? Object.assign({}, existing, current, { 3208 options: Object.assign({}, existing.options, current.options), 3209 data: Object.assign({}, existing.data, current.data) 3210 }) : current; 3211 return merged; 3212 }, {}); // IE11 does not support Object.values 3213 3214 return Object.keys(merged).map(function (key) { 3215 return merged[key]; 3216 }); 3217} 3218 3219/***/ }), 3220
vendor: 969 bytes, lines 3221-3239
3221/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": 3222/*!*********************************************************************!*\ 3223 !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! 3224 \*********************************************************************/ 3225/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3226 3227"use strict"; 3228__webpack_require__.r(__webpack_exports__); 3229/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3230/* harmony export */ "default": () => (/* binding */ mergePaddingObject) 3231/* harmony export */ }); 3232/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); 3233 3234function mergePaddingObject(paddingObject) { 3235 return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject); 3236} 3237 3238/***/ }), 3239
vendor: 1,964 bytes, lines 3240-3298
3240/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": 3241/*!*****************************************************************!*\ 3242 !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! 3243 \*****************************************************************/ 3244/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3245 3246"use strict"; 3247__webpack_require__.r(__webpack_exports__); 3248/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3249/* harmony export */ "default": () => (/* binding */ orderModifiers) 3250/* harmony export */ }); 3251/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 3252 // source: https://stackoverflow.com/questions/49875255 3253 3254function order(modifiers) { 3255 var map = new Map(); 3256 var visited = new Set(); 3257 var result = []; 3258 modifiers.forEach(function (modifier) { 3259 map.set(modifier.name, modifier); 3260 }); // On visiting object, check for its dependencies and visit them recursively 3261 3262 function sort(modifier) { 3263 visited.add(modifier.name); 3264 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 3265 requires.forEach(function (dep) { 3266 if (!visited.has(dep)) { 3267 var depModifier = map.get(dep); 3268 3269 if (depModifier) { 3270 sort(depModifier); 3271 } 3272 } 3273 }); 3274 result.push(modifier); 3275 } 3276 3277 modifiers.forEach(function (modifier) { 3278 if (!visited.has(modifier.name)) { 3279 // check for visited object 3280 sort(modifier); 3281 } 3282 }); 3283 return result; 3284} 3285 3286function orderModifiers(modifiers) { 3287 // order based on dependencies 3288 var orderedModifiers = order(modifiers); // order based on phase 3289 3290 return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) { 3291 return acc.concat(orderedModifiers.filter(function (modifier) { 3292 return modifier.phase === phase; 3293 })); 3294 }, []); 3295} 3296 3297/***/ }), 3298
vendor: 779 bytes, lines 3299-3320
3299/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": 3300/*!*******************************************************************!*\ 3301 !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! 3302 \*******************************************************************/ 3303/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3304 3305"use strict"; 3306__webpack_require__.r(__webpack_exports__); 3307/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3308/* harmony export */ "default": () => (/* binding */ rectToClientRect) 3309/* harmony export */ }); 3310function rectToClientRect(rect) { 3311 return Object.assign({}, rect, { 3312 left: rect.x, 3313 top: rect.y, 3314 right: rect.x + rect.width, 3315 bottom: rect.y + rect.height 3316 }); 3317} 3318 3319/***/ }), 3320
vendor: 856 bytes, lines 3321-3345
3321/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js": 3322/*!************************************************************!*\ 3323 !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***! 3324 \************************************************************/ 3325/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3326 3327"use strict"; 3328__webpack_require__.r(__webpack_exports__); 3329/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3330/* harmony export */ "default": () => (/* binding */ getUAString) 3331/* harmony export */ }); 3332function getUAString() { 3333 var uaData = navigator.userAgentData; 3334 3335 if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { 3336 return uaData.brands.map(function (item) { 3337 return item.brand + "/" + item.version; 3338 }).join(' '); 3339 } 3340 3341 return navigator.userAgent; 3342} 3343 3344/***/ }), 3345
vendor: 1,046 bytes, lines 3346-3369
3346/***/ "./node_modules/@popperjs/core/lib/utils/within.js": 3347/*!*********************************************************!*\ 3348 !*** ./node_modules/@popperjs/core/lib/utils/within.js ***! 3349 \*********************************************************/ 3350/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3351 3352"use strict"; 3353__webpack_require__.r(__webpack_exports__); 3354/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3355/* harmony export */ within: () => (/* binding */ within), 3356/* harmony export */ withinMaxClamp: () => (/* binding */ withinMaxClamp) 3357/* harmony export */ }); 3358/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 3359 3360function within(min, value, max) { 3361 return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max)); 3362} 3363function withinMaxClamp(min, value, max) { 3364 var v = within(min, value, max); 3365 return v > max ? max : v; 3366} 3367 3368/***/ }), 3369
vendor: 14,757 bytes, lines 3370-3379
3370/***/ "./node_modules/aos/dist/aos.js": 3371/*!**************************************!*\ 3372 !*** ./node_modules/aos/dist/aos.js ***! 3373 \**************************************/ 3374/***/ (function(module) { 3375 3376!function(e,t){ true?module.exports=t():0}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=n(1),a=(o(r),n(6)),u=o(a),c=n(7),s=o(c),f=n(8),d=o(f),l=n(9),p=o(l),m=n(10),b=o(m),v=n(11),y=o(v),g=n(14),h=o(g),w=[],k=!1,x={offset:120,delay:0,easing:"ease",duration:400,disable:!1,once:!1,startEvent:"DOMContentLoaded",throttleDelay:99,debounceDelay:50,disableMutationObserver:!1},j=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},S=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '),x.disableMutationObserver=!0),document.querySelector("body").setAttribute("data-aos-easing",x.easing),document.querySelector("body").setAttribute("data-aos-duration",x.duration),document.querySelector("body").setAttribute("data-aos-delay",x.delay),"DOMContentLoaded"===x.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?j(!0):"load"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener("resize",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("orientationchange",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready("[data-aos]",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S="maxWait"in n,y=S?x(u(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(s);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return f;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s="Expected a function",f=NaN,d="[object Symbol]",l=/^\s+|\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S="maxWait"in n,y=S?k(a(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==f}function a(e){if("number"==typeof e)return e;if(r(e))return s;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c="Expected a function",s=NaN,f="[object Symbol]",d=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;t<e.length;t+=1){if(o=e[t],o.dataset&&o.dataset.aos)return!0;if(i=o.children&&n(o.children))return!0}return!1}function o(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function i(){return!!o()}function r(e,t){var n=window.document,i=o(),r=new i(a);u=t,r.observe(n.documentElement,{childList:!0,subtree:!0,removedNodes:!0})}function a(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),o=Array.prototype.slice.call(e.removedNodes),i=t.concat(o);if(n(i))return u()})}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){};t.default={isSupported:i,ready:r}},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){return navigator.userAgent||navigator.vendor||window.opera||""}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),r=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,a=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,u=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,c=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,s=function(){function e(){n(this,e)}return i(e,[{key:"phone",value:function(){var e=o();return!(!r.test(e)&&!a.test(e.substr(0,4)))}},{key:"mobile",value:function(){var e=o();return!(!u.test(e)&&!c.test(e.substr(0,4)))}},{key:"tablet",value:function(){return this.mobile()&&!this.phone()}}]),e}();t.default=new s},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n){var o=e.node.getAttribute("data-aos-once");t>e.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return e=e||document.querySelectorAll("[data-aos]"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])}); 3377 3378/***/ }), 3379
vendor: 137,380 bytes, lines 3380-7854
3380/***/ "./node_modules/bootstrap/dist/js/bootstrap.esm.js": 3381/*!*********************************************************!*\ 3382 !*** ./node_modules/bootstrap/dist/js/bootstrap.esm.js ***! 3383 \*********************************************************/ 3384/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3385 3386"use strict"; 3387__webpack_require__.r(__webpack_exports__); 3388/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3389/* harmony export */ Alert: () => (/* binding */ Alert), 3390/* harmony export */ Button: () => (/* binding */ Button), 3391/* harmony export */ Carousel: () => (/* binding */ Carousel), 3392/* harmony export */ Collapse: () => (/* binding */ Collapse), 3393/* harmony export */ Dropdown: () => (/* binding */ Dropdown), 3394/* harmony export */ Modal: () => (/* binding */ Modal), 3395/* harmony export */ Offcanvas: () => (/* binding */ Offcanvas), 3396/* harmony export */ Popover: () => (/* binding */ Popover), 3397/* harmony export */ ScrollSpy: () => (/* binding */ ScrollSpy), 3398/* harmony export */ Tab: () => (/* binding */ Tab), 3399/* harmony export */ Toast: () => (/* binding */ Toast), 3400/* harmony export */ Tooltip: () => (/* binding */ Tooltip) 3401/* harmony export */ }); 3402/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/index.js"); 3403/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/popper.js"); 3404/*! 3405 * Bootstrap v5.3.3 (https://getbootstrap.com/) 3406 * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 3407 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3408 */ 3409 3410 3411/** 3412 * -------------------------------------------------------------------------- 3413 * Bootstrap dom/data.js 3414 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3415 * -------------------------------------------------------------------------- 3416 */ 3417 3418/** 3419 * Constants 3420 */ 3421 3422const elementMap = new Map(); 3423const Data = { 3424 set(element, key, instance) { 3425 if (!elementMap.has(element)) { 3426 elementMap.set(element, new Map()); 3427 } 3428 const instanceMap = elementMap.get(element); 3429 3430 // make it clear we only want one instance per element 3431 // can be removed later when multiple key/instances are fine to be used 3432 if (!instanceMap.has(key) && instanceMap.size !== 0) { 3433 // eslint-disable-next-line no-console 3434 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 3435 return; 3436 } 3437 instanceMap.set(key, instance); 3438 }, 3439 get(element, key) { 3440 if (elementMap.has(element)) { 3441 return elementMap.get(element).get(key) || null; 3442 } 3443 return null; 3444 }, 3445 remove(element, key) { 3446 if (!elementMap.has(element)) { 3447 return; 3448 } 3449 const instanceMap = elementMap.get(element); 3450 instanceMap.delete(key); 3451 3452 // free up element references if there are no instances left for an element 3453 if (instanceMap.size === 0) { 3454 elementMap.delete(element); 3455 } 3456 } 3457}; 3458 3459/** 3460 * -------------------------------------------------------------------------- 3461 * Bootstrap util/index.js 3462 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3463 * -------------------------------------------------------------------------- 3464 */ 3465 3466const MAX_UID = 1000000; 3467const MILLISECONDS_MULTIPLIER = 1000; 3468const TRANSITION_END = 'transitionend'; 3469 3470/** 3471 * Properly escape IDs selectors to handle weird IDs 3472 * @param {string} selector 3473 * @returns {string} 3474 */ 3475const parseSelector = selector => { 3476 if (selector && window.CSS && window.CSS.escape) { 3477 // document.querySelector needs escaping to handle IDs (html5+) containing for instance / 3478 selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); 3479 } 3480 return selector; 3481}; 3482 3483// Shout-out Angus Croll (https://goo.gl/pxwQGp) 3484const toType = object => { 3485 if (object === null || object === undefined) { 3486 return `${object}`; 3487 } 3488 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 3489}; 3490 3491/** 3492 * Public Util API 3493 */ 3494 3495const getUID = prefix => { 3496 do { 3497 prefix += Math.floor(Math.random() * MAX_UID); 3498 } while (document.getElementById(prefix)); 3499 return prefix; 3500}; 3501const getTransitionDurationFromElement = element => { 3502 if (!element) { 3503 return 0; 3504 } 3505 3506 // Get transition-duration of the element 3507 let { 3508 transitionDuration, 3509 transitionDelay 3510 } = window.getComputedStyle(element); 3511 const floatTransitionDuration = Number.parseFloat(transitionDuration); 3512 const floatTransitionDelay = Number.parseFloat(transitionDelay); 3513 3514 // Return 0 if element or transition duration is not found 3515 if (!floatTransitionDuration && !floatTransitionDelay) { 3516 return 0; 3517 } 3518 3519 // If multiple durations are defined, take the first 3520 transitionDuration = transitionDuration.split(',')[0]; 3521 transitionDelay = transitionDelay.split(',')[0]; 3522 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 3523}; 3524const triggerTransitionEnd = element => { 3525 element.dispatchEvent(new Event(TRANSITION_END)); 3526}; 3527const isElement = object => { 3528 if (!object || typeof object !== 'object') { 3529 return false; 3530 } 3531 if (typeof object.jquery !== 'undefined') { 3532 object = object[0]; 3533 } 3534 return typeof object.nodeType !== 'undefined'; 3535}; 3536const getElement = object => { 3537 // it's a jQuery object or a node element 3538 if (isElement(object)) { 3539 return object.jquery ? object[0] : object; 3540 } 3541 if (typeof object === 'string' && object.length > 0) { 3542 return document.querySelector(parseSelector(object)); 3543 } 3544 return null; 3545}; 3546const isVisible = element => { 3547 if (!isElement(element) || element.getClientRects().length === 0) { 3548 return false; 3549 } 3550 const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 3551 // Handle `details` element as its content may falsie appear visible when it is closed 3552 const closedDetails = element.closest('details:not([open])'); 3553 if (!closedDetails) { 3554 return elementIsVisible; 3555 } 3556 if (closedDetails !== element) { 3557 const summary = element.closest('summary'); 3558 if (summary && summary.parentNode !== closedDetails) { 3559 return false; 3560 } 3561 if (summary === null) { 3562 return false; 3563 } 3564 } 3565 return elementIsVisible; 3566}; 3567const isDisabled = element => { 3568 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 3569 return true; 3570 } 3571 if (element.classList.contains('disabled')) { 3572 return true; 3573 } 3574 if (typeof element.disabled !== 'undefined') { 3575 return element.disabled; 3576 } 3577 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 3578}; 3579const findShadowRoot = element => { 3580 if (!document.documentElement.attachShadow) { 3581 return null; 3582 } 3583 3584 // Can find the shadow root otherwise it'll return the document 3585 if (typeof element.getRootNode === 'function') { 3586 const root = element.getRootNode(); 3587 return root instanceof ShadowRoot ? root : null; 3588 } 3589 if (element instanceof ShadowRoot) { 3590 return element; 3591 } 3592 3593 // when we don't find a shadow root 3594 if (!element.parentNode) { 3595 return null; 3596 } 3597 return findShadowRoot(element.parentNode); 3598}; 3599const noop = () => {}; 3600 3601/** 3602 * Trick to restart an element's animation 3603 * 3604 * @param {HTMLElement} element 3605 * @return void 3606 * 3607 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 3608 */ 3609const reflow = element => { 3610 element.offsetHeight; // eslint-disable-line no-unused-expressions 3611}; 3612const getjQuery = () => { 3613 if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 3614 return window.jQuery; 3615 } 3616 return null; 3617}; 3618const DOMContentLoadedCallbacks = []; 3619const onDOMContentLoaded = callback => { 3620 if (document.readyState === 'loading') { 3621 // add listener on the first call when the document is in loading state 3622 if (!DOMContentLoadedCallbacks.length) { 3623 document.addEventListener('DOMContentLoaded', () => { 3624 for (const callback of DOMContentLoadedCallbacks) { 3625 callback(); 3626 } 3627 }); 3628 } 3629 DOMContentLoadedCallbacks.push(callback); 3630 } else { 3631 callback(); 3632 } 3633}; 3634const isRTL = () => document.documentElement.dir === 'rtl'; 3635const defineJQueryPlugin = plugin => { 3636 onDOMContentLoaded(() => { 3637 const $ = getjQuery(); 3638 /* istanbul ignore if */ 3639 if ($) { 3640 const name = plugin.NAME; 3641 const JQUERY_NO_CONFLICT = $.fn[name]; 3642 $.fn[name] = plugin.jQueryInterface; 3643 $.fn[name].Constructor = plugin; 3644 $.fn[name].noConflict = () => { 3645 $.fn[name] = JQUERY_NO_CONFLICT; 3646 return plugin.jQueryInterface; 3647 }; 3648 } 3649 }); 3650}; 3651const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { 3652 return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue; 3653}; 3654const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 3655 if (!waitForTransition) { 3656 execute(callback); 3657 return; 3658 } 3659 const durationPadding = 5; 3660 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; 3661 let called = false; 3662 const handler = ({ 3663 target 3664 }) => { 3665 if (target !== transitionElement) { 3666 return; 3667 } 3668 called = true; 3669 transitionElement.removeEventListener(TRANSITION_END, handler); 3670 execute(callback); 3671 }; 3672 transitionElement.addEventListener(TRANSITION_END, handler); 3673 setTimeout(() => { 3674 if (!called) { 3675 triggerTransitionEnd(transitionElement); 3676 } 3677 }, emulatedDuration); 3678}; 3679 3680/** 3681 * Return the previous/next element of a list. 3682 * 3683 * @param {array} list The list of elements 3684 * @param activeElement The active element 3685 * @param shouldGetNext Choose to get next or previous element 3686 * @param isCycleAllowed 3687 * @return {Element|elem} The proper element 3688 */ 3689const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 3690 const listLength = list.length; 3691 let index = list.indexOf(activeElement); 3692 3693 // if the element does not exist in the list return an element 3694 // depending on the direction and if cycle is allowed 3695 if (index === -1) { 3696 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 3697 } 3698 index += shouldGetNext ? 1 : -1; 3699 if (isCycleAllowed) { 3700 index = (index + listLength) % listLength; 3701 } 3702 return list[Math.max(0, Math.min(index, listLength - 1))]; 3703}; 3704 3705/** 3706 * -------------------------------------------------------------------------- 3707 * Bootstrap dom/event-handler.js 3708 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3709 * -------------------------------------------------------------------------- 3710 */ 3711 3712 3713/** 3714 * Constants 3715 */ 3716 3717const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 3718const stripNameRegex = /\..*/; 3719const stripUidRegex = /::\d+$/; 3720const eventRegistry = {}; // Events storage 3721let uidEvent = 1; 3722const customEvents = { 3723 mouseenter: 'mouseover', 3724 mouseleave: 'mouseout' 3725}; 3726const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); 3727 3728/** 3729 * Private methods 3730 */ 3731 3732function makeEventUid(element, uid) { 3733 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 3734} 3735function getElementEvents(element) { 3736 const uid = makeEventUid(element); 3737 element.uidEvent = uid; 3738 eventRegistry[uid] = eventRegistry[uid] || {}; 3739 return eventRegistry[uid]; 3740} 3741function bootstrapHandler(element, fn) { 3742 return function handler(event) { 3743 hydrateObj(event, { 3744 delegateTarget: element 3745 }); 3746 if (handler.oneOff) { 3747 EventHandler.off(element, event.type, fn); 3748 } 3749 return fn.apply(element, [event]); 3750 }; 3751} 3752function bootstrapDelegationHandler(element, selector, fn) { 3753 return function handler(event) { 3754 const domElements = element.querySelectorAll(selector); 3755 for (let { 3756 target 3757 } = event; target && target !== this; target = target.parentNode) { 3758 for (const domElement of domElements) { 3759 if (domElement !== target) { 3760 continue; 3761 } 3762 hydrateObj(event, { 3763 delegateTarget: target 3764 }); 3765 if (handler.oneOff) { 3766 EventHandler.off(element, event.type, selector, fn); 3767 } 3768 return fn.apply(target, [event]); 3769 } 3770 } 3771 }; 3772} 3773function findHandler(events, callable, delegationSelector = null) { 3774 return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); 3775} 3776function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 3777 const isDelegated = typeof handler === 'string'; 3778 // TODO: tooltip passes `false` instead of selector, so we need to check 3779 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 3780 let typeEvent = getTypeEvent(originalTypeEvent); 3781 if (!nativeEvents.has(typeEvent)) { 3782 typeEvent = originalTypeEvent; 3783 } 3784 return [isDelegated, callable, typeEvent]; 3785} 3786function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 3787 if (typeof originalTypeEvent !== 'string' || !element) { 3788 return; 3789 } 3790 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3791 3792 // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 3793 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 3794 if (originalTypeEvent in customEvents) { 3795 const wrapFunction = fn => { 3796 return function (event) { 3797 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 3798 return fn.call(this, event); 3799 } 3800 }; 3801 }; 3802 callable = wrapFunction(callable); 3803 } 3804 const events = getElementEvents(element); 3805 const handlers = events[typeEvent] || (events[typeEvent] = {}); 3806 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 3807 if (previousFunction) { 3808 previousFunction.oneOff = previousFunction.oneOff && oneOff; 3809 return; 3810 } 3811 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); 3812 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 3813 fn.delegationSelector = isDelegated ? handler : null; 3814 fn.callable = callable; 3815 fn.oneOff = oneOff; 3816 fn.uidEvent = uid; 3817 handlers[uid] = fn; 3818 element.addEventListener(typeEvent, fn, isDelegated); 3819} 3820function removeHandler(element, events, typeEvent, handler, delegationSelector) { 3821 const fn = findHandler(events[typeEvent], handler, delegationSelector); 3822 if (!fn) { 3823 return; 3824 } 3825 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 3826 delete events[typeEvent][fn.uidEvent]; 3827} 3828function removeNamespacedHandlers(element, events, typeEvent, namespace) { 3829 const storeElementEvent = events[typeEvent] || {}; 3830 for (const [handlerKey, event] of Object.entries(storeElementEvent)) { 3831 if (handlerKey.includes(namespace)) { 3832 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3833 } 3834 } 3835} 3836function getTypeEvent(event) { 3837 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 3838 event = event.replace(stripNameRegex, ''); 3839 return customEvents[event] || event; 3840} 3841const EventHandler = { 3842 on(element, event, handler, delegationFunction) { 3843 addHandler(element, event, handler, delegationFunction, false); 3844 }, 3845 one(element, event, handler, delegationFunction) { 3846 addHandler(element, event, handler, delegationFunction, true); 3847 }, 3848 off(element, originalTypeEvent, handler, delegationFunction) { 3849 if (typeof originalTypeEvent !== 'string' || !element) { 3850 return; 3851 } 3852 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3853 const inNamespace = typeEvent !== originalTypeEvent; 3854 const events = getElementEvents(element); 3855 const storeElementEvent = events[typeEvent] || {}; 3856 const isNamespace = originalTypeEvent.startsWith('.'); 3857 if (typeof callable !== 'undefined') { 3858 // Simplest case: handler is passed, remove that listener ONLY. 3859 if (!Object.keys(storeElementEvent).length) { 3860 return; 3861 } 3862 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 3863 return; 3864 } 3865 if (isNamespace) { 3866 for (const elementEvent of Object.keys(events)) { 3867 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 3868 } 3869 } 3870 for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { 3871 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 3872 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 3873 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3874 } 3875 } 3876 }, 3877 trigger(element, event, args) { 3878 if (typeof event !== 'string' || !element) { 3879 return null; 3880 } 3881 const $ = getjQuery(); 3882 const typeEvent = getTypeEvent(event); 3883 const inNamespace = event !== typeEvent; 3884 let jQueryEvent = null; 3885 let bubbles = true; 3886 let nativeDispatch = true; 3887 let defaultPrevented = false; 3888 if (inNamespace && $) { 3889 jQueryEvent = $.Event(event, args); 3890 $(element).trigger(jQueryEvent); 3891 bubbles = !jQueryEvent.isPropagationStopped(); 3892 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 3893 defaultPrevented = jQueryEvent.isDefaultPrevented(); 3894 } 3895 const evt = hydrateObj(new Event(event, { 3896 bubbles, 3897 cancelable: true 3898 }), args); 3899 if (defaultPrevented) { 3900 evt.preventDefault(); 3901 } 3902 if (nativeDispatch) { 3903 element.dispatchEvent(evt); 3904 } 3905 if (evt.defaultPrevented && jQueryEvent) { 3906 jQueryEvent.preventDefault(); 3907 } 3908 return evt; 3909 } 3910}; 3911function hydrateObj(obj, meta = {}) { 3912 for (const [key, value] of Object.entries(meta)) { 3913 try { 3914 obj[key] = value; 3915 } catch (_unused) { 3916 Object.defineProperty(obj, key, { 3917 configurable: true, 3918 get() { 3919 return value; 3920 } 3921 }); 3922 } 3923 } 3924 return obj; 3925} 3926 3927/** 3928 * -------------------------------------------------------------------------- 3929 * Bootstrap dom/manipulator.js 3930 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3931 * -------------------------------------------------------------------------- 3932 */ 3933 3934function normalizeData(value) { 3935 if (value === 'true') { 3936 return true; 3937 } 3938 if (value === 'false') { 3939 return false; 3940 } 3941 if (value === Number(value).toString()) { 3942 return Number(value); 3943 } 3944 if (value === '' || value === 'null') { 3945 return null; 3946 } 3947 if (typeof value !== 'string') { 3948 return value; 3949 } 3950 try { 3951 return JSON.parse(decodeURIComponent(value)); 3952 } catch (_unused) { 3953 return value; 3954 } 3955} 3956function normalizeDataKey(key) { 3957 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 3958} 3959const Manipulator = { 3960 setDataAttribute(element, key, value) { 3961 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 3962 }, 3963 removeDataAttribute(element, key) { 3964 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 3965 }, 3966 getDataAttributes(element) { 3967 if (!element) { 3968 return {}; 3969 } 3970 const attributes = {}; 3971 const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); 3972 for (const key of bsKeys) { 3973 let pureKey = key.replace(/^bs/, ''); 3974 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 3975 attributes[pureKey] = normalizeData(element.dataset[key]); 3976 } 3977 return attributes; 3978 }, 3979 getDataAttribute(element, key) { 3980 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 3981 } 3982}; 3983 3984/** 3985 * -------------------------------------------------------------------------- 3986 * Bootstrap util/config.js 3987 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3988 * -------------------------------------------------------------------------- 3989 */ 3990 3991 3992/** 3993 * Class definition 3994 */ 3995 3996class Config { 3997 // Getters 3998 static get Default() { 3999 return {}; 4000 } 4001 static get DefaultType() { 4002 return {}; 4003 } 4004 static get NAME() { 4005 throw new Error('You have to implement the static method "NAME", for each component!'); 4006 } 4007 _getConfig(config) { 4008 config = this._mergeConfigObj(config); 4009 config = this._configAfterMerge(config); 4010 this._typeCheckConfig(config); 4011 return config; 4012 } 4013 _configAfterMerge(config) { 4014 return config; 4015 } 4016 _mergeConfigObj(config, element) { 4017 const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse 4018 4019 return { 4020 ...this.constructor.Default, 4021 ...(typeof jsonConfig === 'object' ? jsonConfig : {}), 4022 ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}), 4023 ...(typeof config === 'object' ? config : {}) 4024 }; 4025 } 4026 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 4027 for (const [property, expectedTypes] of Object.entries(configTypes)) { 4028 const value = config[property]; 4029 const valueType = isElement(value) ? 'element' : toType(value); 4030 if (!new RegExp(expectedTypes).test(valueType)) { 4031 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 4032 } 4033 } 4034 } 4035} 4036 4037/** 4038 * -------------------------------------------------------------------------- 4039 * Bootstrap base-component.js 4040 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4041 * -------------------------------------------------------------------------- 4042 */ 4043 4044 4045/** 4046 * Constants 4047 */ 4048 4049const VERSION = '5.3.3'; 4050 4051/** 4052 * Class definition 4053 */ 4054 4055class BaseComponent extends Config { 4056 constructor(element, config) { 4057 super(); 4058 element = getElement(element); 4059 if (!element) { 4060 return; 4061 } 4062 this._element = element; 4063 this._config = this._getConfig(config); 4064 Data.set(this._element, this.constructor.DATA_KEY, this); 4065 } 4066 4067 // Public 4068 dispose() { 4069 Data.remove(this._element, this.constructor.DATA_KEY); 4070 EventHandler.off(this._element, this.constructor.EVENT_KEY); 4071 for (const propertyName of Object.getOwnPropertyNames(this)) { 4072 this[propertyName] = null; 4073 } 4074 } 4075 _queueCallback(callback, element, isAnimated = true) { 4076 executeAfterTransition(callback, element, isAnimated); 4077 } 4078 _getConfig(config) { 4079 config = this._mergeConfigObj(config, this._element); 4080 config = this._configAfterMerge(config); 4081 this._typeCheckConfig(config); 4082 return config; 4083 } 4084 4085 // Static 4086 static getInstance(element) { 4087 return Data.get(getElement(element), this.DATA_KEY); 4088 } 4089 static getOrCreateInstance(element, config = {}) { 4090 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 4091 } 4092 static get VERSION() { 4093 return VERSION; 4094 } 4095 static get DATA_KEY() { 4096 return `bs.${this.NAME}`; 4097 } 4098 static get EVENT_KEY() { 4099 return `.${this.DATA_KEY}`; 4100 } 4101 static eventName(name) { 4102 return `${name}${this.EVENT_KEY}`; 4103 } 4104} 4105 4106/** 4107 * -------------------------------------------------------------------------- 4108 * Bootstrap dom/selector-engine.js 4109 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4110 * -------------------------------------------------------------------------- 4111 */ 4112 4113const getSelector = element => { 4114 let selector = element.getAttribute('data-bs-target'); 4115 if (!selector || selector === '#') { 4116 let hrefAttribute = element.getAttribute('href'); 4117 4118 // The only valid content that could double as a selector are IDs or classes, 4119 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 4120 // `document.querySelector` will rightfully complain it is invalid. 4121 // See https://github.com/twbs/bootstrap/issues/32273 4122 if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { 4123 return null; 4124 } 4125 4126 // Just in case some CMS puts out a full URL with the anchor appended 4127 if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { 4128 hrefAttribute = `#${hrefAttribute.split('#')[1]}`; 4129 } 4130 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; 4131 } 4132 return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null; 4133}; 4134const SelectorEngine = { 4135 find(selector, element = document.documentElement) { 4136 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 4137 }, 4138 findOne(selector, element = document.documentElement) { 4139 return Element.prototype.querySelector.call(element, selector); 4140 }, 4141 children(element, selector) { 4142 return [].concat(...element.children).filter(child => child.matches(selector)); 4143 }, 4144 parents(element, selector) { 4145 const parents = []; 4146 let ancestor = element.parentNode.closest(selector); 4147 while (ancestor) { 4148 parents.push(ancestor); 4149 ancestor = ancestor.parentNode.closest(selector); 4150 } 4151 return parents; 4152 }, 4153 prev(element, selector) { 4154 let previous = element.previousElementSibling; 4155 while (previous) { 4156 if (previous.matches(selector)) { 4157 return [previous]; 4158 } 4159 previous = previous.previousElementSibling; 4160 } 4161 return []; 4162 }, 4163 // TODO: this is now unused; remove later along with prev() 4164 next(element, selector) { 4165 let next = element.nextElementSibling; 4166 while (next) { 4167 if (next.matches(selector)) { 4168 return [next]; 4169 } 4170 next = next.nextElementSibling; 4171 } 4172 return []; 4173 }, 4174 focusableChildren(element) { 4175 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); 4176 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 4177 }, 4178 getSelectorFromElement(element) { 4179 const selector = getSelector(element); 4180 if (selector) { 4181 return SelectorEngine.findOne(selector) ? selector : null; 4182 } 4183 return null; 4184 }, 4185 getElementFromSelector(element) { 4186 const selector = getSelector(element); 4187 return selector ? SelectorEngine.findOne(selector) : null; 4188 }, 4189 getMultipleElementsFromSelector(element) { 4190 const selector = getSelector(element); 4191 return selector ? SelectorEngine.find(selector) : []; 4192 } 4193}; 4194 4195/** 4196 * -------------------------------------------------------------------------- 4197 * Bootstrap util/component-functions.js 4198 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4199 * -------------------------------------------------------------------------- 4200 */ 4201 4202const enableDismissTrigger = (component, method = 'hide') => { 4203 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 4204 const name = component.NAME; 4205 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 4206 if (['A', 'AREA'].includes(this.tagName)) { 4207 event.preventDefault(); 4208 } 4209 if (isDisabled(this)) { 4210 return; 4211 } 4212 const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`); 4213 const instance = component.getOrCreateInstance(target); 4214 4215 // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 4216 instance[method](); 4217 }); 4218}; 4219 4220/** 4221 * -------------------------------------------------------------------------- 4222 * Bootstrap alert.js 4223 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4224 * -------------------------------------------------------------------------- 4225 */ 4226 4227 4228/** 4229 * Constants 4230 */ 4231 4232const NAME$f = 'alert'; 4233const DATA_KEY$a = 'bs.alert'; 4234const EVENT_KEY$b = `.${DATA_KEY$a}`; 4235const EVENT_CLOSE = `close${EVENT_KEY$b}`; 4236const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 4237const CLASS_NAME_FADE$5 = 'fade'; 4238const CLASS_NAME_SHOW$8 = 'show'; 4239 4240/** 4241 * Class definition 4242 */ 4243 4244class Alert extends BaseComponent { 4245 // Getters 4246 static get NAME() { 4247 return NAME$f; 4248 } 4249 4250 // Public 4251 close() { 4252 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 4253 if (closeEvent.defaultPrevented) { 4254 return; 4255 } 4256 this._element.classList.remove(CLASS_NAME_SHOW$8); 4257 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 4258 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 4259 } 4260 4261 // Private 4262 _destroyElement() { 4263 this._element.remove(); 4264 EventHandler.trigger(this._element, EVENT_CLOSED); 4265 this.dispose(); 4266 } 4267 4268 // Static 4269 static jQueryInterface(config) { 4270 return this.each(function () { 4271 const data = Alert.getOrCreateInstance(this); 4272 if (typeof config !== 'string') { 4273 return; 4274 } 4275 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 4276 throw new TypeError(`No method named "${config}"`); 4277 } 4278 data[config](this); 4279 }); 4280 } 4281} 4282 4283/** 4284 * Data API implementation 4285 */ 4286 4287enableDismissTrigger(Alert, 'close'); 4288 4289/** 4290 * jQuery 4291 */ 4292 4293defineJQueryPlugin(Alert); 4294 4295/** 4296 * -------------------------------------------------------------------------- 4297 * Bootstrap button.js 4298 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4299 * -------------------------------------------------------------------------- 4300 */ 4301 4302 4303/** 4304 * Constants 4305 */ 4306 4307const NAME$e = 'button'; 4308const DATA_KEY$9 = 'bs.button'; 4309const EVENT_KEY$a = `.${DATA_KEY$9}`; 4310const DATA_API_KEY$6 = '.data-api'; 4311const CLASS_NAME_ACTIVE$3 = 'active'; 4312const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 4313const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 4314 4315/** 4316 * Class definition 4317 */ 4318 4319class Button extends BaseComponent { 4320 // Getters 4321 static get NAME() { 4322 return NAME$e; 4323 } 4324 4325 // Public 4326 toggle() { 4327 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 4328 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 4329 } 4330 4331 // Static 4332 static jQueryInterface(config) { 4333 return this.each(function () { 4334 const data = Button.getOrCreateInstance(this); 4335 if (config === 'toggle') { 4336 data[config](); 4337 } 4338 }); 4339 } 4340} 4341 4342/** 4343 * Data API implementation 4344 */ 4345 4346EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 4347 event.preventDefault(); 4348 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 4349 const data = Button.getOrCreateInstance(button); 4350 data.toggle(); 4351}); 4352 4353/** 4354 * jQuery 4355 */ 4356 4357defineJQueryPlugin(Button); 4358 4359/** 4360 * -------------------------------------------------------------------------- 4361 * Bootstrap util/swipe.js 4362 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4363 * -------------------------------------------------------------------------- 4364 */ 4365 4366 4367/** 4368 * Constants 4369 */ 4370 4371const NAME$d = 'swipe'; 4372const EVENT_KEY$9 = '.bs.swipe'; 4373const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 4374const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 4375const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 4376const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 4377const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 4378const POINTER_TYPE_TOUCH = 'touch'; 4379const POINTER_TYPE_PEN = 'pen'; 4380const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 4381const SWIPE_THRESHOLD = 40; 4382const Default$c = { 4383 endCallback: null, 4384 leftCallback: null, 4385 rightCallback: null 4386}; 4387const DefaultType$c = { 4388 endCallback: '(function|null)', 4389 leftCallback: '(function|null)', 4390 rightCallback: '(function|null)' 4391}; 4392 4393/** 4394 * Class definition 4395 */ 4396 4397class Swipe extends Config { 4398 constructor(element, config) { 4399 super(); 4400 this._element = element; 4401 if (!element || !Swipe.isSupported()) { 4402 return; 4403 } 4404 this._config = this._getConfig(config); 4405 this._deltaX = 0; 4406 this._supportPointerEvents = Boolean(window.PointerEvent); 4407 this._initEvents(); 4408 } 4409 4410 // Getters 4411 static get Default() { 4412 return Default$c; 4413 } 4414 static get DefaultType() { 4415 return DefaultType$c; 4416 } 4417 static get NAME() { 4418 return NAME$d; 4419 } 4420 4421 // Public 4422 dispose() { 4423 EventHandler.off(this._element, EVENT_KEY$9); 4424 } 4425 4426 // Private 4427 _start(event) { 4428 if (!this._supportPointerEvents) { 4429 this._deltaX = event.touches[0].clientX; 4430 return; 4431 } 4432 if (this._eventIsPointerPenTouch(event)) { 4433 this._deltaX = event.clientX; 4434 } 4435 } 4436 _end(event) { 4437 if (this._eventIsPointerPenTouch(event)) { 4438 this._deltaX = event.clientX - this._deltaX; 4439 } 4440 this._handleSwipe(); 4441 execute(this._config.endCallback); 4442 } 4443 _move(event) { 4444 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 4445 } 4446 _handleSwipe() { 4447 const absDeltaX = Math.abs(this._deltaX); 4448 if (absDeltaX <= SWIPE_THRESHOLD) { 4449 return; 4450 } 4451 const direction = absDeltaX / this._deltaX; 4452 this._deltaX = 0; 4453 if (!direction) { 4454 return; 4455 } 4456 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 4457 } 4458 _initEvents() { 4459 if (this._supportPointerEvents) { 4460 EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); 4461 EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); 4462 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 4463 } else { 4464 EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); 4465 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); 4466 EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); 4467 } 4468 } 4469 _eventIsPointerPenTouch(event) { 4470 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 4471 } 4472 4473 // Static 4474 static isSupported() { 4475 return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 4476 } 4477} 4478 4479/** 4480 * -------------------------------------------------------------------------- 4481 * Bootstrap carousel.js 4482 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4483 * -------------------------------------------------------------------------- 4484 */ 4485 4486 4487/** 4488 * Constants 4489 */ 4490 4491const NAME$c = 'carousel'; 4492const DATA_KEY$8 = 'bs.carousel'; 4493const EVENT_KEY$8 = `.${DATA_KEY$8}`; 4494const DATA_API_KEY$5 = '.data-api'; 4495const ARROW_LEFT_KEY$1 = 'ArrowLeft'; 4496const ARROW_RIGHT_KEY$1 = 'ArrowRight'; 4497const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 4498 4499const ORDER_NEXT = 'next'; 4500const ORDER_PREV = 'prev'; 4501const DIRECTION_LEFT = 'left'; 4502const DIRECTION_RIGHT = 'right'; 4503const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 4504const EVENT_SLID = `slid${EVENT_KEY$8}`; 4505const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 4506const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 4507const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 4508const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 4509const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 4510const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 4511const CLASS_NAME_CAROUSEL = 'carousel'; 4512const CLASS_NAME_ACTIVE$2 = 'active'; 4513const CLASS_NAME_SLIDE = 'slide'; 4514const CLASS_NAME_END = 'carousel-item-end'; 4515const CLASS_NAME_START = 'carousel-item-start'; 4516const CLASS_NAME_NEXT = 'carousel-item-next'; 4517const CLASS_NAME_PREV = 'carousel-item-prev'; 4518const SELECTOR_ACTIVE = '.active'; 4519const SELECTOR_ITEM = '.carousel-item'; 4520const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 4521const SELECTOR_ITEM_IMG = '.carousel-item img'; 4522const SELECTOR_INDICATORS = '.carousel-indicators'; 4523const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 4524const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 4525const KEY_TO_DIRECTION = { 4526 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 4527 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 4528}; 4529const Default$b = { 4530 interval: 5000, 4531 keyboard: true, 4532 pause: 'hover', 4533 ride: false, 4534 touch: true, 4535 wrap: true 4536}; 4537const DefaultType$b = { 4538 interval: '(number|boolean)', 4539 // TODO:v6 remove boolean support 4540 keyboard: 'boolean', 4541 pause: '(string|boolean)', 4542 ride: '(boolean|string)', 4543 touch: 'boolean', 4544 wrap: 'boolean' 4545}; 4546 4547/** 4548 * Class definition 4549 */ 4550 4551class Carousel extends BaseComponent { 4552 constructor(element, config) { 4553 super(element, config); 4554 this._interval = null; 4555 this._activeElement = null; 4556 this._isSliding = false; 4557 this.touchTimeout = null; 4558 this._swipeHelper = null; 4559 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 4560 this._addEventListeners(); 4561 if (this._config.ride === CLASS_NAME_CAROUSEL) { 4562 this.cycle(); 4563 } 4564 } 4565 4566 // Getters 4567 static get Default() { 4568 return Default$b; 4569 } 4570 static get DefaultType() { 4571 return DefaultType$b; 4572 } 4573 static get NAME() { 4574 return NAME$c; 4575 } 4576 4577 // Public 4578 next() { 4579 this._slide(ORDER_NEXT); 4580 } 4581 nextWhenVisible() { 4582 // FIXME TODO use `document.visibilityState` 4583 // Don't call next when the page isn't visible 4584 // or the carousel or its parent isn't visible 4585 if (!document.hidden && isVisible(this._element)) { 4586 this.next(); 4587 } 4588 } 4589 prev() { 4590 this._slide(ORDER_PREV); 4591 } 4592 pause() { 4593 if (this._isSliding) { 4594 triggerTransitionEnd(this._element); 4595 } 4596 this._clearInterval(); 4597 } 4598 cycle() { 4599 this._clearInterval(); 4600 this._updateInterval(); 4601 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 4602 } 4603 _maybeEnableCycle() { 4604 if (!this._config.ride) { 4605 return; 4606 } 4607 if (this._isSliding) { 4608 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 4609 return; 4610 } 4611 this.cycle(); 4612 } 4613 to(index) { 4614 const items = this._getItems(); 4615 if (index > items.length - 1 || index < 0) { 4616 return; 4617 } 4618 if (this._isSliding) { 4619 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 4620 return; 4621 } 4622 const activeIndex = this._getItemIndex(this._getActive()); 4623 if (activeIndex === index) { 4624 return; 4625 } 4626 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 4627 this._slide(order, items[index]); 4628 } 4629 dispose() { 4630 if (this._swipeHelper) { 4631 this._swipeHelper.dispose(); 4632 } 4633 super.dispose(); 4634 } 4635 4636 // Private 4637 _configAfterMerge(config) { 4638 config.defaultInterval = config.interval; 4639 return config; 4640 } 4641 _addEventListeners() { 4642 if (this._config.keyboard) { 4643 EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); 4644 } 4645 if (this._config.pause === 'hover') { 4646 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 4647 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 4648 } 4649 if (this._config.touch && Swipe.isSupported()) { 4650 this._addTouchEventListeners(); 4651 } 4652 } 4653 _addTouchEventListeners() { 4654 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 4655 EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); 4656 } 4657 const endCallBack = () => { 4658 if (this._config.pause !== 'hover') { 4659 return; 4660 } 4661 4662 // If it's a touch-enabled device, mouseenter/leave are fired as 4663 // part of the mouse compatibility events on first tap - the carousel 4664 // would stop cycling until user tapped out of it; 4665 // here, we listen for touchend, explicitly pause the carousel 4666 // (as if it's the second time we tap on it, mouseenter compat event 4667 // is NOT fired) and after a timeout (to allow for mouse compatibility 4668 // events to fire) we explicitly restart cycling 4669 4670 this.pause(); 4671 if (this.touchTimeout) { 4672 clearTimeout(this.touchTimeout); 4673 } 4674 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 4675 }; 4676 const swipeConfig = { 4677 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 4678 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 4679 endCallback: endCallBack 4680 }; 4681 this._swipeHelper = new Swipe(this._element, swipeConfig); 4682 } 4683 _keydown(event) { 4684 if (/input|textarea/i.test(event.target.tagName)) { 4685 return; 4686 } 4687 const direction = KEY_TO_DIRECTION[event.key]; 4688 if (direction) { 4689 event.preventDefault(); 4690 this._slide(this._directionToOrder(direction)); 4691 } 4692 } 4693 _getItemIndex(element) { 4694 return this._getItems().indexOf(element); 4695 } 4696 _setActiveIndicatorElement(index) { 4697 if (!this._indicatorsElement) { 4698 return; 4699 } 4700 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 4701 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 4702 activeIndicator.removeAttribute('aria-current'); 4703 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 4704 if (newActiveIndicator) { 4705 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 4706 newActiveIndicator.setAttribute('aria-current', 'true'); 4707 } 4708 } 4709 _updateInterval() { 4710 const element = this._activeElement || this._getActive(); 4711 if (!element) { 4712 return; 4713 } 4714 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 4715 this._config.interval = elementInterval || this._config.defaultInterval; 4716 } 4717 _slide(order, element = null) { 4718 if (this._isSliding) { 4719 return; 4720 } 4721 const activeElement = this._getActive(); 4722 const isNext = order === ORDER_NEXT; 4723 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 4724 if (nextElement === activeElement) { 4725 return; 4726 } 4727 const nextElementIndex = this._getItemIndex(nextElement); 4728 const triggerEvent = eventName => { 4729 return EventHandler.trigger(this._element, eventName, { 4730 relatedTarget: nextElement, 4731 direction: this._orderToDirection(order), 4732 from: this._getItemIndex(activeElement), 4733 to: nextElementIndex 4734 }); 4735 }; 4736 const slideEvent = triggerEvent(EVENT_SLIDE); 4737 if (slideEvent.defaultPrevented) { 4738 return; 4739 } 4740 if (!activeElement || !nextElement) { 4741 // Some weirdness is happening, so we bail 4742 // TODO: change tests that use empty divs to avoid this check 4743 return; 4744 } 4745 const isCycling = Boolean(this._interval); 4746 this.pause(); 4747 this._isSliding = true; 4748 this._setActiveIndicatorElement(nextElementIndex); 4749 this._activeElement = nextElement; 4750 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 4751 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 4752 nextElement.classList.add(orderClassName); 4753 reflow(nextElement); 4754 activeElement.classList.add(directionalClassName); 4755 nextElement.classList.add(directionalClassName); 4756 const completeCallBack = () => { 4757 nextElement.classList.remove(directionalClassName, orderClassName); 4758 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 4759 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 4760 this._isSliding = false; 4761 triggerEvent(EVENT_SLID); 4762 }; 4763 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 4764 if (isCycling) { 4765 this.cycle(); 4766 } 4767 } 4768 _isAnimated() { 4769 return this._element.classList.contains(CLASS_NAME_SLIDE); 4770 } 4771 _getActive() { 4772 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 4773 } 4774 _getItems() { 4775 return SelectorEngine.find(SELECTOR_ITEM, this._element); 4776 } 4777 _clearInterval() { 4778 if (this._interval) { 4779 clearInterval(this._interval); 4780 this._interval = null; 4781 } 4782 } 4783 _directionToOrder(direction) { 4784 if (isRTL()) { 4785 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 4786 } 4787 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 4788 } 4789 _orderToDirection(order) { 4790 if (isRTL()) { 4791 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 4792 } 4793 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 4794 } 4795 4796 // Static 4797 static jQueryInterface(config) { 4798 return this.each(function () { 4799 const data = Carousel.getOrCreateInstance(this, config); 4800 if (typeof config === 'number') { 4801 data.to(config); 4802 return; 4803 } 4804 if (typeof config === 'string') { 4805 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 4806 throw new TypeError(`No method named "${config}"`); 4807 } 4808 data[config](); 4809 } 4810 }); 4811 } 4812} 4813 4814/** 4815 * Data API implementation 4816 */ 4817 4818EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { 4819 const target = SelectorEngine.getElementFromSelector(this); 4820 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 4821 return; 4822 } 4823 event.preventDefault(); 4824 const carousel = Carousel.getOrCreateInstance(target); 4825 const slideIndex = this.getAttribute('data-bs-slide-to'); 4826 if (slideIndex) { 4827 carousel.to(slideIndex); 4828 carousel._maybeEnableCycle(); 4829 return; 4830 } 4831 if (Manipulator.getDataAttribute(this, 'slide') === 'next') { 4832 carousel.next(); 4833 carousel._maybeEnableCycle(); 4834 return; 4835 } 4836 carousel.prev(); 4837 carousel._maybeEnableCycle(); 4838}); 4839EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 4840 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 4841 for (const carousel of carousels) { 4842 Carousel.getOrCreateInstance(carousel); 4843 } 4844}); 4845 4846/** 4847 * jQuery 4848 */ 4849 4850defineJQueryPlugin(Carousel); 4851 4852/** 4853 * -------------------------------------------------------------------------- 4854 * Bootstrap collapse.js 4855 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4856 * -------------------------------------------------------------------------- 4857 */ 4858 4859 4860/** 4861 * Constants 4862 */ 4863 4864const NAME$b = 'collapse'; 4865const DATA_KEY$7 = 'bs.collapse'; 4866const EVENT_KEY$7 = `.${DATA_KEY$7}`; 4867const DATA_API_KEY$4 = '.data-api'; 4868const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 4869const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 4870const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 4871const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 4872const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 4873const CLASS_NAME_SHOW$7 = 'show'; 4874const CLASS_NAME_COLLAPSE = 'collapse'; 4875const CLASS_NAME_COLLAPSING = 'collapsing'; 4876const CLASS_NAME_COLLAPSED = 'collapsed'; 4877const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 4878const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 4879const WIDTH = 'width'; 4880const HEIGHT = 'height'; 4881const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 4882const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 4883const Default$a = { 4884 parent: null, 4885 toggle: true 4886}; 4887const DefaultType$a = { 4888 parent: '(null|element)', 4889 toggle: 'boolean' 4890}; 4891 4892/** 4893 * Class definition 4894 */ 4895 4896class Collapse extends BaseComponent { 4897 constructor(element, config) { 4898 super(element, config); 4899 this._isTransitioning = false; 4900 this._triggerArray = []; 4901 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 4902 for (const elem of toggleList) { 4903 const selector = SelectorEngine.getSelectorFromElement(elem); 4904 const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); 4905 if (selector !== null && filterElement.length) { 4906 this._triggerArray.push(elem); 4907 } 4908 } 4909 this._initializeChildren(); 4910 if (!this._config.parent) { 4911 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 4912 } 4913 if (this._config.toggle) { 4914 this.toggle(); 4915 } 4916 } 4917 4918 // Getters 4919 static get Default() { 4920 return Default$a; 4921 } 4922 static get DefaultType() { 4923 return DefaultType$a; 4924 } 4925 static get NAME() { 4926 return NAME$b; 4927 } 4928 4929 // Public 4930 toggle() { 4931 if (this._isShown()) { 4932 this.hide(); 4933 } else { 4934 this.show(); 4935 } 4936 } 4937 show() { 4938 if (this._isTransitioning || this._isShown()) { 4939 return; 4940 } 4941 let activeChildren = []; 4942 4943 // find active children 4944 if (this._config.parent) { 4945 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { 4946 toggle: false 4947 })); 4948 } 4949 if (activeChildren.length && activeChildren[0]._isTransitioning) { 4950 return; 4951 } 4952 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 4953 if (startEvent.defaultPrevented) { 4954 return; 4955 } 4956 for (const activeInstance of activeChildren) { 4957 activeInstance.hide(); 4958 } 4959 const dimension = this._getDimension(); 4960 this._element.classList.remove(CLASS_NAME_COLLAPSE); 4961 this._element.classList.add(CLASS_NAME_COLLAPSING); 4962 this._element.style[dimension] = 0; 4963 this._addAriaAndCollapsedClass(this._triggerArray, true); 4964 this._isTransitioning = true; 4965 const complete = () => { 4966 this._isTransitioning = false; 4967 this._element.classList.remove(CLASS_NAME_COLLAPSING); 4968 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 4969 this._element.style[dimension] = ''; 4970 EventHandler.trigger(this._element, EVENT_SHOWN$6); 4971 }; 4972 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 4973 const scrollSize = `scroll${capitalizedDimension}`; 4974 this._queueCallback(complete, this._element, true); 4975 this._element.style[dimension] = `${this._element[scrollSize]}px`; 4976 } 4977 hide() { 4978 if (this._isTransitioning || !this._isShown()) { 4979 return; 4980 } 4981 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 4982 if (startEvent.defaultPrevented) { 4983 return; 4984 } 4985 const dimension = this._getDimension(); 4986 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 4987 reflow(this._element); 4988 this._element.classList.add(CLASS_NAME_COLLAPSING); 4989 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 4990 for (const trigger of this._triggerArray) { 4991 const element = SelectorEngine.getElementFromSelector(trigger); 4992 if (element && !this._isShown(element)) { 4993 this._addAriaAndCollapsedClass([trigger], false); 4994 } 4995 } 4996 this._isTransitioning = true; 4997 const complete = () => { 4998 this._isTransitioning = false; 4999 this._element.classList.remove(CLASS_NAME_COLLAPSING); 5000 this._element.classList.add(CLASS_NAME_COLLAPSE); 5001 EventHandler.trigger(this._element, EVENT_HIDDEN$6); 5002 }; 5003 this._element.style[dimension] = ''; 5004 this._queueCallback(complete, this._element, true); 5005 } 5006 _isShown(element = this._element) { 5007 return element.classList.contains(CLASS_NAME_SHOW$7); 5008 } 5009 5010 // Private 5011 _configAfterMerge(config) { 5012 config.toggle = Boolean(config.toggle); // Coerce string values 5013 config.parent = getElement(config.parent); 5014 return config; 5015 } 5016 _getDimension() { 5017 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 5018 } 5019 _initializeChildren() { 5020 if (!this._config.parent) { 5021 return; 5022 } 5023 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 5024 for (const element of children) { 5025 const selected = SelectorEngine.getElementFromSelector(element); 5026 if (selected) { 5027 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 5028 } 5029 } 5030 } 5031 _getFirstLevelChildren(selector) { 5032 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 5033 // remove children if greater depth 5034 return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); 5035 } 5036 _addAriaAndCollapsedClass(triggerArray, isOpen) { 5037 if (!triggerArray.length) { 5038 return; 5039 } 5040 for (const element of triggerArray) { 5041 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 5042 element.setAttribute('aria-expanded', isOpen); 5043 } 5044 } 5045 5046 // Static 5047 static jQueryInterface(config) { 5048 const _config = {}; 5049 if (typeof config === 'string' && /show|hide/.test(config)) { 5050 _config.toggle = false; 5051 } 5052 return this.each(function () { 5053 const data = Collapse.getOrCreateInstance(this, _config); 5054 if (typeof config === 'string') { 5055 if (typeof data[config] === 'undefined') { 5056 throw new TypeError(`No method named "${config}"`); 5057 } 5058 data[config](); 5059 } 5060 }); 5061 } 5062} 5063 5064/** 5065 * Data API implementation 5066 */ 5067 5068EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 5069 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 5070 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 5071 event.preventDefault(); 5072 } 5073 for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) { 5074 Collapse.getOrCreateInstance(element, { 5075 toggle: false 5076 }).toggle(); 5077 } 5078}); 5079 5080/** 5081 * jQuery 5082 */ 5083 5084defineJQueryPlugin(Collapse); 5085 5086/** 5087 * -------------------------------------------------------------------------- 5088 * Bootstrap dropdown.js 5089 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5090 * -------------------------------------------------------------------------- 5091 */ 5092 5093 5094/** 5095 * Constants 5096 */ 5097 5098const NAME$a = 'dropdown'; 5099const DATA_KEY$6 = 'bs.dropdown'; 5100const EVENT_KEY$6 = `.${DATA_KEY$6}`; 5101const DATA_API_KEY$3 = '.data-api'; 5102const ESCAPE_KEY$2 = 'Escape'; 5103const TAB_KEY$1 = 'Tab'; 5104const ARROW_UP_KEY$1 = 'ArrowUp'; 5105const ARROW_DOWN_KEY$1 = 'ArrowDown'; 5106const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 5107 5108const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 5109const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 5110const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 5111const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 5112const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 5113const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 5114const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 5115const CLASS_NAME_SHOW$6 = 'show'; 5116const CLASS_NAME_DROPUP = 'dropup'; 5117const CLASS_NAME_DROPEND = 'dropend'; 5118const CLASS_NAME_DROPSTART = 'dropstart'; 5119const CLASS_NAME_DROPUP_CENTER = 'dropup-center'; 5120const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'; 5121const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 5122const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 5123const SELECTOR_MENU = '.dropdown-menu'; 5124const SELECTOR_NAVBAR = '.navbar'; 5125const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 5126const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 5127const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 5128const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 5129const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 5130const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 5131const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 5132const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 5133const PLACEMENT_TOPCENTER = 'top'; 5134const PLACEMENT_BOTTOMCENTER = 'bottom'; 5135const Default$9 = { 5136 autoClose: true, 5137 boundary: 'clippingParents', 5138 display: 'dynamic', 5139 offset: [0, 2], 5140 popperConfig: null, 5141 reference: 'toggle' 5142}; 5143const DefaultType$9 = { 5144 autoClose: '(boolean|string)', 5145 boundary: '(string|element)', 5146 display: 'string', 5147 offset: '(array|string|function)', 5148 popperConfig: '(null|object|function)', 5149 reference: '(string|element|object)' 5150}; 5151 5152/** 5153 * Class definition 5154 */ 5155 5156class Dropdown extends BaseComponent { 5157 constructor(element, config) { 5158 super(element, config); 5159 this._popper = null; 5160 this._parent = this._element.parentNode; // dropdown wrapper 5161 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 5162 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 5163 this._inNavbar = this._detectNavbar(); 5164 } 5165 5166 // Getters 5167 static get Default() { 5168 return Default$9; 5169 } 5170 static get DefaultType() { 5171 return DefaultType$9; 5172 } 5173 static get NAME() { 5174 return NAME$a; 5175 } 5176 5177 // Public 5178 toggle() { 5179 return this._isShown() ? this.hide() : this.show(); 5180 } 5181 show() { 5182 if (isDisabled(this._element) || this._isShown()) { 5183 return; 5184 } 5185 const relatedTarget = { 5186 relatedTarget: this._element 5187 }; 5188 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 5189 if (showEvent.defaultPrevented) { 5190 return; 5191 } 5192 this._createPopper(); 5193 5194 // If this is a touch-enabled device we add extra 5195 // empty mouseover listeners to the body's immediate children; 5196 // only needed because of broken event delegation on iOS 5197 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5198 if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 5199 for (const element of [].concat(...document.body.children)) { 5200 EventHandler.on(element, 'mouseover', noop); 5201 } 5202 } 5203 this._element.focus(); 5204 this._element.setAttribute('aria-expanded', true); 5205 this._menu.classList.add(CLASS_NAME_SHOW$6); 5206 this._element.classList.add(CLASS_NAME_SHOW$6); 5207 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 5208 } 5209 hide() { 5210 if (isDisabled(this._element) || !this._isShown()) { 5211 return; 5212 } 5213 const relatedTarget = { 5214 relatedTarget: this._element 5215 }; 5216 this._completeHide(relatedTarget); 5217 } 5218 dispose() { 5219 if (this._popper) { 5220 this._popper.destroy(); 5221 } 5222 super.dispose(); 5223 } 5224 update() { 5225 this._inNavbar = this._detectNavbar(); 5226 if (this._popper) { 5227 this._popper.update(); 5228 } 5229 } 5230 5231 // Private 5232 _completeHide(relatedTarget) { 5233 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 5234 if (hideEvent.defaultPrevented) { 5235 return; 5236 } 5237 5238 // If this is a touch-enabled device we remove the extra 5239 // empty mouseover listeners we added for iOS support 5240 if ('ontouchstart' in document.documentElement) { 5241 for (const element of [].concat(...document.body.children)) { 5242 EventHandler.off(element, 'mouseover', noop); 5243 } 5244 } 5245 if (this._popper) { 5246 this._popper.destroy(); 5247 } 5248 this._menu.classList.remove(CLASS_NAME_SHOW$6); 5249 this._element.classList.remove(CLASS_NAME_SHOW$6); 5250 this._element.setAttribute('aria-expanded', 'false'); 5251 Manipulator.removeDataAttribute(this._menu, 'popper'); 5252 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 5253 } 5254 _getConfig(config) { 5255 config = super._getConfig(config); 5256 if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 5257 // Popper virtual elements require a getBoundingClientRect method 5258 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 5259 } 5260 return config; 5261 } 5262 _createPopper() { 5263 if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') { 5264 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 5265 } 5266 let referenceElement = this._element; 5267 if (this._config.reference === 'parent') { 5268 referenceElement = this._parent; 5269 } else if (isElement(this._config.reference)) { 5270 referenceElement = getElement(this._config.reference); 5271 } else if (typeof this._config.reference === 'object') { 5272 referenceElement = this._config.reference; 5273 } 5274 const popperConfig = this._getPopperConfig(); 5275 this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(referenceElement, this._menu, popperConfig); 5276 } 5277 _isShown() { 5278 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 5279 } 5280 _getPlacement() { 5281 const parentDropdown = this._parent; 5282 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 5283 return PLACEMENT_RIGHT; 5284 } 5285 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 5286 return PLACEMENT_LEFT; 5287 } 5288 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 5289 return PLACEMENT_TOPCENTER; 5290 } 5291 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { 5292 return PLACEMENT_BOTTOMCENTER; 5293 } 5294 5295 // We need to trim the value because custom properties can also include spaces 5296 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 5297 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 5298 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 5299 } 5300 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 5301 } 5302 _detectNavbar() { 5303 return this._element.closest(SELECTOR_NAVBAR) !== null; 5304 } 5305 _getOffset() { 5306 const { 5307 offset 5308 } = this._config; 5309 if (typeof offset === 'string') { 5310 return offset.split(',').map(value => Number.parseInt(value, 10)); 5311 } 5312 if (typeof offset === 'function') { 5313 return popperData => offset(popperData, this._element); 5314 } 5315 return offset; 5316 } 5317 _getPopperConfig() { 5318 const defaultBsPopperConfig = { 5319 placement: this._getPlacement(), 5320 modifiers: [{ 5321 name: 'preventOverflow', 5322 options: { 5323 boundary: this._config.boundary 5324 } 5325 }, { 5326 name: 'offset', 5327 options: { 5328 offset: this._getOffset() 5329 } 5330 }] 5331 }; 5332 5333 // Disable Popper if we have a static display or Dropdown is in Navbar 5334 if (this._inNavbar || this._config.display === 'static') { 5335 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove 5336 defaultBsPopperConfig.modifiers = [{ 5337 name: 'applyStyles', 5338 enabled: false 5339 }]; 5340 } 5341 return { 5342 ...defaultBsPopperConfig, 5343 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 5344 }; 5345 } 5346 _selectMenuItem({ 5347 key, 5348 target 5349 }) { 5350 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); 5351 if (!items.length) { 5352 return; 5353 } 5354 5355 // if target isn't included in items (e.g. when expanding the dropdown) 5356 // allow cycling to get the last item in case key equals ARROW_UP_KEY 5357 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 5358 } 5359 5360 // Static 5361 static jQueryInterface(config) { 5362 return this.each(function () { 5363 const data = Dropdown.getOrCreateInstance(this, config); 5364 if (typeof config !== 'string') { 5365 return; 5366 } 5367 if (typeof data[config] === 'undefined') { 5368 throw new TypeError(`No method named "${config}"`); 5369 } 5370 data[config](); 5371 }); 5372 } 5373 static clearMenus(event) { 5374 if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { 5375 return; 5376 } 5377 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 5378 for (const toggle of openToggles) { 5379 const context = Dropdown.getInstance(toggle); 5380 if (!context || context._config.autoClose === false) { 5381 continue; 5382 } 5383 const composedPath = event.composedPath(); 5384 const isMenuTarget = composedPath.includes(context._menu); 5385 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 5386 continue; 5387 } 5388 5389 // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 5390 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 5391 continue; 5392 } 5393 const relatedTarget = { 5394 relatedTarget: context._element 5395 }; 5396 if (event.type === 'click') { 5397 relatedTarget.clickEvent = event; 5398 } 5399 context._completeHide(relatedTarget); 5400 } 5401 } 5402 static dataApiKeydownHandler(event) { 5403 // If not an UP | DOWN | ESCAPE key => not a dropdown command 5404 // If input/textarea && if key is other than ESCAPE => not a dropdown command 5405 5406 const isInput = /input|textarea/i.test(event.target.tagName); 5407 const isEscapeEvent = event.key === ESCAPE_KEY$2; 5408 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 5409 if (!isUpOrDownEvent && !isEscapeEvent) { 5410 return; 5411 } 5412 if (isInput && !isEscapeEvent) { 5413 return; 5414 } 5415 event.preventDefault(); 5416 5417 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 5418 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode); 5419 const instance = Dropdown.getOrCreateInstance(getToggleButton); 5420 if (isUpOrDownEvent) { 5421 event.stopPropagation(); 5422 instance.show(); 5423 instance._selectMenuItem(event); 5424 return; 5425 } 5426 if (instance._isShown()) { 5427 // else is escape and we check if it is shown 5428 event.stopPropagation(); 5429 instance.hide(); 5430 getToggleButton.focus(); 5431 } 5432 } 5433} 5434 5435/** 5436 * Data API implementation 5437 */ 5438 5439EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 5440EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 5441EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 5442EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 5443EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 5444 event.preventDefault(); 5445 Dropdown.getOrCreateInstance(this).toggle(); 5446}); 5447 5448/** 5449 * jQuery 5450 */ 5451 5452defineJQueryPlugin(Dropdown); 5453 5454/** 5455 * -------------------------------------------------------------------------- 5456 * Bootstrap util/backdrop.js 5457 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5458 * -------------------------------------------------------------------------- 5459 */ 5460 5461 5462/** 5463 * Constants 5464 */ 5465 5466const NAME$9 = 'backdrop'; 5467const CLASS_NAME_FADE$4 = 'fade'; 5468const CLASS_NAME_SHOW$5 = 'show'; 5469const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 5470const Default$8 = { 5471 className: 'modal-backdrop', 5472 clickCallback: null, 5473 isAnimated: false, 5474 isVisible: true, 5475 // if false, we use the backdrop helper without adding any element to the dom 5476 rootElement: 'body' // give the choice to place backdrop under different elements 5477}; 5478const DefaultType$8 = { 5479 className: 'string', 5480 clickCallback: '(function|null)', 5481 isAnimated: 'boolean', 5482 isVisible: 'boolean', 5483 rootElement: '(element|string)' 5484}; 5485 5486/** 5487 * Class definition 5488 */ 5489 5490class Backdrop extends Config { 5491 constructor(config) { 5492 super(); 5493 this._config = this._getConfig(config); 5494 this._isAppended = false; 5495 this._element = null; 5496 } 5497 5498 // Getters 5499 static get Default() { 5500 return Default$8; 5501 } 5502 static get DefaultType() { 5503 return DefaultType$8; 5504 } 5505 static get NAME() { 5506 return NAME$9; 5507 } 5508 5509 // Public 5510 show(callback) { 5511 if (!this._config.isVisible) { 5512 execute(callback); 5513 return; 5514 } 5515 this._append(); 5516 const element = this._getElement(); 5517 if (this._config.isAnimated) { 5518 reflow(element); 5519 } 5520 element.classList.add(CLASS_NAME_SHOW$5); 5521 this._emulateAnimation(() => { 5522 execute(callback); 5523 }); 5524 } 5525 hide(callback) { 5526 if (!this._config.isVisible) { 5527 execute(callback); 5528 return; 5529 } 5530 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 5531 this._emulateAnimation(() => { 5532 this.dispose(); 5533 execute(callback); 5534 }); 5535 } 5536 dispose() { 5537 if (!this._isAppended) { 5538 return; 5539 } 5540 EventHandler.off(this._element, EVENT_MOUSEDOWN); 5541 this._element.remove(); 5542 this._isAppended = false; 5543 } 5544 5545 // Private 5546 _getElement() { 5547 if (!this._element) { 5548 const backdrop = document.createElement('div'); 5549 backdrop.className = this._config.className; 5550 if (this._config.isAnimated) { 5551 backdrop.classList.add(CLASS_NAME_FADE$4); 5552 } 5553 this._element = backdrop; 5554 } 5555 return this._element; 5556 } 5557 _configAfterMerge(config) { 5558 // use getElement() with the default "body" to get a fresh Element on each instantiation 5559 config.rootElement = getElement(config.rootElement); 5560 return config; 5561 } 5562 _append() { 5563 if (this._isAppended) { 5564 return; 5565 } 5566 const element = this._getElement(); 5567 this._config.rootElement.append(element); 5568 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 5569 execute(this._config.clickCallback); 5570 }); 5571 this._isAppended = true; 5572 } 5573 _emulateAnimation(callback) { 5574 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 5575 } 5576} 5577 5578/** 5579 * -------------------------------------------------------------------------- 5580 * Bootstrap util/focustrap.js 5581 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5582 * -------------------------------------------------------------------------- 5583 */ 5584 5585 5586/** 5587 * Constants 5588 */ 5589 5590const NAME$8 = 'focustrap'; 5591const DATA_KEY$5 = 'bs.focustrap'; 5592const EVENT_KEY$5 = `.${DATA_KEY$5}`; 5593const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 5594const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 5595const TAB_KEY = 'Tab'; 5596const TAB_NAV_FORWARD = 'forward'; 5597const TAB_NAV_BACKWARD = 'backward'; 5598const Default$7 = { 5599 autofocus: true, 5600 trapElement: null // The element to trap focus inside of 5601}; 5602const DefaultType$7 = { 5603 autofocus: 'boolean', 5604 trapElement: 'element' 5605}; 5606 5607/** 5608 * Class definition 5609 */ 5610 5611class FocusTrap extends Config { 5612 constructor(config) { 5613 super(); 5614 this._config = this._getConfig(config); 5615 this._isActive = false; 5616 this._lastTabNavDirection = null; 5617 } 5618 5619 // Getters 5620 static get Default() { 5621 return Default$7; 5622 } 5623 static get DefaultType() { 5624 return DefaultType$7; 5625 } 5626 static get NAME() { 5627 return NAME$8; 5628 } 5629 5630 // Public 5631 activate() { 5632 if (this._isActive) { 5633 return; 5634 } 5635 if (this._config.autofocus) { 5636 this._config.trapElement.focus(); 5637 } 5638 EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop 5639 EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); 5640 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 5641 this._isActive = true; 5642 } 5643 deactivate() { 5644 if (!this._isActive) { 5645 return; 5646 } 5647 this._isActive = false; 5648 EventHandler.off(document, EVENT_KEY$5); 5649 } 5650 5651 // Private 5652 _handleFocusin(event) { 5653 const { 5654 trapElement 5655 } = this._config; 5656 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 5657 return; 5658 } 5659 const elements = SelectorEngine.focusableChildren(trapElement); 5660 if (elements.length === 0) { 5661 trapElement.focus(); 5662 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 5663 elements[elements.length - 1].focus(); 5664 } else { 5665 elements[0].focus(); 5666 } 5667 } 5668 _handleKeydown(event) { 5669 if (event.key !== TAB_KEY) { 5670 return; 5671 } 5672 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 5673 } 5674} 5675 5676/** 5677 * -------------------------------------------------------------------------- 5678 * Bootstrap util/scrollBar.js 5679 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5680 * -------------------------------------------------------------------------- 5681 */ 5682 5683 5684/** 5685 * Constants 5686 */ 5687 5688const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 5689const SELECTOR_STICKY_CONTENT = '.sticky-top'; 5690const PROPERTY_PADDING = 'padding-right'; 5691const PROPERTY_MARGIN = 'margin-right'; 5692 5693/** 5694 * Class definition 5695 */ 5696 5697class ScrollBarHelper { 5698 constructor() { 5699 this._element = document.body; 5700 } 5701 5702 // Public 5703 getWidth() { 5704 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 5705 const documentWidth = document.documentElement.clientWidth; 5706 return Math.abs(window.innerWidth - documentWidth); 5707 } 5708 hide() { 5709 const width = this.getWidth(); 5710 this._disableOverFlow(); 5711 // give padding to element to balance the hidden scrollbar width 5712 this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5713 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 5714 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5715 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); 5716 } 5717 reset() { 5718 this._resetElementAttributes(this._element, 'overflow'); 5719 this._resetElementAttributes(this._element, PROPERTY_PADDING); 5720 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 5721 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 5722 } 5723 isOverflowing() { 5724 return this.getWidth() > 0; 5725 } 5726 5727 // Private 5728 _disableOverFlow() { 5729 this._saveInitialAttribute(this._element, 'overflow'); 5730 this._element.style.overflow = 'hidden'; 5731 } 5732 _setElementAttributes(selector, styleProperty, callback) { 5733 const scrollbarWidth = this.getWidth(); 5734 const manipulationCallBack = element => { 5735 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 5736 return; 5737 } 5738 this._saveInitialAttribute(element, styleProperty); 5739 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 5740 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 5741 }; 5742 this._applyManipulationCallback(selector, manipulationCallBack); 5743 } 5744 _saveInitialAttribute(element, styleProperty) { 5745 const actualValue = element.style.getPropertyValue(styleProperty); 5746 if (actualValue) { 5747 Manipulator.setDataAttribute(element, styleProperty, actualValue); 5748 } 5749 } 5750 _resetElementAttributes(selector, styleProperty) { 5751 const manipulationCallBack = element => { 5752 const value = Manipulator.getDataAttribute(element, styleProperty); 5753 // We only want to remove the property if the value is `null`; the value can also be zero 5754 if (value === null) { 5755 element.style.removeProperty(styleProperty); 5756 return; 5757 } 5758 Manipulator.removeDataAttribute(element, styleProperty); 5759 element.style.setProperty(styleProperty, value); 5760 }; 5761 this._applyManipulationCallback(selector, manipulationCallBack); 5762 } 5763 _applyManipulationCallback(selector, callBack) { 5764 if (isElement(selector)) { 5765 callBack(selector); 5766 return; 5767 } 5768 for (const sel of SelectorEngine.find(selector, this._element)) { 5769 callBack(sel); 5770 } 5771 } 5772} 5773 5774/** 5775 * -------------------------------------------------------------------------- 5776 * Bootstrap modal.js 5777 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5778 * -------------------------------------------------------------------------- 5779 */ 5780 5781 5782/** 5783 * Constants 5784 */ 5785 5786const NAME$7 = 'modal'; 5787const DATA_KEY$4 = 'bs.modal'; 5788const EVENT_KEY$4 = `.${DATA_KEY$4}`; 5789const DATA_API_KEY$2 = '.data-api'; 5790const ESCAPE_KEY$1 = 'Escape'; 5791const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 5792const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 5793const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 5794const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 5795const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 5796const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 5797const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 5798const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 5799const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 5800const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 5801const CLASS_NAME_OPEN = 'modal-open'; 5802const CLASS_NAME_FADE$3 = 'fade'; 5803const CLASS_NAME_SHOW$4 = 'show'; 5804const CLASS_NAME_STATIC = 'modal-static'; 5805const OPEN_SELECTOR$1 = '.modal.show'; 5806const SELECTOR_DIALOG = '.modal-dialog'; 5807const SELECTOR_MODAL_BODY = '.modal-body'; 5808const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 5809const Default$6 = { 5810 backdrop: true, 5811 focus: true, 5812 keyboard: true 5813}; 5814const DefaultType$6 = { 5815 backdrop: '(boolean|string)', 5816 focus: 'boolean', 5817 keyboard: 'boolean' 5818}; 5819 5820/** 5821 * Class definition 5822 */ 5823 5824class Modal extends BaseComponent { 5825 constructor(element, config) { 5826 super(element, config); 5827 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 5828 this._backdrop = this._initializeBackDrop(); 5829 this._focustrap = this._initializeFocusTrap(); 5830 this._isShown = false; 5831 this._isTransitioning = false; 5832 this._scrollBar = new ScrollBarHelper(); 5833 this._addEventListeners(); 5834 } 5835 5836 // Getters 5837 static get Default() { 5838 return Default$6; 5839 } 5840 static get DefaultType() { 5841 return DefaultType$6; 5842 } 5843 static get NAME() { 5844 return NAME$7; 5845 } 5846 5847 // Public 5848 toggle(relatedTarget) { 5849 return this._isShown ? this.hide() : this.show(relatedTarget); 5850 } 5851 show(relatedTarget) { 5852 if (this._isShown || this._isTransitioning) { 5853 return; 5854 } 5855 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 5856 relatedTarget 5857 }); 5858 if (showEvent.defaultPrevented) { 5859 return; 5860 } 5861 this._isShown = true; 5862 this._isTransitioning = true; 5863 this._scrollBar.hide(); 5864 document.body.classList.add(CLASS_NAME_OPEN); 5865 this._adjustDialog(); 5866 this._backdrop.show(() => this._showElement(relatedTarget)); 5867 } 5868 hide() { 5869 if (!this._isShown || this._isTransitioning) { 5870 return; 5871 } 5872 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 5873 if (hideEvent.defaultPrevented) { 5874 return; 5875 } 5876 this._isShown = false; 5877 this._isTransitioning = true; 5878 this._focustrap.deactivate(); 5879 this._element.classList.remove(CLASS_NAME_SHOW$4); 5880 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 5881 } 5882 dispose() { 5883 EventHandler.off(window, EVENT_KEY$4); 5884 EventHandler.off(this._dialog, EVENT_KEY$4); 5885 this._backdrop.dispose(); 5886 this._focustrap.deactivate(); 5887 super.dispose(); 5888 } 5889 handleUpdate() { 5890 this._adjustDialog(); 5891 } 5892 5893 // Private 5894 _initializeBackDrop() { 5895 return new Backdrop({ 5896 isVisible: Boolean(this._config.backdrop), 5897 // 'static' option will be translated to true, and booleans will keep their value, 5898 isAnimated: this._isAnimated() 5899 }); 5900 } 5901 _initializeFocusTrap() { 5902 return new FocusTrap({ 5903 trapElement: this._element 5904 }); 5905 } 5906 _showElement(relatedTarget) { 5907 // try to append dynamic modal 5908 if (!document.body.contains(this._element)) { 5909 document.body.append(this._element); 5910 } 5911 this._element.style.display = 'block'; 5912 this._element.removeAttribute('aria-hidden'); 5913 this._element.setAttribute('aria-modal', true); 5914 this._element.setAttribute('role', 'dialog'); 5915 this._element.scrollTop = 0; 5916 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 5917 if (modalBody) { 5918 modalBody.scrollTop = 0; 5919 } 5920 reflow(this._element); 5921 this._element.classList.add(CLASS_NAME_SHOW$4); 5922 const transitionComplete = () => { 5923 if (this._config.focus) { 5924 this._focustrap.activate(); 5925 } 5926 this._isTransitioning = false; 5927 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 5928 relatedTarget 5929 }); 5930 }; 5931 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 5932 } 5933 _addEventListeners() { 5934 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 5935 if (event.key !== ESCAPE_KEY$1) { 5936 return; 5937 } 5938 if (this._config.keyboard) { 5939 this.hide(); 5940 return; 5941 } 5942 this._triggerBackdropTransition(); 5943 }); 5944 EventHandler.on(window, EVENT_RESIZE$1, () => { 5945 if (this._isShown && !this._isTransitioning) { 5946 this._adjustDialog(); 5947 } 5948 }); 5949 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { 5950 // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks 5951 EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => { 5952 if (this._element !== event.target || this._element !== event2.target) { 5953 return; 5954 } 5955 if (this._config.backdrop === 'static') { 5956 this._triggerBackdropTransition(); 5957 return; 5958 } 5959 if (this._config.backdrop) { 5960 this.hide(); 5961 } 5962 }); 5963 }); 5964 } 5965 _hideModal() { 5966 this._element.style.display = 'none'; 5967 this._element.setAttribute('aria-hidden', true); 5968 this._element.removeAttribute('aria-modal'); 5969 this._element.removeAttribute('role'); 5970 this._isTransitioning = false; 5971 this._backdrop.hide(() => { 5972 document.body.classList.remove(CLASS_NAME_OPEN); 5973 this._resetAdjustments(); 5974 this._scrollBar.reset(); 5975 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 5976 }); 5977 } 5978 _isAnimated() { 5979 return this._element.classList.contains(CLASS_NAME_FADE$3); 5980 } 5981 _triggerBackdropTransition() { 5982 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 5983 if (hideEvent.defaultPrevented) { 5984 return; 5985 } 5986 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5987 const initialOverflowY = this._element.style.overflowY; 5988 // return if the following background transition hasn't yet completed 5989 if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { 5990 return; 5991 } 5992 if (!isModalOverflowing) { 5993 this._element.style.overflowY = 'hidden'; 5994 } 5995 this._element.classList.add(CLASS_NAME_STATIC); 5996 this._queueCallback(() => { 5997 this._element.classList.remove(CLASS_NAME_STATIC); 5998 this._queueCallback(() => { 5999 this._element.style.overflowY = initialOverflowY; 6000 }, this._dialog); 6001 }, this._dialog); 6002 this._element.focus(); 6003 } 6004 6005 /** 6006 * The following methods are used to handle overflowing modals 6007 */ 6008 6009 _adjustDialog() { 6010 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 6011 const scrollbarWidth = this._scrollBar.getWidth(); 6012 const isBodyOverflowing = scrollbarWidth > 0; 6013 if (isBodyOverflowing && !isModalOverflowing) { 6014 const property = isRTL() ? 'paddingLeft' : 'paddingRight'; 6015 this._element.style[property] = `${scrollbarWidth}px`; 6016 } 6017 if (!isBodyOverflowing && isModalOverflowing) { 6018 const property = isRTL() ? 'paddingRight' : 'paddingLeft'; 6019 this._element.style[property] = `${scrollbarWidth}px`; 6020 } 6021 } 6022 _resetAdjustments() { 6023 this._element.style.paddingLeft = ''; 6024 this._element.style.paddingRight = ''; 6025 } 6026 6027 // Static 6028 static jQueryInterface(config, relatedTarget) { 6029 return this.each(function () { 6030 const data = Modal.getOrCreateInstance(this, config); 6031 if (typeof config !== 'string') { 6032 return; 6033 } 6034 if (typeof data[config] === 'undefined') { 6035 throw new TypeError(`No method named "${config}"`); 6036 } 6037 data[config](relatedTarget); 6038 }); 6039 } 6040} 6041 6042/** 6043 * Data API implementation 6044 */ 6045 6046EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 6047 const target = SelectorEngine.getElementFromSelector(this); 6048 if (['A', 'AREA'].includes(this.tagName)) { 6049 event.preventDefault(); 6050 } 6051 EventHandler.one(target, EVENT_SHOW$4, showEvent => { 6052 if (showEvent.defaultPrevented) { 6053 // only register focus restorer if modal will actually get shown 6054 return; 6055 } 6056 EventHandler.one(target, EVENT_HIDDEN$4, () => { 6057 if (isVisible(this)) { 6058 this.focus(); 6059 } 6060 }); 6061 }); 6062 6063 // avoid conflict when clicking modal toggler while another one is open 6064 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 6065 if (alreadyOpen) { 6066 Modal.getInstance(alreadyOpen).hide(); 6067 } 6068 const data = Modal.getOrCreateInstance(target); 6069 data.toggle(this); 6070}); 6071enableDismissTrigger(Modal); 6072 6073/** 6074 * jQuery 6075 */ 6076 6077defineJQueryPlugin(Modal); 6078 6079/** 6080 * -------------------------------------------------------------------------- 6081 * Bootstrap offcanvas.js 6082 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6083 * -------------------------------------------------------------------------- 6084 */ 6085 6086 6087/** 6088 * Constants 6089 */ 6090 6091const NAME$6 = 'offcanvas'; 6092const DATA_KEY$3 = 'bs.offcanvas'; 6093const EVENT_KEY$3 = `.${DATA_KEY$3}`; 6094const DATA_API_KEY$1 = '.data-api'; 6095const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 6096const ESCAPE_KEY = 'Escape'; 6097const CLASS_NAME_SHOW$3 = 'show'; 6098const CLASS_NAME_SHOWING$1 = 'showing'; 6099const CLASS_NAME_HIDING = 'hiding'; 6100const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 6101const OPEN_SELECTOR = '.offcanvas.show'; 6102const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 6103const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 6104const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 6105const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 6106const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 6107const EVENT_RESIZE = `resize${EVENT_KEY$3}`; 6108const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 6109const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 6110const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 6111const Default$5 = { 6112 backdrop: true, 6113 keyboard: true, 6114 scroll: false 6115}; 6116const DefaultType$5 = { 6117 backdrop: '(boolean|string)', 6118 keyboard: 'boolean', 6119 scroll: 'boolean' 6120}; 6121 6122/** 6123 * Class definition 6124 */ 6125 6126class Offcanvas extends BaseComponent { 6127 constructor(element, config) { 6128 super(element, config); 6129 this._isShown = false; 6130 this._backdrop = this._initializeBackDrop(); 6131 this._focustrap = this._initializeFocusTrap(); 6132 this._addEventListeners(); 6133 } 6134 6135 // Getters 6136 static get Default() { 6137 return Default$5; 6138 } 6139 static get DefaultType() { 6140 return DefaultType$5; 6141 } 6142 static get NAME() { 6143 return NAME$6; 6144 } 6145 6146 // Public 6147 toggle(relatedTarget) { 6148 return this._isShown ? this.hide() : this.show(relatedTarget); 6149 } 6150 show(relatedTarget) { 6151 if (this._isShown) { 6152 return; 6153 } 6154 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 6155 relatedTarget 6156 }); 6157 if (showEvent.defaultPrevented) { 6158 return; 6159 } 6160 this._isShown = true; 6161 this._backdrop.show(); 6162 if (!this._config.scroll) { 6163 new ScrollBarHelper().hide(); 6164 } 6165 this._element.setAttribute('aria-modal', true); 6166 this._element.setAttribute('role', 'dialog'); 6167 this._element.classList.add(CLASS_NAME_SHOWING$1); 6168 const completeCallBack = () => { 6169 if (!this._config.scroll || this._config.backdrop) { 6170 this._focustrap.activate(); 6171 } 6172 this._element.classList.add(CLASS_NAME_SHOW$3); 6173 this._element.classList.remove(CLASS_NAME_SHOWING$1); 6174 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 6175 relatedTarget 6176 }); 6177 }; 6178 this._queueCallback(completeCallBack, this._element, true); 6179 } 6180 hide() { 6181 if (!this._isShown) { 6182 return; 6183 } 6184 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 6185 if (hideEvent.defaultPrevented) { 6186 return; 6187 } 6188 this._focustrap.deactivate(); 6189 this._element.blur(); 6190 this._isShown = false; 6191 this._element.classList.add(CLASS_NAME_HIDING); 6192 this._backdrop.hide(); 6193 const completeCallback = () => { 6194 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 6195 this._element.removeAttribute('aria-modal'); 6196 this._element.removeAttribute('role'); 6197 if (!this._config.scroll) { 6198 new ScrollBarHelper().reset(); 6199 } 6200 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 6201 }; 6202 this._queueCallback(completeCallback, this._element, true); 6203 } 6204 dispose() { 6205 this._backdrop.dispose(); 6206 this._focustrap.deactivate(); 6207 super.dispose(); 6208 } 6209 6210 // Private 6211 _initializeBackDrop() { 6212 const clickCallback = () => { 6213 if (this._config.backdrop === 'static') { 6214 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 6215 return; 6216 } 6217 this.hide(); 6218 }; 6219 6220 // 'static' option will be translated to true, and booleans will keep their value 6221 const isVisible = Boolean(this._config.backdrop); 6222 return new Backdrop({ 6223 className: CLASS_NAME_BACKDROP, 6224 isVisible, 6225 isAnimated: true, 6226 rootElement: this._element.parentNode, 6227 clickCallback: isVisible ? clickCallback : null 6228 }); 6229 } 6230 _initializeFocusTrap() { 6231 return new FocusTrap({ 6232 trapElement: this._element 6233 }); 6234 } 6235 _addEventListeners() { 6236 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 6237 if (event.key !== ESCAPE_KEY) { 6238 return; 6239 } 6240 if (this._config.keyboard) { 6241 this.hide(); 6242 return; 6243 } 6244 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 6245 }); 6246 } 6247 6248 // Static 6249 static jQueryInterface(config) { 6250 return this.each(function () { 6251 const data = Offcanvas.getOrCreateInstance(this, config); 6252 if (typeof config !== 'string') { 6253 return; 6254 } 6255 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6256 throw new TypeError(`No method named "${config}"`); 6257 } 6258 data[config](this); 6259 }); 6260 } 6261} 6262 6263/** 6264 * Data API implementation 6265 */ 6266 6267EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 6268 const target = SelectorEngine.getElementFromSelector(this); 6269 if (['A', 'AREA'].includes(this.tagName)) { 6270 event.preventDefault(); 6271 } 6272 if (isDisabled(this)) { 6273 return; 6274 } 6275 EventHandler.one(target, EVENT_HIDDEN$3, () => { 6276 // focus on trigger when it is closed 6277 if (isVisible(this)) { 6278 this.focus(); 6279 } 6280 }); 6281 6282 // avoid conflict when clicking a toggler of an offcanvas, while another is open 6283 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 6284 if (alreadyOpen && alreadyOpen !== target) { 6285 Offcanvas.getInstance(alreadyOpen).hide(); 6286 } 6287 const data = Offcanvas.getOrCreateInstance(target); 6288 data.toggle(this); 6289}); 6290EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 6291 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 6292 Offcanvas.getOrCreateInstance(selector).show(); 6293 } 6294}); 6295EventHandler.on(window, EVENT_RESIZE, () => { 6296 for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { 6297 if (getComputedStyle(element).position !== 'fixed') { 6298 Offcanvas.getOrCreateInstance(element).hide(); 6299 } 6300 } 6301}); 6302enableDismissTrigger(Offcanvas); 6303 6304/** 6305 * jQuery 6306 */ 6307 6308defineJQueryPlugin(Offcanvas); 6309 6310/** 6311 * -------------------------------------------------------------------------- 6312 * Bootstrap util/sanitizer.js 6313 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6314 * -------------------------------------------------------------------------- 6315 */ 6316 6317// js-docs-start allow-list 6318const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 6319const DefaultAllowlist = { 6320 // Global attributes allowed on any supplied element below. 6321 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 6322 a: ['target', 'href', 'title', 'rel'], 6323 area: [], 6324 b: [], 6325 br: [], 6326 col: [], 6327 code: [], 6328 dd: [], 6329 div: [], 6330 dl: [], 6331 dt: [], 6332 em: [], 6333 hr: [], 6334 h1: [], 6335 h2: [], 6336 h3: [], 6337 h4: [], 6338 h5: [], 6339 h6: [], 6340 i: [], 6341 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 6342 li: [], 6343 ol: [], 6344 p: [], 6345 pre: [], 6346 s: [], 6347 small: [], 6348 span: [], 6349 sub: [], 6350 sup: [], 6351 strong: [], 6352 u: [], 6353 ul: [] 6354}; 6355// js-docs-end allow-list 6356 6357const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 6358 6359/** 6360 * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation 6361 * contexts. 6362 * 6363 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 6364 */ 6365// eslint-disable-next-line unicorn/better-regex 6366const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; 6367const allowedAttribute = (attribute, allowedAttributeList) => { 6368 const attributeName = attribute.nodeName.toLowerCase(); 6369 if (allowedAttributeList.includes(attributeName)) { 6370 if (uriAttributes.has(attributeName)) { 6371 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue)); 6372 } 6373 return true; 6374 } 6375 6376 // Check if a regular expression validates the attribute. 6377 return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); 6378}; 6379function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 6380 if (!unsafeHtml.length) { 6381 return unsafeHtml; 6382 } 6383 if (sanitizeFunction && typeof sanitizeFunction === 'function') { 6384 return sanitizeFunction(unsafeHtml); 6385 } 6386 const domParser = new window.DOMParser(); 6387 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 6388 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 6389 for (const element of elements) { 6390 const elementName = element.nodeName.toLowerCase(); 6391 if (!Object.keys(allowList).includes(elementName)) { 6392 element.remove(); 6393 continue; 6394 } 6395 const attributeList = [].concat(...element.attributes); 6396 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 6397 for (const attribute of attributeList) { 6398 if (!allowedAttribute(attribute, allowedAttributes)) { 6399 element.removeAttribute(attribute.nodeName); 6400 } 6401 } 6402 } 6403 return createdDocument.body.innerHTML; 6404} 6405 6406/** 6407 * -------------------------------------------------------------------------- 6408 * Bootstrap util/template-factory.js 6409 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6410 * -------------------------------------------------------------------------- 6411 */ 6412 6413 6414/** 6415 * Constants 6416 */ 6417 6418const NAME$5 = 'TemplateFactory'; 6419const Default$4 = { 6420 allowList: DefaultAllowlist, 6421 content: {}, 6422 // { selector : text , selector2 : text2 , } 6423 extraClass: '', 6424 html: false, 6425 sanitize: true, 6426 sanitizeFn: null, 6427 template: '<div></div>' 6428}; 6429const DefaultType$4 = { 6430 allowList: 'object', 6431 content: 'object', 6432 extraClass: '(string|function)', 6433 html: 'boolean', 6434 sanitize: 'boolean', 6435 sanitizeFn: '(null|function)', 6436 template: 'string' 6437}; 6438const DefaultContentType = { 6439 entry: '(string|element|function|null)', 6440 selector: '(string|element)' 6441}; 6442 6443/** 6444 * Class definition 6445 */ 6446 6447class TemplateFactory extends Config { 6448 constructor(config) { 6449 super(); 6450 this._config = this._getConfig(config); 6451 } 6452 6453 // Getters 6454 static get Default() { 6455 return Default$4; 6456 } 6457 static get DefaultType() { 6458 return DefaultType$4; 6459 } 6460 static get NAME() { 6461 return NAME$5; 6462 } 6463 6464 // Public 6465 getContent() { 6466 return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); 6467 } 6468 hasContent() { 6469 return this.getContent().length > 0; 6470 } 6471 changeContent(content) { 6472 this._checkContent(content); 6473 this._config.content = { 6474 ...this._config.content, 6475 ...content 6476 }; 6477 return this; 6478 } 6479 toHtml() { 6480 const templateWrapper = document.createElement('div'); 6481 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 6482 for (const [selector, text] of Object.entries(this._config.content)) { 6483 this._setContent(templateWrapper, text, selector); 6484 } 6485 const template = templateWrapper.children[0]; 6486 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 6487 if (extraClass) { 6488 template.classList.add(...extraClass.split(' ')); 6489 } 6490 return template; 6491 } 6492 6493 // Private 6494 _typeCheckConfig(config) { 6495 super._typeCheckConfig(config); 6496 this._checkContent(config.content); 6497 } 6498 _checkContent(arg) { 6499 for (const [selector, content] of Object.entries(arg)) { 6500 super._typeCheckConfig({ 6501 selector, 6502 entry: content 6503 }, DefaultContentType); 6504 } 6505 } 6506 _setContent(template, content, selector) { 6507 const templateElement = SelectorEngine.findOne(selector, template); 6508 if (!templateElement) { 6509 return; 6510 } 6511 content = this._resolvePossibleFunction(content); 6512 if (!content) { 6513 templateElement.remove(); 6514 return; 6515 } 6516 if (isElement(content)) { 6517 this._putElementInTemplate(getElement(content), templateElement); 6518 return; 6519 } 6520 if (this._config.html) { 6521 templateElement.innerHTML = this._maybeSanitize(content); 6522 return; 6523 } 6524 templateElement.textContent = content; 6525 } 6526 _maybeSanitize(arg) { 6527 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; 6528 } 6529 _resolvePossibleFunction(arg) { 6530 return execute(arg, [this]); 6531 } 6532 _putElementInTemplate(element, templateElement) { 6533 if (this._config.html) { 6534 templateElement.innerHTML = ''; 6535 templateElement.append(element); 6536 return; 6537 } 6538 templateElement.textContent = element.textContent; 6539 } 6540} 6541 6542/** 6543 * -------------------------------------------------------------------------- 6544 * Bootstrap tooltip.js 6545 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6546 * -------------------------------------------------------------------------- 6547 */ 6548 6549 6550/** 6551 * Constants 6552 */ 6553 6554const NAME$4 = 'tooltip'; 6555const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 6556const CLASS_NAME_FADE$2 = 'fade'; 6557const CLASS_NAME_MODAL = 'modal'; 6558const CLASS_NAME_SHOW$2 = 'show'; 6559const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 6560const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 6561const EVENT_MODAL_HIDE = 'hide.bs.modal'; 6562const TRIGGER_HOVER = 'hover'; 6563const TRIGGER_FOCUS = 'focus'; 6564const TRIGGER_CLICK = 'click'; 6565const TRIGGER_MANUAL = 'manual'; 6566const EVENT_HIDE$2 = 'hide'; 6567const EVENT_HIDDEN$2 = 'hidden'; 6568const EVENT_SHOW$2 = 'show'; 6569const EVENT_SHOWN$2 = 'shown'; 6570const EVENT_INSERTED = 'inserted'; 6571const EVENT_CLICK$1 = 'click'; 6572const EVENT_FOCUSIN$1 = 'focusin'; 6573const EVENT_FOCUSOUT$1 = 'focusout'; 6574const EVENT_MOUSEENTER = 'mouseenter'; 6575const EVENT_MOUSELEAVE = 'mouseleave'; 6576const AttachmentMap = { 6577 AUTO: 'auto', 6578 TOP: 'top', 6579 RIGHT: isRTL() ? 'left' : 'right', 6580 BOTTOM: 'bottom', 6581 LEFT: isRTL() ? 'right' : 'left' 6582}; 6583const Default$3 = { 6584 allowList: DefaultAllowlist, 6585 animation: true, 6586 boundary: 'clippingParents', 6587 container: false, 6588 customClass: '', 6589 delay: 0, 6590 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 6591 html: false, 6592 offset: [0, 6], 6593 placement: 'top', 6594 popperConfig: null, 6595 sanitize: true, 6596 sanitizeFn: null, 6597 selector: false, 6598 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 6599 title: '', 6600 trigger: 'hover focus' 6601}; 6602const DefaultType$3 = { 6603 allowList: 'object', 6604 animation: 'boolean', 6605 boundary: '(string|element)', 6606 container: '(string|element|boolean)', 6607 customClass: '(string|function)', 6608 delay: '(number|object)', 6609 fallbackPlacements: 'array', 6610 html: 'boolean', 6611 offset: '(array|string|function)', 6612 placement: '(string|function)', 6613 popperConfig: '(null|object|function)', 6614 sanitize: 'boolean', 6615 sanitizeFn: '(null|function)', 6616 selector: '(string|boolean)', 6617 template: 'string', 6618 title: '(string|element|function)', 6619 trigger: 'string' 6620}; 6621 6622/** 6623 * Class definition 6624 */ 6625 6626class Tooltip extends BaseComponent { 6627 constructor(element, config) { 6628 if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') { 6629 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 6630 } 6631 super(element, config); 6632 6633 // Private 6634 this._isEnabled = true; 6635 this._timeout = 0; 6636 this._isHovered = null; 6637 this._activeTrigger = {}; 6638 this._popper = null; 6639 this._templateFactory = null; 6640 this._newContent = null; 6641 6642 // Protected 6643 this.tip = null; 6644 this._setListeners(); 6645 if (!this._config.selector) { 6646 this._fixTitle(); 6647 } 6648 } 6649 6650 // Getters 6651 static get Default() { 6652 return Default$3; 6653 } 6654 static get DefaultType() { 6655 return DefaultType$3; 6656 } 6657 static get NAME() { 6658 return NAME$4; 6659 } 6660 6661 // Public 6662 enable() { 6663 this._isEnabled = true; 6664 } 6665 disable() { 6666 this._isEnabled = false; 6667 } 6668 toggleEnabled() { 6669 this._isEnabled = !this._isEnabled; 6670 } 6671 toggle() { 6672 if (!this._isEnabled) { 6673 return; 6674 } 6675 this._activeTrigger.click = !this._activeTrigger.click; 6676 if (this._isShown()) { 6677 this._leave(); 6678 return; 6679 } 6680 this._enter(); 6681 } 6682 dispose() { 6683 clearTimeout(this._timeout); 6684 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6685 if (this._element.getAttribute('data-bs-original-title')) { 6686 this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); 6687 } 6688 this._disposePopper(); 6689 super.dispose(); 6690 } 6691 show() { 6692 if (this._element.style.display === 'none') { 6693 throw new Error('Please use show on visible elements'); 6694 } 6695 if (!(this._isWithContent() && this._isEnabled)) { 6696 return; 6697 } 6698 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 6699 const shadowRoot = findShadowRoot(this._element); 6700 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 6701 if (showEvent.defaultPrevented || !isInTheDom) { 6702 return; 6703 } 6704 6705 // TODO: v6 remove this or make it optional 6706 this._disposePopper(); 6707 const tip = this._getTipElement(); 6708 this._element.setAttribute('aria-describedby', tip.getAttribute('id')); 6709 const { 6710 container 6711 } = this._config; 6712 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 6713 container.append(tip); 6714 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 6715 } 6716 this._popper = this._createPopper(tip); 6717 tip.classList.add(CLASS_NAME_SHOW$2); 6718 6719 // If this is a touch-enabled device we add extra 6720 // empty mouseover listeners to the body's immediate children; 6721 // only needed because of broken event delegation on iOS 6722 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 6723 if ('ontouchstart' in document.documentElement) { 6724 for (const element of [].concat(...document.body.children)) { 6725 EventHandler.on(element, 'mouseover', noop); 6726 } 6727 } 6728 const complete = () => { 6729 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 6730 if (this._isHovered === false) { 6731 this._leave(); 6732 } 6733 this._isHovered = false; 6734 }; 6735 this._queueCallback(complete, this.tip, this._isAnimated()); 6736 } 6737 hide() { 6738 if (!this._isShown()) { 6739 return; 6740 } 6741 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 6742 if (hideEvent.defaultPrevented) { 6743 return; 6744 } 6745 const tip = this._getTipElement(); 6746 tip.classList.remove(CLASS_NAME_SHOW$2); 6747 6748 // If this is a touch-enabled device we remove the extra 6749 // empty mouseover listeners we added for iOS support 6750 if ('ontouchstart' in document.documentElement) { 6751 for (const element of [].concat(...document.body.children)) { 6752 EventHandler.off(element, 'mouseover', noop); 6753 } 6754 } 6755 this._activeTrigger[TRIGGER_CLICK] = false; 6756 this._activeTrigger[TRIGGER_FOCUS] = false; 6757 this._activeTrigger[TRIGGER_HOVER] = false; 6758 this._isHovered = null; // it is a trick to support manual triggering 6759 6760 const complete = () => { 6761 if (this._isWithActiveTrigger()) { 6762 return; 6763 } 6764 if (!this._isHovered) { 6765 this._disposePopper(); 6766 } 6767 this._element.removeAttribute('aria-describedby'); 6768 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 6769 }; 6770 this._queueCallback(complete, this.tip, this._isAnimated()); 6771 } 6772 update() { 6773 if (this._popper) { 6774 this._popper.update(); 6775 } 6776 } 6777 6778 // Protected 6779 _isWithContent() { 6780 return Boolean(this._getTitle()); 6781 } 6782 _getTipElement() { 6783 if (!this.tip) { 6784 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 6785 } 6786 return this.tip; 6787 } 6788 _createTipElement(content) { 6789 const tip = this._getTemplateFactory(content).toHtml(); 6790 6791 // TODO: remove this check in v6 6792 if (!tip) { 6793 return null; 6794 } 6795 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 6796 // TODO: v6 the following can be achieved with CSS only 6797 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 6798 const tipId = getUID(this.constructor.NAME).toString(); 6799 tip.setAttribute('id', tipId); 6800 if (this._isAnimated()) { 6801 tip.classList.add(CLASS_NAME_FADE$2); 6802 } 6803 return tip; 6804 } 6805 setContent(content) { 6806 this._newContent = content; 6807 if (this._isShown()) { 6808 this._disposePopper(); 6809 this.show(); 6810 } 6811 } 6812 _getTemplateFactory(content) { 6813 if (this._templateFactory) { 6814 this._templateFactory.changeContent(content); 6815 } else { 6816 this._templateFactory = new TemplateFactory({ 6817 ...this._config, 6818 // the `content` var has to be after `this._config` 6819 // to override config.content in case of popover 6820 content, 6821 extraClass: this._resolvePossibleFunction(this._config.customClass) 6822 }); 6823 } 6824 return this._templateFactory; 6825 } 6826 _getContentForTemplate() { 6827 return { 6828 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 6829 }; 6830 } 6831 _getTitle() { 6832 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); 6833 } 6834 6835 // Private 6836 _initializeOnDelegatedTarget(event) { 6837 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 6838 } 6839 _isAnimated() { 6840 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 6841 } 6842 _isShown() { 6843 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 6844 } 6845 _createPopper(tip) { 6846 const placement = execute(this._config.placement, [this, tip, this._element]); 6847 const attachment = AttachmentMap[placement.toUpperCase()]; 6848 return _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(this._element, tip, this._getPopperConfig(attachment)); 6849 } 6850 _getOffset() { 6851 const { 6852 offset 6853 } = this._config; 6854 if (typeof offset === 'string') { 6855 return offset.split(',').map(value => Number.parseInt(value, 10)); 6856 } 6857 if (typeof offset === 'function') { 6858 return popperData => offset(popperData, this._element); 6859 } 6860 return offset; 6861 } 6862 _resolvePossibleFunction(arg) { 6863 return execute(arg, [this._element]); 6864 } 6865 _getPopperConfig(attachment) { 6866 const defaultBsPopperConfig = { 6867 placement: attachment, 6868 modifiers: [{ 6869 name: 'flip', 6870 options: { 6871 fallbackPlacements: this._config.fallbackPlacements 6872 } 6873 }, { 6874 name: 'offset', 6875 options: { 6876 offset: this._getOffset() 6877 } 6878 }, { 6879 name: 'preventOverflow', 6880 options: { 6881 boundary: this._config.boundary 6882 } 6883 }, { 6884 name: 'arrow', 6885 options: { 6886 element: `.${this.constructor.NAME}-arrow` 6887 } 6888 }, { 6889 name: 'preSetPlacement', 6890 enabled: true, 6891 phase: 'beforeMain', 6892 fn: data => { 6893 // Pre-set Popper's placement attribute in order to read the arrow sizes properly. 6894 // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement 6895 this._getTipElement().setAttribute('data-popper-placement', data.state.placement); 6896 } 6897 }] 6898 }; 6899 return { 6900 ...defaultBsPopperConfig, 6901 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 6902 }; 6903 } 6904 _setListeners() { 6905 const triggers = this._config.trigger.split(' '); 6906 for (const trigger of triggers) { 6907 if (trigger === 'click') { 6908 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { 6909 const context = this._initializeOnDelegatedTarget(event); 6910 context.toggle(); 6911 }); 6912 } else if (trigger !== TRIGGER_MANUAL) { 6913 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 6914 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 6915 EventHandler.on(this._element, eventIn, this._config.selector, event => { 6916 const context = this._initializeOnDelegatedTarget(event); 6917 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 6918 context._enter(); 6919 }); 6920 EventHandler.on(this._element, eventOut, this._config.selector, event => { 6921 const context = this._initializeOnDelegatedTarget(event); 6922 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 6923 context._leave(); 6924 }); 6925 } 6926 } 6927 this._hideModalHandler = () => { 6928 if (this._element) { 6929 this.hide(); 6930 } 6931 }; 6932 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6933 } 6934 _fixTitle() { 6935 const title = this._element.getAttribute('title'); 6936 if (!title) { 6937 return; 6938 } 6939 if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { 6940 this._element.setAttribute('aria-label', title); 6941 } 6942 this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility 6943 this._element.removeAttribute('title'); 6944 } 6945 _enter() { 6946 if (this._isShown() || this._isHovered) { 6947 this._isHovered = true; 6948 return; 6949 } 6950 this._isHovered = true; 6951 this._setTimeout(() => { 6952 if (this._isHovered) { 6953 this.show(); 6954 } 6955 }, this._config.delay.show); 6956 } 6957 _leave() { 6958 if (this._isWithActiveTrigger()) { 6959 return; 6960 } 6961 this._isHovered = false; 6962 this._setTimeout(() => { 6963 if (!this._isHovered) { 6964 this.hide(); 6965 } 6966 }, this._config.delay.hide); 6967 } 6968 _setTimeout(handler, timeout) { 6969 clearTimeout(this._timeout); 6970 this._timeout = setTimeout(handler, timeout); 6971 } 6972 _isWithActiveTrigger() { 6973 return Object.values(this._activeTrigger).includes(true); 6974 } 6975 _getConfig(config) { 6976 const dataAttributes = Manipulator.getDataAttributes(this._element); 6977 for (const dataAttribute of Object.keys(dataAttributes)) { 6978 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 6979 delete dataAttributes[dataAttribute]; 6980 } 6981 } 6982 config = { 6983 ...dataAttributes, 6984 ...(typeof config === 'object' && config ? config : {}) 6985 }; 6986 config = this._mergeConfigObj(config); 6987 config = this._configAfterMerge(config); 6988 this._typeCheckConfig(config); 6989 return config; 6990 } 6991 _configAfterMerge(config) { 6992 config.container = config.container === false ? document.body : getElement(config.container); 6993 if (typeof config.delay === 'number') { 6994 config.delay = { 6995 show: config.delay, 6996 hide: config.delay 6997 }; 6998 } 6999 if (typeof config.title === 'number') { 7000 config.title = config.title.toString(); 7001 } 7002 if (typeof config.content === 'number') { 7003 config.content = config.content.toString(); 7004 } 7005 return config; 7006 } 7007 _getDelegateConfig() { 7008 const config = {}; 7009 for (const [key, value] of Object.entries(this._config)) { 7010 if (this.constructor.Default[key] !== value) { 7011 config[key] = value; 7012 } 7013 } 7014 config.selector = false; 7015 config.trigger = 'manual'; 7016 7017 // In the future can be replaced with: 7018 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 7019 // `Object.fromEntries(keysWithDifferentValues)` 7020 return config; 7021 } 7022 _disposePopper() { 7023 if (this._popper) { 7024 this._popper.destroy(); 7025 this._popper = null; 7026 } 7027 if (this.tip) { 7028 this.tip.remove(); 7029 this.tip = null; 7030 } 7031 } 7032 7033 // Static 7034 static jQueryInterface(config) { 7035 return this.each(function () { 7036 const data = Tooltip.getOrCreateInstance(this, config); 7037 if (typeof config !== 'string') { 7038 return; 7039 } 7040 if (typeof data[config] === 'undefined') { 7041 throw new TypeError(`No method named "${config}"`); 7042 } 7043 data[config](); 7044 }); 7045 } 7046} 7047 7048/** 7049 * jQuery 7050 */ 7051 7052defineJQueryPlugin(Tooltip); 7053 7054/** 7055 * -------------------------------------------------------------------------- 7056 * Bootstrap popover.js 7057 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7058 * -------------------------------------------------------------------------- 7059 */ 7060 7061 7062/** 7063 * Constants 7064 */ 7065 7066const NAME$3 = 'popover'; 7067const SELECTOR_TITLE = '.popover-header'; 7068const SELECTOR_CONTENT = '.popover-body'; 7069const Default$2 = { 7070 ...Tooltip.Default, 7071 content: '', 7072 offset: [0, 8], 7073 placement: 'right', 7074 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', 7075 trigger: 'click' 7076}; 7077const DefaultType$2 = { 7078 ...Tooltip.DefaultType, 7079 content: '(null|string|element|function)' 7080}; 7081 7082/** 7083 * Class definition 7084 */ 7085 7086class Popover extends Tooltip { 7087 // Getters 7088 static get Default() { 7089 return Default$2; 7090 } 7091 static get DefaultType() { 7092 return DefaultType$2; 7093 } 7094 static get NAME() { 7095 return NAME$3; 7096 } 7097 7098 // Overrides 7099 _isWithContent() { 7100 return this._getTitle() || this._getContent(); 7101 } 7102 7103 // Private 7104 _getContentForTemplate() { 7105 return { 7106 [SELECTOR_TITLE]: this._getTitle(), 7107 [SELECTOR_CONTENT]: this._getContent() 7108 }; 7109 } 7110 _getContent() { 7111 return this._resolvePossibleFunction(this._config.content); 7112 } 7113 7114 // Static 7115 static jQueryInterface(config) { 7116 return this.each(function () { 7117 const data = Popover.getOrCreateInstance(this, config); 7118 if (typeof config !== 'string') { 7119 return; 7120 } 7121 if (typeof data[config] === 'undefined') { 7122 throw new TypeError(`No method named "${config}"`); 7123 } 7124 data[config](); 7125 }); 7126 } 7127} 7128 7129/** 7130 * jQuery 7131 */ 7132 7133defineJQueryPlugin(Popover); 7134 7135/** 7136 * -------------------------------------------------------------------------- 7137 * Bootstrap scrollspy.js 7138 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7139 * -------------------------------------------------------------------------- 7140 */ 7141 7142 7143/** 7144 * Constants 7145 */ 7146 7147const NAME$2 = 'scrollspy'; 7148const DATA_KEY$2 = 'bs.scrollspy'; 7149const EVENT_KEY$2 = `.${DATA_KEY$2}`; 7150const DATA_API_KEY = '.data-api'; 7151const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 7152const EVENT_CLICK = `click${EVENT_KEY$2}`; 7153const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`; 7154const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 7155const CLASS_NAME_ACTIVE$1 = 'active'; 7156const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 7157const SELECTOR_TARGET_LINKS = '[href]'; 7158const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 7159const SELECTOR_NAV_LINKS = '.nav-link'; 7160const SELECTOR_NAV_ITEMS = '.nav-item'; 7161const SELECTOR_LIST_ITEMS = '.list-group-item'; 7162const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 7163const SELECTOR_DROPDOWN = '.dropdown'; 7164const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 7165const Default$1 = { 7166 offset: null, 7167 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 7168 rootMargin: '0px 0px -25%', 7169 smoothScroll: false, 7170 target: null, 7171 threshold: [0.1, 0.5, 1] 7172}; 7173const DefaultType$1 = { 7174 offset: '(number|null)', 7175 // TODO v6 @deprecated, keep it for backwards compatibility reasons 7176 rootMargin: 'string', 7177 smoothScroll: 'boolean', 7178 target: 'element', 7179 threshold: 'array' 7180}; 7181 7182/** 7183 * Class definition 7184 */ 7185 7186class ScrollSpy extends BaseComponent { 7187 constructor(element, config) { 7188 super(element, config); 7189 7190 // this._element is the observablesContainer and config.target the menu links wrapper 7191 this._targetLinks = new Map(); 7192 this._observableSections = new Map(); 7193 this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; 7194 this._activeTarget = null; 7195 this._observer = null; 7196 this._previousScrollData = { 7197 visibleEntryTop: 0, 7198 parentScrollTop: 0 7199 }; 7200 this.refresh(); // initialize 7201 } 7202 7203 // Getters 7204 static get Default() { 7205 return Default$1; 7206 } 7207 static get DefaultType() { 7208 return DefaultType$1; 7209 } 7210 static get NAME() { 7211 return NAME$2; 7212 } 7213 7214 // Public 7215 refresh() { 7216 this._initializeTargetsAndObservables(); 7217 this._maybeEnableSmoothScroll(); 7218 if (this._observer) { 7219 this._observer.disconnect(); 7220 } else { 7221 this._observer = this._getNewObserver(); 7222 } 7223 for (const section of this._observableSections.values()) { 7224 this._observer.observe(section); 7225 } 7226 } 7227 dispose() { 7228 this._observer.disconnect(); 7229 super.dispose(); 7230 } 7231 7232 // Private 7233 _configAfterMerge(config) { 7234 // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case 7235 config.target = getElement(config.target) || document.body; 7236 7237 // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only 7238 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 7239 if (typeof config.threshold === 'string') { 7240 config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); 7241 } 7242 return config; 7243 } 7244 _maybeEnableSmoothScroll() { 7245 if (!this._config.smoothScroll) { 7246 return; 7247 } 7248 7249 // unregister any previous listeners 7250 EventHandler.off(this._config.target, EVENT_CLICK); 7251 EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { 7252 const observableSection = this._observableSections.get(event.target.hash); 7253 if (observableSection) { 7254 event.preventDefault(); 7255 const root = this._rootElement || window; 7256 const height = observableSection.offsetTop - this._element.offsetTop; 7257 if (root.scrollTo) { 7258 root.scrollTo({ 7259 top: height, 7260 behavior: 'smooth' 7261 }); 7262 return; 7263 } 7264 7265 // Chrome 60 doesn't support `scrollTo` 7266 root.scrollTop = height; 7267 } 7268 }); 7269 } 7270 _getNewObserver() { 7271 const options = { 7272 root: this._rootElement, 7273 threshold: this._config.threshold, 7274 rootMargin: this._config.rootMargin 7275 }; 7276 return new IntersectionObserver(entries => this._observerCallback(entries), options); 7277 } 7278 7279 // The logic of selection 7280 _observerCallback(entries) { 7281 const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); 7282 const activate = entry => { 7283 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 7284 this._process(targetElement(entry)); 7285 }; 7286 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 7287 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 7288 this._previousScrollData.parentScrollTop = parentScrollTop; 7289 for (const entry of entries) { 7290 if (!entry.isIntersecting) { 7291 this._activeTarget = null; 7292 this._clearActiveClass(targetElement(entry)); 7293 continue; 7294 } 7295 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; 7296 // if we are scrolling down, pick the bigger offsetTop 7297 if (userScrollsDown && entryIsLowerThanPrevious) { 7298 activate(entry); 7299 // if parent isn't scrolled, let's keep the first visible item, breaking the iteration 7300 if (!parentScrollTop) { 7301 return; 7302 } 7303 continue; 7304 } 7305 7306 // if we are scrolling up, pick the smallest offsetTop 7307 if (!userScrollsDown && !entryIsLowerThanPrevious) { 7308 activate(entry); 7309 } 7310 } 7311 } 7312 _initializeTargetsAndObservables() { 7313 this._targetLinks = new Map(); 7314 this._observableSections = new Map(); 7315 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 7316 for (const anchor of targetLinks) { 7317 // ensure that the anchor has an id and is not disabled 7318 if (!anchor.hash || isDisabled(anchor)) { 7319 continue; 7320 } 7321 const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element); 7322 7323 // ensure that the observableSection exists & is visible 7324 if (isVisible(observableSection)) { 7325 this._targetLinks.set(decodeURI(anchor.hash), anchor); 7326 this._observableSections.set(anchor.hash, observableSection); 7327 } 7328 } 7329 } 7330 _process(target) { 7331 if (this._activeTarget === target) { 7332 return; 7333 } 7334 this._clearActiveClass(this._config.target); 7335 this._activeTarget = target; 7336 target.classList.add(CLASS_NAME_ACTIVE$1); 7337 this._activateParents(target); 7338 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 7339 relatedTarget: target 7340 }); 7341 } 7342 _activateParents(target) { 7343 // Activate dropdown parents 7344 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 7345 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 7346 return; 7347 } 7348 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 7349 // Set triggered links parents as active 7350 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 7351 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 7352 item.classList.add(CLASS_NAME_ACTIVE$1); 7353 } 7354 } 7355 } 7356 _clearActiveClass(parent) { 7357 parent.classList.remove(CLASS_NAME_ACTIVE$1); 7358 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 7359 for (const node of activeNodes) { 7360 node.classList.remove(CLASS_NAME_ACTIVE$1); 7361 } 7362 } 7363 7364 // Static 7365 static jQueryInterface(config) { 7366 return this.each(function () { 7367 const data = ScrollSpy.getOrCreateInstance(this, config); 7368 if (typeof config !== 'string') { 7369 return; 7370 } 7371 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7372 throw new TypeError(`No method named "${config}"`); 7373 } 7374 data[config](); 7375 }); 7376 } 7377} 7378 7379/** 7380 * Data API implementation 7381 */ 7382 7383EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 7384 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 7385 ScrollSpy.getOrCreateInstance(spy); 7386 } 7387}); 7388 7389/** 7390 * jQuery 7391 */ 7392 7393defineJQueryPlugin(ScrollSpy); 7394 7395/** 7396 * -------------------------------------------------------------------------- 7397 * Bootstrap tab.js 7398 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7399 * -------------------------------------------------------------------------- 7400 */ 7401 7402 7403/** 7404 * Constants 7405 */ 7406 7407const NAME$1 = 'tab'; 7408const DATA_KEY$1 = 'bs.tab'; 7409const EVENT_KEY$1 = `.${DATA_KEY$1}`; 7410const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 7411const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 7412const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 7413const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 7414const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 7415const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 7416const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 7417const ARROW_LEFT_KEY = 'ArrowLeft'; 7418const ARROW_RIGHT_KEY = 'ArrowRight'; 7419const ARROW_UP_KEY = 'ArrowUp'; 7420const ARROW_DOWN_KEY = 'ArrowDown'; 7421const HOME_KEY = 'Home'; 7422const END_KEY = 'End'; 7423const CLASS_NAME_ACTIVE = 'active'; 7424const CLASS_NAME_FADE$1 = 'fade'; 7425const CLASS_NAME_SHOW$1 = 'show'; 7426const CLASS_DROPDOWN = 'dropdown'; 7427const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 7428const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'; 7429const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`; 7430const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 7431const SELECTOR_OUTER = '.nav-item, .list-group-item'; 7432const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 7433const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6 7434const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 7435const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`; 7436 7437/** 7438 * Class definition 7439 */ 7440 7441class Tab extends BaseComponent { 7442 constructor(element) { 7443 super(element); 7444 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 7445 if (!this._parent) { 7446 return; 7447 // TODO: should throw exception in v6 7448 // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) 7449 } 7450 7451 // Set up initial aria attributes 7452 this._setInitialAttributes(this._parent, this._getChildren()); 7453 EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); 7454 } 7455 7456 // Getters 7457 static get NAME() { 7458 return NAME$1; 7459 } 7460 7461 // Public 7462 show() { 7463 // Shows this elem and deactivate the active sibling if exists 7464 const innerElem = this._element; 7465 if (this._elemIsActive(innerElem)) { 7466 return; 7467 } 7468 7469 // Search for active tab on same parent to deactivate it 7470 const active = this._getActiveElem(); 7471 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 7472 relatedTarget: innerElem 7473 }) : null; 7474 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 7475 relatedTarget: active 7476 }); 7477 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 7478 return; 7479 } 7480 this._deactivate(active, innerElem); 7481 this._activate(innerElem, active); 7482 } 7483 7484 // Private 7485 _activate(element, relatedElem) { 7486 if (!element) { 7487 return; 7488 } 7489 element.classList.add(CLASS_NAME_ACTIVE); 7490 this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section 7491 7492 const complete = () => { 7493 if (element.getAttribute('role') !== 'tab') { 7494 element.classList.add(CLASS_NAME_SHOW$1); 7495 return; 7496 } 7497 element.removeAttribute('tabindex'); 7498 element.setAttribute('aria-selected', true); 7499 this._toggleDropDown(element, true); 7500 EventHandler.trigger(element, EVENT_SHOWN$1, { 7501 relatedTarget: relatedElem 7502 }); 7503 }; 7504 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7505 } 7506 _deactivate(element, relatedElem) { 7507 if (!element) { 7508 return; 7509 } 7510 element.classList.remove(CLASS_NAME_ACTIVE); 7511 element.blur(); 7512 this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too 7513 7514 const complete = () => { 7515 if (element.getAttribute('role') !== 'tab') { 7516 element.classList.remove(CLASS_NAME_SHOW$1); 7517 return; 7518 } 7519 element.setAttribute('aria-selected', false); 7520 element.setAttribute('tabindex', '-1'); 7521 this._toggleDropDown(element, false); 7522 EventHandler.trigger(element, EVENT_HIDDEN$1, { 7523 relatedTarget: relatedElem 7524 }); 7525 }; 7526 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7527 } 7528 _keydown(event) { 7529 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) { 7530 return; 7531 } 7532 event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page 7533 event.preventDefault(); 7534 const children = this._getChildren().filter(element => !isDisabled(element)); 7535 let nextActiveElement; 7536 if ([HOME_KEY, END_KEY].includes(event.key)) { 7537 nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]; 7538 } else { 7539 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 7540 nextActiveElement = getNextActiveElement(children, event.target, isNext, true); 7541 } 7542 if (nextActiveElement) { 7543 nextActiveElement.focus({ 7544 preventScroll: true 7545 }); 7546 Tab.getOrCreateInstance(nextActiveElement).show(); 7547 } 7548 } 7549 _getChildren() { 7550 // collection of inner elements 7551 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 7552 } 7553 _getActiveElem() { 7554 return this._getChildren().find(child => this._elemIsActive(child)) || null; 7555 } 7556 _setInitialAttributes(parent, children) { 7557 this._setAttributeIfNotExists(parent, 'role', 'tablist'); 7558 for (const child of children) { 7559 this._setInitialAttributesOnChild(child); 7560 } 7561 } 7562 _setInitialAttributesOnChild(child) { 7563 child = this._getInnerElement(child); 7564 const isActive = this._elemIsActive(child); 7565 const outerElem = this._getOuterElement(child); 7566 child.setAttribute('aria-selected', isActive); 7567 if (outerElem !== child) { 7568 this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); 7569 } 7570 if (!isActive) { 7571 child.setAttribute('tabindex', '-1'); 7572 } 7573 this._setAttributeIfNotExists(child, 'role', 'tab'); 7574 7575 // set attributes to the related panel too 7576 this._setInitialAttributesOnTargetPanel(child); 7577 } 7578 _setInitialAttributesOnTargetPanel(child) { 7579 const target = SelectorEngine.getElementFromSelector(child); 7580 if (!target) { 7581 return; 7582 } 7583 this._setAttributeIfNotExists(target, 'role', 'tabpanel'); 7584 if (child.id) { 7585 this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`); 7586 } 7587 } 7588 _toggleDropDown(element, open) { 7589 const outerElem = this._getOuterElement(element); 7590 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 7591 return; 7592 } 7593 const toggle = (selector, className) => { 7594 const element = SelectorEngine.findOne(selector, outerElem); 7595 if (element) { 7596 element.classList.toggle(className, open); 7597 } 7598 }; 7599 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 7600 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 7601 outerElem.setAttribute('aria-expanded', open); 7602 } 7603 _setAttributeIfNotExists(element, attribute, value) { 7604 if (!element.hasAttribute(attribute)) { 7605 element.setAttribute(attribute, value); 7606 } 7607 } 7608 _elemIsActive(elem) { 7609 return elem.classList.contains(CLASS_NAME_ACTIVE); 7610 } 7611 7612 // Try to get the inner element (usually the .nav-link) 7613 _getInnerElement(elem) { 7614 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 7615 } 7616 7617 // Try to get the outer element (usually the .nav-item) 7618 _getOuterElement(elem) { 7619 return elem.closest(SELECTOR_OUTER) || elem; 7620 } 7621 7622 // Static 7623 static jQueryInterface(config) { 7624 return this.each(function () { 7625 const data = Tab.getOrCreateInstance(this); 7626 if (typeof config !== 'string') { 7627 return; 7628 } 7629 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7630 throw new TypeError(`No method named "${config}"`); 7631 } 7632 data[config](); 7633 }); 7634 } 7635} 7636 7637/** 7638 * Data API implementation 7639 */ 7640 7641EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 7642 if (['A', 'AREA'].includes(this.tagName)) { 7643 event.preventDefault(); 7644 } 7645 if (isDisabled(this)) { 7646 return; 7647 } 7648 Tab.getOrCreateInstance(this).show(); 7649}); 7650 7651/** 7652 * Initialize on focus 7653 */ 7654EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 7655 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 7656 Tab.getOrCreateInstance(element); 7657 } 7658}); 7659/** 7660 * jQuery 7661 */ 7662 7663defineJQueryPlugin(Tab); 7664 7665/** 7666 * -------------------------------------------------------------------------- 7667 * Bootstrap toast.js 7668 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7669 * -------------------------------------------------------------------------- 7670 */ 7671 7672 7673/** 7674 * Constants 7675 */ 7676 7677const NAME = 'toast'; 7678const DATA_KEY = 'bs.toast'; 7679const EVENT_KEY = `.${DATA_KEY}`; 7680const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 7681const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 7682const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 7683const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 7684const EVENT_HIDE = `hide${EVENT_KEY}`; 7685const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 7686const EVENT_SHOW = `show${EVENT_KEY}`; 7687const EVENT_SHOWN = `shown${EVENT_KEY}`; 7688const CLASS_NAME_FADE = 'fade'; 7689const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 7690const CLASS_NAME_SHOW = 'show'; 7691const CLASS_NAME_SHOWING = 'showing'; 7692const DefaultType = { 7693 animation: 'boolean', 7694 autohide: 'boolean', 7695 delay: 'number' 7696}; 7697const Default = { 7698 animation: true, 7699 autohide: true, 7700 delay: 5000 7701}; 7702 7703/** 7704 * Class definition 7705 */ 7706 7707class Toast extends BaseComponent { 7708 constructor(element, config) { 7709 super(element, config); 7710 this._timeout = null; 7711 this._hasMouseInteraction = false; 7712 this._hasKeyboardInteraction = false; 7713 this._setListeners(); 7714 } 7715 7716 // Getters 7717 static get Default() { 7718 return Default; 7719 } 7720 static get DefaultType() { 7721 return DefaultType; 7722 } 7723 static get NAME() { 7724 return NAME; 7725 } 7726 7727 // Public 7728 show() { 7729 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 7730 if (showEvent.defaultPrevented) { 7731 return; 7732 } 7733 this._clearTimeout(); 7734 if (this._config.animation) { 7735 this._element.classList.add(CLASS_NAME_FADE); 7736 } 7737 const complete = () => { 7738 this._element.classList.remove(CLASS_NAME_SHOWING); 7739 EventHandler.trigger(this._element, EVENT_SHOWN); 7740 this._maybeScheduleHide(); 7741 }; 7742 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 7743 reflow(this._element); 7744 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 7745 this._queueCallback(complete, this._element, this._config.animation); 7746 } 7747 hide() { 7748 if (!this.isShown()) { 7749 return; 7750 } 7751 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 7752 if (hideEvent.defaultPrevented) { 7753 return; 7754 } 7755 const complete = () => { 7756 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 7757 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 7758 EventHandler.trigger(this._element, EVENT_HIDDEN); 7759 }; 7760 this._element.classList.add(CLASS_NAME_SHOWING); 7761 this._queueCallback(complete, this._element, this._config.animation); 7762 } 7763 dispose() { 7764 this._clearTimeout(); 7765 if (this.isShown()) { 7766 this._element.classList.remove(CLASS_NAME_SHOW); 7767 } 7768 super.dispose(); 7769 } 7770 isShown() { 7771 return this._element.classList.contains(CLASS_NAME_SHOW); 7772 } 7773 7774 // Private 7775 7776 _maybeScheduleHide() { 7777 if (!this._config.autohide) { 7778 return; 7779 } 7780 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 7781 return; 7782 } 7783 this._timeout = setTimeout(() => { 7784 this.hide(); 7785 }, this._config.delay); 7786 } 7787 _onInteraction(event, isInteracting) { 7788 switch (event.type) { 7789 case 'mouseover': 7790 case 'mouseout': 7791 { 7792 this._hasMouseInteraction = isInteracting; 7793 break; 7794 } 7795 case 'focusin': 7796 case 'focusout': 7797 { 7798 this._hasKeyboardInteraction = isInteracting; 7799 break; 7800 } 7801 } 7802 if (isInteracting) { 7803 this._clearTimeout(); 7804 return; 7805 } 7806 const nextElement = event.relatedTarget; 7807 if (this._element === nextElement || this._element.contains(nextElement)) { 7808 return; 7809 } 7810 this._maybeScheduleHide(); 7811 } 7812 _setListeners() { 7813 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 7814 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 7815 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 7816 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 7817 } 7818 _clearTimeout() { 7819 clearTimeout(this._timeout); 7820 this._timeout = null; 7821 } 7822 7823 // Static 7824 static jQueryInterface(config) { 7825 return this.each(function () { 7826 const data = Toast.getOrCreateInstance(this, config); 7827 if (typeof config === 'string') { 7828 if (typeof data[config] === 'undefined') { 7829 throw new TypeError(`No method named "${config}"`); 7830 } 7831 data[config](this); 7832 } 7833 }); 7834 } 7835} 7836 7837/** 7838 * Data API implementation 7839 */ 7840 7841enableDismissTrigger(Toast); 7842 7843/** 7844 * jQuery 7845 */ 7846 7847defineJQueryPlugin(Toast); 7848 7849 7850//# sourceMappingURL=bootstrap.esm.js.map 7851 7852 7853/***/ }), 7854
vendor: 285,755 bytes, lines 7855-18581
7855/***/ "./node_modules/jquery/dist/jquery.js": 7856/*!********************************************!*\ 7857 !*** ./node_modules/jquery/dist/jquery.js ***! 7858 \********************************************/ 7859/***/ (function(module, exports) { 7860 7861var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 7862 * jQuery JavaScript Library v3.7.1 7863 * https://jquery.com/ 7864 * 7865 * Copyright OpenJS Foundation and other contributors 7866 * Released under the MIT license 7867 * https://jquery.org/license 7868 * 7869 * Date: 2023-08-28T13:37Z 7870 */ 7871( function( global, factory ) { 7872 7873 "use strict"; 7874 7875 if ( true && typeof module.exports === "object" ) { 7876 7877 // For CommonJS and CommonJS-like environments where a proper `window` 7878 // is present, execute the factory and get jQuery. 7879 // For environments that do not have a `window` with a `document` 7880 // (such as Node.js), expose a factory as module.exports. 7881 // This accentuates the need for the creation of a real `window`. 7882 // e.g. var jQuery = require("jquery")(window); 7883 // See ticket trac-14549 for more info. 7884 module.exports = global.document ? 7885 factory( global, true ) : 7886 function( w ) { 7887 if ( !w.document ) { 7888 throw new Error( "jQuery requires a window with a document" ); 7889 } 7890 return factory( w ); 7891 }; 7892 } else { 7893 factory( global ); 7894 } 7895 7896// Pass this if window is not defined yet 7897} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 7898 7899// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 7900// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 7901// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 7902// enough that all such attempts are guarded in a try block. 7903"use strict"; 7904 7905var arr = []; 7906 7907var getProto = Object.getPrototypeOf; 7908 7909var slice = arr.slice; 7910 7911var flat = arr.flat ? function( array ) { 7912 return arr.flat.call( array ); 7913} : function( array ) { 7914 return arr.concat.apply( [], array ); 7915}; 7916 7917 7918var push = arr.push; 7919 7920var indexOf = arr.indexOf; 7921 7922var class2type = {}; 7923 7924var toString = class2type.toString; 7925 7926var hasOwn = class2type.hasOwnProperty; 7927 7928var fnToString = hasOwn.toString; 7929 7930var ObjectFunctionString = fnToString.call( Object ); 7931 7932var support = {}; 7933 7934var isFunction = function isFunction( obj ) { 7935 7936 // Support: Chrome <=57, Firefox <=52 7937 // In some browsers, typeof returns "function" for HTML <object> elements 7938 // (i.e., `typeof document.createElement( "object" ) === "function"`). 7939 // We don't want to classify *any* DOM node as a function. 7940 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 7941 // Plus for old WebKit, typeof returns "function" for HTML collections 7942 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 7943 return typeof obj === "function" && typeof obj.nodeType !== "number" && 7944 typeof obj.item !== "function"; 7945 }; 7946 7947 7948var isWindow = function isWindow( obj ) { 7949 return obj != null && obj === obj.window; 7950 }; 7951 7952 7953var document = window.document; 7954 7955 7956 7957 var preservedScriptAttributes = { 7958 type: true, 7959 src: true, 7960 nonce: true, 7961 noModule: true 7962 }; 7963 7964 function DOMEval( code, node, doc ) { 7965 doc = doc || document; 7966 7967 var i, val, 7968 script = doc.createElement( "script" ); 7969 7970 script.text = code; 7971 if ( node ) { 7972 for ( i in preservedScriptAttributes ) { 7973 7974 // Support: Firefox 64+, Edge 18+ 7975 // Some browsers don't support the "nonce" property on scripts. 7976 // On the other hand, just using `getAttribute` is not enough as 7977 // the `nonce` attribute is reset to an empty string whenever it 7978 // becomes browsing-context connected. 7979 // See https://github.com/whatwg/html/issues/2369 7980 // See https://html.spec.whatwg.org/#nonce-attributes 7981 // The `node.getAttribute` check was added for the sake of 7982 // `jQuery.globalEval` so that it can fake a nonce-containing node 7983 // via an object. 7984 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 7985 if ( val ) { 7986 script.setAttribute( i, val ); 7987 } 7988 } 7989 } 7990 doc.head.appendChild( script ).parentNode.removeChild( script ); 7991 } 7992 7993 7994function toType( obj ) { 7995 if ( obj == null ) { 7996 return obj + ""; 7997 } 7998 7999 // Support: Android <=2.3 only (functionish RegExp) 8000 return typeof obj === "object" || typeof obj === "function" ? 8001 class2type[ toString.call( obj ) ] || "object" : 8002 typeof obj; 8003} 8004/* global Symbol */ 8005// Defining this global in .eslintrc.json would create a danger of using the global 8006// unguarded in another place, it seems safer to define global only for this module 8007 8008 8009 8010var version = "3.7.1", 8011 8012 rhtmlSuffix = /HTML$/i, 8013 8014 // Define a local copy of jQuery 8015 jQuery = function( selector, context ) { 8016 8017 // The jQuery object is actually just the init constructor 'enhanced' 8018 // Need init if jQuery is called (just allow error to be thrown if not included) 8019 return new jQuery.fn.init( selector, context ); 8020 }; 8021 8022jQuery.fn = jQuery.prototype = { 8023 8024 // The current version of jQuery being used 8025 jquery: version, 8026 8027 constructor: jQuery, 8028 8029 // The default length of a jQuery object is 0 8030 length: 0, 8031 8032 toArray: function() { 8033 return slice.call( this ); 8034 }, 8035 8036 // Get the Nth element in the matched element set OR 8037 // Get the whole matched element set as a clean array 8038 get: function( num ) { 8039 8040 // Return all the elements in a clean array 8041 if ( num == null ) { 8042 return slice.call( this ); 8043 } 8044 8045 // Return just the one element from the set 8046 return num < 0 ? this[ num + this.length ] : this[ num ]; 8047 }, 8048 8049 // Take an array of elements and push it onto the stack 8050 // (returning the new matched element set) 8051 pushStack: function( elems ) { 8052 8053 // Build a new jQuery matched element set 8054 var ret = jQuery.merge( this.constructor(), elems ); 8055 8056 // Add the old object onto the stack (as a reference) 8057 ret.prevObject = this; 8058 8059 // Return the newly-formed element set 8060 return ret; 8061 }, 8062 8063 // Execute a callback for every element in the matched set. 8064 each: function( callback ) { 8065 return jQuery.each( this, callback ); 8066 }, 8067 8068 map: function( callback ) { 8069 return this.pushStack( jQuery.map( this, function( elem, i ) { 8070 return callback.call( elem, i, elem ); 8071 } ) ); 8072 }, 8073 8074 slice: function() { 8075 return this.pushStack( slice.apply( this, arguments ) ); 8076 }, 8077 8078 first: function() { 8079 return this.eq( 0 ); 8080 }, 8081 8082 last: function() { 8083 return this.eq( -1 ); 8084 }, 8085 8086 even: function() { 8087 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 8088 return ( i + 1 ) % 2; 8089 } ) ); 8090 }, 8091 8092 odd: function() { 8093 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 8094 return i % 2; 8095 } ) ); 8096 }, 8097 8098 eq: function( i ) { 8099 var len = this.length, 8100 j = +i + ( i < 0 ? len : 0 ); 8101 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 8102 }, 8103 8104 end: function() { 8105 return this.prevObject || this.constructor(); 8106 }, 8107 8108 // For internal use only. 8109 // Behaves like an Array's method, not like a jQuery method. 8110 push: push, 8111 sort: arr.sort, 8112 splice: arr.splice 8113}; 8114 8115jQuery.extend = jQuery.fn.extend = function() { 8116 var options, name, src, copy, copyIsArray, clone, 8117 target = arguments[ 0 ] || {}, 8118 i = 1, 8119 length = arguments.length, 8120 deep = false; 8121 8122 // Handle a deep copy situation 8123 if ( typeof target === "boolean" ) { 8124 deep = target; 8125 8126 // Skip the boolean and the target 8127 target = arguments[ i ] || {}; 8128 i++; 8129 } 8130 8131 // Handle case when target is a string or something (possible in deep copy) 8132 if ( typeof target !== "object" && !isFunction( target ) ) { 8133 target = {}; 8134 } 8135 8136 // Extend jQuery itself if only one argument is passed 8137 if ( i === length ) { 8138 target = this; 8139 i--; 8140 } 8141 8142 for ( ; i < length; i++ ) { 8143 8144 // Only deal with non-null/undefined values 8145 if ( ( options = arguments[ i ] ) != null ) { 8146 8147 // Extend the base object 8148 for ( name in options ) { 8149 copy = options[ name ]; 8150 8151 // Prevent Object.prototype pollution 8152 // Prevent never-ending loop 8153 if ( name === "__proto__" || target === copy ) { 8154 continue; 8155 } 8156 8157 // Recurse if we're merging plain objects or arrays 8158 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 8159 ( copyIsArray = Array.isArray( copy ) ) ) ) { 8160 src = target[ name ]; 8161 8162 // Ensure proper type for the source value 8163 if ( copyIsArray && !Array.isArray( src ) ) { 8164 clone = []; 8165 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 8166 clone = {}; 8167 } else { 8168 clone = src; 8169 } 8170 copyIsArray = false; 8171 8172 // Never move original objects, clone them 8173 target[ name ] = jQuery.extend( deep, clone, copy ); 8174 8175 // Don't bring in undefined values 8176 } else if ( copy !== undefined ) { 8177 target[ name ] = copy; 8178 } 8179 } 8180 } 8181 } 8182 8183 // Return the modified object 8184 return target; 8185}; 8186 8187jQuery.extend( { 8188 8189 // Unique for each copy of jQuery on the page 8190 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 8191 8192 // Assume jQuery is ready without the ready module 8193 isReady: true, 8194 8195 error: function( msg ) { 8196 throw new Error( msg ); 8197 }, 8198 8199 noop: function() {}, 8200 8201 isPlainObject: function( obj ) { 8202 var proto, Ctor; 8203 8204 // Detect obvious negatives 8205 // Use toString instead of jQuery.type to catch host objects 8206 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 8207 return false; 8208 } 8209 8210 proto = getProto( obj ); 8211 8212 // Objects with no prototype (e.g., `Object.create( null )`) are plain 8213 if ( !proto ) { 8214 return true; 8215 } 8216 8217 // Objects with prototype are plain iff they were constructed by a global Object function 8218 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 8219 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 8220 }, 8221 8222 isEmptyObject: function( obj ) { 8223 var name; 8224 8225 for ( name in obj ) { 8226 return false; 8227 } 8228 return true; 8229 }, 8230 8231 // Evaluates a script in a provided context; falls back to the global one 8232 // if not specified. 8233 globalEval: function( code, options, doc ) { 8234 DOMEval( code, { nonce: options && options.nonce }, doc ); 8235 }, 8236 8237 each: function( obj, callback ) { 8238 var length, i = 0; 8239 8240 if ( isArrayLike( obj ) ) { 8241 length = obj.length; 8242 for ( ; i < length; i++ ) { 8243 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 8244 break; 8245 } 8246 } 8247 } else { 8248 for ( i in obj ) { 8249 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 8250 break; 8251 } 8252 } 8253 } 8254 8255 return obj; 8256 }, 8257 8258 8259 // Retrieve the text value of an array of DOM nodes 8260 text: function( elem ) { 8261 var node, 8262 ret = "", 8263 i = 0, 8264 nodeType = elem.nodeType; 8265 8266 if ( !nodeType ) { 8267 8268 // If no nodeType, this is expected to be an array 8269 while ( ( node = elem[ i++ ] ) ) { 8270 8271 // Do not traverse comment nodes 8272 ret += jQuery.text( node ); 8273 } 8274 } 8275 if ( nodeType === 1 || nodeType === 11 ) { 8276 return elem.textContent; 8277 } 8278 if ( nodeType === 9 ) { 8279 return elem.documentElement.textContent; 8280 } 8281 if ( nodeType === 3 || nodeType === 4 ) { 8282 return elem.nodeValue; 8283 } 8284 8285 // Do not include comment or processing instruction nodes 8286 8287 return ret; 8288 }, 8289 8290 // results is for internal usage only 8291 makeArray: function( arr, results ) { 8292 var ret = results || []; 8293 8294 if ( arr != null ) { 8295 if ( isArrayLike( Object( arr ) ) ) { 8296 jQuery.merge( ret, 8297 typeof arr === "string" ? 8298 [ arr ] : arr 8299 ); 8300 } else { 8301 push.call( ret, arr ); 8302 } 8303 } 8304 8305 return ret; 8306 }, 8307 8308 inArray: function( elem, arr, i ) { 8309 return arr == null ? -1 : indexOf.call( arr, elem, i ); 8310 }, 8311 8312 isXMLDoc: function( elem ) { 8313 var namespace = elem && elem.namespaceURI, 8314 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 8315 8316 // Assume HTML when documentElement doesn't yet exist, such as inside 8317 // document fragments. 8318 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 8319 }, 8320 8321 // Support: Android <=4.0 only, PhantomJS 1 only 8322 // push.apply(_, arraylike) throws on ancient WebKit 8323 merge: function( first, second ) { 8324 var len = +second.length, 8325 j = 0, 8326 i = first.length; 8327 8328 for ( ; j < len; j++ ) { 8329 first[ i++ ] = second[ j ]; 8330 } 8331 8332 first.length = i; 8333 8334 return first; 8335 }, 8336 8337 grep: function( elems, callback, invert ) { 8338 var callbackInverse, 8339 matches = [], 8340 i = 0, 8341 length = elems.length, 8342 callbackExpect = !invert; 8343 8344 // Go through the array, only saving the items 8345 // that pass the validator function 8346 for ( ; i < length; i++ ) { 8347 callbackInverse = !callback( elems[ i ], i ); 8348 if ( callbackInverse !== callbackExpect ) { 8349 matches.push( elems[ i ] ); 8350 } 8351 } 8352 8353 return matches; 8354 }, 8355 8356 // arg is for internal usage only 8357 map: function( elems, callback, arg ) { 8358 var length, value, 8359 i = 0, 8360 ret = []; 8361 8362 // Go through the array, translating each of the items to their new values 8363 if ( isArrayLike( elems ) ) { 8364 length = elems.length; 8365 for ( ; i < length; i++ ) { 8366 value = callback( elems[ i ], i, arg ); 8367 8368 if ( value != null ) { 8369 ret.push( value ); 8370 } 8371 } 8372 8373 // Go through every key on the object, 8374 } else { 8375 for ( i in elems ) { 8376 value = callback( elems[ i ], i, arg ); 8377 8378 if ( value != null ) { 8379 ret.push( value ); 8380 } 8381 } 8382 } 8383 8384 // Flatten any nested arrays 8385 return flat( ret ); 8386 }, 8387 8388 // A global GUID counter for objects 8389 guid: 1, 8390 8391 // jQuery.support is not used in Core but other projects attach their 8392 // properties to it so it needs to exist. 8393 support: support 8394} ); 8395 8396if ( typeof Symbol === "function" ) { 8397 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 8398} 8399 8400// Populate the class2type map 8401jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 8402 function( _i, name ) { 8403 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 8404 } ); 8405 8406function isArrayLike( obj ) { 8407 8408 // Support: real iOS 8.2 only (not reproducible in simulator) 8409 // `in` check used to prevent JIT error (gh-2145) 8410 // hasOwn isn't used here due to false negatives 8411 // regarding Nodelist length in IE 8412 var length = !!obj && "length" in obj && obj.length, 8413 type = toType( obj ); 8414 8415 if ( isFunction( obj ) || isWindow( obj ) ) { 8416 return false; 8417 } 8418 8419 return type === "array" || length === 0 || 8420 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 8421} 8422 8423 8424function nodeName( elem, name ) { 8425 8426 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 8427 8428} 8429var pop = arr.pop; 8430 8431 8432var sort = arr.sort; 8433 8434 8435var splice = arr.splice; 8436 8437 8438var whitespace = "[\\x20\\t\\r\\n\\f]"; 8439 8440 8441var rtrimCSS = new RegExp( 8442 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 8443 "g" 8444); 8445 8446 8447 8448 8449// Note: an element does not contain itself 8450jQuery.contains = function( a, b ) { 8451 var bup = b && b.parentNode; 8452 8453 return a === bup || !!( bup && bup.nodeType === 1 && ( 8454 8455 // Support: IE 9 - 11+ 8456 // IE doesn't have `contains` on SVG. 8457 a.contains ? 8458 a.contains( bup ) : 8459 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 8460 ) ); 8461}; 8462 8463 8464 8465 8466// CSS string/identifier serialization 8467// https://drafts.csswg.org/cssom/#common-serializing-idioms 8468var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 8469 8470function fcssescape( ch, asCodePoint ) { 8471 if ( asCodePoint ) { 8472 8473 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 8474 if ( ch === "\0" ) { 8475 return "\uFFFD"; 8476 } 8477 8478 // Control characters and (dependent upon position) numbers get escaped as code points 8479 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 8480 } 8481 8482 // Other potentially-special ASCII characters get backslash-escaped 8483 return "\\" + ch; 8484} 8485 8486jQuery.escapeSelector = function( sel ) { 8487 return ( sel + "" ).replace( rcssescape, fcssescape ); 8488}; 8489 8490 8491 8492 8493var preferredDoc = document, 8494 pushNative = push; 8495 8496( function() { 8497 8498var i, 8499 Expr, 8500 outermostContext, 8501 sortInput, 8502 hasDuplicate, 8503 push = pushNative, 8504 8505 // Local document vars 8506 document, 8507 documentElement, 8508 documentIsHTML, 8509 rbuggyQSA, 8510 matches, 8511 8512 // Instance-specific data 8513 expando = jQuery.expando, 8514 dirruns = 0, 8515 done = 0, 8516 classCache = createCache(), 8517 tokenCache = createCache(), 8518 compilerCache = createCache(), 8519 nonnativeSelectorCache = createCache(), 8520 sortOrder = function( a, b ) { 8521 if ( a === b ) { 8522 hasDuplicate = true; 8523 } 8524 return 0; 8525 }, 8526 8527 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 8528 "loop|multiple|open|readonly|required|scoped", 8529 8530 // Regular expressions 8531 8532 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 8533 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 8534 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 8535 8536 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 8537 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 8538 8539 // Operator (capture 2) 8540 "*([*^$|!~]?=)" + whitespace + 8541 8542 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 8543 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 8544 whitespace + "*\\]", 8545 8546 pseudos = ":(" + identifier + ")(?:\\((" + 8547 8548 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 8549 // 1. quoted (capture 3; capture 4 or capture 5) 8550 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 8551 8552 // 2. simple (capture 6) 8553 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 8554 8555 // 3. anything else (capture 2) 8556 ".*" + 8557 ")\\)|)", 8558 8559 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 8560 rwhitespace = new RegExp( whitespace + "+", "g" ), 8561 8562 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 8563 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 8564 whitespace + "*" ), 8565 rdescend = new RegExp( whitespace + "|>" ), 8566 8567 rpseudo = new RegExp( pseudos ), 8568 ridentifier = new RegExp( "^" + identifier + "$" ), 8569 8570 matchExpr = { 8571 ID: new RegExp( "^#(" + identifier + ")" ), 8572 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 8573 TAG: new RegExp( "^(" + identifier + "|[*])" ), 8574 ATTR: new RegExp( "^" + attributes ), 8575 PSEUDO: new RegExp( "^" + pseudos ), 8576 CHILD: new RegExp( 8577 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 8578 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 8579 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 8580 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 8581 8582 // For use in libraries implementing .is() 8583 // We use this for POS matching in `select` 8584 needsContext: new RegExp( "^" + whitespace + 8585 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 8586 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 8587 }, 8588 8589 rinputs = /^(?:input|select|textarea|button)$/i, 8590 rheader = /^h\d$/i, 8591 8592 // Easily-parseable/retrievable ID or TAG or CLASS selectors 8593 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 8594 8595 rsibling = /[+~]/, 8596 8597 // CSS escapes 8598 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 8599 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 8600 "?|\\\\([^\\r\\n\\f])", "g" ), 8601 funescape = function( escape, nonHex ) { 8602 var high = "0x" + escape.slice( 1 ) - 0x10000; 8603 8604 if ( nonHex ) { 8605 8606 // Strip the backslash prefix from a non-hex escape sequence 8607 return nonHex; 8608 } 8609 8610 // Replace a hexadecimal escape sequence with the encoded Unicode code point 8611 // Support: IE <=11+ 8612 // For values outside the Basic Multilingual Plane (BMP), manually construct a 8613 // surrogate pair 8614 return high < 0 ? 8615 String.fromCharCode( high + 0x10000 ) : 8616 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 8617 }, 8618 8619 // Used for iframes; see `setDocument`. 8620 // Support: IE 9 - 11+, Edge 12 - 18+ 8621 // Removing the function wrapper causes a "Permission Denied" 8622 // error in IE/Edge. 8623 unloadHandler = function() { 8624 setDocument(); 8625 }, 8626 8627 inDisabledFieldset = addCombinator( 8628 function( elem ) { 8629 return elem.disabled === true && nodeName( elem, "fieldset" ); 8630 }, 8631 { dir: "parentNode", next: "legend" } 8632 ); 8633 8634// Support: IE <=9 only 8635// Accessing document.activeElement can throw unexpectedly 8636// https://bugs.jquery.com/ticket/13393 8637function safeActiveElement() { 8638 try { 8639 return document.activeElement; 8640 } catch ( err ) { } 8641} 8642 8643// Optimize for push.apply( _, NodeList ) 8644try { 8645 push.apply( 8646 ( arr = slice.call( preferredDoc.childNodes ) ), 8647 preferredDoc.childNodes 8648 ); 8649 8650 // Support: Android <=4.0 8651 // Detect silently failing push.apply 8652 // eslint-disable-next-line no-unused-expressions 8653 arr[ preferredDoc.childNodes.length ].nodeType; 8654} catch ( e ) { 8655 push = { 8656 apply: function( target, els ) { 8657 pushNative.apply( target, slice.call( els ) ); 8658 }, 8659 call: function( target ) { 8660 pushNative.apply( target, slice.call( arguments, 1 ) ); 8661 } 8662 }; 8663} 8664 8665function find( selector, context, results, seed ) { 8666 var m, i, elem, nid, match, groups, newSelector, 8667 newContext = context && context.ownerDocument, 8668 8669 // nodeType defaults to 9, since context defaults to document 8670 nodeType = context ? context.nodeType : 9; 8671 8672 results = results || []; 8673 8674 // Return early from calls with invalid selector or context 8675 if ( typeof selector !== "string" || !selector || 8676 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 8677 8678 return results; 8679 } 8680 8681 // Try to shortcut find operations (as opposed to filters) in HTML documents 8682 if ( !seed ) { 8683 setDocument( context ); 8684 context = context || document; 8685 8686 if ( documentIsHTML ) { 8687 8688 // If the selector is sufficiently simple, try using a "get*By*" DOM method 8689 // (excepting DocumentFragment context, where the methods don't exist) 8690 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 8691 8692 // ID selector 8693 if ( ( m = match[ 1 ] ) ) { 8694 8695 // Document context 8696 if ( nodeType === 9 ) { 8697 if ( ( elem = context.getElementById( m ) ) ) { 8698 8699 // Support: IE 9 only 8700 // getElementById can match elements by name instead of ID 8701 if ( elem.id === m ) { 8702 push.call( results, elem ); 8703 return results; 8704 } 8705 } else { 8706 return results; 8707 } 8708 8709 // Element context 8710 } else { 8711 8712 // Support: IE 9 only 8713 // getElementById can match elements by name instead of ID 8714 if ( newContext && ( elem = newContext.getElementById( m ) ) && 8715 find.contains( context, elem ) && 8716 elem.id === m ) { 8717 8718 push.call( results, elem ); 8719 return results; 8720 } 8721 } 8722 8723 // Type selector 8724 } else if ( match[ 2 ] ) { 8725 push.apply( results, context.getElementsByTagName( selector ) ); 8726 return results; 8727 8728 // Class selector 8729 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 8730 push.apply( results, context.getElementsByClassName( m ) ); 8731 return results; 8732 } 8733 } 8734 8735 // Take advantage of querySelectorAll 8736 if ( !nonnativeSelectorCache[ selector + " " ] && 8737 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 8738 8739 newSelector = selector; 8740 newContext = context; 8741 8742 // qSA considers elements outside a scoping root when evaluating child or 8743 // descendant combinators, which is not what we want. 8744 // In such cases, we work around the behavior by prefixing every selector in the 8745 // list with an ID selector referencing the scope context. 8746 // The technique has to be used as well when a leading combinator is used 8747 // as such selectors are not recognized by querySelectorAll. 8748 // Thanks to Andrew Dupont for this technique. 8749 if ( nodeType === 1 && 8750 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 8751 8752 // Expand context for sibling selectors 8753 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 8754 context; 8755 8756 // We can use :scope instead of the ID hack if the browser 8757 // supports it & if we're not changing the context. 8758 // Support: IE 11+, Edge 17 - 18+ 8759 // IE/Edge sometimes throw a "Permission denied" error when 8760 // strict-comparing two documents; shallow comparisons work. 8761 // eslint-disable-next-line eqeqeq 8762 if ( newContext != context || !support.scope ) { 8763 8764 // Capture the context ID, setting it first if necessary 8765 if ( ( nid = context.getAttribute( "id" ) ) ) { 8766 nid = jQuery.escapeSelector( nid ); 8767 } else { 8768 context.setAttribute( "id", ( nid = expando ) ); 8769 } 8770 } 8771 8772 // Prefix every selector in the list 8773 groups = tokenize( selector ); 8774 i = groups.length; 8775 while ( i-- ) { 8776 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 8777 toSelector( groups[ i ] ); 8778 } 8779 newSelector = groups.join( "," ); 8780 } 8781 8782 try { 8783 push.apply( results, 8784 newContext.querySelectorAll( newSelector ) 8785 ); 8786 return results; 8787 } catch ( qsaError ) { 8788 nonnativeSelectorCache( selector, true ); 8789 } finally { 8790 if ( nid === expando ) { 8791 context.removeAttribute( "id" ); 8792 } 8793 } 8794 } 8795 } 8796 } 8797 8798 // All others 8799 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 8800} 8801 8802/** 8803 * Create key-value caches of limited size 8804 * @returns {function(string, object)} Returns the Object data after storing it on itself with 8805 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 8806 * deleting the oldest entry 8807 */ 8808function createCache() { 8809 var keys = []; 8810 8811 function cache( key, value ) { 8812 8813 // Use (key + " ") to avoid collision with native prototype properties 8814 // (see https://github.com/jquery/sizzle/issues/157) 8815 if ( keys.push( key + " " ) > Expr.cacheLength ) { 8816 8817 // Only keep the most recent entries 8818 delete cache[ keys.shift() ]; 8819 } 8820 return ( cache[ key + " " ] = value ); 8821 } 8822 return cache; 8823} 8824 8825/** 8826 * Mark a function for special use by jQuery selector module 8827 * @param {Function} fn The function to mark 8828 */ 8829function markFunction( fn ) { 8830 fn[ expando ] = true; 8831 return fn; 8832} 8833 8834/** 8835 * Support testing using an element 8836 * @param {Function} fn Passed the created element and returns a boolean result 8837 */ 8838function assert( fn ) { 8839 var el = document.createElement( "fieldset" ); 8840 8841 try { 8842 return !!fn( el ); 8843 } catch ( e ) { 8844 return false; 8845 } finally { 8846 8847 // Remove from its parent by default 8848 if ( el.parentNode ) { 8849 el.parentNode.removeChild( el ); 8850 } 8851 8852 // release memory in IE 8853 el = null; 8854 } 8855} 8856 8857/** 8858 * Returns a function to use in pseudos for input types 8859 * @param {String} type 8860 */ 8861function createInputPseudo( type ) { 8862 return function( elem ) { 8863 return nodeName( elem, "input" ) && elem.type === type; 8864 }; 8865} 8866 8867/** 8868 * Returns a function to use in pseudos for buttons 8869 * @param {String} type 8870 */ 8871function createButtonPseudo( type ) { 8872 return function( elem ) { 8873 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 8874 elem.type === type; 8875 }; 8876} 8877 8878/** 8879 * Returns a function to use in pseudos for :enabled/:disabled 8880 * @param {Boolean} disabled true for :disabled; false for :enabled 8881 */ 8882function createDisabledPseudo( disabled ) { 8883 8884 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 8885 return function( elem ) { 8886 8887 // Only certain elements can match :enabled or :disabled 8888 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 8889 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 8890 if ( "form" in elem ) { 8891 8892 // Check for inherited disabledness on relevant non-disabled elements: 8893 // * listed form-associated elements in a disabled fieldset 8894 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 8895 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 8896 // * option elements in a disabled optgroup 8897 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 8898 // All such elements have a "form" property. 8899 if ( elem.parentNode && elem.disabled === false ) { 8900 8901 // Option elements defer to a parent optgroup if present 8902 if ( "label" in elem ) { 8903 if ( "label" in elem.parentNode ) { 8904 return elem.parentNode.disabled === disabled; 8905 } else { 8906 return elem.disabled === disabled; 8907 } 8908 } 8909 8910 // Support: IE 6 - 11+ 8911 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 8912 return elem.isDisabled === disabled || 8913 8914 // Where there is no isDisabled, check manually 8915 elem.isDisabled !== !disabled && 8916 inDisabledFieldset( elem ) === disabled; 8917 } 8918 8919 return elem.disabled === disabled; 8920 8921 // Try to winnow out elements that can't be disabled before trusting the disabled property. 8922 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 8923 // even exist on them, let alone have a boolean value. 8924 } else if ( "label" in elem ) { 8925 return elem.disabled === disabled; 8926 } 8927 8928 // Remaining elements are neither :enabled nor :disabled 8929 return false; 8930 }; 8931} 8932 8933/** 8934 * Returns a function to use in pseudos for positionals 8935 * @param {Function} fn 8936 */ 8937function createPositionalPseudo( fn ) { 8938 return markFunction( function( argument ) { 8939 argument = +argument; 8940 return markFunction( function( seed, matches ) { 8941 var j, 8942 matchIndexes = fn( [], seed.length, argument ), 8943 i = matchIndexes.length; 8944 8945 // Match elements found at the specified indexes 8946 while ( i-- ) { 8947 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 8948 seed[ j ] = !( matches[ j ] = seed[ j ] ); 8949 } 8950 } 8951 } ); 8952 } ); 8953} 8954 8955/** 8956 * Checks a node for validity as a jQuery selector context 8957 * @param {Element|Object=} context 8958 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 8959 */ 8960function testContext( context ) { 8961 return context && typeof context.getElementsByTagName !== "undefined" && context; 8962} 8963 8964/** 8965 * Sets document-related variables once based on the current document 8966 * @param {Element|Object} [node] An element or document object to use to set the document 8967 * @returns {Object} Returns the current document 8968 */ 8969function setDocument( node ) { 8970 var subWindow, 8971 doc = node ? node.ownerDocument || node : preferredDoc; 8972 8973 // Return early if doc is invalid or already selected 8974 // Support: IE 11+, Edge 17 - 18+ 8975 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8976 // two documents; shallow comparisons work. 8977 // eslint-disable-next-line eqeqeq 8978 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 8979 return document; 8980 } 8981 8982 // Update global variables 8983 document = doc; 8984 documentElement = document.documentElement; 8985 documentIsHTML = !jQuery.isXMLDoc( document ); 8986 8987 // Support: iOS 7 only, IE 9 - 11+ 8988 // Older browsers didn't support unprefixed `matches`. 8989 matches = documentElement.matches || 8990 documentElement.webkitMatchesSelector || 8991 documentElement.msMatchesSelector; 8992 8993 // Support: IE 9 - 11+, Edge 12 - 18+ 8994 // Accessing iframe documents after unload throws "permission denied" errors 8995 // (see trac-13936). 8996 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 8997 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 8998 if ( documentElement.msMatchesSelector && 8999 9000 // Support: IE 11+, Edge 17 - 18+ 9001 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9002 // two documents; shallow comparisons work. 9003 // eslint-disable-next-line eqeqeq 9004 preferredDoc != document && 9005 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 9006 9007 // Support: IE 9 - 11+, Edge 12 - 18+ 9008 subWindow.addEventListener( "unload", unloadHandler ); 9009 } 9010 9011 // Support: IE <10 9012 // Check if getElementById returns elements by name 9013 // The broken getElementById methods don't pick up programmatically-set names, 9014 // so use a roundabout getElementsByName test 9015 support.getById = assert( function( el ) { 9016 documentElement.appendChild( el ).id = jQuery.expando; 9017 return !document.getElementsByName || 9018 !document.getElementsByName( jQuery.expando ).length; 9019 } ); 9020 9021 // Support: IE 9 only 9022 // Check to see if it's possible to do matchesSelector 9023 // on a disconnected node. 9024 support.disconnectedMatch = assert( function( el ) { 9025 return matches.call( el, "*" ); 9026 } ); 9027 9028 // Support: IE 9 - 11+, Edge 12 - 18+ 9029 // IE/Edge don't support the :scope pseudo-class. 9030 support.scope = assert( function() { 9031 return document.querySelectorAll( ":scope" ); 9032 } ); 9033 9034 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 9035 // Make sure the `:has()` argument is parsed unforgivingly. 9036 // We include `*` in the test to detect buggy implementations that are 9037 // _selectively_ forgiving (specifically when the list includes at least 9038 // one valid selector). 9039 // Note that we treat complete lack of support for `:has()` as if it were 9040 // spec-compliant support, which is fine because use of `:has()` in such 9041 // environments will fail in the qSA path and fall back to jQuery traversal 9042 // anyway. 9043 support.cssHas = assert( function() { 9044 try { 9045 document.querySelector( ":has(*,:jqfake)" ); 9046 return false; 9047 } catch ( e ) { 9048 return true; 9049 } 9050 } ); 9051 9052 // ID filter and find 9053 if ( support.getById ) { 9054 Expr.filter.ID = function( id ) { 9055 var attrId = id.replace( runescape, funescape ); 9056 return function( elem ) { 9057 return elem.getAttribute( "id" ) === attrId; 9058 }; 9059 }; 9060 Expr.find.ID = function( id, context ) { 9061 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 9062 var elem = context.getElementById( id ); 9063 return elem ? [ elem ] : []; 9064 } 9065 }; 9066 } else { 9067 Expr.filter.ID = function( id ) { 9068 var attrId = id.replace( runescape, funescape ); 9069 return function( elem ) { 9070 var node = typeof elem.getAttributeNode !== "undefined" && 9071 elem.getAttributeNode( "id" ); 9072 return node && node.value === attrId; 9073 }; 9074 }; 9075 9076 // Support: IE 6 - 7 only 9077 // getElementById is not reliable as a find shortcut 9078 Expr.find.ID = function( id, context ) { 9079 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 9080 var node, i, elems, 9081 elem = context.getElementById( id ); 9082 9083 if ( elem ) { 9084 9085 // Verify the id attribute 9086 node = elem.getAttributeNode( "id" ); 9087 if ( node && node.value === id ) { 9088 return [ elem ]; 9089 } 9090 9091 // Fall back on getElementsByName 9092 elems = context.getElementsByName( id ); 9093 i = 0; 9094 while ( ( elem = elems[ i++ ] ) ) { 9095 node = elem.getAttributeNode( "id" ); 9096 if ( node && node.value === id ) { 9097 return [ elem ]; 9098 } 9099 } 9100 } 9101 9102 return []; 9103 } 9104 }; 9105 } 9106 9107 // Tag 9108 Expr.find.TAG = function( tag, context ) { 9109 if ( typeof context.getElementsByTagName !== "undefined" ) { 9110 return context.getElementsByTagName( tag ); 9111 9112 // DocumentFragment nodes don't have gEBTN 9113 } else { 9114 return context.querySelectorAll( tag ); 9115 } 9116 }; 9117 9118 // Class 9119 Expr.find.CLASS = function( className, context ) { 9120 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 9121 return context.getElementsByClassName( className ); 9122 } 9123 }; 9124 9125 /* QSA/matchesSelector 9126 ---------------------------------------------------------------------- */ 9127 9128 // QSA and matchesSelector support 9129 9130 rbuggyQSA = []; 9131 9132 // Build QSA regex 9133 // Regex strategy adopted from Diego Perini 9134 assert( function( el ) { 9135 9136 var input; 9137 9138 documentElement.appendChild( el ).innerHTML = 9139 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 9140 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 9141 "<option selected=''></option></select>"; 9142 9143 // Support: iOS <=7 - 8 only 9144 // Boolean attributes and "value" are not treated correctly in some XML documents 9145 if ( !el.querySelectorAll( "[selected]" ).length ) { 9146 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 9147 } 9148 9149 // Support: iOS <=7 - 8 only 9150 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 9151 rbuggyQSA.push( "~=" ); 9152 } 9153 9154 // Support: iOS 8 only 9155 // https://bugs.webkit.org/show_bug.cgi?id=136851 9156 // In-page `selector#id sibling-combinator selector` fails 9157 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 9158 rbuggyQSA.push( ".#.+[+~]" ); 9159 } 9160 9161 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 9162 // In some of the document kinds, these selectors wouldn't work natively. 9163 // This is probably OK but for backwards compatibility we want to maintain 9164 // handling them through jQuery traversal in jQuery 3.x. 9165 if ( !el.querySelectorAll( ":checked" ).length ) { 9166 rbuggyQSA.push( ":checked" ); 9167 } 9168 9169 // Support: Windows 8 Native Apps 9170 // The type and name attributes are restricted during .innerHTML assignment 9171 input = document.createElement( "input" ); 9172 input.setAttribute( "type", "hidden" ); 9173 el.appendChild( input ).setAttribute( "name", "D" ); 9174 9175 // Support: IE 9 - 11+ 9176 // IE's :disabled selector does not pick up the children of disabled fieldsets 9177 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 9178 // In some of the document kinds, these selectors wouldn't work natively. 9179 // This is probably OK but for backwards compatibility we want to maintain 9180 // handling them through jQuery traversal in jQuery 3.x. 9181 documentElement.appendChild( el ).disabled = true; 9182 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 9183 rbuggyQSA.push( ":enabled", ":disabled" ); 9184 } 9185 9186 // Support: IE 11+, Edge 15 - 18+ 9187 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 9188 // Adding a temporary attribute to the document before the selection works 9189 // around the issue. 9190 // Interestingly, IE 10 & older don't seem to have the issue. 9191 input = document.createElement( "input" ); 9192 input.setAttribute( "name", "" ); 9193 el.appendChild( input ); 9194 if ( !el.querySelectorAll( "[name='']" ).length ) { 9195 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 9196 whitespace + "*(?:''|\"\")" ); 9197 } 9198 } ); 9199 9200 if ( !support.cssHas ) { 9201 9202 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 9203 // Our regular `try-catch` mechanism fails to detect natively-unsupported 9204 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 9205 // in browsers that parse the `:has()` argument as a forgiving selector list. 9206 // https://drafts.csswg.org/selectors/#relational now requires the argument 9207 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 9208 rbuggyQSA.push( ":has" ); 9209 } 9210 9211 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 9212 9213 /* Sorting 9214 ---------------------------------------------------------------------- */ 9215 9216 // Document order sorting 9217 sortOrder = function( a, b ) { 9218 9219 // Flag for duplicate removal 9220 if ( a === b ) { 9221 hasDuplicate = true; 9222 return 0; 9223 } 9224 9225 // Sort on method existence if only one input has compareDocumentPosition 9226 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 9227 if ( compare ) { 9228 return compare; 9229 } 9230 9231 // Calculate position if both inputs belong to the same document 9232 // Support: IE 11+, Edge 17 - 18+ 9233 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9234 // two documents; shallow comparisons work. 9235 // eslint-disable-next-line eqeqeq 9236 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 9237 a.compareDocumentPosition( b ) : 9238 9239 // Otherwise we know they are disconnected 9240 1; 9241 9242 // Disconnected nodes 9243 if ( compare & 1 || 9244 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 9245 9246 // Choose the first element that is related to our preferred document 9247 // Support: IE 11+, Edge 17 - 18+ 9248 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9249 // two documents; shallow comparisons work. 9250 // eslint-disable-next-line eqeqeq 9251 if ( a === document || a.ownerDocument == preferredDoc && 9252 find.contains( preferredDoc, a ) ) { 9253 return -1; 9254 } 9255 9256 // Support: IE 11+, Edge 17 - 18+ 9257 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9258 // two documents; shallow comparisons work. 9259 // eslint-disable-next-line eqeqeq 9260 if ( b === document || b.ownerDocument == preferredDoc && 9261 find.contains( preferredDoc, b ) ) { 9262 return 1; 9263 } 9264 9265 // Maintain original order 9266 return sortInput ? 9267 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 9268 0; 9269 } 9270 9271 return compare & 4 ? -1 : 1; 9272 }; 9273 9274 return document; 9275} 9276 9277find.matches = function( expr, elements ) { 9278 return find( expr, null, null, elements ); 9279}; 9280 9281find.matchesSelector = function( elem, expr ) { 9282 setDocument( elem ); 9283 9284 if ( documentIsHTML && 9285 !nonnativeSelectorCache[ expr + " " ] && 9286 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 9287 9288 try { 9289 var ret = matches.call( elem, expr ); 9290 9291 // IE 9's matchesSelector returns false on disconnected nodes 9292 if ( ret || support.disconnectedMatch || 9293 9294 // As well, disconnected nodes are said to be in a document 9295 // fragment in IE 9 9296 elem.document && elem.document.nodeType !== 11 ) { 9297 return ret; 9298 } 9299 } catch ( e ) { 9300 nonnativeSelectorCache( expr, true ); 9301 } 9302 } 9303 9304 return find( expr, document, null, [ elem ] ).length > 0; 9305}; 9306 9307find.contains = function( context, elem ) { 9308 9309 // Set document vars if needed 9310 // Support: IE 11+, Edge 17 - 18+ 9311 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9312 // two documents; shallow comparisons work. 9313 // eslint-disable-next-line eqeqeq 9314 if ( ( context.ownerDocument || context ) != document ) { 9315 setDocument( context ); 9316 } 9317 return jQuery.contains( context, elem ); 9318}; 9319 9320 9321find.attr = function( elem, name ) { 9322 9323 // Set document vars if needed 9324 // Support: IE 11+, Edge 17 - 18+ 9325 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9326 // two documents; shallow comparisons work. 9327 // eslint-disable-next-line eqeqeq 9328 if ( ( elem.ownerDocument || elem ) != document ) { 9329 setDocument( elem ); 9330 } 9331 9332 var fn = Expr.attrHandle[ name.toLowerCase() ], 9333 9334 // Don't get fooled by Object.prototype properties (see trac-13807) 9335 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 9336 fn( elem, name, !documentIsHTML ) : 9337 undefined; 9338 9339 if ( val !== undefined ) { 9340 return val; 9341 } 9342 9343 return elem.getAttribute( name ); 9344}; 9345 9346find.error = function( msg ) { 9347 throw new Error( "Syntax error, unrecognized expression: " + msg ); 9348}; 9349 9350/** 9351 * Document sorting and removing duplicates 9352 * @param {ArrayLike} results 9353 */ 9354jQuery.uniqueSort = function( results ) { 9355 var elem, 9356 duplicates = [], 9357 j = 0, 9358 i = 0; 9359 9360 // Unless we *know* we can detect duplicates, assume their presence 9361 // 9362 // Support: Android <=4.0+ 9363 // Testing for detecting duplicates is unpredictable so instead assume we can't 9364 // depend on duplicate detection in all browsers without a stable sort. 9365 hasDuplicate = !support.sortStable; 9366 sortInput = !support.sortStable && slice.call( results, 0 ); 9367 sort.call( results, sortOrder ); 9368 9369 if ( hasDuplicate ) { 9370 while ( ( elem = results[ i++ ] ) ) { 9371 if ( elem === results[ i ] ) { 9372 j = duplicates.push( i ); 9373 } 9374 } 9375 while ( j-- ) { 9376 splice.call( results, duplicates[ j ], 1 ); 9377 } 9378 } 9379 9380 // Clear input after sorting to release objects 9381 // See https://github.com/jquery/sizzle/pull/225 9382 sortInput = null; 9383 9384 return results; 9385}; 9386 9387jQuery.fn.uniqueSort = function() { 9388 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 9389}; 9390 9391Expr = jQuery.expr = { 9392 9393 // Can be adjusted by the user 9394 cacheLength: 50, 9395 9396 createPseudo: markFunction, 9397 9398 match: matchExpr, 9399 9400 attrHandle: {}, 9401 9402 find: {}, 9403 9404 relative: { 9405 ">": { dir: "parentNode", first: true }, 9406 " ": { dir: "parentNode" }, 9407 "+": { dir: "previousSibling", first: true }, 9408 "~": { dir: "previousSibling" } 9409 }, 9410 9411 preFilter: { 9412 ATTR: function( match ) { 9413 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 9414 9415 // Move the given value to match[3] whether quoted or unquoted 9416 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 9417 .replace( runescape, funescape ); 9418 9419 if ( match[ 2 ] === "~=" ) { 9420 match[ 3 ] = " " + match[ 3 ] + " "; 9421 } 9422 9423 return match.slice( 0, 4 ); 9424 }, 9425 9426 CHILD: function( match ) { 9427 9428 /* matches from matchExpr["CHILD"] 9429 1 type (only|nth|...) 9430 2 what (child|of-type) 9431 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 9432 4 xn-component of xn+y argument ([+-]?\d*n|) 9433 5 sign of xn-component 9434 6 x of xn-component 9435 7 sign of y-component 9436 8 y of y-component 9437 */ 9438 match[ 1 ] = match[ 1 ].toLowerCase(); 9439 9440 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 9441 9442 // nth-* requires argument 9443 if ( !match[ 3 ] ) { 9444 find.error( match[ 0 ] ); 9445 } 9446 9447 // numeric x and y parameters for Expr.filter.CHILD 9448 // remember that false/true cast respectively to 0/1 9449 match[ 4 ] = +( match[ 4 ] ? 9450 match[ 5 ] + ( match[ 6 ] || 1 ) : 9451 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 9452 ); 9453 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 9454 9455 // other types prohibit arguments 9456 } else if ( match[ 3 ] ) { 9457 find.error( match[ 0 ] ); 9458 } 9459 9460 return match; 9461 }, 9462 9463 PSEUDO: function( match ) { 9464 var excess, 9465 unquoted = !match[ 6 ] && match[ 2 ]; 9466 9467 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 9468 return null; 9469 } 9470 9471 // Accept quoted arguments as-is 9472 if ( match[ 3 ] ) { 9473 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 9474 9475 // Strip excess characters from unquoted arguments 9476 } else if ( unquoted && rpseudo.test( unquoted ) && 9477 9478 // Get excess from tokenize (recursively) 9479 ( excess = tokenize( unquoted, true ) ) && 9480 9481 // advance to the next closing parenthesis 9482 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 9483 9484 // excess is a negative index 9485 match[ 0 ] = match[ 0 ].slice( 0, excess ); 9486 match[ 2 ] = unquoted.slice( 0, excess ); 9487 } 9488 9489 // Return only captures needed by the pseudo filter method (type and argument) 9490 return match.slice( 0, 3 ); 9491 } 9492 }, 9493 9494 filter: { 9495 9496 TAG: function( nodeNameSelector ) { 9497 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 9498 return nodeNameSelector === "*" ? 9499 function() { 9500 return true; 9501 } : 9502 function( elem ) { 9503 return nodeName( elem, expectedNodeName ); 9504 }; 9505 }, 9506 9507 CLASS: function( className ) { 9508 var pattern = classCache[ className + " " ]; 9509 9510 return pattern || 9511 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 9512 "(" + whitespace + "|$)" ) ) && 9513 classCache( className, function( elem ) { 9514 return pattern.test( 9515 typeof elem.className === "string" && elem.className || 9516 typeof elem.getAttribute !== "undefined" && 9517 elem.getAttribute( "class" ) || 9518 "" 9519 ); 9520 } ); 9521 }, 9522 9523 ATTR: function( name, operator, check ) { 9524 return function( elem ) { 9525 var result = find.attr( elem, name ); 9526 9527 if ( result == null ) { 9528 return operator === "!="; 9529 } 9530 if ( !operator ) { 9531 return true; 9532 } 9533 9534 result += ""; 9535 9536 if ( operator === "=" ) { 9537 return result === check; 9538 } 9539 if ( operator === "!=" ) { 9540 return result !== check; 9541 } 9542 if ( operator === "^=" ) { 9543 return check && result.indexOf( check ) === 0; 9544 } 9545 if ( operator === "*=" ) { 9546 return check && result.indexOf( check ) > -1; 9547 } 9548 if ( operator === "$=" ) { 9549 return check && result.slice( -check.length ) === check; 9550 } 9551 if ( operator === "~=" ) { 9552 return ( " " + result.replace( rwhitespace, " " ) + " " ) 9553 .indexOf( check ) > -1; 9554 } 9555 if ( operator === "|=" ) { 9556 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 9557 } 9558 9559 return false; 9560 }; 9561 }, 9562 9563 CHILD: function( type, what, _argument, first, last ) { 9564 var simple = type.slice( 0, 3 ) !== "nth", 9565 forward = type.slice( -4 ) !== "last", 9566 ofType = what === "of-type"; 9567 9568 return first === 1 && last === 0 ? 9569 9570 // Shortcut for :nth-*(n) 9571 function( elem ) { 9572 return !!elem.parentNode; 9573 } : 9574 9575 function( elem, _context, xml ) { 9576 var cache, outerCache, node, nodeIndex, start, 9577 dir = simple !== forward ? "nextSibling" : "previousSibling", 9578 parent = elem.parentNode, 9579 name = ofType && elem.nodeName.toLowerCase(), 9580 useCache = !xml && !ofType, 9581 diff = false; 9582 9583 if ( parent ) { 9584 9585 // :(first|last|only)-(child|of-type) 9586 if ( simple ) { 9587 while ( dir ) { 9588 node = elem; 9589 while ( ( node = node[ dir ] ) ) { 9590 if ( ofType ? 9591 nodeName( node, name ) : 9592 node.nodeType === 1 ) { 9593 9594 return false; 9595 } 9596 } 9597 9598 // Reverse direction for :only-* (if we haven't yet done so) 9599 start = dir = type === "only" && !start && "nextSibling"; 9600 } 9601 return true; 9602 } 9603 9604 start = [ forward ? parent.firstChild : parent.lastChild ]; 9605 9606 // non-xml :nth-child(...) stores cache data on `parent` 9607 if ( forward && useCache ) { 9608 9609 // Seek `elem` from a previously-cached index 9610 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 9611 cache = outerCache[ type ] || []; 9612 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9613 diff = nodeIndex && cache[ 2 ]; 9614 node = nodeIndex && parent.childNodes[ nodeIndex ]; 9615 9616 while ( ( node = ++nodeIndex && node && node[ dir ] || 9617 9618 // Fallback to seeking `elem` from the start 9619 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9620 9621 // When found, cache indexes on `parent` and break 9622 if ( node.nodeType === 1 && ++diff && node === elem ) { 9623 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 9624 break; 9625 } 9626 } 9627 9628 } else { 9629 9630 // Use previously-cached element index if available 9631 if ( useCache ) { 9632 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 9633 cache = outerCache[ type ] || []; 9634 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9635 diff = nodeIndex; 9636 } 9637 9638 // xml :nth-child(...) 9639 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 9640 if ( diff === false ) { 9641 9642 // Use the same loop as above to seek `elem` from the start 9643 while ( ( node = ++nodeIndex && node && node[ dir ] || 9644 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9645 9646 if ( ( ofType ? 9647 nodeName( node, name ) : 9648 node.nodeType === 1 ) && 9649 ++diff ) { 9650 9651 // Cache the index of each encountered element 9652 if ( useCache ) { 9653 outerCache = node[ expando ] || 9654 ( node[ expando ] = {} ); 9655 outerCache[ type ] = [ dirruns, diff ]; 9656 } 9657 9658 if ( node === elem ) { 9659 break; 9660 } 9661 } 9662 } 9663 } 9664 } 9665 9666 // Incorporate the offset, then check against cycle size 9667 diff -= last; 9668 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 9669 } 9670 }; 9671 }, 9672 9673 PSEUDO: function( pseudo, argument ) { 9674 9675 // pseudo-class names are case-insensitive 9676 // https://www.w3.org/TR/selectors/#pseudo-classes 9677 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 9678 // Remember that setFilters inherits from pseudos 9679 var args, 9680 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 9681 find.error( "unsupported pseudo: " + pseudo ); 9682 9683 // The user may use createPseudo to indicate that 9684 // arguments are needed to create the filter function 9685 // just as jQuery does 9686 if ( fn[ expando ] ) { 9687 return fn( argument ); 9688 } 9689 9690 // But maintain support for old signatures 9691 if ( fn.length > 1 ) { 9692 args = [ pseudo, pseudo, "", argument ]; 9693 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 9694 markFunction( function( seed, matches ) { 9695 var idx, 9696 matched = fn( seed, argument ), 9697 i = matched.length; 9698 while ( i-- ) { 9699 idx = indexOf.call( seed, matched[ i ] ); 9700 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 9701 } 9702 } ) : 9703 function( elem ) { 9704 return fn( elem, 0, args ); 9705 }; 9706 } 9707 9708 return fn; 9709 } 9710 }, 9711 9712 pseudos: { 9713 9714 // Potentially complex pseudos 9715 not: markFunction( function( selector ) { 9716 9717 // Trim the selector passed to compile 9718 // to avoid treating leading and trailing 9719 // spaces as combinators 9720 var input = [], 9721 results = [], 9722 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 9723 9724 return matcher[ expando ] ? 9725 markFunction( function( seed, matches, _context, xml ) { 9726 var elem, 9727 unmatched = matcher( seed, null, xml, [] ), 9728 i = seed.length; 9729 9730 // Match elements unmatched by `matcher` 9731 while ( i-- ) { 9732 if ( ( elem = unmatched[ i ] ) ) { 9733 seed[ i ] = !( matches[ i ] = elem ); 9734 } 9735 } 9736 } ) : 9737 function( elem, _context, xml ) { 9738 input[ 0 ] = elem; 9739 matcher( input, null, xml, results ); 9740 9741 // Don't keep the element 9742 // (see https://github.com/jquery/sizzle/issues/299) 9743 input[ 0 ] = null; 9744 return !results.pop(); 9745 }; 9746 } ), 9747 9748 has: markFunction( function( selector ) { 9749 return function( elem ) { 9750 return find( selector, elem ).length > 0; 9751 }; 9752 } ), 9753 9754 contains: markFunction( function( text ) { 9755 text = text.replace( runescape, funescape ); 9756 return function( elem ) { 9757 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 9758 }; 9759 } ), 9760 9761 // "Whether an element is represented by a :lang() selector 9762 // is based solely on the element's language value 9763 // being equal to the identifier C, 9764 // or beginning with the identifier C immediately followed by "-". 9765 // The matching of C against the element's language value is performed case-insensitively. 9766 // The identifier C does not have to be a valid language name." 9767 // https://www.w3.org/TR/selectors/#lang-pseudo 9768 lang: markFunction( function( lang ) { 9769 9770 // lang value must be a valid identifier 9771 if ( !ridentifier.test( lang || "" ) ) { 9772 find.error( "unsupported lang: " + lang ); 9773 } 9774 lang = lang.replace( runescape, funescape ).toLowerCase(); 9775 return function( elem ) { 9776 var elemLang; 9777 do { 9778 if ( ( elemLang = documentIsHTML ? 9779 elem.lang : 9780 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 9781 9782 elemLang = elemLang.toLowerCase(); 9783 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 9784 } 9785 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 9786 return false; 9787 }; 9788 } ), 9789 9790 // Miscellaneous 9791 target: function( elem ) { 9792 var hash = window.location && window.location.hash; 9793 return hash && hash.slice( 1 ) === elem.id; 9794 }, 9795 9796 root: function( elem ) { 9797 return elem === documentElement; 9798 }, 9799 9800 focus: function( elem ) { 9801 return elem === safeActiveElement() && 9802 document.hasFocus() && 9803 !!( elem.type || elem.href || ~elem.tabIndex ); 9804 }, 9805 9806 // Boolean properties 9807 enabled: createDisabledPseudo( false ), 9808 disabled: createDisabledPseudo( true ), 9809 9810 checked: function( elem ) { 9811 9812 // In CSS3, :checked should return both checked and selected elements 9813 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 9814 return ( nodeName( elem, "input" ) && !!elem.checked ) || 9815 ( nodeName( elem, "option" ) && !!elem.selected ); 9816 }, 9817 9818 selected: function( elem ) { 9819 9820 // Support: IE <=11+ 9821 // Accessing the selectedIndex property 9822 // forces the browser to treat the default option as 9823 // selected when in an optgroup. 9824 if ( elem.parentNode ) { 9825 // eslint-disable-next-line no-unused-expressions 9826 elem.parentNode.selectedIndex; 9827 } 9828 9829 return elem.selected === true; 9830 }, 9831 9832 // Contents 9833 empty: function( elem ) { 9834 9835 // https://www.w3.org/TR/selectors/#empty-pseudo 9836 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 9837 // but not by others (comment: 8; processing instruction: 7; etc.) 9838 // nodeType < 6 works because attributes (2) do not appear as children 9839 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 9840 if ( elem.nodeType < 6 ) { 9841 return false; 9842 } 9843 } 9844 return true; 9845 }, 9846 9847 parent: function( elem ) { 9848 return !Expr.pseudos.empty( elem ); 9849 }, 9850 9851 // Element/input types 9852 header: function( elem ) { 9853 return rheader.test( elem.nodeName ); 9854 }, 9855 9856 input: function( elem ) { 9857 return rinputs.test( elem.nodeName ); 9858 }, 9859 9860 button: function( elem ) { 9861 return nodeName( elem, "input" ) && elem.type === "button" || 9862 nodeName( elem, "button" ); 9863 }, 9864 9865 text: function( elem ) { 9866 var attr; 9867 return nodeName( elem, "input" ) && elem.type === "text" && 9868 9869 // Support: IE <10 only 9870 // New HTML5 attribute values (e.g., "search") appear 9871 // with elem.type === "text" 9872 ( ( attr = elem.getAttribute( "type" ) ) == null || 9873 attr.toLowerCase() === "text" ); 9874 }, 9875 9876 // Position-in-collection 9877 first: createPositionalPseudo( function() { 9878 return [ 0 ]; 9879 } ), 9880 9881 last: createPositionalPseudo( function( _matchIndexes, length ) { 9882 return [ length - 1 ]; 9883 } ), 9884 9885 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 9886 return [ argument < 0 ? argument + length : argument ]; 9887 } ), 9888 9889 even: createPositionalPseudo( function( matchIndexes, length ) { 9890 var i = 0; 9891 for ( ; i < length; i += 2 ) { 9892 matchIndexes.push( i ); 9893 } 9894 return matchIndexes; 9895 } ), 9896 9897 odd: createPositionalPseudo( function( matchIndexes, length ) { 9898 var i = 1; 9899 for ( ; i < length; i += 2 ) { 9900 matchIndexes.push( i ); 9901 } 9902 return matchIndexes; 9903 } ), 9904 9905 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 9906 var i; 9907 9908 if ( argument < 0 ) { 9909 i = argument + length; 9910 } else if ( argument > length ) { 9911 i = length; 9912 } else { 9913 i = argument; 9914 } 9915 9916 for ( ; --i >= 0; ) { 9917 matchIndexes.push( i ); 9918 } 9919 return matchIndexes; 9920 } ), 9921 9922 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 9923 var i = argument < 0 ? argument + length : argument; 9924 for ( ; ++i < length; ) { 9925 matchIndexes.push( i ); 9926 } 9927 return matchIndexes; 9928 } ) 9929 } 9930}; 9931 9932Expr.pseudos.nth = Expr.pseudos.eq; 9933 9934// Add button/input type pseudos 9935for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 9936 Expr.pseudos[ i ] = createInputPseudo( i ); 9937} 9938for ( i in { submit: true, reset: true } ) { 9939 Expr.pseudos[ i ] = createButtonPseudo( i ); 9940} 9941 9942// Easy API for creating new setFilters 9943function setFilters() {} 9944setFilters.prototype = Expr.filters = Expr.pseudos; 9945Expr.setFilters = new setFilters(); 9946 9947function tokenize( selector, parseOnly ) { 9948 var matched, match, tokens, type, 9949 soFar, groups, preFilters, 9950 cached = tokenCache[ selector + " " ]; 9951 9952 if ( cached ) { 9953 return parseOnly ? 0 : cached.slice( 0 ); 9954 } 9955 9956 soFar = selector; 9957 groups = []; 9958 preFilters = Expr.preFilter; 9959 9960 while ( soFar ) { 9961 9962 // Comma and first run 9963 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 9964 if ( match ) { 9965 9966 // Don't consume trailing commas as valid 9967 soFar = soFar.slice( match[ 0 ].length ) || soFar; 9968 } 9969 groups.push( ( tokens = [] ) ); 9970 } 9971 9972 matched = false; 9973 9974 // Combinators 9975 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 9976 matched = match.shift(); 9977 tokens.push( { 9978 value: matched, 9979 9980 // Cast descendant combinators to space 9981 type: match[ 0 ].replace( rtrimCSS, " " ) 9982 } ); 9983 soFar = soFar.slice( matched.length ); 9984 } 9985 9986 // Filters 9987 for ( type in Expr.filter ) { 9988 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 9989 ( match = preFilters[ type ]( match ) ) ) ) { 9990 matched = match.shift(); 9991 tokens.push( { 9992 value: matched, 9993 type: type, 9994 matches: match 9995 } ); 9996 soFar = soFar.slice( matched.length ); 9997 } 9998 } 9999 10000 if ( !matched ) { 10001 break; 10002 } 10003 } 10004 10005 // Return the length of the invalid excess 10006 // if we're just parsing 10007 // Otherwise, throw an error or return tokens 10008 if ( parseOnly ) { 10009 return soFar.length; 10010 } 10011 10012 return soFar ? 10013 find.error( selector ) : 10014 10015 // Cache the tokens 10016 tokenCache( selector, groups ).slice( 0 ); 10017} 10018 10019function toSelector( tokens ) { 10020 var i = 0, 10021 len = tokens.length, 10022 selector = ""; 10023 for ( ; i < len; i++ ) { 10024 selector += tokens[ i ].value; 10025 } 10026 return selector; 10027} 10028 10029function addCombinator( matcher, combinator, base ) { 10030 var dir = combinator.dir, 10031 skip = combinator.next, 10032 key = skip || dir, 10033 checkNonElements = base && key === "parentNode", 10034 doneName = done++; 10035 10036 return combinator.first ? 10037 10038 // Check against closest ancestor/preceding element 10039 function( elem, context, xml ) { 10040 while ( ( elem = elem[ dir ] ) ) { 10041 if ( elem.nodeType === 1 || checkNonElements ) { 10042 return matcher( elem, context, xml ); 10043 } 10044 } 10045 return false; 10046 } : 10047 10048 // Check against all ancestor/preceding elements 10049 function( elem, context, xml ) { 10050 var oldCache, outerCache, 10051 newCache = [ dirruns, doneName ]; 10052 10053 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 10054 if ( xml ) { 10055 while ( ( elem = elem[ dir ] ) ) { 10056 if ( elem.nodeType === 1 || checkNonElements ) { 10057 if ( matcher( elem, context, xml ) ) { 10058 return true; 10059 } 10060 } 10061 } 10062 } else { 10063 while ( ( elem = elem[ dir ] ) ) { 10064 if ( elem.nodeType === 1 || checkNonElements ) { 10065 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 10066 10067 if ( skip && nodeName( elem, skip ) ) { 10068 elem = elem[ dir ] || elem; 10069 } else if ( ( oldCache = outerCache[ key ] ) && 10070 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 10071 10072 // Assign to newCache so results back-propagate to previous elements 10073 return ( newCache[ 2 ] = oldCache[ 2 ] ); 10074 } else { 10075 10076 // Reuse newcache so results back-propagate to previous elements 10077 outerCache[ key ] = newCache; 10078 10079 // A match means we're done; a fail means we have to keep checking 10080 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 10081 return true; 10082 } 10083 } 10084 } 10085 } 10086 } 10087 return false; 10088 }; 10089} 10090 10091function elementMatcher( matchers ) { 10092 return matchers.length > 1 ? 10093 function( elem, context, xml ) { 10094 var i = matchers.length; 10095 while ( i-- ) { 10096 if ( !matchers[ i ]( elem, context, xml ) ) { 10097 return false; 10098 } 10099 } 10100 return true; 10101 } : 10102 matchers[ 0 ]; 10103} 10104 10105function multipleContexts( selector, contexts, results ) { 10106 var i = 0, 10107 len = contexts.length; 10108 for ( ; i < len; i++ ) { 10109 find( selector, contexts[ i ], results ); 10110 } 10111 return results; 10112} 10113 10114function condense( unmatched, map, filter, context, xml ) { 10115 var elem, 10116 newUnmatched = [], 10117 i = 0, 10118 len = unmatched.length, 10119 mapped = map != null; 10120 10121 for ( ; i < len; i++ ) { 10122 if ( ( elem = unmatched[ i ] ) ) { 10123 if ( !filter || filter( elem, context, xml ) ) { 10124 newUnmatched.push( elem ); 10125 if ( mapped ) { 10126 map.push( i ); 10127 } 10128 } 10129 } 10130 } 10131 10132 return newUnmatched; 10133} 10134 10135function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 10136 if ( postFilter && !postFilter[ expando ] ) { 10137 postFilter = setMatcher( postFilter ); 10138 } 10139 if ( postFinder && !postFinder[ expando ] ) { 10140 postFinder = setMatcher( postFinder, postSelector ); 10141 } 10142 return markFunction( function( seed, results, context, xml ) { 10143 var temp, i, elem, matcherOut, 10144 preMap = [], 10145 postMap = [], 10146 preexisting = results.length, 10147 10148 // Get initial elements from seed or context 10149 elems = seed || 10150 multipleContexts( selector || "*", 10151 context.nodeType ? [ context ] : context, [] ), 10152 10153 // Prefilter to get matcher input, preserving a map for seed-results synchronization 10154 matcherIn = preFilter && ( seed || !selector ) ? 10155 condense( elems, preMap, preFilter, context, xml ) : 10156 elems; 10157 10158 if ( matcher ) { 10159 10160 // If we have a postFinder, or filtered seed, or non-seed postFilter 10161 // or preexisting results, 10162 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 10163 10164 // ...intermediate processing is necessary 10165 [] : 10166 10167 // ...otherwise use results directly 10168 results; 10169 10170 // Find primary matches 10171 matcher( matcherIn, matcherOut, context, xml ); 10172 } else { 10173 matcherOut = matcherIn; 10174 } 10175 10176 // Apply postFilter 10177 if ( postFilter ) { 10178 temp = condense( matcherOut, postMap ); 10179 postFilter( temp, [], context, xml ); 10180 10181 // Un-match failing elements by moving them back to matcherIn 10182 i = temp.length; 10183 while ( i-- ) { 10184 if ( ( elem = temp[ i ] ) ) { 10185 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 10186 } 10187 } 10188 } 10189 10190 if ( seed ) { 10191 if ( postFinder || preFilter ) { 10192 if ( postFinder ) { 10193 10194 // Get the final matcherOut by condensing this intermediate into postFinder contexts 10195 temp = []; 10196 i = matcherOut.length; 10197 while ( i-- ) { 10198 if ( ( elem = matcherOut[ i ] ) ) { 10199 10200 // Restore matcherIn since elem is not yet a final match 10201 temp.push( ( matcherIn[ i ] = elem ) ); 10202 } 10203 } 10204 postFinder( null, ( matcherOut = [] ), temp, xml ); 10205 } 10206 10207 // Move matched elements from seed to results to keep them synchronized 10208 i = matcherOut.length; 10209 while ( i-- ) { 10210 if ( ( elem = matcherOut[ i ] ) && 10211 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 10212 10213 seed[ temp ] = !( results[ temp ] = elem ); 10214 } 10215 } 10216 } 10217 10218 // Add elements to results, through postFinder if defined 10219 } else { 10220 matcherOut = condense( 10221 matcherOut === results ? 10222 matcherOut.splice( preexisting, matcherOut.length ) : 10223 matcherOut 10224 ); 10225 if ( postFinder ) { 10226 postFinder( null, results, matcherOut, xml ); 10227 } else { 10228 push.apply( results, matcherOut ); 10229 } 10230 } 10231 } ); 10232} 10233 10234function matcherFromTokens( tokens ) { 10235 var checkContext, matcher, j, 10236 len = tokens.length, 10237 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 10238 implicitRelative = leadingRelative || Expr.relative[ " " ], 10239 i = leadingRelative ? 1 : 0, 10240 10241 // The foundational matcher ensures that elements are reachable from top-level context(s) 10242 matchContext = addCombinator( function( elem ) { 10243 return elem === checkContext; 10244 }, implicitRelative, true ), 10245 matchAnyContext = addCombinator( function( elem ) { 10246 return indexOf.call( checkContext, elem ) > -1; 10247 }, implicitRelative, true ), 10248 matchers = [ function( elem, context, xml ) { 10249 10250 // Support: IE 11+, Edge 17 - 18+ 10251 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10252 // two documents; shallow comparisons work. 10253 // eslint-disable-next-line eqeqeq 10254 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 10255 ( checkContext = context ).nodeType ? 10256 matchContext( elem, context, xml ) : 10257 matchAnyContext( elem, context, xml ) ); 10258 10259 // Avoid hanging onto element 10260 // (see https://github.com/jquery/sizzle/issues/299) 10261 checkContext = null; 10262 return ret; 10263 } ]; 10264 10265 for ( ; i < len; i++ ) { 10266 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 10267 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 10268 } else { 10269 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 10270 10271 // Return special upon seeing a positional matcher 10272 if ( matcher[ expando ] ) { 10273 10274 // Find the next relative operator (if any) for proper handling 10275 j = ++i; 10276 for ( ; j < len; j++ ) { 10277 if ( Expr.relative[ tokens[ j ].type ] ) { 10278 break; 10279 } 10280 } 10281 return setMatcher( 10282 i > 1 && elementMatcher( matchers ), 10283 i > 1 && toSelector( 10284 10285 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 10286 tokens.slice( 0, i - 1 ) 10287 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 10288 ).replace( rtrimCSS, "$1" ), 10289 matcher, 10290 i < j && matcherFromTokens( tokens.slice( i, j ) ), 10291 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 10292 j < len && toSelector( tokens ) 10293 ); 10294 } 10295 matchers.push( matcher ); 10296 } 10297 } 10298 10299 return elementMatcher( matchers ); 10300} 10301 10302function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 10303 var bySet = setMatchers.length > 0, 10304 byElement = elementMatchers.length > 0, 10305 superMatcher = function( seed, context, xml, results, outermost ) { 10306 var elem, j, matcher, 10307 matchedCount = 0, 10308 i = "0", 10309 unmatched = seed && [], 10310 setMatched = [], 10311 contextBackup = outermostContext, 10312 10313 // We must always have either seed elements or outermost context 10314 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 10315 10316 // Use integer dirruns iff this is the outermost matcher 10317 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 10318 len = elems.length; 10319 10320 if ( outermost ) { 10321 10322 // Support: IE 11+, Edge 17 - 18+ 10323 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10324 // two documents; shallow comparisons work. 10325 // eslint-disable-next-line eqeqeq 10326 outermostContext = context == document || context || outermost; 10327 } 10328 10329 // Add elements passing elementMatchers directly to results 10330 // Support: iOS <=7 - 9 only 10331 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 10332 // elements by id. (see trac-14142) 10333 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 10334 if ( byElement && elem ) { 10335 j = 0; 10336 10337 // Support: IE 11+, Edge 17 - 18+ 10338 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10339 // two documents; shallow comparisons work. 10340 // eslint-disable-next-line eqeqeq 10341 if ( !context && elem.ownerDocument != document ) { 10342 setDocument( elem ); 10343 xml = !documentIsHTML; 10344 } 10345 while ( ( matcher = elementMatchers[ j++ ] ) ) { 10346 if ( matcher( elem, context || document, xml ) ) { 10347 push.call( results, elem ); 10348 break; 10349 } 10350 } 10351 if ( outermost ) { 10352 dirruns = dirrunsUnique; 10353 } 10354 } 10355 10356 // Track unmatched elements for set filters 10357 if ( bySet ) { 10358 10359 // They will have gone through all possible matchers 10360 if ( ( elem = !matcher && elem ) ) { 10361 matchedCount--; 10362 } 10363 10364 // Lengthen the array for every element, matched or not 10365 if ( seed ) { 10366 unmatched.push( elem ); 10367 } 10368 } 10369 } 10370 10371 // `i` is now the count of elements visited above, and adding it to `matchedCount` 10372 // makes the latter nonnegative. 10373 matchedCount += i; 10374 10375 // Apply set filters to unmatched elements 10376 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 10377 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 10378 // no element matchers and no seed. 10379 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 10380 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 10381 // numerically zero. 10382 if ( bySet && i !== matchedCount ) { 10383 j = 0; 10384 while ( ( matcher = setMatchers[ j++ ] ) ) { 10385 matcher( unmatched, setMatched, context, xml ); 10386 } 10387 10388 if ( seed ) { 10389 10390 // Reintegrate element matches to eliminate the need for sorting 10391 if ( matchedCount > 0 ) { 10392 while ( i-- ) { 10393 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 10394 setMatched[ i ] = pop.call( results ); 10395 } 10396 } 10397 } 10398 10399 // Discard index placeholder values to get only actual matches 10400 setMatched = condense( setMatched ); 10401 } 10402 10403 // Add matches to results 10404 push.apply( results, setMatched ); 10405 10406 // Seedless set matches succeeding multiple successful matchers stipulate sorting 10407 if ( outermost && !seed && setMatched.length > 0 && 10408 ( matchedCount + setMatchers.length ) > 1 ) { 10409 10410 jQuery.uniqueSort( results ); 10411 } 10412 } 10413 10414 // Override manipulation of globals by nested matchers 10415 if ( outermost ) { 10416 dirruns = dirrunsUnique; 10417 outermostContext = contextBackup; 10418 } 10419 10420 return unmatched; 10421 }; 10422 10423 return bySet ? 10424 markFunction( superMatcher ) : 10425 superMatcher; 10426} 10427 10428function compile( selector, match /* Internal Use Only */ ) { 10429 var i, 10430 setMatchers = [], 10431 elementMatchers = [], 10432 cached = compilerCache[ selector + " " ]; 10433 10434 if ( !cached ) { 10435 10436 // Generate a function of recursive functions that can be used to check each element 10437 if ( !match ) { 10438 match = tokenize( selector ); 10439 } 10440 i = match.length; 10441 while ( i-- ) { 10442 cached = matcherFromTokens( match[ i ] ); 10443 if ( cached[ expando ] ) { 10444 setMatchers.push( cached ); 10445 } else { 10446 elementMatchers.push( cached ); 10447 } 10448 } 10449 10450 // Cache the compiled function 10451 cached = compilerCache( selector, 10452 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 10453 10454 // Save selector and tokenization 10455 cached.selector = selector; 10456 } 10457 return cached; 10458} 10459 10460/** 10461 * A low-level selection function that works with jQuery's compiled 10462 * selector functions 10463 * @param {String|Function} selector A selector or a pre-compiled 10464 * selector function built with jQuery selector compile 10465 * @param {Element} context 10466 * @param {Array} [results] 10467 * @param {Array} [seed] A set of elements to match against 10468 */ 10469function select( selector, context, results, seed ) { 10470 var i, tokens, token, type, find, 10471 compiled = typeof selector === "function" && selector, 10472 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 10473 10474 results = results || []; 10475 10476 // Try to minimize operations if there is only one selector in the list and no seed 10477 // (the latter of which guarantees us context) 10478 if ( match.length === 1 ) { 10479 10480 // Reduce context if the leading compound selector is an ID 10481 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 10482 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 10483 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 10484 10485 context = ( Expr.find.ID( 10486 token.matches[ 0 ].replace( runescape, funescape ), 10487 context 10488 ) || [] )[ 0 ]; 10489 if ( !context ) { 10490 return results; 10491 10492 // Precompiled matchers will still verify ancestry, so step up a level 10493 } else if ( compiled ) { 10494 context = context.parentNode; 10495 } 10496 10497 selector = selector.slice( tokens.shift().value.length ); 10498 } 10499 10500 // Fetch a seed set for right-to-left matching 10501 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 10502 while ( i-- ) { 10503 token = tokens[ i ]; 10504 10505 // Abort if we hit a combinator 10506 if ( Expr.relative[ ( type = token.type ) ] ) { 10507 break; 10508 } 10509 if ( ( find = Expr.find[ type ] ) ) { 10510 10511 // Search, expanding context for leading sibling combinators 10512 if ( ( seed = find( 10513 token.matches[ 0 ].replace( runescape, funescape ), 10514 rsibling.test( tokens[ 0 ].type ) && 10515 testContext( context.parentNode ) || context 10516 ) ) ) { 10517 10518 // If seed is empty or no tokens remain, we can return early 10519 tokens.splice( i, 1 ); 10520 selector = seed.length && toSelector( tokens ); 10521 if ( !selector ) { 10522 push.apply( results, seed ); 10523 return results; 10524 } 10525 10526 break; 10527 } 10528 } 10529 } 10530 } 10531 10532 // Compile and execute a filtering function if one is not provided 10533 // Provide `match` to avoid retokenization if we modified the selector above 10534 ( compiled || compile( selector, match ) )( 10535 seed, 10536 context, 10537 !documentIsHTML, 10538 results, 10539 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 10540 ); 10541 return results; 10542} 10543 10544// One-time assignments 10545 10546// Support: Android <=4.0 - 4.1+ 10547// Sort stability 10548support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 10549 10550// Initialize against the default document 10551setDocument(); 10552 10553// Support: Android <=4.0 - 4.1+ 10554// Detached nodes confoundingly follow *each other* 10555support.sortDetached = assert( function( el ) { 10556 10557 // Should return 1, but returns 4 (following) 10558 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 10559} ); 10560 10561jQuery.find = find; 10562 10563// Deprecated 10564jQuery.expr[ ":" ] = jQuery.expr.pseudos; 10565jQuery.unique = jQuery.uniqueSort; 10566 10567// These have always been private, but they used to be documented as part of 10568// Sizzle so let's maintain them for now for backwards compatibility purposes. 10569find.compile = compile; 10570find.select = select; 10571find.setDocument = setDocument; 10572find.tokenize = tokenize; 10573 10574find.escape = jQuery.escapeSelector; 10575find.getText = jQuery.text; 10576find.isXML = jQuery.isXMLDoc; 10577find.selectors = jQuery.expr; 10578find.support = jQuery.support; 10579find.uniqueSort = jQuery.uniqueSort; 10580 10581 /* eslint-enable */ 10582 10583} )(); 10584 10585 10586var dir = function( elem, dir, until ) { 10587 var matched = [], 10588 truncate = until !== undefined; 10589 10590 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 10591 if ( elem.nodeType === 1 ) { 10592 if ( truncate && jQuery( elem ).is( until ) ) { 10593 break; 10594 } 10595 matched.push( elem ); 10596 } 10597 } 10598 return matched; 10599}; 10600 10601 10602var siblings = function( n, elem ) { 10603 var matched = []; 10604 10605 for ( ; n; n = n.nextSibling ) { 10606 if ( n.nodeType === 1 && n !== elem ) { 10607 matched.push( n ); 10608 } 10609 } 10610 10611 return matched; 10612}; 10613 10614 10615var rneedsContext = jQuery.expr.match.needsContext; 10616 10617var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 10618 10619 10620 10621// Implement the identical functionality for filter and not 10622function winnow( elements, qualifier, not ) { 10623 if ( isFunction( qualifier ) ) { 10624 return jQuery.grep( elements, function( elem, i ) { 10625 return !!qualifier.call( elem, i, elem ) !== not; 10626 } ); 10627 } 10628 10629 // Single element 10630 if ( qualifier.nodeType ) { 10631 return jQuery.grep( elements, function( elem ) { 10632 return ( elem === qualifier ) !== not; 10633 } ); 10634 } 10635 10636 // Arraylike of elements (jQuery, arguments, Array) 10637 if ( typeof qualifier !== "string" ) { 10638 return jQuery.grep( elements, function( elem ) { 10639 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 10640 } ); 10641 } 10642 10643 // Filtered directly for both simple and complex selectors 10644 return jQuery.filter( qualifier, elements, not ); 10645} 10646 10647jQuery.filter = function( expr, elems, not ) { 10648 var elem = elems[ 0 ]; 10649 10650 if ( not ) { 10651 expr = ":not(" + expr + ")"; 10652 } 10653 10654 if ( elems.length === 1 && elem.nodeType === 1 ) { 10655 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 10656 } 10657 10658 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 10659 return elem.nodeType === 1; 10660 } ) ); 10661}; 10662 10663jQuery.fn.extend( { 10664 find: function( selector ) { 10665 var i, ret, 10666 len = this.length, 10667 self = this; 10668 10669 if ( typeof selector !== "string" ) { 10670 return this.pushStack( jQuery( selector ).filter( function() { 10671 for ( i = 0; i < len; i++ ) { 10672 if ( jQuery.contains( self[ i ], this ) ) { 10673 return true; 10674 } 10675 } 10676 } ) ); 10677 } 10678 10679 ret = this.pushStack( [] ); 10680 10681 for ( i = 0; i < len; i++ ) { 10682 jQuery.find( selector, self[ i ], ret ); 10683 } 10684 10685 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 10686 }, 10687 filter: function( selector ) { 10688 return this.pushStack( winnow( this, selector || [], false ) ); 10689 }, 10690 not: function( selector ) { 10691 return this.pushStack( winnow( this, selector || [], true ) ); 10692 }, 10693 is: function( selector ) { 10694 return !!winnow( 10695 this, 10696 10697 // If this is a positional/relative selector, check membership in the returned set 10698 // so $("p:first").is("p:last") won't return true for a doc with two "p". 10699 typeof selector === "string" && rneedsContext.test( selector ) ? 10700 jQuery( selector ) : 10701 selector || [], 10702 false 10703 ).length; 10704 } 10705} ); 10706 10707 10708// Initialize a jQuery object 10709 10710 10711// A central reference to the root jQuery(document) 10712var rootjQuery, 10713 10714 // A simple way to check for HTML strings 10715 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 10716 // Strict HTML recognition (trac-11290: must start with <) 10717 // Shortcut simple #id case for speed 10718 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 10719 10720 init = jQuery.fn.init = function( selector, context, root ) { 10721 var match, elem; 10722 10723 // HANDLE: $(""), $(null), $(undefined), $(false) 10724 if ( !selector ) { 10725 return this; 10726 } 10727 10728 // Method init() accepts an alternate rootjQuery 10729 // so migrate can support jQuery.sub (gh-2101) 10730 root = root || rootjQuery; 10731 10732 // Handle HTML strings 10733 if ( typeof selector === "string" ) { 10734 if ( selector[ 0 ] === "<" && 10735 selector[ selector.length - 1 ] === ">" && 10736 selector.length >= 3 ) { 10737 10738 // Assume that strings that start and end with <> are HTML and skip the regex check 10739 match = [ null, selector, null ]; 10740 10741 } else { 10742 match = rquickExpr.exec( selector ); 10743 } 10744 10745 // Match html or make sure no context is specified for #id 10746 if ( match && ( match[ 1 ] || !context ) ) { 10747 10748 // HANDLE: $(html) -> $(array) 10749 if ( match[ 1 ] ) { 10750 context = context instanceof jQuery ? context[ 0 ] : context; 10751 10752 // Option to run scripts is true for back-compat 10753 // Intentionally let the error be thrown if parseHTML is not present 10754 jQuery.merge( this, jQuery.parseHTML( 10755 match[ 1 ], 10756 context && context.nodeType ? context.ownerDocument || context : document, 10757 true 10758 ) ); 10759 10760 // HANDLE: $(html, props) 10761 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 10762 for ( match in context ) { 10763 10764 // Properties of context are called as methods if possible 10765 if ( isFunction( this[ match ] ) ) { 10766 this[ match ]( context[ match ] ); 10767 10768 // ...and otherwise set as attributes 10769 } else { 10770 this.attr( match, context[ match ] ); 10771 } 10772 } 10773 } 10774 10775 return this; 10776 10777 // HANDLE: $(#id) 10778 } else { 10779 elem = document.getElementById( match[ 2 ] ); 10780 10781 if ( elem ) { 10782 10783 // Inject the element directly into the jQuery object 10784 this[ 0 ] = elem; 10785 this.length = 1; 10786 } 10787 return this; 10788 } 10789 10790 // HANDLE: $(expr, $(...)) 10791 } else if ( !context || context.jquery ) { 10792 return ( context || root ).find( selector ); 10793 10794 // HANDLE: $(expr, context) 10795 // (which is just equivalent to: $(context).find(expr) 10796 } else { 10797 return this.constructor( context ).find( selector ); 10798 } 10799 10800 // HANDLE: $(DOMElement) 10801 } else if ( selector.nodeType ) { 10802 this[ 0 ] = selector; 10803 this.length = 1; 10804 return this; 10805 10806 // HANDLE: $(function) 10807 // Shortcut for document ready 10808 } else if ( isFunction( selector ) ) { 10809 return root.ready !== undefined ? 10810 root.ready( selector ) : 10811 10812 // Execute immediately if ready is not present 10813 selector( jQuery ); 10814 } 10815 10816 return jQuery.makeArray( selector, this ); 10817 }; 10818 10819// Give the init function the jQuery prototype for later instantiation 10820init.prototype = jQuery.fn; 10821 10822// Initialize central reference 10823rootjQuery = jQuery( document ); 10824 10825 10826var rparentsprev = /^(?:parents|prev(?:Until|All))/, 10827 10828 // Methods guaranteed to produce a unique set when starting from a unique set 10829 guaranteedUnique = { 10830 children: true, 10831 contents: true, 10832 next: true, 10833 prev: true 10834 }; 10835 10836jQuery.fn.extend( { 10837 has: function( target ) { 10838 var targets = jQuery( target, this ), 10839 l = targets.length; 10840 10841 return this.filter( function() { 10842 var i = 0; 10843 for ( ; i < l; i++ ) { 10844 if ( jQuery.contains( this, targets[ i ] ) ) { 10845 return true; 10846 } 10847 } 10848 } ); 10849 }, 10850 10851 closest: function( selectors, context ) { 10852 var cur, 10853 i = 0, 10854 l = this.length, 10855 matched = [], 10856 targets = typeof selectors !== "string" && jQuery( selectors ); 10857 10858 // Positional selectors never match, since there's no _selection_ context 10859 if ( !rneedsContext.test( selectors ) ) { 10860 for ( ; i < l; i++ ) { 10861 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 10862 10863 // Always skip document fragments 10864 if ( cur.nodeType < 11 && ( targets ? 10865 targets.index( cur ) > -1 : 10866 10867 // Don't pass non-elements to jQuery#find 10868 cur.nodeType === 1 && 10869 jQuery.find.matchesSelector( cur, selectors ) ) ) { 10870 10871 matched.push( cur ); 10872 break; 10873 } 10874 } 10875 } 10876 } 10877 10878 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 10879 }, 10880 10881 // Determine the position of an element within the set 10882 index: function( elem ) { 10883 10884 // No argument, return index in parent 10885 if ( !elem ) { 10886 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 10887 } 10888 10889 // Index in selector 10890 if ( typeof elem === "string" ) { 10891 return indexOf.call( jQuery( elem ), this[ 0 ] ); 10892 } 10893 10894 // Locate the position of the desired element 10895 return indexOf.call( this, 10896 10897 // If it receives a jQuery object, the first element is used 10898 elem.jquery ? elem[ 0 ] : elem 10899 ); 10900 }, 10901 10902 add: function( selector, context ) { 10903 return this.pushStack( 10904 jQuery.uniqueSort( 10905 jQuery.merge( this.get(), jQuery( selector, context ) ) 10906 ) 10907 ); 10908 }, 10909 10910 addBack: function( selector ) { 10911 return this.add( selector == null ? 10912 this.prevObject : this.prevObject.filter( selector ) 10913 ); 10914 } 10915} ); 10916 10917function sibling( cur, dir ) { 10918 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 10919 return cur; 10920} 10921 10922jQuery.each( { 10923 parent: function( elem ) { 10924 var parent = elem.parentNode; 10925 return parent && parent.nodeType !== 11 ? parent : null; 10926 }, 10927 parents: function( elem ) { 10928 return dir( elem, "parentNode" ); 10929 }, 10930 parentsUntil: function( elem, _i, until ) { 10931 return dir( elem, "parentNode", until ); 10932 }, 10933 next: function( elem ) { 10934 return sibling( elem, "nextSibling" ); 10935 }, 10936 prev: function( elem ) { 10937 return sibling( elem, "previousSibling" ); 10938 }, 10939 nextAll: function( elem ) { 10940 return dir( elem, "nextSibling" ); 10941 }, 10942 prevAll: function( elem ) { 10943 return dir( elem, "previousSibling" ); 10944 }, 10945 nextUntil: function( elem, _i, until ) { 10946 return dir( elem, "nextSibling", until ); 10947 }, 10948 prevUntil: function( elem, _i, until ) { 10949 return dir( elem, "previousSibling", until ); 10950 }, 10951 siblings: function( elem ) { 10952 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 10953 }, 10954 children: function( elem ) { 10955 return siblings( elem.firstChild ); 10956 }, 10957 contents: function( elem ) { 10958 if ( elem.contentDocument != null && 10959 10960 // Support: IE 11+ 10961 // <object> elements with no `data` attribute has an object 10962 // `contentDocument` with a `null` prototype. 10963 getProto( elem.contentDocument ) ) { 10964 10965 return elem.contentDocument; 10966 } 10967 10968 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 10969 // Treat the template element as a regular one in browsers that 10970 // don't support it. 10971 if ( nodeName( elem, "template" ) ) { 10972 elem = elem.content || elem; 10973 } 10974 10975 return jQuery.merge( [], elem.childNodes ); 10976 } 10977}, function( name, fn ) { 10978 jQuery.fn[ name ] = function( until, selector ) { 10979 var matched = jQuery.map( this, fn, until ); 10980 10981 if ( name.slice( -5 ) !== "Until" ) { 10982 selector = until; 10983 } 10984 10985 if ( selector && typeof selector === "string" ) { 10986 matched = jQuery.filter( selector, matched ); 10987 } 10988 10989 if ( this.length > 1 ) { 10990 10991 // Remove duplicates 10992 if ( !guaranteedUnique[ name ] ) { 10993 jQuery.uniqueSort( matched ); 10994 } 10995 10996 // Reverse order for parents* and prev-derivatives 10997 if ( rparentsprev.test( name ) ) { 10998 matched.reverse(); 10999 } 11000 } 11001 11002 return this.pushStack( matched ); 11003 }; 11004} ); 11005var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 11006 11007 11008 11009// Convert String-formatted options into Object-formatted ones 11010function createOptions( options ) { 11011 var object = {}; 11012 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 11013 object[ flag ] = true; 11014 } ); 11015 return object; 11016} 11017 11018/* 11019 * Create a callback list using the following parameters: 11020 * 11021 * options: an optional list of space-separated options that will change how 11022 * the callback list behaves or a more traditional option object 11023 * 11024 * By default a callback list will act like an event callback list and can be 11025 * "fired" multiple times. 11026 * 11027 * Possible options: 11028 * 11029 * once: will ensure the callback list can only be fired once (like a Deferred) 11030 * 11031 * memory: will keep track of previous values and will call any callback added 11032 * after the list has been fired right away with the latest "memorized" 11033 * values (like a Deferred) 11034 * 11035 * unique: will ensure a callback can only be added once (no duplicate in the list) 11036 * 11037 * stopOnFalse: interrupt callings when a callback returns false 11038 * 11039 */ 11040jQuery.Callbacks = function( options ) { 11041 11042 // Convert options from String-formatted to Object-formatted if needed 11043 // (we check in cache first) 11044 options = typeof options === "string" ? 11045 createOptions( options ) : 11046 jQuery.extend( {}, options ); 11047 11048 var // Flag to know if list is currently firing 11049 firing, 11050 11051 // Last fire value for non-forgettable lists 11052 memory, 11053 11054 // Flag to know if list was already fired 11055 fired, 11056 11057 // Flag to prevent firing 11058 locked, 11059 11060 // Actual callback list 11061 list = [], 11062 11063 // Queue of execution data for repeatable lists 11064 queue = [], 11065 11066 // Index of currently firing callback (modified by add/remove as needed) 11067 firingIndex = -1, 11068 11069 // Fire callbacks 11070 fire = function() { 11071 11072 // Enforce single-firing 11073 locked = locked || options.once; 11074 11075 // Execute callbacks for all pending executions, 11076 // respecting firingIndex overrides and runtime changes 11077 fired = firing = true; 11078 for ( ; queue.length; firingIndex = -1 ) { 11079 memory = queue.shift(); 11080 while ( ++firingIndex < list.length ) { 11081 11082 // Run callback and check for early termination 11083 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 11084 options.stopOnFalse ) { 11085 11086 // Jump to end and forget the data so .add doesn't re-fire 11087 firingIndex = list.length; 11088 memory = false; 11089 } 11090 } 11091 } 11092 11093 // Forget the data if we're done with it 11094 if ( !options.memory ) { 11095 memory = false; 11096 } 11097 11098 firing = false; 11099 11100 // Clean up if we're done firing for good 11101 if ( locked ) { 11102 11103 // Keep an empty list if we have data for future add calls 11104 if ( memory ) { 11105 list = []; 11106 11107 // Otherwise, this object is spent 11108 } else { 11109 list = ""; 11110 } 11111 } 11112 }, 11113 11114 // Actual Callbacks object 11115 self = { 11116 11117 // Add a callback or a collection of callbacks to the list 11118 add: function() { 11119 if ( list ) { 11120 11121 // If we have memory from a past run, we should fire after adding 11122 if ( memory && !firing ) { 11123 firingIndex = list.length - 1; 11124 queue.push( memory ); 11125 } 11126 11127 ( function add( args ) { 11128 jQuery.each( args, function( _, arg ) { 11129 if ( isFunction( arg ) ) { 11130 if ( !options.unique || !self.has( arg ) ) { 11131 list.push( arg ); 11132 } 11133 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 11134 11135 // Inspect recursively 11136 add( arg ); 11137 } 11138 } ); 11139 } )( arguments ); 11140 11141 if ( memory && !firing ) { 11142 fire(); 11143 } 11144 } 11145 return this; 11146 }, 11147 11148 // Remove a callback from the list 11149 remove: function() { 11150 jQuery.each( arguments, function( _, arg ) { 11151 var index; 11152 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 11153 list.splice( index, 1 ); 11154 11155 // Handle firing indexes 11156 if ( index <= firingIndex ) { 11157 firingIndex--; 11158 } 11159 } 11160 } ); 11161 return this; 11162 }, 11163 11164 // Check if a given callback is in the list. 11165 // If no argument is given, return whether or not list has callbacks attached. 11166 has: function( fn ) { 11167 return fn ? 11168 jQuery.inArray( fn, list ) > -1 : 11169 list.length > 0; 11170 }, 11171 11172 // Remove all callbacks from the list 11173 empty: function() { 11174 if ( list ) { 11175 list = []; 11176 } 11177 return this; 11178 }, 11179 11180 // Disable .fire and .add 11181 // Abort any current/pending executions 11182 // Clear all callbacks and values 11183 disable: function() { 11184 locked = queue = []; 11185 list = memory = ""; 11186 return this; 11187 }, 11188 disabled: function() { 11189 return !list; 11190 }, 11191 11192 // Disable .fire 11193 // Also disable .add unless we have memory (since it would have no effect) 11194 // Abort any pending executions 11195 lock: function() { 11196 locked = queue = []; 11197 if ( !memory && !firing ) { 11198 list = memory = ""; 11199 } 11200 return this; 11201 }, 11202 locked: function() { 11203 return !!locked; 11204 }, 11205 11206 // Call all callbacks with the given context and arguments 11207 fireWith: function( context, args ) { 11208 if ( !locked ) { 11209 args = args || []; 11210 args = [ context, args.slice ? args.slice() : args ]; 11211 queue.push( args ); 11212 if ( !firing ) { 11213 fire(); 11214 } 11215 } 11216 return this; 11217 }, 11218 11219 // Call all the callbacks with the given arguments 11220 fire: function() { 11221 self.fireWith( this, arguments ); 11222 return this; 11223 }, 11224 11225 // To know if the callbacks have already been called at least once 11226 fired: function() { 11227 return !!fired; 11228 } 11229 }; 11230 11231 return self; 11232}; 11233 11234 11235function Identity( v ) { 11236 return v; 11237} 11238function Thrower( ex ) { 11239 throw ex; 11240} 11241 11242function adoptValue( value, resolve, reject, noValue ) { 11243 var method; 11244 11245 try { 11246 11247 // Check for promise aspect first to privilege synchronous behavior 11248 if ( value && isFunction( ( method = value.promise ) ) ) { 11249 method.call( value ).done( resolve ).fail( reject ); 11250 11251 // Other thenables 11252 } else if ( value && isFunction( ( method = value.then ) ) ) { 11253 method.call( value, resolve, reject ); 11254 11255 // Other non-thenables 11256 } else { 11257 11258 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 11259 // * false: [ value ].slice( 0 ) => resolve( value ) 11260 // * true: [ value ].slice( 1 ) => resolve() 11261 resolve.apply( undefined, [ value ].slice( noValue ) ); 11262 } 11263 11264 // For Promises/A+, convert exceptions into rejections 11265 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 11266 // Deferred#then to conditionally suppress rejection. 11267 } catch ( value ) { 11268 11269 // Support: Android 4.0 only 11270 // Strict mode functions invoked without .call/.apply get global-object context 11271 reject.apply( undefined, [ value ] ); 11272 } 11273} 11274 11275jQuery.extend( { 11276 11277 Deferred: function( func ) { 11278 var tuples = [ 11279 11280 // action, add listener, callbacks, 11281 // ... .then handlers, argument index, [final state] 11282 [ "notify", "progress", jQuery.Callbacks( "memory" ), 11283 jQuery.Callbacks( "memory" ), 2 ], 11284 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 11285 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 11286 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 11287 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 11288 ], 11289 state = "pending", 11290 promise = { 11291 state: function() { 11292 return state; 11293 }, 11294 always: function() { 11295 deferred.done( arguments ).fail( arguments ); 11296 return this; 11297 }, 11298 "catch": function( fn ) { 11299 return promise.then( null, fn ); 11300 }, 11301 11302 // Keep pipe for back-compat 11303 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 11304 var fns = arguments; 11305 11306 return jQuery.Deferred( function( newDefer ) { 11307 jQuery.each( tuples, function( _i, tuple ) { 11308 11309 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 11310 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 11311 11312 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 11313 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 11314 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 11315 deferred[ tuple[ 1 ] ]( function() { 11316 var returned = fn && fn.apply( this, arguments ); 11317 if ( returned && isFunction( returned.promise ) ) { 11318 returned.promise() 11319 .progress( newDefer.notify ) 11320 .done( newDefer.resolve ) 11321 .fail( newDefer.reject ); 11322 } else { 11323 newDefer[ tuple[ 0 ] + "With" ]( 11324 this, 11325 fn ? [ returned ] : arguments 11326 ); 11327 } 11328 } ); 11329 } ); 11330 fns = null; 11331 } ).promise(); 11332 }, 11333 then: function( onFulfilled, onRejected, onProgress ) { 11334 var maxDepth = 0; 11335 function resolve( depth, deferred, handler, special ) { 11336 return function() { 11337 var that = this, 11338 args = arguments, 11339 mightThrow = function() { 11340 var returned, then; 11341 11342 // Support: Promises/A+ section 2.3.3.3.3 11343 // https://promisesaplus.com/#point-59 11344 // Ignore double-resolution attempts 11345 if ( depth < maxDepth ) { 11346 return; 11347 } 11348 11349 returned = handler.apply( that, args ); 11350 11351 // Support: Promises/A+ section 2.3.1 11352 // https://promisesaplus.com/#point-48 11353 if ( returned === deferred.promise() ) { 11354 throw new TypeError( "Thenable self-resolution" ); 11355 } 11356 11357 // Support: Promises/A+ sections 2.3.3.1, 3.5 11358 // https://promisesaplus.com/#point-54 11359 // https://promisesaplus.com/#point-75 11360 // Retrieve `then` only once 11361 then = returned && 11362 11363 // Support: Promises/A+ section 2.3.4 11364 // https://promisesaplus.com/#point-64 11365 // Only check objects and functions for thenability 11366 ( typeof returned === "object" || 11367 typeof returned === "function" ) && 11368 returned.then; 11369 11370 // Handle a returned thenable 11371 if ( isFunction( then ) ) { 11372 11373 // Special processors (notify) just wait for resolution 11374 if ( special ) { 11375 then.call( 11376 returned, 11377 resolve( maxDepth, deferred, Identity, special ), 11378 resolve( maxDepth, deferred, Thrower, special ) 11379 ); 11380 11381 // Normal processors (resolve) also hook into progress 11382 } else { 11383 11384 // ...and disregard older resolution values 11385 maxDepth++; 11386 11387 then.call( 11388 returned, 11389 resolve( maxDepth, deferred, Identity, special ), 11390 resolve( maxDepth, deferred, Thrower, special ), 11391 resolve( maxDepth, deferred, Identity, 11392 deferred.notifyWith ) 11393 ); 11394 } 11395 11396 // Handle all other returned values 11397 } else { 11398 11399 // Only substitute handlers pass on context 11400 // and multiple values (non-spec behavior) 11401 if ( handler !== Identity ) { 11402 that = undefined; 11403 args = [ returned ]; 11404 } 11405 11406 // Process the value(s) 11407 // Default process is resolve 11408 ( special || deferred.resolveWith )( that, args ); 11409 } 11410 }, 11411 11412 // Only normal processors (resolve) catch and reject exceptions 11413 process = special ? 11414 mightThrow : 11415 function() { 11416 try { 11417 mightThrow(); 11418 } catch ( e ) { 11419 11420 if ( jQuery.Deferred.exceptionHook ) { 11421 jQuery.Deferred.exceptionHook( e, 11422 process.error ); 11423 } 11424 11425 // Support: Promises/A+ section 2.3.3.3.4.1 11426 // https://promisesaplus.com/#point-61 11427 // Ignore post-resolution exceptions 11428 if ( depth + 1 >= maxDepth ) { 11429 11430 // Only substitute handlers pass on context 11431 // and multiple values (non-spec behavior) 11432 if ( handler !== Thrower ) { 11433 that = undefined; 11434 args = [ e ]; 11435 } 11436 11437 deferred.rejectWith( that, args ); 11438 } 11439 } 11440 }; 11441 11442 // Support: Promises/A+ section 2.3.3.3.1 11443 // https://promisesaplus.com/#point-57 11444 // Re-resolve promises immediately to dodge false rejection from 11445 // subsequent errors 11446 if ( depth ) { 11447 process(); 11448 } else { 11449 11450 // Call an optional hook to record the error, in case of exception 11451 // since it's otherwise lost when execution goes async 11452 if ( jQuery.Deferred.getErrorHook ) { 11453 process.error = jQuery.Deferred.getErrorHook(); 11454 11455 // The deprecated alias of the above. While the name suggests 11456 // returning the stack, not an error instance, jQuery just passes 11457 // it directly to `console.warn` so both will work; an instance 11458 // just better cooperates with source maps. 11459 } else if ( jQuery.Deferred.getStackHook ) { 11460 process.error = jQuery.Deferred.getStackHook(); 11461 } 11462 window.setTimeout( process ); 11463 } 11464 }; 11465 } 11466 11467 return jQuery.Deferred( function( newDefer ) { 11468 11469 // progress_handlers.add( ... ) 11470 tuples[ 0 ][ 3 ].add( 11471 resolve( 11472 0, 11473 newDefer, 11474 isFunction( onProgress ) ? 11475 onProgress : 11476 Identity, 11477 newDefer.notifyWith 11478 ) 11479 ); 11480 11481 // fulfilled_handlers.add( ... ) 11482 tuples[ 1 ][ 3 ].add( 11483 resolve( 11484 0, 11485 newDefer, 11486 isFunction( onFulfilled ) ? 11487 onFulfilled : 11488 Identity 11489 ) 11490 ); 11491 11492 // rejected_handlers.add( ... ) 11493 tuples[ 2 ][ 3 ].add( 11494 resolve( 11495 0, 11496 newDefer, 11497 isFunction( onRejected ) ? 11498 onRejected : 11499 Thrower 11500 ) 11501 ); 11502 } ).promise(); 11503 }, 11504 11505 // Get a promise for this deferred 11506 // If obj is provided, the promise aspect is added to the object 11507 promise: function( obj ) { 11508 return obj != null ? jQuery.extend( obj, promise ) : promise; 11509 } 11510 }, 11511 deferred = {}; 11512 11513 // Add list-specific methods 11514 jQuery.each( tuples, function( i, tuple ) { 11515 var list = tuple[ 2 ], 11516 stateString = tuple[ 5 ]; 11517 11518 // promise.progress = list.add 11519 // promise.done = list.add 11520 // promise.fail = list.add 11521 promise[ tuple[ 1 ] ] = list.add; 11522 11523 // Handle state 11524 if ( stateString ) { 11525 list.add( 11526 function() { 11527 11528 // state = "resolved" (i.e., fulfilled) 11529 // state = "rejected" 11530 state = stateString; 11531 }, 11532 11533 // rejected_callbacks.disable 11534 // fulfilled_callbacks.disable 11535 tuples[ 3 - i ][ 2 ].disable, 11536 11537 // rejected_handlers.disable 11538 // fulfilled_handlers.disable 11539 tuples[ 3 - i ][ 3 ].disable, 11540 11541 // progress_callbacks.lock 11542 tuples[ 0 ][ 2 ].lock, 11543 11544 // progress_handlers.lock 11545 tuples[ 0 ][ 3 ].lock 11546 ); 11547 } 11548 11549 // progress_handlers.fire 11550 // fulfilled_handlers.fire 11551 // rejected_handlers.fire 11552 list.add( tuple[ 3 ].fire ); 11553 11554 // deferred.notify = function() { deferred.notifyWith(...) } 11555 // deferred.resolve = function() { deferred.resolveWith(...) } 11556 // deferred.reject = function() { deferred.rejectWith(...) } 11557 deferred[ tuple[ 0 ] ] = function() { 11558 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 11559 return this; 11560 }; 11561 11562 // deferred.notifyWith = list.fireWith 11563 // deferred.resolveWith = list.fireWith 11564 // deferred.rejectWith = list.fireWith 11565 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 11566 } ); 11567 11568 // Make the deferred a promise 11569 promise.promise( deferred ); 11570 11571 // Call given func if any 11572 if ( func ) { 11573 func.call( deferred, deferred ); 11574 } 11575 11576 // All done! 11577 return deferred; 11578 }, 11579 11580 // Deferred helper 11581 when: function( singleValue ) { 11582 var 11583 11584 // count of uncompleted subordinates 11585 remaining = arguments.length, 11586 11587 // count of unprocessed arguments 11588 i = remaining, 11589 11590 // subordinate fulfillment data 11591 resolveContexts = Array( i ), 11592 resolveValues = slice.call( arguments ), 11593 11594 // the primary Deferred 11595 primary = jQuery.Deferred(), 11596 11597 // subordinate callback factory 11598 updateFunc = function( i ) { 11599 return function( value ) { 11600 resolveContexts[ i ] = this; 11601 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 11602 if ( !( --remaining ) ) { 11603 primary.resolveWith( resolveContexts, resolveValues ); 11604 } 11605 }; 11606 }; 11607 11608 // Single- and empty arguments are adopted like Promise.resolve 11609 if ( remaining <= 1 ) { 11610 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 11611 !remaining ); 11612 11613 // Use .then() to unwrap secondary thenables (cf. gh-3000) 11614 if ( primary.state() === "pending" || 11615 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 11616 11617 return primary.then(); 11618 } 11619 } 11620 11621 // Multiple arguments are aggregated like Promise.all array elements 11622 while ( i-- ) { 11623 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 11624 } 11625 11626 return primary.promise(); 11627 } 11628} ); 11629 11630 11631// These usually indicate a programmer mistake during development, 11632// warn about them ASAP rather than swallowing them by default. 11633var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 11634 11635// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 11636// captured before the async barrier to get the original error cause 11637// which may otherwise be hidden. 11638jQuery.Deferred.exceptionHook = function( error, asyncError ) { 11639 11640 // Support: IE 8 - 9 only 11641 // Console exists when dev tools are open, which can happen at any time 11642 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 11643 window.console.warn( "jQuery.Deferred exception: " + error.message, 11644 error.stack, asyncError ); 11645 } 11646}; 11647 11648 11649 11650 11651jQuery.readyException = function( error ) { 11652 window.setTimeout( function() { 11653 throw error; 11654 } ); 11655}; 11656 11657 11658 11659 11660// The deferred used on DOM ready 11661var readyList = jQuery.Deferred(); 11662 11663jQuery.fn.ready = function( fn ) { 11664 11665 readyList 11666 .then( fn ) 11667 11668 // Wrap jQuery.readyException in a function so that the lookup 11669 // happens at the time of error handling instead of callback 11670 // registration. 11671 .catch( function( error ) { 11672 jQuery.readyException( error ); 11673 } ); 11674 11675 return this; 11676}; 11677 11678jQuery.extend( { 11679 11680 // Is the DOM ready to be used? Set to true once it occurs. 11681 isReady: false, 11682 11683 // A counter to track how many items to wait for before 11684 // the ready event fires. See trac-6781 11685 readyWait: 1, 11686 11687 // Handle when the DOM is ready 11688 ready: function( wait ) { 11689 11690 // Abort if there are pending holds or we're already ready 11691 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 11692 return; 11693 } 11694 11695 // Remember that the DOM is ready 11696 jQuery.isReady = true; 11697 11698 // If a normal DOM Ready event fired, decrement, and wait if need be 11699 if ( wait !== true && --jQuery.readyWait > 0 ) { 11700 return; 11701 } 11702 11703 // If there are functions bound, to execute 11704 readyList.resolveWith( document, [ jQuery ] ); 11705 } 11706} ); 11707 11708jQuery.ready.then = readyList.then; 11709 11710// The ready event handler and self cleanup method 11711function completed() { 11712 document.removeEventListener( "DOMContentLoaded", completed ); 11713 window.removeEventListener( "load", completed ); 11714 jQuery.ready(); 11715} 11716 11717// Catch cases where $(document).ready() is called 11718// after the browser event has already occurred. 11719// Support: IE <=9 - 10 only 11720// Older IE sometimes signals "interactive" too soon 11721if ( document.readyState === "complete" || 11722 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 11723 11724 // Handle it asynchronously to allow scripts the opportunity to delay ready 11725 window.setTimeout( jQuery.ready ); 11726 11727} else { 11728 11729 // Use the handy event callback 11730 document.addEventListener( "DOMContentLoaded", completed ); 11731 11732 // A fallback to window.onload, that will always work 11733 window.addEventListener( "load", completed ); 11734} 11735 11736 11737 11738 11739// Multifunctional method to get and set values of a collection 11740// The value/s can optionally be executed if it's a function 11741var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 11742 var i = 0, 11743 len = elems.length, 11744 bulk = key == null; 11745 11746 // Sets many values 11747 if ( toType( key ) === "object" ) { 11748 chainable = true; 11749 for ( i in key ) { 11750 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 11751 } 11752 11753 // Sets one value 11754 } else if ( value !== undefined ) { 11755 chainable = true; 11756 11757 if ( !isFunction( value ) ) { 11758 raw = true; 11759 } 11760 11761 if ( bulk ) { 11762 11763 // Bulk operations run against the entire set 11764 if ( raw ) { 11765 fn.call( elems, value ); 11766 fn = null; 11767 11768 // ...except when executing function values 11769 } else { 11770 bulk = fn; 11771 fn = function( elem, _key, value ) { 11772 return bulk.call( jQuery( elem ), value ); 11773 }; 11774 } 11775 } 11776 11777 if ( fn ) { 11778 for ( ; i < len; i++ ) { 11779 fn( 11780 elems[ i ], key, raw ? 11781 value : 11782 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 11783 ); 11784 } 11785 } 11786 } 11787 11788 if ( chainable ) { 11789 return elems; 11790 } 11791 11792 // Gets 11793 if ( bulk ) { 11794 return fn.call( elems ); 11795 } 11796 11797 return len ? fn( elems[ 0 ], key ) : emptyGet; 11798}; 11799 11800 11801// Matches dashed string for camelizing 11802var rmsPrefix = /^-ms-/, 11803 rdashAlpha = /-([a-z])/g; 11804 11805// Used by camelCase as callback to replace() 11806function fcamelCase( _all, letter ) { 11807 return letter.toUpperCase(); 11808} 11809 11810// Convert dashed to camelCase; used by the css and data modules 11811// Support: IE <=9 - 11, Edge 12 - 15 11812// Microsoft forgot to hump their vendor prefix (trac-9572) 11813function camelCase( string ) { 11814 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 11815} 11816var acceptData = function( owner ) { 11817 11818 // Accepts only: 11819 // - Node 11820 // - Node.ELEMENT_NODE 11821 // - Node.DOCUMENT_NODE 11822 // - Object 11823 // - Any 11824 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 11825}; 11826 11827 11828 11829 11830function Data() { 11831 this.expando = jQuery.expando + Data.uid++; 11832} 11833 11834Data.uid = 1; 11835 11836Data.prototype = { 11837 11838 cache: function( owner ) { 11839 11840 // Check if the owner object already has a cache 11841 var value = owner[ this.expando ]; 11842 11843 // If not, create one 11844 if ( !value ) { 11845 value = {}; 11846 11847 // We can accept data for non-element nodes in modern browsers, 11848 // but we should not, see trac-8335. 11849 // Always return an empty object. 11850 if ( acceptData( owner ) ) { 11851 11852 // If it is a node unlikely to be stringify-ed or looped over 11853 // use plain assignment 11854 if ( owner.nodeType ) { 11855 owner[ this.expando ] = value; 11856 11857 // Otherwise secure it in a non-enumerable property 11858 // configurable must be true to allow the property to be 11859 // deleted when data is removed 11860 } else { 11861 Object.defineProperty( owner, this.expando, { 11862 value: value, 11863 configurable: true 11864 } ); 11865 } 11866 } 11867 } 11868 11869 return value; 11870 }, 11871 set: function( owner, data, value ) { 11872 var prop, 11873 cache = this.cache( owner ); 11874 11875 // Handle: [ owner, key, value ] args 11876 // Always use camelCase key (gh-2257) 11877 if ( typeof data === "string" ) { 11878 cache[ camelCase( data ) ] = value; 11879 11880 // Handle: [ owner, { properties } ] args 11881 } else { 11882 11883 // Copy the properties one-by-one to the cache object 11884 for ( prop in data ) { 11885 cache[ camelCase( prop ) ] = data[ prop ]; 11886 } 11887 } 11888 return cache; 11889 }, 11890 get: function( owner, key ) { 11891 return key === undefined ? 11892 this.cache( owner ) : 11893 11894 // Always use camelCase key (gh-2257) 11895 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 11896 }, 11897 access: function( owner, key, value ) { 11898 11899 // In cases where either: 11900 // 11901 // 1. No key was specified 11902 // 2. A string key was specified, but no value provided 11903 // 11904 // Take the "read" path and allow the get method to determine 11905 // which value to return, respectively either: 11906 // 11907 // 1. The entire cache object 11908 // 2. The data stored at the key 11909 // 11910 if ( key === undefined || 11911 ( ( key && typeof key === "string" ) && value === undefined ) ) { 11912 11913 return this.get( owner, key ); 11914 } 11915 11916 // When the key is not a string, or both a key and value 11917 // are specified, set or extend (existing objects) with either: 11918 // 11919 // 1. An object of properties 11920 // 2. A key and value 11921 // 11922 this.set( owner, key, value ); 11923 11924 // Since the "set" path can have two possible entry points 11925 // return the expected data based on which path was taken[*] 11926 return value !== undefined ? value : key; 11927 }, 11928 remove: function( owner, key ) { 11929 var i, 11930 cache = owner[ this.expando ]; 11931 11932 if ( cache === undefined ) { 11933 return; 11934 } 11935 11936 if ( key !== undefined ) { 11937 11938 // Support array or space separated string of keys 11939 if ( Array.isArray( key ) ) { 11940 11941 // If key is an array of keys... 11942 // We always set camelCase keys, so remove that. 11943 key = key.map( camelCase ); 11944 } else { 11945 key = camelCase( key ); 11946 11947 // If a key with the spaces exists, use it. 11948 // Otherwise, create an array by matching non-whitespace 11949 key = key in cache ? 11950 [ key ] : 11951 ( key.match( rnothtmlwhite ) || [] ); 11952 } 11953 11954 i = key.length; 11955 11956 while ( i-- ) { 11957 delete cache[ key[ i ] ]; 11958 } 11959 } 11960 11961 // Remove the expando if there's no more data 11962 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 11963 11964 // Support: Chrome <=35 - 45 11965 // Webkit & Blink performance suffers when deleting properties 11966 // from DOM nodes, so set to undefined instead 11967 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 11968 if ( owner.nodeType ) { 11969 owner[ this.expando ] = undefined; 11970 } else { 11971 delete owner[ this.expando ]; 11972 } 11973 } 11974 }, 11975 hasData: function( owner ) { 11976 var cache = owner[ this.expando ]; 11977 return cache !== undefined && !jQuery.isEmptyObject( cache ); 11978 } 11979}; 11980var dataPriv = new Data(); 11981 11982var dataUser = new Data(); 11983 11984 11985 11986// Implementation Summary 11987// 11988// 1. Enforce API surface and semantic compatibility with 1.9.x branch 11989// 2. Improve the module's maintainability by reducing the storage 11990// paths to a single mechanism. 11991// 3. Use the same single mechanism to support "private" and "user" data. 11992// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 11993// 5. Avoid exposing implementation details on user objects (eg. expando properties) 11994// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 11995 11996var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 11997 rmultiDash = /[A-Z]/g; 11998 11999function getData( data ) { 12000 if ( data === "true" ) { 12001 return true; 12002 } 12003 12004 if ( data === "false" ) { 12005 return false; 12006 } 12007 12008 if ( data === "null" ) { 12009 return null; 12010 } 12011 12012 // Only convert to a number if it doesn't change the string 12013 if ( data === +data + "" ) { 12014 return +data; 12015 } 12016 12017 if ( rbrace.test( data ) ) { 12018 return JSON.parse( data ); 12019 } 12020 12021 return data; 12022} 12023 12024function dataAttr( elem, key, data ) { 12025 var name; 12026 12027 // If nothing was found internally, try to fetch any 12028 // data from the HTML5 data-* attribute 12029 if ( data === undefined && elem.nodeType === 1 ) { 12030 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 12031 data = elem.getAttribute( name ); 12032 12033 if ( typeof data === "string" ) { 12034 try { 12035 data = getData( data ); 12036 } catch ( e ) {} 12037 12038 // Make sure we set the data so it isn't changed later 12039 dataUser.set( elem, key, data ); 12040 } else { 12041 data = undefined; 12042 } 12043 } 12044 return data; 12045} 12046 12047jQuery.extend( { 12048 hasData: function( elem ) { 12049 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 12050 }, 12051 12052 data: function( elem, name, data ) { 12053 return dataUser.access( elem, name, data ); 12054 }, 12055 12056 removeData: function( elem, name ) { 12057 dataUser.remove( elem, name ); 12058 }, 12059 12060 // TODO: Now that all calls to _data and _removeData have been replaced 12061 // with direct calls to dataPriv methods, these can be deprecated. 12062 _data: function( elem, name, data ) { 12063 return dataPriv.access( elem, name, data ); 12064 }, 12065 12066 _removeData: function( elem, name ) { 12067 dataPriv.remove( elem, name ); 12068 } 12069} ); 12070 12071jQuery.fn.extend( { 12072 data: function( key, value ) { 12073 var i, name, data, 12074 elem = this[ 0 ], 12075 attrs = elem && elem.attributes; 12076 12077 // Gets all values 12078 if ( key === undefined ) { 12079 if ( this.length ) { 12080 data = dataUser.get( elem ); 12081 12082 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 12083 i = attrs.length; 12084 while ( i-- ) { 12085 12086 // Support: IE 11 only 12087 // The attrs elements can be null (trac-14894) 12088 if ( attrs[ i ] ) { 12089 name = attrs[ i ].name; 12090 if ( name.indexOf( "data-" ) === 0 ) { 12091 name = camelCase( name.slice( 5 ) ); 12092 dataAttr( elem, name, data[ name ] ); 12093 } 12094 } 12095 } 12096 dataPriv.set( elem, "hasDataAttrs", true ); 12097 } 12098 } 12099 12100 return data; 12101 } 12102 12103 // Sets multiple values 12104 if ( typeof key === "object" ) { 12105 return this.each( function() { 12106 dataUser.set( this, key ); 12107 } ); 12108 } 12109 12110 return access( this, function( value ) { 12111 var data; 12112 12113 // The calling jQuery object (element matches) is not empty 12114 // (and therefore has an element appears at this[ 0 ]) and the 12115 // `value` parameter was not undefined. An empty jQuery object 12116 // will result in `undefined` for elem = this[ 0 ] which will 12117 // throw an exception if an attempt to read a data cache is made. 12118 if ( elem && value === undefined ) { 12119 12120 // Attempt to get data from the cache 12121 // The key will always be camelCased in Data 12122 data = dataUser.get( elem, key ); 12123 if ( data !== undefined ) { 12124 return data; 12125 } 12126 12127 // Attempt to "discover" the data in 12128 // HTML5 custom data-* attrs 12129 data = dataAttr( elem, key ); 12130 if ( data !== undefined ) { 12131 return data; 12132 } 12133 12134 // We tried really hard, but the data doesn't exist. 12135 return; 12136 } 12137 12138 // Set the data... 12139 this.each( function() { 12140 12141 // We always store the camelCased key 12142 dataUser.set( this, key, value ); 12143 } ); 12144 }, null, value, arguments.length > 1, null, true ); 12145 }, 12146 12147 removeData: function( key ) { 12148 return this.each( function() { 12149 dataUser.remove( this, key ); 12150 } ); 12151 } 12152} ); 12153 12154 12155jQuery.extend( { 12156 queue: function( elem, type, data ) { 12157 var queue; 12158 12159 if ( elem ) { 12160 type = ( type || "fx" ) + "queue"; 12161 queue = dataPriv.get( elem, type ); 12162 12163 // Speed up dequeue by getting out quickly if this is just a lookup 12164 if ( data ) { 12165 if ( !queue || Array.isArray( data ) ) { 12166 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 12167 } else { 12168 queue.push( data ); 12169 } 12170 } 12171 return queue || []; 12172 } 12173 }, 12174 12175 dequeue: function( elem, type ) { 12176 type = type || "fx"; 12177 12178 var queue = jQuery.queue( elem, type ), 12179 startLength = queue.length, 12180 fn = queue.shift(), 12181 hooks = jQuery._queueHooks( elem, type ), 12182 next = function() { 12183 jQuery.dequeue( elem, type ); 12184 }; 12185 12186 // If the fx queue is dequeued, always remove the progress sentinel 12187 if ( fn === "inprogress" ) { 12188 fn = queue.shift(); 12189 startLength--; 12190 } 12191 12192 if ( fn ) { 12193 12194 // Add a progress sentinel to prevent the fx queue from being 12195 // automatically dequeued 12196 if ( type === "fx" ) { 12197 queue.unshift( "inprogress" ); 12198 } 12199 12200 // Clear up the last queue stop function 12201 delete hooks.stop; 12202 fn.call( elem, next, hooks ); 12203 } 12204 12205 if ( !startLength && hooks ) { 12206 hooks.empty.fire(); 12207 } 12208 }, 12209 12210 // Not public - generate a queueHooks object, or return the current one 12211 _queueHooks: function( elem, type ) { 12212 var key = type + "queueHooks"; 12213 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 12214 empty: jQuery.Callbacks( "once memory" ).add( function() { 12215 dataPriv.remove( elem, [ type + "queue", key ] ); 12216 } ) 12217 } ); 12218 } 12219} ); 12220 12221jQuery.fn.extend( { 12222 queue: function( type, data ) { 12223 var setter = 2; 12224 12225 if ( typeof type !== "string" ) { 12226 data = type; 12227 type = "fx"; 12228 setter--; 12229 } 12230 12231 if ( arguments.length < setter ) { 12232 return jQuery.queue( this[ 0 ], type ); 12233 } 12234 12235 return data === undefined ? 12236 this : 12237 this.each( function() { 12238 var queue = jQuery.queue( this, type, data ); 12239 12240 // Ensure a hooks for this queue 12241 jQuery._queueHooks( this, type ); 12242 12243 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 12244 jQuery.dequeue( this, type ); 12245 } 12246 } ); 12247 }, 12248 dequeue: function( type ) { 12249 return this.each( function() { 12250 jQuery.dequeue( this, type ); 12251 } ); 12252 }, 12253 clearQueue: function( type ) { 12254 return this.queue( type || "fx", [] ); 12255 }, 12256 12257 // Get a promise resolved when queues of a certain type 12258 // are emptied (fx is the type by default) 12259 promise: function( type, obj ) { 12260 var tmp, 12261 count = 1, 12262 defer = jQuery.Deferred(), 12263 elements = this, 12264 i = this.length, 12265 resolve = function() { 12266 if ( !( --count ) ) { 12267 defer.resolveWith( elements, [ elements ] ); 12268 } 12269 }; 12270 12271 if ( typeof type !== "string" ) { 12272 obj = type; 12273 type = undefined; 12274 } 12275 type = type || "fx"; 12276 12277 while ( i-- ) { 12278 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 12279 if ( tmp && tmp.empty ) { 12280 count++; 12281 tmp.empty.add( resolve ); 12282 } 12283 } 12284 resolve(); 12285 return defer.promise( obj ); 12286 } 12287} ); 12288var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 12289 12290var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 12291 12292 12293var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 12294 12295var documentElement = document.documentElement; 12296 12297 12298 12299 var isAttached = function( elem ) { 12300 return jQuery.contains( elem.ownerDocument, elem ); 12301 }, 12302 composed = { composed: true }; 12303 12304 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 12305 // Check attachment across shadow DOM boundaries when possible (gh-3504) 12306 // Support: iOS 10.0-10.2 only 12307 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 12308 // leading to errors. We need to check for `getRootNode`. 12309 if ( documentElement.getRootNode ) { 12310 isAttached = function( elem ) { 12311 return jQuery.contains( elem.ownerDocument, elem ) || 12312 elem.getRootNode( composed ) === elem.ownerDocument; 12313 }; 12314 } 12315var isHiddenWithinTree = function( elem, el ) { 12316 12317 // isHiddenWithinTree might be called from jQuery#filter function; 12318 // in that case, element will be second argument 12319 elem = el || elem; 12320 12321 // Inline style trumps all 12322 return elem.style.display === "none" || 12323 elem.style.display === "" && 12324 12325 // Otherwise, check computed style 12326 // Support: Firefox <=43 - 45 12327 // Disconnected elements can have computed display: none, so first confirm that elem is 12328 // in the document. 12329 isAttached( elem ) && 12330 12331 jQuery.css( elem, "display" ) === "none"; 12332 }; 12333 12334 12335 12336function adjustCSS( elem, prop, valueParts, tween ) { 12337 var adjusted, scale, 12338 maxIterations = 20, 12339 currentValue = tween ? 12340 function() { 12341 return tween.cur(); 12342 } : 12343 function() { 12344 return jQuery.css( elem, prop, "" ); 12345 }, 12346 initial = currentValue(), 12347 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 12348 12349 // Starting value computation is required for potential unit mismatches 12350 initialInUnit = elem.nodeType && 12351 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 12352 rcssNum.exec( jQuery.css( elem, prop ) ); 12353 12354 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 12355 12356 // Support: Firefox <=54 12357 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 12358 initial = initial / 2; 12359 12360 // Trust units reported by jQuery.css 12361 unit = unit || initialInUnit[ 3 ]; 12362 12363 // Iteratively approximate from a nonzero starting point 12364 initialInUnit = +initial || 1; 12365 12366 while ( maxIterations-- ) { 12367 12368 // Evaluate and update our best guess (doubling guesses that zero out). 12369 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 12370 jQuery.style( elem, prop, initialInUnit + unit ); 12371 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 12372 maxIterations = 0; 12373 } 12374 initialInUnit = initialInUnit / scale; 12375 12376 } 12377 12378 initialInUnit = initialInUnit * 2; 12379 jQuery.style( elem, prop, initialInUnit + unit ); 12380 12381 // Make sure we update the tween properties later on 12382 valueParts = valueParts || []; 12383 } 12384 12385 if ( valueParts ) { 12386 initialInUnit = +initialInUnit || +initial || 0; 12387 12388 // Apply relative offset (+=/-=) if specified 12389 adjusted = valueParts[ 1 ] ? 12390 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 12391 +valueParts[ 2 ]; 12392 if ( tween ) { 12393 tween.unit = unit; 12394 tween.start = initialInUnit; 12395 tween.end = adjusted; 12396 } 12397 } 12398 return adjusted; 12399} 12400 12401 12402var defaultDisplayMap = {}; 12403 12404function getDefaultDisplay( elem ) { 12405 var temp, 12406 doc = elem.ownerDocument, 12407 nodeName = elem.nodeName, 12408 display = defaultDisplayMap[ nodeName ]; 12409 12410 if ( display ) { 12411 return display; 12412 } 12413 12414 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 12415 display = jQuery.css( temp, "display" ); 12416 12417 temp.parentNode.removeChild( temp ); 12418 12419 if ( display === "none" ) { 12420 display = "block"; 12421 } 12422 defaultDisplayMap[ nodeName ] = display; 12423 12424 return display; 12425} 12426 12427function showHide( elements, show ) { 12428 var display, elem, 12429 values = [], 12430 index = 0, 12431 length = elements.length; 12432 12433 // Determine new display value for elements that need to change 12434 for ( ; index < length; index++ ) { 12435 elem = elements[ index ]; 12436 if ( !elem.style ) { 12437 continue; 12438 } 12439 12440 display = elem.style.display; 12441 if ( show ) { 12442 12443 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 12444 // check is required in this first loop unless we have a nonempty display value (either 12445 // inline or about-to-be-restored) 12446 if ( display === "none" ) { 12447 values[ index ] = dataPriv.get( elem, "display" ) || null; 12448 if ( !values[ index ] ) { 12449 elem.style.display = ""; 12450 } 12451 } 12452 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 12453 values[ index ] = getDefaultDisplay( elem ); 12454 } 12455 } else { 12456 if ( display !== "none" ) { 12457 values[ index ] = "none"; 12458 12459 // Remember what we're overwriting 12460 dataPriv.set( elem, "display", display ); 12461 } 12462 } 12463 } 12464 12465 // Set the display of the elements in a second loop to avoid constant reflow 12466 for ( index = 0; index < length; index++ ) { 12467 if ( values[ index ] != null ) { 12468 elements[ index ].style.display = values[ index ]; 12469 } 12470 } 12471 12472 return elements; 12473} 12474 12475jQuery.fn.extend( { 12476 show: function() { 12477 return showHide( this, true ); 12478 }, 12479 hide: function() { 12480 return showHide( this ); 12481 }, 12482 toggle: function( state ) { 12483 if ( typeof state === "boolean" ) { 12484 return state ? this.show() : this.hide(); 12485 } 12486 12487 return this.each( function() { 12488 if ( isHiddenWithinTree( this ) ) { 12489 jQuery( this ).show(); 12490 } else { 12491 jQuery( this ).hide(); 12492 } 12493 } ); 12494 } 12495} ); 12496var rcheckableType = ( /^(?:checkbox|radio)$/i ); 12497 12498var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 12499 12500var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 12501 12502 12503 12504( function() { 12505 var fragment = document.createDocumentFragment(), 12506 div = fragment.appendChild( document.createElement( "div" ) ), 12507 input = document.createElement( "input" ); 12508 12509 // Support: Android 4.0 - 4.3 only 12510 // Check state lost if the name is set (trac-11217) 12511 // Support: Windows Web Apps (WWA) 12512 // `name` and `type` must use .setAttribute for WWA (trac-14901) 12513 input.setAttribute( "type", "radio" ); 12514 input.setAttribute( "checked", "checked" ); 12515 input.setAttribute( "name", "t" ); 12516 12517 div.appendChild( input ); 12518 12519 // Support: Android <=4.1 only 12520 // Older WebKit doesn't clone checked state correctly in fragments 12521 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 12522 12523 // Support: IE <=11 only 12524 // Make sure textarea (and checkbox) defaultValue is properly cloned 12525 div.innerHTML = "<textarea>x</textarea>"; 12526 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 12527 12528 // Support: IE <=9 only 12529 // IE <=9 replaces <option> tags with their contents when inserted outside of 12530 // the select element. 12531 div.innerHTML = "<option></option>"; 12532 support.option = !!div.lastChild; 12533} )(); 12534 12535 12536// We have to close these tags to support XHTML (trac-13200) 12537var wrapMap = { 12538 12539 // XHTML parsers do not magically insert elements in the 12540 // same way that tag soup parsers do. So we cannot shorten 12541 // this by omitting <tbody> or other required elements. 12542 thead: [ 1, "<table>", "</table>" ], 12543 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 12544 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 12545 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 12546 12547 _default: [ 0, "", "" ] 12548}; 12549 12550wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 12551wrapMap.th = wrapMap.td; 12552 12553// Support: IE <=9 only 12554if ( !support.option ) { 12555 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 12556} 12557 12558 12559function getAll( context, tag ) { 12560 12561 // Support: IE <=9 - 11 only 12562 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 12563 var ret; 12564 12565 if ( typeof context.getElementsByTagName !== "undefined" ) { 12566 ret = context.getElementsByTagName( tag || "*" ); 12567 12568 } else if ( typeof context.querySelectorAll !== "undefined" ) { 12569 ret = context.querySelectorAll( tag || "*" ); 12570 12571 } else { 12572 ret = []; 12573 } 12574 12575 if ( tag === undefined || tag && nodeName( context, tag ) ) { 12576 return jQuery.merge( [ context ], ret ); 12577 } 12578 12579 return ret; 12580} 12581 12582 12583// Mark scripts as having already been evaluated 12584function setGlobalEval( elems, refElements ) { 12585 var i = 0, 12586 l = elems.length; 12587 12588 for ( ; i < l; i++ ) { 12589 dataPriv.set( 12590 elems[ i ], 12591 "globalEval", 12592 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 12593 ); 12594 } 12595} 12596 12597 12598var rhtml = /<|&#?\w+;/; 12599 12600function buildFragment( elems, context, scripts, selection, ignored ) { 12601 var elem, tmp, tag, wrap, attached, j, 12602 fragment = context.createDocumentFragment(), 12603 nodes = [], 12604 i = 0, 12605 l = elems.length; 12606 12607 for ( ; i < l; i++ ) { 12608 elem = elems[ i ]; 12609 12610 if ( elem || elem === 0 ) { 12611 12612 // Add nodes directly 12613 if ( toType( elem ) === "object" ) { 12614 12615 // Support: Android <=4.0 only, PhantomJS 1 only 12616 // push.apply(_, arraylike) throws on ancient WebKit 12617 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 12618 12619 // Convert non-html into a text node 12620 } else if ( !rhtml.test( elem ) ) { 12621 nodes.push( context.createTextNode( elem ) ); 12622 12623 // Convert html into DOM nodes 12624 } else { 12625 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 12626 12627 // Deserialize a standard representation 12628 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 12629 wrap = wrapMap[ tag ] || wrapMap._default; 12630 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 12631 12632 // Descend through wrappers to the right content 12633 j = wrap[ 0 ]; 12634 while ( j-- ) { 12635 tmp = tmp.lastChild; 12636 } 12637 12638 // Support: Android <=4.0 only, PhantomJS 1 only 12639 // push.apply(_, arraylike) throws on ancient WebKit 12640 jQuery.merge( nodes, tmp.childNodes ); 12641 12642 // Remember the top-level container 12643 tmp = fragment.firstChild; 12644 12645 // Ensure the created nodes are orphaned (trac-12392) 12646 tmp.textContent = ""; 12647 } 12648 } 12649 } 12650 12651 // Remove wrapper from fragment 12652 fragment.textContent = ""; 12653 12654 i = 0; 12655 while ( ( elem = nodes[ i++ ] ) ) { 12656 12657 // Skip elements already in the context collection (trac-4087) 12658 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 12659 if ( ignored ) { 12660 ignored.push( elem ); 12661 } 12662 continue; 12663 } 12664 12665 attached = isAttached( elem ); 12666 12667 // Append to fragment 12668 tmp = getAll( fragment.appendChild( elem ), "script" ); 12669 12670 // Preserve script evaluation history 12671 if ( attached ) { 12672 setGlobalEval( tmp ); 12673 } 12674 12675 // Capture executables 12676 if ( scripts ) { 12677 j = 0; 12678 while ( ( elem = tmp[ j++ ] ) ) { 12679 if ( rscriptType.test( elem.type || "" ) ) { 12680 scripts.push( elem ); 12681 } 12682 } 12683 } 12684 } 12685 12686 return fragment; 12687} 12688 12689 12690var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 12691 12692function returnTrue() { 12693 return true; 12694} 12695 12696function returnFalse() { 12697 return false; 12698} 12699 12700function on( elem, types, selector, data, fn, one ) { 12701 var origFn, type; 12702 12703 // Types can be a map of types/handlers 12704 if ( typeof types === "object" ) { 12705 12706 // ( types-Object, selector, data ) 12707 if ( typeof selector !== "string" ) { 12708 12709 // ( types-Object, data ) 12710 data = data || selector; 12711 selector = undefined; 12712 } 12713 for ( type in types ) { 12714 on( elem, type, selector, data, types[ type ], one ); 12715 } 12716 return elem; 12717 } 12718 12719 if ( data == null && fn == null ) { 12720 12721 // ( types, fn ) 12722 fn = selector; 12723 data = selector = undefined; 12724 } else if ( fn == null ) { 12725 if ( typeof selector === "string" ) { 12726 12727 // ( types, selector, fn ) 12728 fn = data; 12729 data = undefined; 12730 } else { 12731 12732 // ( types, data, fn ) 12733 fn = data; 12734 data = selector; 12735 selector = undefined; 12736 } 12737 } 12738 if ( fn === false ) { 12739 fn = returnFalse; 12740 } else if ( !fn ) { 12741 return elem; 12742 } 12743 12744 if ( one === 1 ) { 12745 origFn = fn; 12746 fn = function( event ) { 12747 12748 // Can use an empty set, since event contains the info 12749 jQuery().off( event ); 12750 return origFn.apply( this, arguments ); 12751 }; 12752 12753 // Use same guid so caller can remove using origFn 12754 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 12755 } 12756 return elem.each( function() { 12757 jQuery.event.add( this, types, fn, data, selector ); 12758 } ); 12759} 12760 12761/* 12762 * Helper functions for managing events -- not part of the public interface. 12763 * Props to Dean Edwards' addEvent library for many of the ideas. 12764 */ 12765jQuery.event = { 12766 12767 global: {}, 12768 12769 add: function( elem, types, handler, data, selector ) { 12770 12771 var handleObjIn, eventHandle, tmp, 12772 events, t, handleObj, 12773 special, handlers, type, namespaces, origType, 12774 elemData = dataPriv.get( elem ); 12775 12776 // Only attach events to objects that accept data 12777 if ( !acceptData( elem ) ) { 12778 return; 12779 } 12780 12781 // Caller can pass in an object of custom data in lieu of the handler 12782 if ( handler.handler ) { 12783 handleObjIn = handler; 12784 handler = handleObjIn.handler; 12785 selector = handleObjIn.selector; 12786 } 12787 12788 // Ensure that invalid selectors throw exceptions at attach time 12789 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 12790 if ( selector ) { 12791 jQuery.find.matchesSelector( documentElement, selector ); 12792 } 12793 12794 // Make sure that the handler has a unique ID, used to find/remove it later 12795 if ( !handler.guid ) { 12796 handler.guid = jQuery.guid++; 12797 } 12798 12799 // Init the element's event structure and main handler, if this is the first 12800 if ( !( events = elemData.events ) ) { 12801 events = elemData.events = Object.create( null ); 12802 } 12803 if ( !( eventHandle = elemData.handle ) ) { 12804 eventHandle = elemData.handle = function( e ) { 12805 12806 // Discard the second event of a jQuery.event.trigger() and 12807 // when an event is called after a page has unloaded 12808 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 12809 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 12810 }; 12811 } 12812 12813 // Handle multiple events separated by a space 12814 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12815 t = types.length; 12816 while ( t-- ) { 12817 tmp = rtypenamespace.exec( types[ t ] ) || []; 12818 type = origType = tmp[ 1 ]; 12819 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12820 12821 // There *must* be a type, no attaching namespace-only handlers 12822 if ( !type ) { 12823 continue; 12824 } 12825 12826 // If event changes its type, use the special event handlers for the changed type 12827 special = jQuery.event.special[ type ] || {}; 12828 12829 // If selector defined, determine special event api type, otherwise given type 12830 type = ( selector ? special.delegateType : special.bindType ) || type; 12831 12832 // Update special based on newly reset type 12833 special = jQuery.event.special[ type ] || {}; 12834 12835 // handleObj is passed to all event handlers 12836 handleObj = jQuery.extend( { 12837 type: type, 12838 origType: origType, 12839 data: data, 12840 handler: handler, 12841 guid: handler.guid, 12842 selector: selector, 12843 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 12844 namespace: namespaces.join( "." ) 12845 }, handleObjIn ); 12846 12847 // Init the event handler queue if we're the first 12848 if ( !( handlers = events[ type ] ) ) { 12849 handlers = events[ type ] = []; 12850 handlers.delegateCount = 0; 12851 12852 // Only use addEventListener if the special events handler returns false 12853 if ( !special.setup || 12854 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 12855 12856 if ( elem.addEventListener ) { 12857 elem.addEventListener( type, eventHandle ); 12858 } 12859 } 12860 } 12861 12862 if ( special.add ) { 12863 special.add.call( elem, handleObj ); 12864 12865 if ( !handleObj.handler.guid ) { 12866 handleObj.handler.guid = handler.guid; 12867 } 12868 } 12869 12870 // Add to the element's handler list, delegates in front 12871 if ( selector ) { 12872 handlers.splice( handlers.delegateCount++, 0, handleObj ); 12873 } else { 12874 handlers.push( handleObj ); 12875 } 12876 12877 // Keep track of which events have ever been used, for event optimization 12878 jQuery.event.global[ type ] = true; 12879 } 12880 12881 }, 12882 12883 // Detach an event or set of events from an element 12884 remove: function( elem, types, handler, selector, mappedTypes ) { 12885 12886 var j, origCount, tmp, 12887 events, t, handleObj, 12888 special, handlers, type, namespaces, origType, 12889 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 12890 12891 if ( !elemData || !( events = elemData.events ) ) { 12892 return; 12893 } 12894 12895 // Once for each type.namespace in types; type may be omitted 12896 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12897 t = types.length; 12898 while ( t-- ) { 12899 tmp = rtypenamespace.exec( types[ t ] ) || []; 12900 type = origType = tmp[ 1 ]; 12901 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12902 12903 // Unbind all events (on this namespace, if provided) for the element 12904 if ( !type ) { 12905 for ( type in events ) { 12906 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 12907 } 12908 continue; 12909 } 12910 12911 special = jQuery.event.special[ type ] || {}; 12912 type = ( selector ? special.delegateType : special.bindType ) || type; 12913 handlers = events[ type ] || []; 12914 tmp = tmp[ 2 ] && 12915 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 12916 12917 // Remove matching events 12918 origCount = j = handlers.length; 12919 while ( j-- ) { 12920 handleObj = handlers[ j ]; 12921 12922 if ( ( mappedTypes || origType === handleObj.origType ) && 12923 ( !handler || handler.guid === handleObj.guid ) && 12924 ( !tmp || tmp.test( handleObj.namespace ) ) && 12925 ( !selector || selector === handleObj.selector || 12926 selector === "**" && handleObj.selector ) ) { 12927 handlers.splice( j, 1 ); 12928 12929 if ( handleObj.selector ) { 12930 handlers.delegateCount--; 12931 } 12932 if ( special.remove ) { 12933 special.remove.call( elem, handleObj ); 12934 } 12935 } 12936 } 12937 12938 // Remove generic event handler if we removed something and no more handlers exist 12939 // (avoids potential for endless recursion during removal of special event handlers) 12940 if ( origCount && !handlers.length ) { 12941 if ( !special.teardown || 12942 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 12943 12944 jQuery.removeEvent( elem, type, elemData.handle ); 12945 } 12946 12947 delete events[ type ]; 12948 } 12949 } 12950 12951 // Remove data and the expando if it's no longer used 12952 if ( jQuery.isEmptyObject( events ) ) { 12953 dataPriv.remove( elem, "handle events" ); 12954 } 12955 }, 12956 12957 dispatch: function( nativeEvent ) { 12958 12959 var i, j, ret, matched, handleObj, handlerQueue, 12960 args = new Array( arguments.length ), 12961 12962 // Make a writable jQuery.Event from the native event object 12963 event = jQuery.event.fix( nativeEvent ), 12964 12965 handlers = ( 12966 dataPriv.get( this, "events" ) || Object.create( null ) 12967 )[ event.type ] || [], 12968 special = jQuery.event.special[ event.type ] || {}; 12969 12970 // Use the fix-ed jQuery.Event rather than the (read-only) native event 12971 args[ 0 ] = event; 12972 12973 for ( i = 1; i < arguments.length; i++ ) { 12974 args[ i ] = arguments[ i ]; 12975 } 12976 12977 event.delegateTarget = this; 12978 12979 // Call the preDispatch hook for the mapped type, and let it bail if desired 12980 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 12981 return; 12982 } 12983 12984 // Determine handlers 12985 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 12986 12987 // Run delegates first; they may want to stop propagation beneath us 12988 i = 0; 12989 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 12990 event.currentTarget = matched.elem; 12991 12992 j = 0; 12993 while ( ( handleObj = matched.handlers[ j++ ] ) && 12994 !event.isImmediatePropagationStopped() ) { 12995 12996 // If the event is namespaced, then each handler is only invoked if it is 12997 // specially universal or its namespaces are a superset of the event's. 12998 if ( !event.rnamespace || handleObj.namespace === false || 12999 event.rnamespace.test( handleObj.namespace ) ) { 13000 13001 event.handleObj = handleObj; 13002 event.data = handleObj.data; 13003 13004 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 13005 handleObj.handler ).apply( matched.elem, args ); 13006 13007 if ( ret !== undefined ) { 13008 if ( ( event.result = ret ) === false ) { 13009 event.preventDefault(); 13010 event.stopPropagation(); 13011 } 13012 } 13013 } 13014 } 13015 } 13016 13017 // Call the postDispatch hook for the mapped type 13018 if ( special.postDispatch ) { 13019 special.postDispatch.call( this, event ); 13020 } 13021 13022 return event.result; 13023 }, 13024 13025 handlers: function( event, handlers ) { 13026 var i, handleObj, sel, matchedHandlers, matchedSelectors, 13027 handlerQueue = [], 13028 delegateCount = handlers.delegateCount, 13029 cur = event.target; 13030 13031 // Find delegate handlers 13032 if ( delegateCount && 13033 13034 // Support: IE <=9 13035 // Black-hole SVG <use> instance trees (trac-13180) 13036 cur.nodeType && 13037 13038 // Support: Firefox <=42 13039 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 13040 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 13041 // Support: IE 11 only 13042 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 13043 !( event.type === "click" && event.button >= 1 ) ) { 13044 13045 for ( ; cur !== this; cur = cur.parentNode || this ) { 13046 13047 // Don't check non-elements (trac-13208) 13048 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 13049 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 13050 matchedHandlers = []; 13051 matchedSelectors = {}; 13052 for ( i = 0; i < delegateCount; i++ ) { 13053 handleObj = handlers[ i ]; 13054 13055 // Don't conflict with Object.prototype properties (trac-13203) 13056 sel = handleObj.selector + " "; 13057 13058 if ( matchedSelectors[ sel ] === undefined ) { 13059 matchedSelectors[ sel ] = handleObj.needsContext ? 13060 jQuery( sel, this ).index( cur ) > -1 : 13061 jQuery.find( sel, this, null, [ cur ] ).length; 13062 } 13063 if ( matchedSelectors[ sel ] ) { 13064 matchedHandlers.push( handleObj ); 13065 } 13066 } 13067 if ( matchedHandlers.length ) { 13068 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 13069 } 13070 } 13071 } 13072 } 13073 13074 // Add the remaining (directly-bound) handlers 13075 cur = this; 13076 if ( delegateCount < handlers.length ) { 13077 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 13078 } 13079 13080 return handlerQueue; 13081 }, 13082 13083 addProp: function( name, hook ) { 13084 Object.defineProperty( jQuery.Event.prototype, name, { 13085 enumerable: true, 13086 configurable: true, 13087 13088 get: isFunction( hook ) ? 13089 function() { 13090 if ( this.originalEvent ) { 13091 return hook( this.originalEvent ); 13092 } 13093 } : 13094 function() { 13095 if ( this.originalEvent ) { 13096 return this.originalEvent[ name ]; 13097 } 13098 }, 13099 13100 set: function( value ) { 13101 Object.defineProperty( this, name, { 13102 enumerable: true, 13103 configurable: true, 13104 writable: true, 13105 value: value 13106 } ); 13107 } 13108 } ); 13109 }, 13110 13111 fix: function( originalEvent ) { 13112 return originalEvent[ jQuery.expando ] ? 13113 originalEvent : 13114 new jQuery.Event( originalEvent ); 13115 }, 13116 13117 special: { 13118 load: { 13119 13120 // Prevent triggered image.load events from bubbling to window.load 13121 noBubble: true 13122 }, 13123 click: { 13124 13125 // Utilize native event to ensure correct state for checkable inputs 13126 setup: function( data ) { 13127 13128 // For mutual compressibility with _default, replace `this` access with a local var. 13129 // `|| data` is dead code meant only to preserve the variable through minification. 13130 var el = this || data; 13131 13132 // Claim the first handler 13133 if ( rcheckableType.test( el.type ) && 13134 el.click && nodeName( el, "input" ) ) { 13135 13136 // dataPriv.set( el, "click", ... ) 13137 leverageNative( el, "click", true ); 13138 } 13139 13140 // Return false to allow normal processing in the caller 13141 return false; 13142 }, 13143 trigger: function( data ) { 13144 13145 // For mutual compressibility with _default, replace `this` access with a local var. 13146 // `|| data` is dead code meant only to preserve the variable through minification. 13147 var el = this || data; 13148 13149 // Force setup before triggering a click 13150 if ( rcheckableType.test( el.type ) && 13151 el.click && nodeName( el, "input" ) ) { 13152 13153 leverageNative( el, "click" ); 13154 } 13155 13156 // Return non-false to allow normal event-path propagation 13157 return true; 13158 }, 13159 13160 // For cross-browser consistency, suppress native .click() on links 13161 // Also prevent it if we're currently inside a leveraged native-event stack 13162 _default: function( event ) { 13163 var target = event.target; 13164 return rcheckableType.test( target.type ) && 13165 target.click && nodeName( target, "input" ) && 13166 dataPriv.get( target, "click" ) || 13167 nodeName( target, "a" ); 13168 } 13169 }, 13170 13171 beforeunload: { 13172 postDispatch: function( event ) { 13173 13174 // Support: Firefox 20+ 13175 // Firefox doesn't alert if the returnValue field is not set. 13176 if ( event.result !== undefined && event.originalEvent ) { 13177 event.originalEvent.returnValue = event.result; 13178 } 13179 } 13180 } 13181 } 13182}; 13183 13184// Ensure the presence of an event listener that handles manually-triggered 13185// synthetic events by interrupting progress until reinvoked in response to 13186// *native* events that it fires directly, ensuring that state changes have 13187// already occurred before other listeners are invoked. 13188function leverageNative( el, type, isSetup ) { 13189 13190 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 13191 if ( !isSetup ) { 13192 if ( dataPriv.get( el, type ) === undefined ) { 13193 jQuery.event.add( el, type, returnTrue ); 13194 } 13195 return; 13196 } 13197 13198 // Register the controller as a special universal handler for all event namespaces 13199 dataPriv.set( el, type, false ); 13200 jQuery.event.add( el, type, { 13201 namespace: false, 13202 handler: function( event ) { 13203 var result, 13204 saved = dataPriv.get( this, type ); 13205 13206 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 13207 13208 // Interrupt processing of the outer synthetic .trigger()ed event 13209 if ( !saved ) { 13210 13211 // Store arguments for use when handling the inner native event 13212 // There will always be at least one argument (an event object), so this array 13213 // will not be confused with a leftover capture object. 13214 saved = slice.call( arguments ); 13215 dataPriv.set( this, type, saved ); 13216 13217 // Trigger the native event and capture its result 13218 this[ type ](); 13219 result = dataPriv.get( this, type ); 13220 dataPriv.set( this, type, false ); 13221 13222 if ( saved !== result ) { 13223 13224 // Cancel the outer synthetic event 13225 event.stopImmediatePropagation(); 13226 event.preventDefault(); 13227 13228 return result; 13229 } 13230 13231 // If this is an inner synthetic event for an event with a bubbling surrogate 13232 // (focus or blur), assume that the surrogate already propagated from triggering 13233 // the native event and prevent that from happening again here. 13234 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 13235 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 13236 // less bad than duplication. 13237 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 13238 event.stopPropagation(); 13239 } 13240 13241 // If this is a native event triggered above, everything is now in order 13242 // Fire an inner synthetic event with the original arguments 13243 } else if ( saved ) { 13244 13245 // ...and capture the result 13246 dataPriv.set( this, type, jQuery.event.trigger( 13247 saved[ 0 ], 13248 saved.slice( 1 ), 13249 this 13250 ) ); 13251 13252 // Abort handling of the native event by all jQuery handlers while allowing 13253 // native handlers on the same element to run. On target, this is achieved 13254 // by stopping immediate propagation just on the jQuery event. However, 13255 // the native event is re-wrapped by a jQuery one on each level of the 13256 // propagation so the only way to stop it for jQuery is to stop it for 13257 // everyone via native `stopPropagation()`. This is not a problem for 13258 // focus/blur which don't bubble, but it does also stop click on checkboxes 13259 // and radios. We accept this limitation. 13260 event.stopPropagation(); 13261 event.isImmediatePropagationStopped = returnTrue; 13262 } 13263 } 13264 } ); 13265} 13266 13267jQuery.removeEvent = function( elem, type, handle ) { 13268 13269 // This "if" is needed for plain objects 13270 if ( elem.removeEventListener ) { 13271 elem.removeEventListener( type, handle ); 13272 } 13273}; 13274 13275jQuery.Event = function( src, props ) { 13276 13277 // Allow instantiation without the 'new' keyword 13278 if ( !( this instanceof jQuery.Event ) ) { 13279 return new jQuery.Event( src, props ); 13280 } 13281 13282 // Event object 13283 if ( src && src.type ) { 13284 this.originalEvent = src; 13285 this.type = src.type; 13286 13287 // Events bubbling up the document may have been marked as prevented 13288 // by a handler lower down the tree; reflect the correct value. 13289 this.isDefaultPrevented = src.defaultPrevented || 13290 src.defaultPrevented === undefined && 13291 13292 // Support: Android <=2.3 only 13293 src.returnValue === false ? 13294 returnTrue : 13295 returnFalse; 13296 13297 // Create target properties 13298 // Support: Safari <=6 - 7 only 13299 // Target should not be a text node (trac-504, trac-13143) 13300 this.target = ( src.target && src.target.nodeType === 3 ) ? 13301 src.target.parentNode : 13302 src.target; 13303 13304 this.currentTarget = src.currentTarget; 13305 this.relatedTarget = src.relatedTarget; 13306 13307 // Event type 13308 } else { 13309 this.type = src; 13310 } 13311 13312 // Put explicitly provided properties onto the event object 13313 if ( props ) { 13314 jQuery.extend( this, props ); 13315 } 13316 13317 // Create a timestamp if incoming event doesn't have one 13318 this.timeStamp = src && src.timeStamp || Date.now(); 13319 13320 // Mark it as fixed 13321 this[ jQuery.expando ] = true; 13322}; 13323 13324// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 13325// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 13326jQuery.Event.prototype = { 13327 constructor: jQuery.Event, 13328 isDefaultPrevented: returnFalse, 13329 isPropagationStopped: returnFalse, 13330 isImmediatePropagationStopped: returnFalse, 13331 isSimulated: false, 13332 13333 preventDefault: function() { 13334 var e = this.originalEvent; 13335 13336 this.isDefaultPrevented = returnTrue; 13337 13338 if ( e && !this.isSimulated ) { 13339 e.preventDefault(); 13340 } 13341 }, 13342 stopPropagation: function() { 13343 var e = this.originalEvent; 13344 13345 this.isPropagationStopped = returnTrue; 13346 13347 if ( e && !this.isSimulated ) { 13348 e.stopPropagation(); 13349 } 13350 }, 13351 stopImmediatePropagation: function() { 13352 var e = this.originalEvent; 13353 13354 this.isImmediatePropagationStopped = returnTrue; 13355 13356 if ( e && !this.isSimulated ) { 13357 e.stopImmediatePropagation(); 13358 } 13359 13360 this.stopPropagation(); 13361 } 13362}; 13363 13364// Includes all common event props including KeyEvent and MouseEvent specific props 13365jQuery.each( { 13366 altKey: true, 13367 bubbles: true, 13368 cancelable: true, 13369 changedTouches: true, 13370 ctrlKey: true, 13371 detail: true, 13372 eventPhase: true, 13373 metaKey: true, 13374 pageX: true, 13375 pageY: true, 13376 shiftKey: true, 13377 view: true, 13378 "char": true, 13379 code: true, 13380 charCode: true, 13381 key: true, 13382 keyCode: true, 13383 button: true, 13384 buttons: true, 13385 clientX: true, 13386 clientY: true, 13387 offsetX: true, 13388 offsetY: true, 13389 pointerId: true, 13390 pointerType: true, 13391 screenX: true, 13392 screenY: true, 13393 targetTouches: true, 13394 toElement: true, 13395 touches: true, 13396 which: true 13397}, jQuery.event.addProp ); 13398 13399jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 13400 13401 function focusMappedHandler( nativeEvent ) { 13402 if ( document.documentMode ) { 13403 13404 // Support: IE 11+ 13405 // Attach a single focusin/focusout handler on the document while someone wants 13406 // focus/blur. This is because the former are synchronous in IE while the latter 13407 // are async. In other browsers, all those handlers are invoked synchronously. 13408 13409 // `handle` from private data would already wrap the event, but we need 13410 // to change the `type` here. 13411 var handle = dataPriv.get( this, "handle" ), 13412 event = jQuery.event.fix( nativeEvent ); 13413 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 13414 event.isSimulated = true; 13415 13416 // First, handle focusin/focusout 13417 handle( nativeEvent ); 13418 13419 // ...then, handle focus/blur 13420 // 13421 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 13422 // invoking the handler at the lower level. 13423 if ( event.target === event.currentTarget ) { 13424 13425 // The setup part calls `leverageNative`, which, in turn, calls 13426 // `jQuery.event.add`, so event handle will already have been set 13427 // by this point. 13428 handle( event ); 13429 } 13430 } else { 13431 13432 // For non-IE browsers, attach a single capturing handler on the document 13433 // while someone wants focusin/focusout. 13434 jQuery.event.simulate( delegateType, nativeEvent.target, 13435 jQuery.event.fix( nativeEvent ) ); 13436 } 13437 } 13438 13439 jQuery.event.special[ type ] = { 13440 13441 // Utilize native event if possible so blur/focus sequence is correct 13442 setup: function() { 13443 13444 var attaches; 13445 13446 // Claim the first handler 13447 // dataPriv.set( this, "focus", ... ) 13448 // dataPriv.set( this, "blur", ... ) 13449 leverageNative( this, type, true ); 13450 13451 if ( document.documentMode ) { 13452 13453 // Support: IE 9 - 11+ 13454 // We use the same native handler for focusin & focus (and focusout & blur) 13455 // so we need to coordinate setup & teardown parts between those events. 13456 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 13457 attaches = dataPriv.get( this, delegateType ); 13458 if ( !attaches ) { 13459 this.addEventListener( delegateType, focusMappedHandler ); 13460 } 13461 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 13462 } else { 13463 13464 // Return false to allow normal processing in the caller 13465 return false; 13466 } 13467 }, 13468 trigger: function() { 13469 13470 // Force setup before trigger 13471 leverageNative( this, type ); 13472 13473 // Return non-false to allow normal event-path propagation 13474 return true; 13475 }, 13476 13477 teardown: function() { 13478 var attaches; 13479 13480 if ( document.documentMode ) { 13481 attaches = dataPriv.get( this, delegateType ) - 1; 13482 if ( !attaches ) { 13483 this.removeEventListener( delegateType, focusMappedHandler ); 13484 dataPriv.remove( this, delegateType ); 13485 } else { 13486 dataPriv.set( this, delegateType, attaches ); 13487 } 13488 } else { 13489 13490 // Return false to indicate standard teardown should be applied 13491 return false; 13492 } 13493 }, 13494 13495 // Suppress native focus or blur if we're currently inside 13496 // a leveraged native-event stack 13497 _default: function( event ) { 13498 return dataPriv.get( event.target, type ); 13499 }, 13500 13501 delegateType: delegateType 13502 }; 13503 13504 // Support: Firefox <=44 13505 // Firefox doesn't have focus(in | out) events 13506 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 13507 // 13508 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 13509 // focus(in | out) events fire after focus & blur events, 13510 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 13511 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 13512 // 13513 // Support: IE 9 - 11+ 13514 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 13515 // attach a single handler for both events in IE. 13516 jQuery.event.special[ delegateType ] = { 13517 setup: function() { 13518 13519 // Handle: regular nodes (via `this.ownerDocument`), window 13520 // (via `this.document`) & document (via `this`). 13521 var doc = this.ownerDocument || this.document || this, 13522 dataHolder = document.documentMode ? this : doc, 13523 attaches = dataPriv.get( dataHolder, delegateType ); 13524 13525 // Support: IE 9 - 11+ 13526 // We use the same native handler for focusin & focus (and focusout & blur) 13527 // so we need to coordinate setup & teardown parts between those events. 13528 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 13529 if ( !attaches ) { 13530 if ( document.documentMode ) { 13531 this.addEventListener( delegateType, focusMappedHandler ); 13532 } else { 13533 doc.addEventListener( type, focusMappedHandler, true ); 13534 } 13535 } 13536 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 13537 }, 13538 teardown: function() { 13539 var doc = this.ownerDocument || this.document || this, 13540 dataHolder = document.documentMode ? this : doc, 13541 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 13542 13543 if ( !attaches ) { 13544 if ( document.documentMode ) { 13545 this.removeEventListener( delegateType, focusMappedHandler ); 13546 } else { 13547 doc.removeEventListener( type, focusMappedHandler, true ); 13548 } 13549 dataPriv.remove( dataHolder, delegateType ); 13550 } else { 13551 dataPriv.set( dataHolder, delegateType, attaches ); 13552 } 13553 } 13554 }; 13555} ); 13556 13557// Create mouseenter/leave events using mouseover/out and event-time checks 13558// so that event delegation works in jQuery. 13559// Do the same for pointerenter/pointerleave and pointerover/pointerout 13560// 13561// Support: Safari 7 only 13562// Safari sends mouseenter too often; see: 13563// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 13564// for the description of the bug (it existed in older Chrome versions as well). 13565jQuery.each( { 13566 mouseenter: "mouseover", 13567 mouseleave: "mouseout", 13568 pointerenter: "pointerover", 13569 pointerleave: "pointerout" 13570}, function( orig, fix ) { 13571 jQuery.event.special[ orig ] = { 13572 delegateType: fix, 13573 bindType: fix, 13574 13575 handle: function( event ) { 13576 var ret, 13577 target = this, 13578 related = event.relatedTarget, 13579 handleObj = event.handleObj; 13580 13581 // For mouseenter/leave call the handler if related is outside the target. 13582 // NB: No relatedTarget if the mouse left/entered the browser window 13583 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 13584 event.type = handleObj.origType; 13585 ret = handleObj.handler.apply( this, arguments ); 13586 event.type = fix; 13587 } 13588 return ret; 13589 } 13590 }; 13591} ); 13592 13593jQuery.fn.extend( { 13594 13595 on: function( types, selector, data, fn ) { 13596 return on( this, types, selector, data, fn ); 13597 }, 13598 one: function( types, selector, data, fn ) { 13599 return on( this, types, selector, data, fn, 1 ); 13600 }, 13601 off: function( types, selector, fn ) { 13602 var handleObj, type; 13603 if ( types && types.preventDefault && types.handleObj ) { 13604 13605 // ( event ) dispatched jQuery.Event 13606 handleObj = types.handleObj; 13607 jQuery( types.delegateTarget ).off( 13608 handleObj.namespace ? 13609 handleObj.origType + "." + handleObj.namespace : 13610 handleObj.origType, 13611 handleObj.selector, 13612 handleObj.handler 13613 ); 13614 return this; 13615 } 13616 if ( typeof types === "object" ) { 13617 13618 // ( types-object [, selector] ) 13619 for ( type in types ) { 13620 this.off( type, selector, types[ type ] ); 13621 } 13622 return this; 13623 } 13624 if ( selector === false || typeof selector === "function" ) { 13625 13626 // ( types [, fn] ) 13627 fn = selector; 13628 selector = undefined; 13629 } 13630 if ( fn === false ) { 13631 fn = returnFalse; 13632 } 13633 return this.each( function() { 13634 jQuery.event.remove( this, types, fn, selector ); 13635 } ); 13636 } 13637} ); 13638 13639 13640var 13641 13642 // Support: IE <=10 - 11, Edge 12 - 13 only 13643 // In IE/Edge using regex groups here causes severe slowdowns. 13644 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 13645 rnoInnerhtml = /<script|<style|<link/i, 13646 13647 // checked="checked" or checked 13648 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 13649 13650 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 13651 13652// Prefer a tbody over its parent table for containing new rows 13653function manipulationTarget( elem, content ) { 13654 if ( nodeName( elem, "table" ) && 13655 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 13656 13657 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 13658 } 13659 13660 return elem; 13661} 13662 13663// Replace/restore the type attribute of script elements for safe DOM manipulation 13664function disableScript( elem ) { 13665 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 13666 return elem; 13667} 13668function restoreScript( elem ) { 13669 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 13670 elem.type = elem.type.slice( 5 ); 13671 } else { 13672 elem.removeAttribute( "type" ); 13673 } 13674 13675 return elem; 13676} 13677 13678function cloneCopyEvent( src, dest ) { 13679 var i, l, type, pdataOld, udataOld, udataCur, events; 13680 13681 if ( dest.nodeType !== 1 ) { 13682 return; 13683 } 13684 13685 // 1. Copy private data: events, handlers, etc. 13686 if ( dataPriv.hasData( src ) ) { 13687 pdataOld = dataPriv.get( src ); 13688 events = pdataOld.events; 13689 13690 if ( events ) { 13691 dataPriv.remove( dest, "handle events" ); 13692 13693 for ( type in events ) { 13694 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 13695 jQuery.event.add( dest, type, events[ type ][ i ] ); 13696 } 13697 } 13698 } 13699 } 13700 13701 // 2. Copy user data 13702 if ( dataUser.hasData( src ) ) { 13703 udataOld = dataUser.access( src ); 13704 udataCur = jQuery.extend( {}, udataOld ); 13705 13706 dataUser.set( dest, udataCur ); 13707 } 13708} 13709 13710// Fix IE bugs, see support tests 13711function fixInput( src, dest ) { 13712 var nodeName = dest.nodeName.toLowerCase(); 13713 13714 // Fails to persist the checked state of a cloned checkbox or radio button. 13715 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 13716 dest.checked = src.checked; 13717 13718 // Fails to return the selected option to the default selected state when cloning options 13719 } else if ( nodeName === "input" || nodeName === "textarea" ) { 13720 dest.defaultValue = src.defaultValue; 13721 } 13722} 13723 13724function domManip( collection, args, callback, ignored ) { 13725 13726 // Flatten any nested arrays 13727 args = flat( args ); 13728 13729 var fragment, first, scripts, hasScripts, node, doc, 13730 i = 0, 13731 l = collection.length, 13732 iNoClone = l - 1, 13733 value = args[ 0 ], 13734 valueIsFunction = isFunction( value ); 13735 13736 // We can't cloneNode fragments that contain checked, in WebKit 13737 if ( valueIsFunction || 13738 ( l > 1 && typeof value === "string" && 13739 !support.checkClone && rchecked.test( value ) ) ) { 13740 return collection.each( function( index ) { 13741 var self = collection.eq( index ); 13742 if ( valueIsFunction ) { 13743 args[ 0 ] = value.call( this, index, self.html() ); 13744 } 13745 domManip( self, args, callback, ignored ); 13746 } ); 13747 } 13748 13749 if ( l ) { 13750 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 13751 first = fragment.firstChild; 13752 13753 if ( fragment.childNodes.length === 1 ) { 13754 fragment = first; 13755 } 13756 13757 // Require either new content or an interest in ignored elements to invoke the callback 13758 if ( first || ignored ) { 13759 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 13760 hasScripts = scripts.length; 13761 13762 // Use the original fragment for the last item 13763 // instead of the first because it can end up 13764 // being emptied incorrectly in certain situations (trac-8070). 13765 for ( ; i < l; i++ ) { 13766 node = fragment; 13767 13768 if ( i !== iNoClone ) { 13769 node = jQuery.clone( node, true, true ); 13770 13771 // Keep references to cloned scripts for later restoration 13772 if ( hasScripts ) { 13773 13774 // Support: Android <=4.0 only, PhantomJS 1 only 13775 // push.apply(_, arraylike) throws on ancient WebKit 13776 jQuery.merge( scripts, getAll( node, "script" ) ); 13777 } 13778 } 13779 13780 callback.call( collection[ i ], node, i ); 13781 } 13782 13783 if ( hasScripts ) { 13784 doc = scripts[ scripts.length - 1 ].ownerDocument; 13785 13786 // Re-enable scripts 13787 jQuery.map( scripts, restoreScript ); 13788 13789 // Evaluate executable scripts on first document insertion 13790 for ( i = 0; i < hasScripts; i++ ) { 13791 node = scripts[ i ]; 13792 if ( rscriptType.test( node.type || "" ) && 13793 !dataPriv.access( node, "globalEval" ) && 13794 jQuery.contains( doc, node ) ) { 13795 13796 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 13797 13798 // Optional AJAX dependency, but won't run scripts if not present 13799 if ( jQuery._evalUrl && !node.noModule ) { 13800 jQuery._evalUrl( node.src, { 13801 nonce: node.nonce || node.getAttribute( "nonce" ) 13802 }, doc ); 13803 } 13804 } else { 13805 13806 // Unwrap a CDATA section containing script contents. This shouldn't be 13807 // needed as in XML documents they're already not visible when 13808 // inspecting element contents and in HTML documents they have no 13809 // meaning but we're preserving that logic for backwards compatibility. 13810 // This will be removed completely in 4.0. See gh-4904. 13811 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 13812 } 13813 } 13814 } 13815 } 13816 } 13817 } 13818 13819 return collection; 13820} 13821 13822function remove( elem, selector, keepData ) { 13823 var node, 13824 nodes = selector ? jQuery.filter( selector, elem ) : elem, 13825 i = 0; 13826 13827 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 13828 if ( !keepData && node.nodeType === 1 ) { 13829 jQuery.cleanData( getAll( node ) ); 13830 } 13831 13832 if ( node.parentNode ) { 13833 if ( keepData && isAttached( node ) ) { 13834 setGlobalEval( getAll( node, "script" ) ); 13835 } 13836 node.parentNode.removeChild( node ); 13837 } 13838 } 13839 13840 return elem; 13841} 13842 13843jQuery.extend( { 13844 htmlPrefilter: function( html ) { 13845 return html; 13846 }, 13847 13848 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 13849 var i, l, srcElements, destElements, 13850 clone = elem.cloneNode( true ), 13851 inPage = isAttached( elem ); 13852 13853 // Fix IE cloning issues 13854 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 13855 !jQuery.isXMLDoc( elem ) ) { 13856 13857 // We eschew jQuery#find here for performance reasons: 13858 // https://jsperf.com/getall-vs-sizzle/2 13859 destElements = getAll( clone ); 13860 srcElements = getAll( elem ); 13861 13862 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13863 fixInput( srcElements[ i ], destElements[ i ] ); 13864 } 13865 } 13866 13867 // Copy the events from the original to the clone 13868 if ( dataAndEvents ) { 13869 if ( deepDataAndEvents ) { 13870 srcElements = srcElements || getAll( elem ); 13871 destElements = destElements || getAll( clone ); 13872 13873 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13874 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 13875 } 13876 } else { 13877 cloneCopyEvent( elem, clone ); 13878 } 13879 } 13880 13881 // Preserve script evaluation history 13882 destElements = getAll( clone, "script" ); 13883 if ( destElements.length > 0 ) { 13884 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 13885 } 13886 13887 // Return the cloned set 13888 return clone; 13889 }, 13890 13891 cleanData: function( elems ) { 13892 var data, elem, type, 13893 special = jQuery.event.special, 13894 i = 0; 13895 13896 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 13897 if ( acceptData( elem ) ) { 13898 if ( ( data = elem[ dataPriv.expando ] ) ) { 13899 if ( data.events ) { 13900 for ( type in data.events ) { 13901 if ( special[ type ] ) { 13902 jQuery.event.remove( elem, type ); 13903 13904 // This is a shortcut to avoid jQuery.event.remove's overhead 13905 } else { 13906 jQuery.removeEvent( elem, type, data.handle ); 13907 } 13908 } 13909 } 13910 13911 // Support: Chrome <=35 - 45+ 13912 // Assign undefined instead of using delete, see Data#remove 13913 elem[ dataPriv.expando ] = undefined; 13914 } 13915 if ( elem[ dataUser.expando ] ) { 13916 13917 // Support: Chrome <=35 - 45+ 13918 // Assign undefined instead of using delete, see Data#remove 13919 elem[ dataUser.expando ] = undefined; 13920 } 13921 } 13922 } 13923 } 13924} ); 13925 13926jQuery.fn.extend( { 13927 detach: function( selector ) { 13928 return remove( this, selector, true ); 13929 }, 13930 13931 remove: function( selector ) { 13932 return remove( this, selector ); 13933 }, 13934 13935 text: function( value ) { 13936 return access( this, function( value ) { 13937 return value === undefined ? 13938 jQuery.text( this ) : 13939 this.empty().each( function() { 13940 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13941 this.textContent = value; 13942 } 13943 } ); 13944 }, null, value, arguments.length ); 13945 }, 13946 13947 append: function() { 13948 return domManip( this, arguments, function( elem ) { 13949 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13950 var target = manipulationTarget( this, elem ); 13951 target.appendChild( elem ); 13952 } 13953 } ); 13954 }, 13955 13956 prepend: function() { 13957 return domManip( this, arguments, function( elem ) { 13958 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13959 var target = manipulationTarget( this, elem ); 13960 target.insertBefore( elem, target.firstChild ); 13961 } 13962 } ); 13963 }, 13964 13965 before: function() { 13966 return domManip( this, arguments, function( elem ) { 13967 if ( this.parentNode ) { 13968 this.parentNode.insertBefore( elem, this ); 13969 } 13970 } ); 13971 }, 13972 13973 after: function() { 13974 return domManip( this, arguments, function( elem ) { 13975 if ( this.parentNode ) { 13976 this.parentNode.insertBefore( elem, this.nextSibling ); 13977 } 13978 } ); 13979 }, 13980 13981 empty: function() { 13982 var elem, 13983 i = 0; 13984 13985 for ( ; ( elem = this[ i ] ) != null; i++ ) { 13986 if ( elem.nodeType === 1 ) { 13987 13988 // Prevent memory leaks 13989 jQuery.cleanData( getAll( elem, false ) ); 13990 13991 // Remove any remaining nodes 13992 elem.textContent = ""; 13993 } 13994 } 13995 13996 return this; 13997 }, 13998 13999 clone: function( dataAndEvents, deepDataAndEvents ) { 14000 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 14001 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 14002 14003 return this.map( function() { 14004 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 14005 } ); 14006 }, 14007 14008 html: function( value ) { 14009 return access( this, function( value ) { 14010 var elem = this[ 0 ] || {}, 14011 i = 0, 14012 l = this.length; 14013 14014 if ( value === undefined && elem.nodeType === 1 ) { 14015 return elem.innerHTML; 14016 } 14017 14018 // See if we can take a shortcut and just use innerHTML 14019 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 14020 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 14021 14022 value = jQuery.htmlPrefilter( value ); 14023 14024 try { 14025 for ( ; i < l; i++ ) { 14026 elem = this[ i ] || {}; 14027 14028 // Remove element nodes and prevent memory leaks 14029 if ( elem.nodeType === 1 ) { 14030 jQuery.cleanData( getAll( elem, false ) ); 14031 elem.innerHTML = value; 14032 } 14033 } 14034 14035 elem = 0; 14036 14037 // If using innerHTML throws an exception, use the fallback method 14038 } catch ( e ) {} 14039 } 14040 14041 if ( elem ) { 14042 this.empty().append( value ); 14043 } 14044 }, null, value, arguments.length ); 14045 }, 14046 14047 replaceWith: function() { 14048 var ignored = []; 14049 14050 // Make the changes, replacing each non-ignored context element with the new content 14051 return domManip( this, arguments, function( elem ) { 14052 var parent = this.parentNode; 14053 14054 if ( jQuery.inArray( this, ignored ) < 0 ) { 14055 jQuery.cleanData( getAll( this ) ); 14056 if ( parent ) { 14057 parent.replaceChild( elem, this ); 14058 } 14059 } 14060 14061 // Force callback invocation 14062 }, ignored ); 14063 } 14064} ); 14065 14066jQuery.each( { 14067 appendTo: "append", 14068 prependTo: "prepend", 14069 insertBefore: "before", 14070 insertAfter: "after", 14071 replaceAll: "replaceWith" 14072}, function( name, original ) { 14073 jQuery.fn[ name ] = function( selector ) { 14074 var elems, 14075 ret = [], 14076 insert = jQuery( selector ), 14077 last = insert.length - 1, 14078 i = 0; 14079 14080 for ( ; i <= last; i++ ) { 14081 elems = i === last ? this : this.clone( true ); 14082 jQuery( insert[ i ] )[ original ]( elems ); 14083 14084 // Support: Android <=4.0 only, PhantomJS 1 only 14085 // .get() because push.apply(_, arraylike) throws on ancient WebKit 14086 push.apply( ret, elems.get() ); 14087 } 14088 14089 return this.pushStack( ret ); 14090 }; 14091} ); 14092var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 14093 14094var rcustomProp = /^--/; 14095 14096 14097var getStyles = function( elem ) { 14098 14099 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 14100 // IE throws on elements created in popups 14101 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 14102 var view = elem.ownerDocument.defaultView; 14103 14104 if ( !view || !view.opener ) { 14105 view = window; 14106 } 14107 14108 return view.getComputedStyle( elem ); 14109 }; 14110 14111var swap = function( elem, options, callback ) { 14112 var ret, name, 14113 old = {}; 14114 14115 // Remember the old values, and insert the new ones 14116 for ( name in options ) { 14117 old[ name ] = elem.style[ name ]; 14118 elem.style[ name ] = options[ name ]; 14119 } 14120 14121 ret = callback.call( elem ); 14122 14123 // Revert the old values 14124 for ( name in options ) { 14125 elem.style[ name ] = old[ name ]; 14126 } 14127 14128 return ret; 14129}; 14130 14131 14132var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 14133 14134 14135 14136( function() { 14137 14138 // Executing both pixelPosition & boxSizingReliable tests require only one layout 14139 // so they're executed at the same time to save the second computation. 14140 function computeStyleTests() { 14141 14142 // This is a singleton, we need to execute it only once 14143 if ( !div ) { 14144 return; 14145 } 14146 14147 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 14148 "margin-top:1px;padding:0;border:0"; 14149 div.style.cssText = 14150 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 14151 "margin:auto;border:1px;padding:1px;" + 14152 "width:60%;top:1%"; 14153 documentElement.appendChild( container ).appendChild( div ); 14154 14155 var divStyle = window.getComputedStyle( div ); 14156 pixelPositionVal = divStyle.top !== "1%"; 14157 14158 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 14159 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 14160 14161 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 14162 // Some styles come back with percentage values, even though they shouldn't 14163 div.style.right = "60%"; 14164 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 14165 14166 // Support: IE 9 - 11 only 14167 // Detect misreporting of content dimensions for box-sizing:border-box elements 14168 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 14169 14170 // Support: IE 9 only 14171 // Detect overflow:scroll screwiness (gh-3699) 14172 // Support: Chrome <=64 14173 // Don't get tricked when zoom affects offsetWidth (gh-4029) 14174 div.style.position = "absolute"; 14175 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 14176 14177 documentElement.removeChild( container ); 14178 14179 // Nullify the div so it wouldn't be stored in the memory and 14180 // it will also be a sign that checks already performed 14181 div = null; 14182 } 14183 14184 function roundPixelMeasures( measure ) { 14185 return Math.round( parseFloat( measure ) ); 14186 } 14187 14188 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 14189 reliableTrDimensionsVal, reliableMarginLeftVal, 14190 container = document.createElement( "div" ), 14191 div = document.createElement( "div" ); 14192 14193 // Finish early in limited (non-browser) environments 14194 if ( !div.style ) { 14195 return; 14196 } 14197 14198 // Support: IE <=9 - 11 only 14199 // Style of cloned element affects source element cloned (trac-8908) 14200 div.style.backgroundClip = "content-box"; 14201 div.cloneNode( true ).style.backgroundClip = ""; 14202 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 14203 14204 jQuery.extend( support, { 14205 boxSizingReliable: function() { 14206 computeStyleTests(); 14207 return boxSizingReliableVal; 14208 }, 14209 pixelBoxStyles: function() { 14210 computeStyleTests(); 14211 return pixelBoxStylesVal; 14212 }, 14213 pixelPosition: function() { 14214 computeStyleTests(); 14215 return pixelPositionVal; 14216 }, 14217 reliableMarginLeft: function() { 14218 computeStyleTests(); 14219 return reliableMarginLeftVal; 14220 }, 14221 scrollboxSize: function() { 14222 computeStyleTests(); 14223 return scrollboxSizeVal; 14224 }, 14225 14226 // Support: IE 9 - 11+, Edge 15 - 18+ 14227 // IE/Edge misreport `getComputedStyle` of table rows with width/height 14228 // set in CSS while `offset*` properties report correct values. 14229 // Behavior in IE 9 is more subtle than in newer versions & it passes 14230 // some versions of this test; make sure not to make it pass there! 14231 // 14232 // Support: Firefox 70+ 14233 // Only Firefox includes border widths 14234 // in computed dimensions. (gh-4529) 14235 reliableTrDimensions: function() { 14236 var table, tr, trChild, trStyle; 14237 if ( reliableTrDimensionsVal == null ) { 14238 table = document.createElement( "table" ); 14239 tr = document.createElement( "tr" ); 14240 trChild = document.createElement( "div" ); 14241 14242 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 14243 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 14244 14245 // Support: Chrome 86+ 14246 // Height set through cssText does not get applied. 14247 // Computed height then comes back as 0. 14248 tr.style.height = "1px"; 14249 trChild.style.height = "9px"; 14250 14251 // Support: Android 8 Chrome 86+ 14252 // In our bodyBackground.html iframe, 14253 // display for all div elements is set to "inline", 14254 // which causes a problem only in Android 8 Chrome 86. 14255 // Ensuring the div is `display: block` 14256 // gets around this issue. 14257 trChild.style.display = "block"; 14258 14259 documentElement 14260 .appendChild( table ) 14261 .appendChild( tr ) 14262 .appendChild( trChild ); 14263 14264 trStyle = window.getComputedStyle( tr ); 14265 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 14266 parseInt( trStyle.borderTopWidth, 10 ) + 14267 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 14268 14269 documentElement.removeChild( table ); 14270 } 14271 return reliableTrDimensionsVal; 14272 } 14273 } ); 14274} )(); 14275 14276 14277function curCSS( elem, name, computed ) { 14278 var width, minWidth, maxWidth, ret, 14279 isCustomProp = rcustomProp.test( name ), 14280 14281 // Support: Firefox 51+ 14282 // Retrieving style before computed somehow 14283 // fixes an issue with getting wrong values 14284 // on detached elements 14285 style = elem.style; 14286 14287 computed = computed || getStyles( elem ); 14288 14289 // getPropertyValue is needed for: 14290 // .css('filter') (IE 9 only, trac-12537) 14291 // .css('--customProperty) (gh-3144) 14292 if ( computed ) { 14293 14294 // Support: IE <=9 - 11+ 14295 // IE only supports `"float"` in `getPropertyValue`; in computed styles 14296 // it's only available as `"cssFloat"`. We no longer modify properties 14297 // sent to `.css()` apart from camelCasing, so we need to check both. 14298 // Normally, this would create difference in behavior: if 14299 // `getPropertyValue` returns an empty string, the value returned 14300 // by `.css()` would be `undefined`. This is usually the case for 14301 // disconnected elements. However, in IE even disconnected elements 14302 // with no styles return `"none"` for `getPropertyValue( "float" )` 14303 ret = computed.getPropertyValue( name ) || computed[ name ]; 14304 14305 if ( isCustomProp && ret ) { 14306 14307 // Support: Firefox 105+, Chrome <=105+ 14308 // Spec requires trimming whitespace for custom properties (gh-4926). 14309 // Firefox only trims leading whitespace. Chrome just collapses 14310 // both leading & trailing whitespace to a single space. 14311 // 14312 // Fall back to `undefined` if empty string returned. 14313 // This collapses a missing definition with property defined 14314 // and set to an empty string but there's no standard API 14315 // allowing us to differentiate them without a performance penalty 14316 // and returning `undefined` aligns with older jQuery. 14317 // 14318 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 14319 // as whitespace while CSS does not, but this is not a problem 14320 // because CSS preprocessing replaces them with U+000A LINE FEED 14321 // (which *is* CSS whitespace) 14322 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 14323 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 14324 } 14325 14326 if ( ret === "" && !isAttached( elem ) ) { 14327 ret = jQuery.style( elem, name ); 14328 } 14329 14330 // A tribute to the "awesome hack by Dean Edwards" 14331 // Android Browser returns percentage for some values, 14332 // but width seems to be reliably pixels. 14333 // This is against the CSSOM draft spec: 14334 // https://drafts.csswg.org/cssom/#resolved-values 14335 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 14336 14337 // Remember the original values 14338 width = style.width; 14339 minWidth = style.minWidth; 14340 maxWidth = style.maxWidth; 14341 14342 // Put in the new values to get a computed value out 14343 style.minWidth = style.maxWidth = style.width = ret; 14344 ret = computed.width; 14345 14346 // Revert the changed values 14347 style.width = width; 14348 style.minWidth = minWidth; 14349 style.maxWidth = maxWidth; 14350 } 14351 } 14352 14353 return ret !== undefined ? 14354 14355 // Support: IE <=9 - 11 only 14356 // IE returns zIndex value as an integer. 14357 ret + "" : 14358 ret; 14359} 14360 14361 14362function addGetHookIf( conditionFn, hookFn ) { 14363 14364 // Define the hook, we'll check on the first run if it's really needed. 14365 return { 14366 get: function() { 14367 if ( conditionFn() ) { 14368 14369 // Hook not needed (or it's not possible to use it due 14370 // to missing dependency), remove it. 14371 delete this.get; 14372 return; 14373 } 14374 14375 // Hook needed; redefine it so that the support test is not executed again. 14376 return ( this.get = hookFn ).apply( this, arguments ); 14377 } 14378 }; 14379} 14380 14381 14382var cssPrefixes = [ "Webkit", "Moz", "ms" ], 14383 emptyStyle = document.createElement( "div" ).style, 14384 vendorProps = {}; 14385 14386// Return a vendor-prefixed property or undefined 14387function vendorPropName( name ) { 14388 14389 // Check for vendor prefixed names 14390 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 14391 i = cssPrefixes.length; 14392 14393 while ( i-- ) { 14394 name = cssPrefixes[ i ] + capName; 14395 if ( name in emptyStyle ) { 14396 return name; 14397 } 14398 } 14399} 14400 14401// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 14402function finalPropName( name ) { 14403 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 14404 14405 if ( final ) { 14406 return final; 14407 } 14408 if ( name in emptyStyle ) { 14409 return name; 14410 } 14411 return vendorProps[ name ] = vendorPropName( name ) || name; 14412} 14413 14414 14415var 14416 14417 // Swappable if display is none or starts with table 14418 // except "table", "table-cell", or "table-caption" 14419 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 14420 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 14421 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 14422 cssNormalTransform = { 14423 letterSpacing: "0", 14424 fontWeight: "400" 14425 }; 14426 14427function setPositiveNumber( _elem, value, subtract ) { 14428 14429 // Any relative (+/-) values have already been 14430 // normalized at this point 14431 var matches = rcssNum.exec( value ); 14432 return matches ? 14433 14434 // Guard against undefined "subtract", e.g., when used as in cssHooks 14435 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 14436 value; 14437} 14438 14439function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 14440 var i = dimension === "width" ? 1 : 0, 14441 extra = 0, 14442 delta = 0, 14443 marginDelta = 0; 14444 14445 // Adjustment may not be necessary 14446 if ( box === ( isBorderBox ? "border" : "content" ) ) { 14447 return 0; 14448 } 14449 14450 for ( ; i < 4; i += 2 ) { 14451 14452 // Both box models exclude margin 14453 // Count margin delta separately to only add it after scroll gutter adjustment. 14454 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 14455 if ( box === "margin" ) { 14456 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 14457 } 14458 14459 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 14460 if ( !isBorderBox ) { 14461 14462 // Add padding 14463 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 14464 14465 // For "border" or "margin", add border 14466 if ( box !== "padding" ) { 14467 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14468 14469 // But still keep track of it otherwise 14470 } else { 14471 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14472 } 14473 14474 // If we get here with a border-box (content + padding + border), we're seeking "content" or 14475 // "padding" or "margin" 14476 } else { 14477 14478 // For "content", subtract padding 14479 if ( box === "content" ) { 14480 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 14481 } 14482 14483 // For "content" or "padding", subtract border 14484 if ( box !== "margin" ) { 14485 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14486 } 14487 } 14488 } 14489 14490 // Account for positive content-box scroll gutter when requested by providing computedVal 14491 if ( !isBorderBox && computedVal >= 0 ) { 14492 14493 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 14494 // Assuming integer scroll gutter, subtract the rest and round down 14495 delta += Math.max( 0, Math.ceil( 14496 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 14497 computedVal - 14498 delta - 14499 extra - 14500 0.5 14501 14502 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 14503 // Use an explicit zero to avoid NaN (gh-3964) 14504 ) ) || 0; 14505 } 14506 14507 return delta + marginDelta; 14508} 14509 14510function getWidthOrHeight( elem, dimension, extra ) { 14511 14512 // Start with computed style 14513 var styles = getStyles( elem ), 14514 14515 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 14516 // Fake content-box until we know it's needed to know the true value. 14517 boxSizingNeeded = !support.boxSizingReliable() || extra, 14518 isBorderBox = boxSizingNeeded && 14519 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 14520 valueIsBorderBox = isBorderBox, 14521 14522 val = curCSS( elem, dimension, styles ), 14523 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 14524 14525 // Support: Firefox <=54 14526 // Return a confounding non-pixel value or feign ignorance, as appropriate. 14527 if ( rnumnonpx.test( val ) ) { 14528 if ( !extra ) { 14529 return val; 14530 } 14531 val = "auto"; 14532 } 14533 14534 14535 // Support: IE 9 - 11 only 14536 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 14537 // In those cases, the computed value can be trusted to be border-box. 14538 if ( ( !support.boxSizingReliable() && isBorderBox || 14539 14540 // Support: IE 10 - 11+, Edge 15 - 18+ 14541 // IE/Edge misreport `getComputedStyle` of table rows with width/height 14542 // set in CSS while `offset*` properties report correct values. 14543 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 14544 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 14545 14546 // Fall back to offsetWidth/offsetHeight when value is "auto" 14547 // This happens for inline elements with no explicit setting (gh-3571) 14548 val === "auto" || 14549 14550 // Support: Android <=4.1 - 4.3 only 14551 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 14552 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 14553 14554 // Make sure the element is visible & connected 14555 elem.getClientRects().length ) { 14556 14557 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 14558 14559 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 14560 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 14561 // retrieved value as a content box dimension. 14562 valueIsBorderBox = offsetProp in elem; 14563 if ( valueIsBorderBox ) { 14564 val = elem[ offsetProp ]; 14565 } 14566 } 14567 14568 // Normalize "" and auto 14569 val = parseFloat( val ) || 0; 14570 14571 // Adjust for the element's box model 14572 return ( val + 14573 boxModelAdjustment( 14574 elem, 14575 dimension, 14576 extra || ( isBorderBox ? "border" : "content" ), 14577 valueIsBorderBox, 14578 styles, 14579 14580 // Provide the current computed size to request scroll gutter calculation (gh-3589) 14581 val 14582 ) 14583 ) + "px"; 14584} 14585 14586jQuery.extend( { 14587 14588 // Add in style property hooks for overriding the default 14589 // behavior of getting and setting a style property 14590 cssHooks: { 14591 opacity: { 14592 get: function( elem, computed ) { 14593 if ( computed ) { 14594 14595 // We should always get a number back from opacity 14596 var ret = curCSS( elem, "opacity" ); 14597 return ret === "" ? "1" : ret; 14598 } 14599 } 14600 } 14601 }, 14602 14603 // Don't automatically add "px" to these possibly-unitless properties 14604 cssNumber: { 14605 animationIterationCount: true, 14606 aspectRatio: true, 14607 borderImageSlice: true, 14608 columnCount: true, 14609 flexGrow: true, 14610 flexShrink: true, 14611 fontWeight: true, 14612 gridArea: true, 14613 gridColumn: true, 14614 gridColumnEnd: true, 14615 gridColumnStart: true, 14616 gridRow: true, 14617 gridRowEnd: true, 14618 gridRowStart: true, 14619 lineHeight: true, 14620 opacity: true, 14621 order: true, 14622 orphans: true, 14623 scale: true, 14624 widows: true, 14625 zIndex: true, 14626 zoom: true, 14627 14628 // SVG-related 14629 fillOpacity: true, 14630 floodOpacity: true, 14631 stopOpacity: true, 14632 strokeMiterlimit: true, 14633 strokeOpacity: true 14634 }, 14635 14636 // Add in properties whose names you wish to fix before 14637 // setting or getting the value 14638 cssProps: {}, 14639 14640 // Get and set the style property on a DOM Node 14641 style: function( elem, name, value, extra ) { 14642 14643 // Don't set styles on text and comment nodes 14644 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 14645 return; 14646 } 14647 14648 // Make sure that we're working with the right name 14649 var ret, type, hooks, 14650 origName = camelCase( name ), 14651 isCustomProp = rcustomProp.test( name ), 14652 style = elem.style; 14653 14654 // Make sure that we're working with the right name. We don't 14655 // want to query the value if it is a CSS custom property 14656 // since they are user-defined. 14657 if ( !isCustomProp ) { 14658 name = finalPropName( origName ); 14659 } 14660 14661 // Gets hook for the prefixed version, then unprefixed version 14662 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14663 14664 // Check if we're setting a value 14665 if ( value !== undefined ) { 14666 type = typeof value; 14667 14668 // Convert "+=" or "-=" to relative numbers (trac-7345) 14669 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 14670 value = adjustCSS( elem, name, ret ); 14671 14672 // Fixes bug trac-9237 14673 type = "number"; 14674 } 14675 14676 // Make sure that null and NaN values aren't set (trac-7116) 14677 if ( value == null || value !== value ) { 14678 return; 14679 } 14680 14681 // If a number was passed in, add the unit (except for certain CSS properties) 14682 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 14683 // "px" to a few hardcoded values. 14684 if ( type === "number" && !isCustomProp ) { 14685 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 14686 } 14687 14688 // background-* props affect original clone's values 14689 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 14690 style[ name ] = "inherit"; 14691 } 14692 14693 // If a hook was provided, use that value, otherwise just set the specified value 14694 if ( !hooks || !( "set" in hooks ) || 14695 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 14696 14697 if ( isCustomProp ) { 14698 style.setProperty( name, value ); 14699 } else { 14700 style[ name ] = value; 14701 } 14702 } 14703 14704 } else { 14705 14706 // If a hook was provided get the non-computed value from there 14707 if ( hooks && "get" in hooks && 14708 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 14709 14710 return ret; 14711 } 14712 14713 // Otherwise just get the value from the style object 14714 return style[ name ]; 14715 } 14716 }, 14717 14718 css: function( elem, name, extra, styles ) { 14719 var val, num, hooks, 14720 origName = camelCase( name ), 14721 isCustomProp = rcustomProp.test( name ); 14722 14723 // Make sure that we're working with the right name. We don't 14724 // want to modify the value if it is a CSS custom property 14725 // since they are user-defined. 14726 if ( !isCustomProp ) { 14727 name = finalPropName( origName ); 14728 } 14729 14730 // Try prefixed name followed by the unprefixed name 14731 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14732 14733 // If a hook was provided get the computed value from there 14734 if ( hooks && "get" in hooks ) { 14735 val = hooks.get( elem, true, extra ); 14736 } 14737 14738 // Otherwise, if a way to get the computed value exists, use that 14739 if ( val === undefined ) { 14740 val = curCSS( elem, name, styles ); 14741 } 14742 14743 // Convert "normal" to computed value 14744 if ( val === "normal" && name in cssNormalTransform ) { 14745 val = cssNormalTransform[ name ]; 14746 } 14747 14748 // Make numeric if forced or a qualifier was provided and val looks numeric 14749 if ( extra === "" || extra ) { 14750 num = parseFloat( val ); 14751 return extra === true || isFinite( num ) ? num || 0 : val; 14752 } 14753 14754 return val; 14755 } 14756} ); 14757 14758jQuery.each( [ "height", "width" ], function( _i, dimension ) { 14759 jQuery.cssHooks[ dimension ] = { 14760 get: function( elem, computed, extra ) { 14761 if ( computed ) { 14762 14763 // Certain elements can have dimension info if we invisibly show them 14764 // but it must have a current display style that would benefit 14765 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 14766 14767 // Support: Safari 8+ 14768 // Table columns in Safari have non-zero offsetWidth & zero 14769 // getBoundingClientRect().width unless display is changed. 14770 // Support: IE <=11 only 14771 // Running getBoundingClientRect on a disconnected node 14772 // in IE throws an error. 14773 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 14774 swap( elem, cssShow, function() { 14775 return getWidthOrHeight( elem, dimension, extra ); 14776 } ) : 14777 getWidthOrHeight( elem, dimension, extra ); 14778 } 14779 }, 14780 14781 set: function( elem, value, extra ) { 14782 var matches, 14783 styles = getStyles( elem ), 14784 14785 // Only read styles.position if the test has a chance to fail 14786 // to avoid forcing a reflow. 14787 scrollboxSizeBuggy = !support.scrollboxSize() && 14788 styles.position === "absolute", 14789 14790 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 14791 boxSizingNeeded = scrollboxSizeBuggy || extra, 14792 isBorderBox = boxSizingNeeded && 14793 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 14794 subtract = extra ? 14795 boxModelAdjustment( 14796 elem, 14797 dimension, 14798 extra, 14799 isBorderBox, 14800 styles 14801 ) : 14802 0; 14803 14804 // Account for unreliable border-box dimensions by comparing offset* to computed and 14805 // faking a content-box to get border and padding (gh-3699) 14806 if ( isBorderBox && scrollboxSizeBuggy ) { 14807 subtract -= Math.ceil( 14808 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 14809 parseFloat( styles[ dimension ] ) - 14810 boxModelAdjustment( elem, dimension, "border", false, styles ) - 14811 0.5 14812 ); 14813 } 14814 14815 // Convert to pixels if value adjustment is needed 14816 if ( subtract && ( matches = rcssNum.exec( value ) ) && 14817 ( matches[ 3 ] || "px" ) !== "px" ) { 14818 14819 elem.style[ dimension ] = value; 14820 value = jQuery.css( elem, dimension ); 14821 } 14822 14823 return setPositiveNumber( elem, value, subtract ); 14824 } 14825 }; 14826} ); 14827 14828jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 14829 function( elem, computed ) { 14830 if ( computed ) { 14831 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 14832 elem.getBoundingClientRect().left - 14833 swap( elem, { marginLeft: 0 }, function() { 14834 return elem.getBoundingClientRect().left; 14835 } ) 14836 ) + "px"; 14837 } 14838 } 14839); 14840 14841// These hooks are used by animate to expand properties 14842jQuery.each( { 14843 margin: "", 14844 padding: "", 14845 border: "Width" 14846}, function( prefix, suffix ) { 14847 jQuery.cssHooks[ prefix + suffix ] = { 14848 expand: function( value ) { 14849 var i = 0, 14850 expanded = {}, 14851 14852 // Assumes a single number if not a string 14853 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 14854 14855 for ( ; i < 4; i++ ) { 14856 expanded[ prefix + cssExpand[ i ] + suffix ] = 14857 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 14858 } 14859 14860 return expanded; 14861 } 14862 }; 14863 14864 if ( prefix !== "margin" ) { 14865 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 14866 } 14867} ); 14868 14869jQuery.fn.extend( { 14870 css: function( name, value ) { 14871 return access( this, function( elem, name, value ) { 14872 var styles, len, 14873 map = {}, 14874 i = 0; 14875 14876 if ( Array.isArray( name ) ) { 14877 styles = getStyles( elem ); 14878 len = name.length; 14879 14880 for ( ; i < len; i++ ) { 14881 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 14882 } 14883 14884 return map; 14885 } 14886 14887 return value !== undefined ? 14888 jQuery.style( elem, name, value ) : 14889 jQuery.css( elem, name ); 14890 }, name, value, arguments.length > 1 ); 14891 } 14892} ); 14893 14894 14895function Tween( elem, options, prop, end, easing ) { 14896 return new Tween.prototype.init( elem, options, prop, end, easing ); 14897} 14898jQuery.Tween = Tween; 14899 14900Tween.prototype = { 14901 constructor: Tween, 14902 init: function( elem, options, prop, end, easing, unit ) { 14903 this.elem = elem; 14904 this.prop = prop; 14905 this.easing = easing || jQuery.easing._default; 14906 this.options = options; 14907 this.start = this.now = this.cur(); 14908 this.end = end; 14909 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 14910 }, 14911 cur: function() { 14912 var hooks = Tween.propHooks[ this.prop ]; 14913 14914 return hooks && hooks.get ? 14915 hooks.get( this ) : 14916 Tween.propHooks._default.get( this ); 14917 }, 14918 run: function( percent ) { 14919 var eased, 14920 hooks = Tween.propHooks[ this.prop ]; 14921 14922 if ( this.options.duration ) { 14923 this.pos = eased = jQuery.easing[ this.easing ]( 14924 percent, this.options.duration * percent, 0, 1, this.options.duration 14925 ); 14926 } else { 14927 this.pos = eased = percent; 14928 } 14929 this.now = ( this.end - this.start ) * eased + this.start; 14930 14931 if ( this.options.step ) { 14932 this.options.step.call( this.elem, this.now, this ); 14933 } 14934 14935 if ( hooks && hooks.set ) { 14936 hooks.set( this ); 14937 } else { 14938 Tween.propHooks._default.set( this ); 14939 } 14940 return this; 14941 } 14942}; 14943 14944Tween.prototype.init.prototype = Tween.prototype; 14945 14946Tween.propHooks = { 14947 _default: { 14948 get: function( tween ) { 14949 var result; 14950 14951 // Use a property on the element directly when it is not a DOM element, 14952 // or when there is no matching style property that exists. 14953 if ( tween.elem.nodeType !== 1 || 14954 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 14955 return tween.elem[ tween.prop ]; 14956 } 14957 14958 // Passing an empty string as a 3rd parameter to .css will automatically 14959 // attempt a parseFloat and fallback to a string if the parse fails. 14960 // Simple values such as "10px" are parsed to Float; 14961 // complex values such as "rotate(1rad)" are returned as-is. 14962 result = jQuery.css( tween.elem, tween.prop, "" ); 14963 14964 // Empty strings, null, undefined and "auto" are converted to 0. 14965 return !result || result === "auto" ? 0 : result; 14966 }, 14967 set: function( tween ) { 14968 14969 // Use step hook for back compat. 14970 // Use cssHook if its there. 14971 // Use .style if available and use plain properties where available. 14972 if ( jQuery.fx.step[ tween.prop ] ) { 14973 jQuery.fx.step[ tween.prop ]( tween ); 14974 } else if ( tween.elem.nodeType === 1 && ( 14975 jQuery.cssHooks[ tween.prop ] || 14976 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 14977 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 14978 } else { 14979 tween.elem[ tween.prop ] = tween.now; 14980 } 14981 } 14982 } 14983}; 14984 14985// Support: IE <=9 only 14986// Panic based approach to setting things on disconnected nodes 14987Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 14988 set: function( tween ) { 14989 if ( tween.elem.nodeType && tween.elem.parentNode ) { 14990 tween.elem[ tween.prop ] = tween.now; 14991 } 14992 } 14993}; 14994 14995jQuery.easing = { 14996 linear: function( p ) { 14997 return p; 14998 }, 14999 swing: function( p ) { 15000 return 0.5 - Math.cos( p * Math.PI ) / 2; 15001 }, 15002 _default: "swing" 15003}; 15004 15005jQuery.fx = Tween.prototype.init; 15006 15007// Back compat <1.8 extension point 15008jQuery.fx.step = {}; 15009 15010 15011 15012 15013var 15014 fxNow, inProgress, 15015 rfxtypes = /^(?:toggle|show|hide)$/, 15016 rrun = /queueHooks$/; 15017 15018function schedule() { 15019 if ( inProgress ) { 15020 if ( document.hidden === false && window.requestAnimationFrame ) { 15021 window.requestAnimationFrame( schedule ); 15022 } else { 15023 window.setTimeout( schedule, jQuery.fx.interval ); 15024 } 15025 15026 jQuery.fx.tick(); 15027 } 15028} 15029 15030// Animations created synchronously will run synchronously 15031function createFxNow() { 15032 window.setTimeout( function() { 15033 fxNow = undefined; 15034 } ); 15035 return ( fxNow = Date.now() ); 15036} 15037 15038// Generate parameters to create a standard animation 15039function genFx( type, includeWidth ) { 15040 var which, 15041 i = 0, 15042 attrs = { height: type }; 15043 15044 // If we include width, step value is 1 to do all cssExpand values, 15045 // otherwise step value is 2 to skip over Left and Right 15046 includeWidth = includeWidth ? 1 : 0; 15047 for ( ; i < 4; i += 2 - includeWidth ) { 15048 which = cssExpand[ i ]; 15049 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 15050 } 15051 15052 if ( includeWidth ) { 15053 attrs.opacity = attrs.width = type; 15054 } 15055 15056 return attrs; 15057} 15058 15059function createTween( value, prop, animation ) { 15060 var tween, 15061 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 15062 index = 0, 15063 length = collection.length; 15064 for ( ; index < length; index++ ) { 15065 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 15066 15067 // We're done with this property 15068 return tween; 15069 } 15070 } 15071} 15072 15073function defaultPrefilter( elem, props, opts ) { 15074 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 15075 isBox = "width" in props || "height" in props, 15076 anim = this, 15077 orig = {}, 15078 style = elem.style, 15079 hidden = elem.nodeType && isHiddenWithinTree( elem ), 15080 dataShow = dataPriv.get( elem, "fxshow" ); 15081 15082 // Queue-skipping animations hijack the fx hooks 15083 if ( !opts.queue ) { 15084 hooks = jQuery._queueHooks( elem, "fx" ); 15085 if ( hooks.unqueued == null ) { 15086 hooks.unqueued = 0; 15087 oldfire = hooks.empty.fire; 15088 hooks.empty.fire = function() { 15089 if ( !hooks.unqueued ) { 15090 oldfire(); 15091 } 15092 }; 15093 } 15094 hooks.unqueued++; 15095 15096 anim.always( function() { 15097 15098 // Ensure the complete handler is called before this completes 15099 anim.always( function() { 15100 hooks.unqueued--; 15101 if ( !jQuery.queue( elem, "fx" ).length ) { 15102 hooks.empty.fire(); 15103 } 15104 } ); 15105 } ); 15106 } 15107 15108 // Detect show/hide animations 15109 for ( prop in props ) { 15110 value = props[ prop ]; 15111 if ( rfxtypes.test( value ) ) { 15112 delete props[ prop ]; 15113 toggle = toggle || value === "toggle"; 15114 if ( value === ( hidden ? "hide" : "show" ) ) { 15115 15116 // Pretend to be hidden if this is a "show" and 15117 // there is still data from a stopped show/hide 15118 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 15119 hidden = true; 15120 15121 // Ignore all other no-op show/hide data 15122 } else { 15123 continue; 15124 } 15125 } 15126 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 15127 } 15128 } 15129 15130 // Bail out if this is a no-op like .hide().hide() 15131 propTween = !jQuery.isEmptyObject( props ); 15132 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 15133 return; 15134 } 15135 15136 // Restrict "overflow" and "display" styles during box animations 15137 if ( isBox && elem.nodeType === 1 ) { 15138 15139 // Support: IE <=9 - 11, Edge 12 - 15 15140 // Record all 3 overflow attributes because IE does not infer the shorthand 15141 // from identically-valued overflowX and overflowY and Edge just mirrors 15142 // the overflowX value there. 15143 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 15144 15145 // Identify a display type, preferring old show/hide data over the CSS cascade 15146 restoreDisplay = dataShow && dataShow.display; 15147 if ( restoreDisplay == null ) { 15148 restoreDisplay = dataPriv.get( elem, "display" ); 15149 } 15150 display = jQuery.css( elem, "display" ); 15151 if ( display === "none" ) { 15152 if ( restoreDisplay ) { 15153 display = restoreDisplay; 15154 } else { 15155 15156 // Get nonempty value(s) by temporarily forcing visibility 15157 showHide( [ elem ], true ); 15158 restoreDisplay = elem.style.display || restoreDisplay; 15159 display = jQuery.css( elem, "display" ); 15160 showHide( [ elem ] ); 15161 } 15162 } 15163 15164 // Animate inline elements as inline-block 15165 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 15166 if ( jQuery.css( elem, "float" ) === "none" ) { 15167 15168 // Restore the original display value at the end of pure show/hide animations 15169 if ( !propTween ) { 15170 anim.done( function() { 15171 style.display = restoreDisplay; 15172 } ); 15173 if ( restoreDisplay == null ) { 15174 display = style.display; 15175 restoreDisplay = display === "none" ? "" : display; 15176 } 15177 } 15178 style.display = "inline-block"; 15179 } 15180 } 15181 } 15182 15183 if ( opts.overflow ) { 15184 style.overflow = "hidden"; 15185 anim.always( function() { 15186 style.overflow = opts.overflow[ 0 ]; 15187 style.overflowX = opts.overflow[ 1 ]; 15188 style.overflowY = opts.overflow[ 2 ]; 15189 } ); 15190 } 15191 15192 // Implement show/hide animations 15193 propTween = false; 15194 for ( prop in orig ) { 15195 15196 // General show/hide setup for this element animation 15197 if ( !propTween ) { 15198 if ( dataShow ) { 15199 if ( "hidden" in dataShow ) { 15200 hidden = dataShow.hidden; 15201 } 15202 } else { 15203 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 15204 } 15205 15206 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 15207 if ( toggle ) { 15208 dataShow.hidden = !hidden; 15209 } 15210 15211 // Show elements before animating them 15212 if ( hidden ) { 15213 showHide( [ elem ], true ); 15214 } 15215 15216 /* eslint-disable no-loop-func */ 15217 15218 anim.done( function() { 15219 15220 /* eslint-enable no-loop-func */ 15221 15222 // The final step of a "hide" animation is actually hiding the element 15223 if ( !hidden ) { 15224 showHide( [ elem ] ); 15225 } 15226 dataPriv.remove( elem, "fxshow" ); 15227 for ( prop in orig ) { 15228 jQuery.style( elem, prop, orig[ prop ] ); 15229 } 15230 } ); 15231 } 15232 15233 // Per-property setup 15234 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 15235 if ( !( prop in dataShow ) ) { 15236 dataShow[ prop ] = propTween.start; 15237 if ( hidden ) { 15238 propTween.end = propTween.start; 15239 propTween.start = 0; 15240 } 15241 } 15242 } 15243} 15244 15245function propFilter( props, specialEasing ) { 15246 var index, name, easing, value, hooks; 15247 15248 // camelCase, specialEasing and expand cssHook pass 15249 for ( index in props ) { 15250 name = camelCase( index ); 15251 easing = specialEasing[ name ]; 15252 value = props[ index ]; 15253 if ( Array.isArray( value ) ) { 15254 easing = value[ 1 ]; 15255 value = props[ index ] = value[ 0 ]; 15256 } 15257 15258 if ( index !== name ) { 15259 props[ name ] = value; 15260 delete props[ index ]; 15261 } 15262 15263 hooks = jQuery.cssHooks[ name ]; 15264 if ( hooks && "expand" in hooks ) { 15265 value = hooks.expand( value ); 15266 delete props[ name ]; 15267 15268 // Not quite $.extend, this won't overwrite existing keys. 15269 // Reusing 'index' because we have the correct "name" 15270 for ( index in value ) { 15271 if ( !( index in props ) ) { 15272 props[ index ] = value[ index ]; 15273 specialEasing[ index ] = easing; 15274 } 15275 } 15276 } else { 15277 specialEasing[ name ] = easing; 15278 } 15279 } 15280} 15281 15282function Animation( elem, properties, options ) { 15283 var result, 15284 stopped, 15285 index = 0, 15286 length = Animation.prefilters.length, 15287 deferred = jQuery.Deferred().always( function() { 15288 15289 // Don't match elem in the :animated selector 15290 delete tick.elem; 15291 } ), 15292 tick = function() { 15293 if ( stopped ) { 15294 return false; 15295 } 15296 var currentTime = fxNow || createFxNow(), 15297 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 15298 15299 // Support: Android 2.3 only 15300 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 15301 temp = remaining / animation.duration || 0, 15302 percent = 1 - temp, 15303 index = 0, 15304 length = animation.tweens.length; 15305 15306 for ( ; index < length; index++ ) { 15307 animation.tweens[ index ].run( percent ); 15308 } 15309 15310 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 15311 15312 // If there's more to do, yield 15313 if ( percent < 1 && length ) { 15314 return remaining; 15315 } 15316 15317 // If this was an empty animation, synthesize a final progress notification 15318 if ( !length ) { 15319 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 15320 } 15321 15322 // Resolve the animation and report its conclusion 15323 deferred.resolveWith( elem, [ animation ] ); 15324 return false; 15325 }, 15326 animation = deferred.promise( { 15327 elem: elem, 15328 props: jQuery.extend( {}, properties ), 15329 opts: jQuery.extend( true, { 15330 specialEasing: {}, 15331 easing: jQuery.easing._default 15332 }, options ), 15333 originalProperties: properties, 15334 originalOptions: options, 15335 startTime: fxNow || createFxNow(), 15336 duration: options.duration, 15337 tweens: [], 15338 createTween: function( prop, end ) { 15339 var tween = jQuery.Tween( elem, animation.opts, prop, end, 15340 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 15341 animation.tweens.push( tween ); 15342 return tween; 15343 }, 15344 stop: function( gotoEnd ) { 15345 var index = 0, 15346 15347 // If we are going to the end, we want to run all the tweens 15348 // otherwise we skip this part 15349 length = gotoEnd ? animation.tweens.length : 0; 15350 if ( stopped ) { 15351 return this; 15352 } 15353 stopped = true; 15354 for ( ; index < length; index++ ) { 15355 animation.tweens[ index ].run( 1 ); 15356 } 15357 15358 // Resolve when we played the last frame; otherwise, reject 15359 if ( gotoEnd ) { 15360 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 15361 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 15362 } else { 15363 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 15364 } 15365 return this; 15366 } 15367 } ), 15368 props = animation.props; 15369 15370 propFilter( props, animation.opts.specialEasing ); 15371 15372 for ( ; index < length; index++ ) { 15373 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 15374 if ( result ) { 15375 if ( isFunction( result.stop ) ) { 15376 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 15377 result.stop.bind( result ); 15378 } 15379 return result; 15380 } 15381 } 15382 15383 jQuery.map( props, createTween, animation ); 15384 15385 if ( isFunction( animation.opts.start ) ) { 15386 animation.opts.start.call( elem, animation ); 15387 } 15388 15389 // Attach callbacks from options 15390 animation 15391 .progress( animation.opts.progress ) 15392 .done( animation.opts.done, animation.opts.complete ) 15393 .fail( animation.opts.fail ) 15394 .always( animation.opts.always ); 15395 15396 jQuery.fx.timer( 15397 jQuery.extend( tick, { 15398 elem: elem, 15399 anim: animation, 15400 queue: animation.opts.queue 15401 } ) 15402 ); 15403 15404 return animation; 15405} 15406 15407jQuery.Animation = jQuery.extend( Animation, { 15408 15409 tweeners: { 15410 "*": [ function( prop, value ) { 15411 var tween = this.createTween( prop, value ); 15412 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 15413 return tween; 15414 } ] 15415 }, 15416 15417 tweener: function( props, callback ) { 15418 if ( isFunction( props ) ) { 15419 callback = props; 15420 props = [ "*" ]; 15421 } else { 15422 props = props.match( rnothtmlwhite ); 15423 } 15424 15425 var prop, 15426 index = 0, 15427 length = props.length; 15428 15429 for ( ; index < length; index++ ) { 15430 prop = props[ index ]; 15431 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 15432 Animation.tweeners[ prop ].unshift( callback ); 15433 } 15434 }, 15435 15436 prefilters: [ defaultPrefilter ], 15437 15438 prefilter: function( callback, prepend ) { 15439 if ( prepend ) { 15440 Animation.prefilters.unshift( callback ); 15441 } else { 15442 Animation.prefilters.push( callback ); 15443 } 15444 } 15445} ); 15446 15447jQuery.speed = function( speed, easing, fn ) { 15448 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 15449 complete: fn || !fn && easing || 15450 isFunction( speed ) && speed, 15451 duration: speed, 15452 easing: fn && easing || easing && !isFunction( easing ) && easing 15453 }; 15454 15455 // Go to the end state if fx are off 15456 if ( jQuery.fx.off ) { 15457 opt.duration = 0; 15458 15459 } else { 15460 if ( typeof opt.duration !== "number" ) { 15461 if ( opt.duration in jQuery.fx.speeds ) { 15462 opt.duration = jQuery.fx.speeds[ opt.duration ]; 15463 15464 } else { 15465 opt.duration = jQuery.fx.speeds._default; 15466 } 15467 } 15468 } 15469 15470 // Normalize opt.queue - true/undefined/null -> "fx" 15471 if ( opt.queue == null || opt.queue === true ) { 15472 opt.queue = "fx"; 15473 } 15474 15475 // Queueing 15476 opt.old = opt.complete; 15477 15478 opt.complete = function() { 15479 if ( isFunction( opt.old ) ) { 15480 opt.old.call( this ); 15481 } 15482 15483 if ( opt.queue ) { 15484 jQuery.dequeue( this, opt.queue ); 15485 } 15486 }; 15487 15488 return opt; 15489}; 15490 15491jQuery.fn.extend( { 15492 fadeTo: function( speed, to, easing, callback ) { 15493 15494 // Show any hidden elements after setting opacity to 0 15495 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 15496 15497 // Animate to the value specified 15498 .end().animate( { opacity: to }, speed, easing, callback ); 15499 }, 15500 animate: function( prop, speed, easing, callback ) { 15501 var empty = jQuery.isEmptyObject( prop ), 15502 optall = jQuery.speed( speed, easing, callback ), 15503 doAnimation = function() { 15504 15505 // Operate on a copy of prop so per-property easing won't be lost 15506 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 15507 15508 // Empty animations, or finishing resolves immediately 15509 if ( empty || dataPriv.get( this, "finish" ) ) { 15510 anim.stop( true ); 15511 } 15512 }; 15513 15514 doAnimation.finish = doAnimation; 15515 15516 return empty || optall.queue === false ? 15517 this.each( doAnimation ) : 15518 this.queue( optall.queue, doAnimation ); 15519 }, 15520 stop: function( type, clearQueue, gotoEnd ) { 15521 var stopQueue = function( hooks ) { 15522 var stop = hooks.stop; 15523 delete hooks.stop; 15524 stop( gotoEnd ); 15525 }; 15526 15527 if ( typeof type !== "string" ) { 15528 gotoEnd = clearQueue; 15529 clearQueue = type; 15530 type = undefined; 15531 } 15532 if ( clearQueue ) { 15533 this.queue( type || "fx", [] ); 15534 } 15535 15536 return this.each( function() { 15537 var dequeue = true, 15538 index = type != null && type + "queueHooks", 15539 timers = jQuery.timers, 15540 data = dataPriv.get( this ); 15541 15542 if ( index ) { 15543 if ( data[ index ] && data[ index ].stop ) { 15544 stopQueue( data[ index ] ); 15545 } 15546 } else { 15547 for ( index in data ) { 15548 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 15549 stopQueue( data[ index ] ); 15550 } 15551 } 15552 } 15553 15554 for ( index = timers.length; index--; ) { 15555 if ( timers[ index ].elem === this && 15556 ( type == null || timers[ index ].queue === type ) ) { 15557 15558 timers[ index ].anim.stop( gotoEnd ); 15559 dequeue = false; 15560 timers.splice( index, 1 ); 15561 } 15562 } 15563 15564 // Start the next in the queue if the last step wasn't forced. 15565 // Timers currently will call their complete callbacks, which 15566 // will dequeue but only if they were gotoEnd. 15567 if ( dequeue || !gotoEnd ) { 15568 jQuery.dequeue( this, type ); 15569 } 15570 } ); 15571 }, 15572 finish: function( type ) { 15573 if ( type !== false ) { 15574 type = type || "fx"; 15575 } 15576 return this.each( function() { 15577 var index, 15578 data = dataPriv.get( this ), 15579 queue = data[ type + "queue" ], 15580 hooks = data[ type + "queueHooks" ], 15581 timers = jQuery.timers, 15582 length = queue ? queue.length : 0; 15583 15584 // Enable finishing flag on private data 15585 data.finish = true; 15586 15587 // Empty the queue first 15588 jQuery.queue( this, type, [] ); 15589 15590 if ( hooks && hooks.stop ) { 15591 hooks.stop.call( this, true ); 15592 } 15593 15594 // Look for any active animations, and finish them 15595 for ( index = timers.length; index--; ) { 15596 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 15597 timers[ index ].anim.stop( true ); 15598 timers.splice( index, 1 ); 15599 } 15600 } 15601 15602 // Look for any animations in the old queue and finish them 15603 for ( index = 0; index < length; index++ ) { 15604 if ( queue[ index ] && queue[ index ].finish ) { 15605 queue[ index ].finish.call( this ); 15606 } 15607 } 15608 15609 // Turn off finishing flag 15610 delete data.finish; 15611 } ); 15612 } 15613} ); 15614 15615jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 15616 var cssFn = jQuery.fn[ name ]; 15617 jQuery.fn[ name ] = function( speed, easing, callback ) { 15618 return speed == null || typeof speed === "boolean" ? 15619 cssFn.apply( this, arguments ) : 15620 this.animate( genFx( name, true ), speed, easing, callback ); 15621 }; 15622} ); 15623 15624// Generate shortcuts for custom animations 15625jQuery.each( { 15626 slideDown: genFx( "show" ), 15627 slideUp: genFx( "hide" ), 15628 slideToggle: genFx( "toggle" ), 15629 fadeIn: { opacity: "show" }, 15630 fadeOut: { opacity: "hide" }, 15631 fadeToggle: { opacity: "toggle" } 15632}, function( name, props ) { 15633 jQuery.fn[ name ] = function( speed, easing, callback ) { 15634 return this.animate( props, speed, easing, callback ); 15635 }; 15636} ); 15637 15638jQuery.timers = []; 15639jQuery.fx.tick = function() { 15640 var timer, 15641 i = 0, 15642 timers = jQuery.timers; 15643 15644 fxNow = Date.now(); 15645 15646 for ( ; i < timers.length; i++ ) { 15647 timer = timers[ i ]; 15648 15649 // Run the timer and safely remove it when done (allowing for external removal) 15650 if ( !timer() && timers[ i ] === timer ) { 15651 timers.splice( i--, 1 ); 15652 } 15653 } 15654 15655 if ( !timers.length ) { 15656 jQuery.fx.stop(); 15657 } 15658 fxNow = undefined; 15659}; 15660 15661jQuery.fx.timer = function( timer ) { 15662 jQuery.timers.push( timer ); 15663 jQuery.fx.start(); 15664}; 15665 15666jQuery.fx.interval = 13; 15667jQuery.fx.start = function() { 15668 if ( inProgress ) { 15669 return; 15670 } 15671 15672 inProgress = true; 15673 schedule(); 15674}; 15675 15676jQuery.fx.stop = function() { 15677 inProgress = null; 15678}; 15679 15680jQuery.fx.speeds = { 15681 slow: 600, 15682 fast: 200, 15683 15684 // Default speed 15685 _default: 400 15686}; 15687 15688 15689// Based off of the plugin by Clint Helfers, with permission. 15690jQuery.fn.delay = function( time, type ) { 15691 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 15692 type = type || "fx"; 15693 15694 return this.queue( type, function( next, hooks ) { 15695 var timeout = window.setTimeout( next, time ); 15696 hooks.stop = function() { 15697 window.clearTimeout( timeout ); 15698 }; 15699 } ); 15700}; 15701 15702 15703( function() { 15704 var input = document.createElement( "input" ), 15705 select = document.createElement( "select" ), 15706 opt = select.appendChild( document.createElement( "option" ) ); 15707 15708 input.type = "checkbox"; 15709 15710 // Support: Android <=4.3 only 15711 // Default value for a checkbox should be "on" 15712 support.checkOn = input.value !== ""; 15713 15714 // Support: IE <=11 only 15715 // Must access selectedIndex to make default options select 15716 support.optSelected = opt.selected; 15717 15718 // Support: IE <=11 only 15719 // An input loses its value after becoming a radio 15720 input = document.createElement( "input" ); 15721 input.value = "t"; 15722 input.type = "radio"; 15723 support.radioValue = input.value === "t"; 15724} )(); 15725 15726 15727var boolHook, 15728 attrHandle = jQuery.expr.attrHandle; 15729 15730jQuery.fn.extend( { 15731 attr: function( name, value ) { 15732 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 15733 }, 15734 15735 removeAttr: function( name ) { 15736 return this.each( function() { 15737 jQuery.removeAttr( this, name ); 15738 } ); 15739 } 15740} ); 15741 15742jQuery.extend( { 15743 attr: function( elem, name, value ) { 15744 var ret, hooks, 15745 nType = elem.nodeType; 15746 15747 // Don't get/set attributes on text, comment and attribute nodes 15748 if ( nType === 3 || nType === 8 || nType === 2 ) { 15749 return; 15750 } 15751 15752 // Fallback to prop when attributes are not supported 15753 if ( typeof elem.getAttribute === "undefined" ) { 15754 return jQuery.prop( elem, name, value ); 15755 } 15756 15757 // Attribute hooks are determined by the lowercase version 15758 // Grab necessary hook if one is defined 15759 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15760 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 15761 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 15762 } 15763 15764 if ( value !== undefined ) { 15765 if ( value === null ) { 15766 jQuery.removeAttr( elem, name ); 15767 return; 15768 } 15769 15770 if ( hooks && "set" in hooks && 15771 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15772 return ret; 15773 } 15774 15775 elem.setAttribute( name, value + "" ); 15776 return value; 15777 } 15778 15779 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15780 return ret; 15781 } 15782 15783 ret = jQuery.find.attr( elem, name ); 15784 15785 // Non-existent attributes return null, we normalize to undefined 15786 return ret == null ? undefined : ret; 15787 }, 15788 15789 attrHooks: { 15790 type: { 15791 set: function( elem, value ) { 15792 if ( !support.radioValue && value === "radio" && 15793 nodeName( elem, "input" ) ) { 15794 var val = elem.value; 15795 elem.setAttribute( "type", value ); 15796 if ( val ) { 15797 elem.value = val; 15798 } 15799 return value; 15800 } 15801 } 15802 } 15803 }, 15804 15805 removeAttr: function( elem, value ) { 15806 var name, 15807 i = 0, 15808 15809 // Attribute names can contain non-HTML whitespace characters 15810 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 15811 attrNames = value && value.match( rnothtmlwhite ); 15812 15813 if ( attrNames && elem.nodeType === 1 ) { 15814 while ( ( name = attrNames[ i++ ] ) ) { 15815 elem.removeAttribute( name ); 15816 } 15817 } 15818 } 15819} ); 15820 15821// Hooks for boolean attributes 15822boolHook = { 15823 set: function( elem, value, name ) { 15824 if ( value === false ) { 15825 15826 // Remove boolean attributes when set to false 15827 jQuery.removeAttr( elem, name ); 15828 } else { 15829 elem.setAttribute( name, name ); 15830 } 15831 return name; 15832 } 15833}; 15834 15835jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 15836 var getter = attrHandle[ name ] || jQuery.find.attr; 15837 15838 attrHandle[ name ] = function( elem, name, isXML ) { 15839 var ret, handle, 15840 lowercaseName = name.toLowerCase(); 15841 15842 if ( !isXML ) { 15843 15844 // Avoid an infinite loop by temporarily removing this function from the getter 15845 handle = attrHandle[ lowercaseName ]; 15846 attrHandle[ lowercaseName ] = ret; 15847 ret = getter( elem, name, isXML ) != null ? 15848 lowercaseName : 15849 null; 15850 attrHandle[ lowercaseName ] = handle; 15851 } 15852 return ret; 15853 }; 15854} ); 15855 15856 15857 15858 15859var rfocusable = /^(?:input|select|textarea|button)$/i, 15860 rclickable = /^(?:a|area)$/i; 15861 15862jQuery.fn.extend( { 15863 prop: function( name, value ) { 15864 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 15865 }, 15866 15867 removeProp: function( name ) { 15868 return this.each( function() { 15869 delete this[ jQuery.propFix[ name ] || name ]; 15870 } ); 15871 } 15872} ); 15873 15874jQuery.extend( { 15875 prop: function( elem, name, value ) { 15876 var ret, hooks, 15877 nType = elem.nodeType; 15878 15879 // Don't get/set properties on text, comment and attribute nodes 15880 if ( nType === 3 || nType === 8 || nType === 2 ) { 15881 return; 15882 } 15883 15884 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15885 15886 // Fix name and attach hooks 15887 name = jQuery.propFix[ name ] || name; 15888 hooks = jQuery.propHooks[ name ]; 15889 } 15890 15891 if ( value !== undefined ) { 15892 if ( hooks && "set" in hooks && 15893 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15894 return ret; 15895 } 15896 15897 return ( elem[ name ] = value ); 15898 } 15899 15900 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15901 return ret; 15902 } 15903 15904 return elem[ name ]; 15905 }, 15906 15907 propHooks: { 15908 tabIndex: { 15909 get: function( elem ) { 15910 15911 // Support: IE <=9 - 11 only 15912 // elem.tabIndex doesn't always return the 15913 // correct value when it hasn't been explicitly set 15914 // Use proper attribute retrieval (trac-12072) 15915 var tabindex = jQuery.find.attr( elem, "tabindex" ); 15916 15917 if ( tabindex ) { 15918 return parseInt( tabindex, 10 ); 15919 } 15920 15921 if ( 15922 rfocusable.test( elem.nodeName ) || 15923 rclickable.test( elem.nodeName ) && 15924 elem.href 15925 ) { 15926 return 0; 15927 } 15928 15929 return -1; 15930 } 15931 } 15932 }, 15933 15934 propFix: { 15935 "for": "htmlFor", 15936 "class": "className" 15937 } 15938} ); 15939 15940// Support: IE <=11 only 15941// Accessing the selectedIndex property 15942// forces the browser to respect setting selected 15943// on the option 15944// The getter ensures a default option is selected 15945// when in an optgroup 15946// eslint rule "no-unused-expressions" is disabled for this code 15947// since it considers such accessions noop 15948if ( !support.optSelected ) { 15949 jQuery.propHooks.selected = { 15950 get: function( elem ) { 15951 15952 /* eslint no-unused-expressions: "off" */ 15953 15954 var parent = elem.parentNode; 15955 if ( parent && parent.parentNode ) { 15956 parent.parentNode.selectedIndex; 15957 } 15958 return null; 15959 }, 15960 set: function( elem ) { 15961 15962 /* eslint no-unused-expressions: "off" */ 15963 15964 var parent = elem.parentNode; 15965 if ( parent ) { 15966 parent.selectedIndex; 15967 15968 if ( parent.parentNode ) { 15969 parent.parentNode.selectedIndex; 15970 } 15971 } 15972 } 15973 }; 15974} 15975 15976jQuery.each( [ 15977 "tabIndex", 15978 "readOnly", 15979 "maxLength", 15980 "cellSpacing", 15981 "cellPadding", 15982 "rowSpan", 15983 "colSpan", 15984 "useMap", 15985 "frameBorder", 15986 "contentEditable" 15987], function() { 15988 jQuery.propFix[ this.toLowerCase() ] = this; 15989} ); 15990 15991 15992 15993 15994 // Strip and collapse whitespace according to HTML spec 15995 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 15996 function stripAndCollapse( value ) { 15997 var tokens = value.match( rnothtmlwhite ) || []; 15998 return tokens.join( " " ); 15999 } 16000 16001 16002function getClass( elem ) { 16003 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 16004} 16005 16006function classesToArray( value ) { 16007 if ( Array.isArray( value ) ) { 16008 return value; 16009 } 16010 if ( typeof value === "string" ) { 16011 return value.match( rnothtmlwhite ) || []; 16012 } 16013 return []; 16014} 16015 16016jQuery.fn.extend( { 16017 addClass: function( value ) { 16018 var classNames, cur, curValue, className, i, finalValue; 16019 16020 if ( isFunction( value ) ) { 16021 return this.each( function( j ) { 16022 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 16023 } ); 16024 } 16025 16026 classNames = classesToArray( value ); 16027 16028 if ( classNames.length ) { 16029 return this.each( function() { 16030 curValue = getClass( this ); 16031 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 16032 16033 if ( cur ) { 16034 for ( i = 0; i < classNames.length; i++ ) { 16035 className = classNames[ i ]; 16036 if ( cur.indexOf( " " + className + " " ) < 0 ) { 16037 cur += className + " "; 16038 } 16039 } 16040 16041 // Only assign if different to avoid unneeded rendering. 16042 finalValue = stripAndCollapse( cur ); 16043 if ( curValue !== finalValue ) { 16044 this.setAttribute( "class", finalValue ); 16045 } 16046 } 16047 } ); 16048 } 16049 16050 return this; 16051 }, 16052 16053 removeClass: function( value ) { 16054 var classNames, cur, curValue, className, i, finalValue; 16055 16056 if ( isFunction( value ) ) { 16057 return this.each( function( j ) { 16058 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 16059 } ); 16060 } 16061 16062 if ( !arguments.length ) { 16063 return this.attr( "class", "" ); 16064 } 16065 16066 classNames = classesToArray( value ); 16067 16068 if ( classNames.length ) { 16069 return this.each( function() { 16070 curValue = getClass( this ); 16071 16072 // This expression is here for better compressibility (see addClass) 16073 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 16074 16075 if ( cur ) { 16076 for ( i = 0; i < classNames.length; i++ ) { 16077 className = classNames[ i ]; 16078 16079 // Remove *all* instances 16080 while ( cur.indexOf( " " + className + " " ) > -1 ) { 16081 cur = cur.replace( " " + className + " ", " " ); 16082 } 16083 } 16084 16085 // Only assign if different to avoid unneeded rendering. 16086 finalValue = stripAndCollapse( cur ); 16087 if ( curValue !== finalValue ) { 16088 this.setAttribute( "class", finalValue ); 16089 } 16090 } 16091 } ); 16092 } 16093 16094 return this; 16095 }, 16096 16097 toggleClass: function( value, stateVal ) { 16098 var classNames, className, i, self, 16099 type = typeof value, 16100 isValidValue = type === "string" || Array.isArray( value ); 16101 16102 if ( isFunction( value ) ) { 16103 return this.each( function( i ) { 16104 jQuery( this ).toggleClass( 16105 value.call( this, i, getClass( this ), stateVal ), 16106 stateVal 16107 ); 16108 } ); 16109 } 16110 16111 if ( typeof stateVal === "boolean" && isValidValue ) { 16112 return stateVal ? this.addClass( value ) : this.removeClass( value ); 16113 } 16114 16115 classNames = classesToArray( value ); 16116 16117 return this.each( function() { 16118 if ( isValidValue ) { 16119 16120 // Toggle individual class names 16121 self = jQuery( this ); 16122 16123 for ( i = 0; i < classNames.length; i++ ) { 16124 className = classNames[ i ]; 16125 16126 // Check each className given, space separated list 16127 if ( self.hasClass( className ) ) { 16128 self.removeClass( className ); 16129 } else { 16130 self.addClass( className ); 16131 } 16132 } 16133 16134 // Toggle whole class name 16135 } else if ( value === undefined || type === "boolean" ) { 16136 className = getClass( this ); 16137 if ( className ) { 16138 16139 // Store className if set 16140 dataPriv.set( this, "__className__", className ); 16141 } 16142 16143 // If the element has a class name or if we're passed `false`, 16144 // then remove the whole classname (if there was one, the above saved it). 16145 // Otherwise bring back whatever was previously saved (if anything), 16146 // falling back to the empty string if nothing was stored. 16147 if ( this.setAttribute ) { 16148 this.setAttribute( "class", 16149 className || value === false ? 16150 "" : 16151 dataPriv.get( this, "__className__" ) || "" 16152 ); 16153 } 16154 } 16155 } ); 16156 }, 16157 16158 hasClass: function( selector ) { 16159 var className, elem, 16160 i = 0; 16161 16162 className = " " + selector + " "; 16163 while ( ( elem = this[ i++ ] ) ) { 16164 if ( elem.nodeType === 1 && 16165 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 16166 return true; 16167 } 16168 } 16169 16170 return false; 16171 } 16172} ); 16173 16174 16175 16176 16177var rreturn = /\r/g; 16178 16179jQuery.fn.extend( { 16180 val: function( value ) { 16181 var hooks, ret, valueIsFunction, 16182 elem = this[ 0 ]; 16183 16184 if ( !arguments.length ) { 16185 if ( elem ) { 16186 hooks = jQuery.valHooks[ elem.type ] || 16187 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 16188 16189 if ( hooks && 16190 "get" in hooks && 16191 ( ret = hooks.get( elem, "value" ) ) !== undefined 16192 ) { 16193 return ret; 16194 } 16195 16196 ret = elem.value; 16197 16198 // Handle most common string cases 16199 if ( typeof ret === "string" ) { 16200 return ret.replace( rreturn, "" ); 16201 } 16202 16203 // Handle cases where value is null/undef or number 16204 return ret == null ? "" : ret; 16205 } 16206 16207 return; 16208 } 16209 16210 valueIsFunction = isFunction( value ); 16211 16212 return this.each( function( i ) { 16213 var val; 16214 16215 if ( this.nodeType !== 1 ) { 16216 return; 16217 } 16218 16219 if ( valueIsFunction ) { 16220 val = value.call( this, i, jQuery( this ).val() ); 16221 } else { 16222 val = value; 16223 } 16224 16225 // Treat null/undefined as ""; convert numbers to string 16226 if ( val == null ) { 16227 val = ""; 16228 16229 } else if ( typeof val === "number" ) { 16230 val += ""; 16231 16232 } else if ( Array.isArray( val ) ) { 16233 val = jQuery.map( val, function( value ) { 16234 return value == null ? "" : value + ""; 16235 } ); 16236 } 16237 16238 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 16239 16240 // If set returns undefined, fall back to normal setting 16241 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 16242 this.value = val; 16243 } 16244 } ); 16245 } 16246} ); 16247 16248jQuery.extend( { 16249 valHooks: { 16250 option: { 16251 get: function( elem ) { 16252 16253 var val = jQuery.find.attr( elem, "value" ); 16254 return val != null ? 16255 val : 16256 16257 // Support: IE <=10 - 11 only 16258 // option.text throws exceptions (trac-14686, trac-14858) 16259 // Strip and collapse whitespace 16260 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 16261 stripAndCollapse( jQuery.text( elem ) ); 16262 } 16263 }, 16264 select: { 16265 get: function( elem ) { 16266 var value, option, i, 16267 options = elem.options, 16268 index = elem.selectedIndex, 16269 one = elem.type === "select-one", 16270 values = one ? null : [], 16271 max = one ? index + 1 : options.length; 16272 16273 if ( index < 0 ) { 16274 i = max; 16275 16276 } else { 16277 i = one ? index : 0; 16278 } 16279 16280 // Loop through all the selected options 16281 for ( ; i < max; i++ ) { 16282 option = options[ i ]; 16283 16284 // Support: IE <=9 only 16285 // IE8-9 doesn't update selected after form reset (trac-2551) 16286 if ( ( option.selected || i === index ) && 16287 16288 // Don't return options that are disabled or in a disabled optgroup 16289 !option.disabled && 16290 ( !option.parentNode.disabled || 16291 !nodeName( option.parentNode, "optgroup" ) ) ) { 16292 16293 // Get the specific value for the option 16294 value = jQuery( option ).val(); 16295 16296 // We don't need an array for one selects 16297 if ( one ) { 16298 return value; 16299 } 16300 16301 // Multi-Selects return an array 16302 values.push( value ); 16303 } 16304 } 16305 16306 return values; 16307 }, 16308 16309 set: function( elem, value ) { 16310 var optionSet, option, 16311 options = elem.options, 16312 values = jQuery.makeArray( value ), 16313 i = options.length; 16314 16315 while ( i-- ) { 16316 option = options[ i ]; 16317 16318 /* eslint-disable no-cond-assign */ 16319 16320 if ( option.selected = 16321 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 16322 ) { 16323 optionSet = true; 16324 } 16325 16326 /* eslint-enable no-cond-assign */ 16327 } 16328 16329 // Force browsers to behave consistently when non-matching value is set 16330 if ( !optionSet ) { 16331 elem.selectedIndex = -1; 16332 } 16333 return values; 16334 } 16335 } 16336 } 16337} ); 16338 16339// Radios and checkboxes getter/setter 16340jQuery.each( [ "radio", "checkbox" ], function() { 16341 jQuery.valHooks[ this ] = { 16342 set: function( elem, value ) { 16343 if ( Array.isArray( value ) ) { 16344 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 16345 } 16346 } 16347 }; 16348 if ( !support.checkOn ) { 16349 jQuery.valHooks[ this ].get = function( elem ) { 16350 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 16351 }; 16352 } 16353} ); 16354 16355 16356 16357 16358// Return jQuery for attributes-only inclusion 16359var location = window.location; 16360 16361var nonce = { guid: Date.now() }; 16362 16363var rquery = ( /\?/ ); 16364 16365 16366 16367// Cross-browser xml parsing 16368jQuery.parseXML = function( data ) { 16369 var xml, parserErrorElem; 16370 if ( !data || typeof data !== "string" ) { 16371 return null; 16372 } 16373 16374 // Support: IE 9 - 11 only 16375 // IE throws on parseFromString with invalid input. 16376 try { 16377 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 16378 } catch ( e ) {} 16379 16380 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 16381 if ( !xml || parserErrorElem ) { 16382 jQuery.error( "Invalid XML: " + ( 16383 parserErrorElem ? 16384 jQuery.map( parserErrorElem.childNodes, function( el ) { 16385 return el.textContent; 16386 } ).join( "\n" ) : 16387 data 16388 ) ); 16389 } 16390 return xml; 16391}; 16392 16393 16394var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 16395 stopPropagationCallback = function( e ) { 16396 e.stopPropagation(); 16397 }; 16398 16399jQuery.extend( jQuery.event, { 16400 16401 trigger: function( event, data, elem, onlyHandlers ) { 16402 16403 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 16404 eventPath = [ elem || document ], 16405 type = hasOwn.call( event, "type" ) ? event.type : event, 16406 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 16407 16408 cur = lastElement = tmp = elem = elem || document; 16409 16410 // Don't do events on text and comment nodes 16411 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 16412 return; 16413 } 16414 16415 // focus/blur morphs to focusin/out; ensure we're not firing them right now 16416 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 16417 return; 16418 } 16419 16420 if ( type.indexOf( "." ) > -1 ) { 16421 16422 // Namespaced trigger; create a regexp to match event type in handle() 16423 namespaces = type.split( "." ); 16424 type = namespaces.shift(); 16425 namespaces.sort(); 16426 } 16427 ontype = type.indexOf( ":" ) < 0 && "on" + type; 16428 16429 // Caller can pass in a jQuery.Event object, Object, or just an event type string 16430 event = event[ jQuery.expando ] ? 16431 event : 16432 new jQuery.Event( type, typeof event === "object" && event ); 16433 16434 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 16435 event.isTrigger = onlyHandlers ? 2 : 3; 16436 event.namespace = namespaces.join( "." ); 16437 event.rnamespace = event.namespace ? 16438 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 16439 null; 16440 16441 // Clean up the event in case it is being reused 16442 event.result = undefined; 16443 if ( !event.target ) { 16444 event.target = elem; 16445 } 16446 16447 // Clone any incoming data and prepend the event, creating the handler arg list 16448 data = data == null ? 16449 [ event ] : 16450 jQuery.makeArray( data, [ event ] ); 16451 16452 // Allow special events to draw outside the lines 16453 special = jQuery.event.special[ type ] || {}; 16454 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 16455 return; 16456 } 16457 16458 // Determine event propagation path in advance, per W3C events spec (trac-9951) 16459 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 16460 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 16461 16462 bubbleType = special.delegateType || type; 16463 if ( !rfocusMorph.test( bubbleType + type ) ) { 16464 cur = cur.parentNode; 16465 } 16466 for ( ; cur; cur = cur.parentNode ) { 16467 eventPath.push( cur ); 16468 tmp = cur; 16469 } 16470 16471 // Only add window if we got to document (e.g., not plain obj or detached DOM) 16472 if ( tmp === ( elem.ownerDocument || document ) ) { 16473 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 16474 } 16475 } 16476 16477 // Fire handlers on the event path 16478 i = 0; 16479 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 16480 lastElement = cur; 16481 event.type = i > 1 ? 16482 bubbleType : 16483 special.bindType || type; 16484 16485 // jQuery handler 16486 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 16487 dataPriv.get( cur, "handle" ); 16488 if ( handle ) { 16489 handle.apply( cur, data ); 16490 } 16491 16492 // Native handler 16493 handle = ontype && cur[ ontype ]; 16494 if ( handle && handle.apply && acceptData( cur ) ) { 16495 event.result = handle.apply( cur, data ); 16496 if ( event.result === false ) { 16497 event.preventDefault(); 16498 } 16499 } 16500 } 16501 event.type = type; 16502 16503 // If nobody prevented the default action, do it now 16504 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 16505 16506 if ( ( !special._default || 16507 special._default.apply( eventPath.pop(), data ) === false ) && 16508 acceptData( elem ) ) { 16509 16510 // Call a native DOM method on the target with the same name as the event. 16511 // Don't do default actions on window, that's where global variables be (trac-6170) 16512 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 16513 16514 // Don't re-trigger an onFOO event when we call its FOO() method 16515 tmp = elem[ ontype ]; 16516 16517 if ( tmp ) { 16518 elem[ ontype ] = null; 16519 } 16520 16521 // Prevent re-triggering of the same event, since we already bubbled it above 16522 jQuery.event.triggered = type; 16523 16524 if ( event.isPropagationStopped() ) { 16525 lastElement.addEventListener( type, stopPropagationCallback ); 16526 } 16527 16528 elem[ type ](); 16529 16530 if ( event.isPropagationStopped() ) { 16531 lastElement.removeEventListener( type, stopPropagationCallback ); 16532 } 16533 16534 jQuery.event.triggered = undefined; 16535 16536 if ( tmp ) { 16537 elem[ ontype ] = tmp; 16538 } 16539 } 16540 } 16541 } 16542 16543 return event.result; 16544 }, 16545 16546 // Piggyback on a donor event to simulate a different one 16547 // Used only for `focus(in | out)` events 16548 simulate: function( type, elem, event ) { 16549 var e = jQuery.extend( 16550 new jQuery.Event(), 16551 event, 16552 { 16553 type: type, 16554 isSimulated: true 16555 } 16556 ); 16557 16558 jQuery.event.trigger( e, null, elem ); 16559 } 16560 16561} ); 16562 16563jQuery.fn.extend( { 16564 16565 trigger: function( type, data ) { 16566 return this.each( function() { 16567 jQuery.event.trigger( type, data, this ); 16568 } ); 16569 }, 16570 triggerHandler: function( type, data ) { 16571 var elem = this[ 0 ]; 16572 if ( elem ) { 16573 return jQuery.event.trigger( type, data, elem, true ); 16574 } 16575 } 16576} ); 16577 16578 16579var 16580 rbracket = /\[\]$/, 16581 rCRLF = /\r?\n/g, 16582 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 16583 rsubmittable = /^(?:input|select|textarea|keygen)/i; 16584 16585function buildParams( prefix, obj, traditional, add ) { 16586 var name; 16587 16588 if ( Array.isArray( obj ) ) { 16589 16590 // Serialize array item. 16591 jQuery.each( obj, function( i, v ) { 16592 if ( traditional || rbracket.test( prefix ) ) { 16593 16594 // Treat each array item as a scalar. 16595 add( prefix, v ); 16596 16597 } else { 16598 16599 // Item is non-scalar (array or object), encode its numeric index. 16600 buildParams( 16601 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 16602 v, 16603 traditional, 16604 add 16605 ); 16606 } 16607 } ); 16608 16609 } else if ( !traditional && toType( obj ) === "object" ) { 16610 16611 // Serialize object item. 16612 for ( name in obj ) { 16613 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 16614 } 16615 16616 } else { 16617 16618 // Serialize scalar item. 16619 add( prefix, obj ); 16620 } 16621} 16622 16623// Serialize an array of form elements or a set of 16624// key/values into a query string 16625jQuery.param = function( a, traditional ) { 16626 var prefix, 16627 s = [], 16628 add = function( key, valueOrFunction ) { 16629 16630 // If value is a function, invoke it and use its return value 16631 var value = isFunction( valueOrFunction ) ? 16632 valueOrFunction() : 16633 valueOrFunction; 16634 16635 s[ s.length ] = encodeURIComponent( key ) + "=" + 16636 encodeURIComponent( value == null ? "" : value ); 16637 }; 16638 16639 if ( a == null ) { 16640 return ""; 16641 } 16642 16643 // If an array was passed in, assume that it is an array of form elements. 16644 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 16645 16646 // Serialize the form elements 16647 jQuery.each( a, function() { 16648 add( this.name, this.value ); 16649 } ); 16650 16651 } else { 16652 16653 // If traditional, encode the "old" way (the way 1.3.2 or older 16654 // did it), otherwise encode params recursively. 16655 for ( prefix in a ) { 16656 buildParams( prefix, a[ prefix ], traditional, add ); 16657 } 16658 } 16659 16660 // Return the resulting serialization 16661 return s.join( "&" ); 16662}; 16663 16664jQuery.fn.extend( { 16665 serialize: function() { 16666 return jQuery.param( this.serializeArray() ); 16667 }, 16668 serializeArray: function() { 16669 return this.map( function() { 16670 16671 // Can add propHook for "elements" to filter or add form elements 16672 var elements = jQuery.prop( this, "elements" ); 16673 return elements ? jQuery.makeArray( elements ) : this; 16674 } ).filter( function() { 16675 var type = this.type; 16676 16677 // Use .is( ":disabled" ) so that fieldset[disabled] works 16678 return this.name && !jQuery( this ).is( ":disabled" ) && 16679 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 16680 ( this.checked || !rcheckableType.test( type ) ); 16681 } ).map( function( _i, elem ) { 16682 var val = jQuery( this ).val(); 16683 16684 if ( val == null ) { 16685 return null; 16686 } 16687 16688 if ( Array.isArray( val ) ) { 16689 return jQuery.map( val, function( val ) { 16690 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16691 } ); 16692 } 16693 16694 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16695 } ).get(); 16696 } 16697} ); 16698 16699 16700var 16701 r20 = /%20/g, 16702 rhash = /#.*$/, 16703 rantiCache = /([?&])_=[^&]*/, 16704 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 16705 16706 // trac-7653, trac-8125, trac-8152: local protocol detection 16707 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 16708 rnoContent = /^(?:GET|HEAD)$/, 16709 rprotocol = /^\/\//, 16710 16711 /* Prefilters 16712 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 16713 * 2) These are called: 16714 * - BEFORE asking for a transport 16715 * - AFTER param serialization (s.data is a string if s.processData is true) 16716 * 3) key is the dataType 16717 * 4) the catchall symbol "*" can be used 16718 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 16719 */ 16720 prefilters = {}, 16721 16722 /* Transports bindings 16723 * 1) key is the dataType 16724 * 2) the catchall symbol "*" can be used 16725 * 3) selection will start with transport dataType and THEN go to "*" if needed 16726 */ 16727 transports = {}, 16728 16729 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 16730 allTypes = "*/".concat( "*" ), 16731 16732 // Anchor tag for parsing the document origin 16733 originAnchor = document.createElement( "a" ); 16734 16735originAnchor.href = location.href; 16736 16737// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 16738function addToPrefiltersOrTransports( structure ) { 16739 16740 // dataTypeExpression is optional and defaults to "*" 16741 return function( dataTypeExpression, func ) { 16742 16743 if ( typeof dataTypeExpression !== "string" ) { 16744 func = dataTypeExpression; 16745 dataTypeExpression = "*"; 16746 } 16747 16748 var dataType, 16749 i = 0, 16750 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 16751 16752 if ( isFunction( func ) ) { 16753 16754 // For each dataType in the dataTypeExpression 16755 while ( ( dataType = dataTypes[ i++ ] ) ) { 16756 16757 // Prepend if requested 16758 if ( dataType[ 0 ] === "+" ) { 16759 dataType = dataType.slice( 1 ) || "*"; 16760 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 16761 16762 // Otherwise append 16763 } else { 16764 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 16765 } 16766 } 16767 } 16768 }; 16769} 16770 16771// Base inspection function for prefilters and transports 16772function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 16773 16774 var inspected = {}, 16775 seekingTransport = ( structure === transports ); 16776 16777 function inspect( dataType ) { 16778 var selected; 16779 inspected[ dataType ] = true; 16780 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 16781 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 16782 if ( typeof dataTypeOrTransport === "string" && 16783 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 16784 16785 options.dataTypes.unshift( dataTypeOrTransport ); 16786 inspect( dataTypeOrTransport ); 16787 return false; 16788 } else if ( seekingTransport ) { 16789 return !( selected = dataTypeOrTransport ); 16790 } 16791 } ); 16792 return selected; 16793 } 16794 16795 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 16796} 16797 16798// A special extend for ajax options 16799// that takes "flat" options (not to be deep extended) 16800// Fixes trac-9887 16801function ajaxExtend( target, src ) { 16802 var key, deep, 16803 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 16804 16805 for ( key in src ) { 16806 if ( src[ key ] !== undefined ) { 16807 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 16808 } 16809 } 16810 if ( deep ) { 16811 jQuery.extend( true, target, deep ); 16812 } 16813 16814 return target; 16815} 16816 16817/* Handles responses to an ajax request: 16818 * - finds the right dataType (mediates between content-type and expected dataType) 16819 * - returns the corresponding response 16820 */ 16821function ajaxHandleResponses( s, jqXHR, responses ) { 16822 16823 var ct, type, finalDataType, firstDataType, 16824 contents = s.contents, 16825 dataTypes = s.dataTypes; 16826 16827 // Remove auto dataType and get content-type in the process 16828 while ( dataTypes[ 0 ] === "*" ) { 16829 dataTypes.shift(); 16830 if ( ct === undefined ) { 16831 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 16832 } 16833 } 16834 16835 // Check if we're dealing with a known content-type 16836 if ( ct ) { 16837 for ( type in contents ) { 16838 if ( contents[ type ] && contents[ type ].test( ct ) ) { 16839 dataTypes.unshift( type ); 16840 break; 16841 } 16842 } 16843 } 16844 16845 // Check to see if we have a response for the expected dataType 16846 if ( dataTypes[ 0 ] in responses ) { 16847 finalDataType = dataTypes[ 0 ]; 16848 } else { 16849 16850 // Try convertible dataTypes 16851 for ( type in responses ) { 16852 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 16853 finalDataType = type; 16854 break; 16855 } 16856 if ( !firstDataType ) { 16857 firstDataType = type; 16858 } 16859 } 16860 16861 // Or just use first one 16862 finalDataType = finalDataType || firstDataType; 16863 } 16864 16865 // If we found a dataType 16866 // We add the dataType to the list if needed 16867 // and return the corresponding response 16868 if ( finalDataType ) { 16869 if ( finalDataType !== dataTypes[ 0 ] ) { 16870 dataTypes.unshift( finalDataType ); 16871 } 16872 return responses[ finalDataType ]; 16873 } 16874} 16875 16876/* Chain conversions given the request and the original response 16877 * Also sets the responseXXX fields on the jqXHR instance 16878 */ 16879function ajaxConvert( s, response, jqXHR, isSuccess ) { 16880 var conv2, current, conv, tmp, prev, 16881 converters = {}, 16882 16883 // Work with a copy of dataTypes in case we need to modify it for conversion 16884 dataTypes = s.dataTypes.slice(); 16885 16886 // Create converters map with lowercased keys 16887 if ( dataTypes[ 1 ] ) { 16888 for ( conv in s.converters ) { 16889 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 16890 } 16891 } 16892 16893 current = dataTypes.shift(); 16894 16895 // Convert to each sequential dataType 16896 while ( current ) { 16897 16898 if ( s.responseFields[ current ] ) { 16899 jqXHR[ s.responseFields[ current ] ] = response; 16900 } 16901 16902 // Apply the dataFilter if provided 16903 if ( !prev && isSuccess && s.dataFilter ) { 16904 response = s.dataFilter( response, s.dataType ); 16905 } 16906 16907 prev = current; 16908 current = dataTypes.shift(); 16909 16910 if ( current ) { 16911 16912 // There's only work to do if current dataType is non-auto 16913 if ( current === "*" ) { 16914 16915 current = prev; 16916 16917 // Convert response if prev dataType is non-auto and differs from current 16918 } else if ( prev !== "*" && prev !== current ) { 16919 16920 // Seek a direct converter 16921 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 16922 16923 // If none found, seek a pair 16924 if ( !conv ) { 16925 for ( conv2 in converters ) { 16926 16927 // If conv2 outputs current 16928 tmp = conv2.split( " " ); 16929 if ( tmp[ 1 ] === current ) { 16930 16931 // If prev can be converted to accepted input 16932 conv = converters[ prev + " " + tmp[ 0 ] ] || 16933 converters[ "* " + tmp[ 0 ] ]; 16934 if ( conv ) { 16935 16936 // Condense equivalence converters 16937 if ( conv === true ) { 16938 conv = converters[ conv2 ]; 16939 16940 // Otherwise, insert the intermediate dataType 16941 } else if ( converters[ conv2 ] !== true ) { 16942 current = tmp[ 0 ]; 16943 dataTypes.unshift( tmp[ 1 ] ); 16944 } 16945 break; 16946 } 16947 } 16948 } 16949 } 16950 16951 // Apply converter (if not an equivalence) 16952 if ( conv !== true ) { 16953 16954 // Unless errors are allowed to bubble, catch and return them 16955 if ( conv && s.throws ) { 16956 response = conv( response ); 16957 } else { 16958 try { 16959 response = conv( response ); 16960 } catch ( e ) { 16961 return { 16962 state: "parsererror", 16963 error: conv ? e : "No conversion from " + prev + " to " + current 16964 }; 16965 } 16966 } 16967 } 16968 } 16969 } 16970 } 16971 16972 return { state: "success", data: response }; 16973} 16974 16975jQuery.extend( { 16976 16977 // Counter for holding the number of active queries 16978 active: 0, 16979 16980 // Last-Modified header cache for next request 16981 lastModified: {}, 16982 etag: {}, 16983 16984 ajaxSettings: { 16985 url: location.href, 16986 type: "GET", 16987 isLocal: rlocalProtocol.test( location.protocol ), 16988 global: true, 16989 processData: true, 16990 async: true, 16991 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 16992 16993 /* 16994 timeout: 0, 16995 data: null, 16996 dataType: null, 16997 username: null, 16998 password: null, 16999 cache: null, 17000 throws: false, 17001 traditional: false, 17002 headers: {}, 17003 */ 17004 17005 accepts: { 17006 "*": allTypes, 17007 text: "text/plain", 17008 html: "text/html", 17009 xml: "application/xml, text/xml", 17010 json: "application/json, text/javascript" 17011 }, 17012 17013 contents: { 17014 xml: /\bxml\b/, 17015 html: /\bhtml/, 17016 json: /\bjson\b/ 17017 }, 17018 17019 responseFields: { 17020 xml: "responseXML", 17021 text: "responseText", 17022 json: "responseJSON" 17023 }, 17024 17025 // Data converters 17026 // Keys separate source (or catchall "*") and destination types with a single space 17027 converters: { 17028 17029 // Convert anything to text 17030 "* text": String, 17031 17032 // Text to html (true = no transformation) 17033 "text html": true, 17034 17035 // Evaluate text as a json expression 17036 "text json": JSON.parse, 17037 17038 // Parse text as xml 17039 "text xml": jQuery.parseXML 17040 }, 17041 17042 // For options that shouldn't be deep extended: 17043 // you can add your own custom options here if 17044 // and when you create one that shouldn't be 17045 // deep extended (see ajaxExtend) 17046 flatOptions: { 17047 url: true, 17048 context: true 17049 } 17050 }, 17051 17052 // Creates a full fledged settings object into target 17053 // with both ajaxSettings and settings fields. 17054 // If target is omitted, writes into ajaxSettings. 17055 ajaxSetup: function( target, settings ) { 17056 return settings ? 17057 17058 // Building a settings object 17059 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 17060 17061 // Extending ajaxSettings 17062 ajaxExtend( jQuery.ajaxSettings, target ); 17063 }, 17064 17065 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 17066 ajaxTransport: addToPrefiltersOrTransports( transports ), 17067 17068 // Main method 17069 ajax: function( url, options ) { 17070 17071 // If url is an object, simulate pre-1.5 signature 17072 if ( typeof url === "object" ) { 17073 options = url; 17074 url = undefined; 17075 } 17076 17077 // Force options to be an object 17078 options = options || {}; 17079 17080 var transport, 17081 17082 // URL without anti-cache param 17083 cacheURL, 17084 17085 // Response headers 17086 responseHeadersString, 17087 responseHeaders, 17088 17089 // timeout handle 17090 timeoutTimer, 17091 17092 // Url cleanup var 17093 urlAnchor, 17094 17095 // Request state (becomes false upon send and true upon completion) 17096 completed, 17097 17098 // To know if global events are to be dispatched 17099 fireGlobals, 17100 17101 // Loop variable 17102 i, 17103 17104 // uncached part of the url 17105 uncached, 17106 17107 // Create the final options object 17108 s = jQuery.ajaxSetup( {}, options ), 17109 17110 // Callbacks context 17111 callbackContext = s.context || s, 17112 17113 // Context for global events is callbackContext if it is a DOM node or jQuery collection 17114 globalEventContext = s.context && 17115 ( callbackContext.nodeType || callbackContext.jquery ) ? 17116 jQuery( callbackContext ) : 17117 jQuery.event, 17118 17119 // Deferreds 17120 deferred = jQuery.Deferred(), 17121 completeDeferred = jQuery.Callbacks( "once memory" ), 17122 17123 // Status-dependent callbacks 17124 statusCode = s.statusCode || {}, 17125 17126 // Headers (they are sent all at once) 17127 requestHeaders = {}, 17128 requestHeadersNames = {}, 17129 17130 // Default abort message 17131 strAbort = "canceled", 17132 17133 // Fake xhr 17134 jqXHR = { 17135 readyState: 0, 17136 17137 // Builds headers hashtable if needed 17138 getResponseHeader: function( key ) { 17139 var match; 17140 if ( completed ) { 17141 if ( !responseHeaders ) { 17142 responseHeaders = {}; 17143 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 17144 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 17145 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 17146 .concat( match[ 2 ] ); 17147 } 17148 } 17149 match = responseHeaders[ key.toLowerCase() + " " ]; 17150 } 17151 return match == null ? null : match.join( ", " ); 17152 }, 17153 17154 // Raw string 17155 getAllResponseHeaders: function() { 17156 return completed ? responseHeadersString : null; 17157 }, 17158 17159 // Caches the header 17160 setRequestHeader: function( name, value ) { 17161 if ( completed == null ) { 17162 name = requestHeadersNames[ name.toLowerCase() ] = 17163 requestHeadersNames[ name.toLowerCase() ] || name; 17164 requestHeaders[ name ] = value; 17165 } 17166 return this; 17167 }, 17168 17169 // Overrides response content-type header 17170 overrideMimeType: function( type ) { 17171 if ( completed == null ) { 17172 s.mimeType = type; 17173 } 17174 return this; 17175 }, 17176 17177 // Status-dependent callbacks 17178 statusCode: function( map ) { 17179 var code; 17180 if ( map ) { 17181 if ( completed ) { 17182 17183 // Execute the appropriate callbacks 17184 jqXHR.always( map[ jqXHR.status ] ); 17185 } else { 17186 17187 // Lazy-add the new callbacks in a way that preserves old ones 17188 for ( code in map ) { 17189 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 17190 } 17191 } 17192 } 17193 return this; 17194 }, 17195 17196 // Cancel the request 17197 abort: function( statusText ) { 17198 var finalText = statusText || strAbort; 17199 if ( transport ) { 17200 transport.abort( finalText ); 17201 } 17202 done( 0, finalText ); 17203 return this; 17204 } 17205 }; 17206 17207 // Attach deferreds 17208 deferred.promise( jqXHR ); 17209 17210 // Add protocol if not provided (prefilters might expect it) 17211 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 17212 // We also use the url parameter if available 17213 s.url = ( ( url || s.url || location.href ) + "" ) 17214 .replace( rprotocol, location.protocol + "//" ); 17215 17216 // Alias method option to type as per ticket trac-12004 17217 s.type = options.method || options.type || s.method || s.type; 17218 17219 // Extract dataTypes list 17220 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 17221 17222 // A cross-domain request is in order when the origin doesn't match the current origin. 17223 if ( s.crossDomain == null ) { 17224 urlAnchor = document.createElement( "a" ); 17225 17226 // Support: IE <=8 - 11, Edge 12 - 15 17227 // IE throws exception on accessing the href property if url is malformed, 17228 // e.g. http://example.com:80x/ 17229 try { 17230 urlAnchor.href = s.url; 17231 17232 // Support: IE <=8 - 11 only 17233 // Anchor's host property isn't correctly set when s.url is relative 17234 urlAnchor.href = urlAnchor.href; 17235 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 17236 urlAnchor.protocol + "//" + urlAnchor.host; 17237 } catch ( e ) { 17238 17239 // If there is an error parsing the URL, assume it is crossDomain, 17240 // it can be rejected by the transport if it is invalid 17241 s.crossDomain = true; 17242 } 17243 } 17244 17245 // Convert data if not already a string 17246 if ( s.data && s.processData && typeof s.data !== "string" ) { 17247 s.data = jQuery.param( s.data, s.traditional ); 17248 } 17249 17250 // Apply prefilters 17251 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 17252 17253 // If request was aborted inside a prefilter, stop there 17254 if ( completed ) { 17255 return jqXHR; 17256 } 17257 17258 // We can fire global events as of now if asked to 17259 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 17260 fireGlobals = jQuery.event && s.global; 17261 17262 // Watch for a new set of requests 17263 if ( fireGlobals && jQuery.active++ === 0 ) { 17264 jQuery.event.trigger( "ajaxStart" ); 17265 } 17266 17267 // Uppercase the type 17268 s.type = s.type.toUpperCase(); 17269 17270 // Determine if request has content 17271 s.hasContent = !rnoContent.test( s.type ); 17272 17273 // Save the URL in case we're toying with the If-Modified-Since 17274 // and/or If-None-Match header later on 17275 // Remove hash to simplify url manipulation 17276 cacheURL = s.url.replace( rhash, "" ); 17277 17278 // More options handling for requests with no content 17279 if ( !s.hasContent ) { 17280 17281 // Remember the hash so we can put it back 17282 uncached = s.url.slice( cacheURL.length ); 17283 17284 // If data is available and should be processed, append data to url 17285 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 17286 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 17287 17288 // trac-9682: remove data so that it's not used in an eventual retry 17289 delete s.data; 17290 } 17291 17292 // Add or update anti-cache param if needed 17293 if ( s.cache === false ) { 17294 cacheURL = cacheURL.replace( rantiCache, "$1" ); 17295 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 17296 uncached; 17297 } 17298 17299 // Put hash and anti-cache on the URL that will be requested (gh-1732) 17300 s.url = cacheURL + uncached; 17301 17302 // Change '%20' to '+' if this is encoded form body content (gh-2658) 17303 } else if ( s.data && s.processData && 17304 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 17305 s.data = s.data.replace( r20, "+" ); 17306 } 17307 17308 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 17309 if ( s.ifModified ) { 17310 if ( jQuery.lastModified[ cacheURL ] ) { 17311 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 17312 } 17313 if ( jQuery.etag[ cacheURL ] ) { 17314 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 17315 } 17316 } 17317 17318 // Set the correct header, if data is being sent 17319 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 17320 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 17321 } 17322 17323 // Set the Accepts header for the server, depending on the dataType 17324 jqXHR.setRequestHeader( 17325 "Accept", 17326 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 17327 s.accepts[ s.dataTypes[ 0 ] ] + 17328 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 17329 s.accepts[ "*" ] 17330 ); 17331 17332 // Check for headers option 17333 for ( i in s.headers ) { 17334 jqXHR.setRequestHeader( i, s.headers[ i ] ); 17335 } 17336 17337 // Allow custom headers/mimetypes and early abort 17338 if ( s.beforeSend && 17339 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 17340 17341 // Abort if not done already and return 17342 return jqXHR.abort(); 17343 } 17344 17345 // Aborting is no longer a cancellation 17346 strAbort = "abort"; 17347 17348 // Install callbacks on deferreds 17349 completeDeferred.add( s.complete ); 17350 jqXHR.done( s.success ); 17351 jqXHR.fail( s.error ); 17352 17353 // Get transport 17354 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 17355 17356 // If no transport, we auto-abort 17357 if ( !transport ) { 17358 done( -1, "No Transport" ); 17359 } else { 17360 jqXHR.readyState = 1; 17361 17362 // Send global event 17363 if ( fireGlobals ) { 17364 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 17365 } 17366 17367 // If request was aborted inside ajaxSend, stop there 17368 if ( completed ) { 17369 return jqXHR; 17370 } 17371 17372 // Timeout 17373 if ( s.async && s.timeout > 0 ) { 17374 timeoutTimer = window.setTimeout( function() { 17375 jqXHR.abort( "timeout" ); 17376 }, s.timeout ); 17377 } 17378 17379 try { 17380 completed = false; 17381 transport.send( requestHeaders, done ); 17382 } catch ( e ) { 17383 17384 // Rethrow post-completion exceptions 17385 if ( completed ) { 17386 throw e; 17387 } 17388 17389 // Propagate others as results 17390 done( -1, e ); 17391 } 17392 } 17393 17394 // Callback for when everything is done 17395 function done( status, nativeStatusText, responses, headers ) { 17396 var isSuccess, success, error, response, modified, 17397 statusText = nativeStatusText; 17398 17399 // Ignore repeat invocations 17400 if ( completed ) { 17401 return; 17402 } 17403 17404 completed = true; 17405 17406 // Clear timeout if it exists 17407 if ( timeoutTimer ) { 17408 window.clearTimeout( timeoutTimer ); 17409 } 17410 17411 // Dereference transport for early garbage collection 17412 // (no matter how long the jqXHR object will be used) 17413 transport = undefined; 17414 17415 // Cache response headers 17416 responseHeadersString = headers || ""; 17417 17418 // Set readyState 17419 jqXHR.readyState = status > 0 ? 4 : 0; 17420 17421 // Determine if successful 17422 isSuccess = status >= 200 && status < 300 || status === 304; 17423 17424 // Get response data 17425 if ( responses ) { 17426 response = ajaxHandleResponses( s, jqXHR, responses ); 17427 } 17428 17429 // Use a noop converter for missing script but not if jsonp 17430 if ( !isSuccess && 17431 jQuery.inArray( "script", s.dataTypes ) > -1 && 17432 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 17433 s.converters[ "text script" ] = function() {}; 17434 } 17435 17436 // Convert no matter what (that way responseXXX fields are always set) 17437 response = ajaxConvert( s, response, jqXHR, isSuccess ); 17438 17439 // If successful, handle type chaining 17440 if ( isSuccess ) { 17441 17442 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 17443 if ( s.ifModified ) { 17444 modified = jqXHR.getResponseHeader( "Last-Modified" ); 17445 if ( modified ) { 17446 jQuery.lastModified[ cacheURL ] = modified; 17447 } 17448 modified = jqXHR.getResponseHeader( "etag" ); 17449 if ( modified ) { 17450 jQuery.etag[ cacheURL ] = modified; 17451 } 17452 } 17453 17454 // if no content 17455 if ( status === 204 || s.type === "HEAD" ) { 17456 statusText = "nocontent"; 17457 17458 // if not modified 17459 } else if ( status === 304 ) { 17460 statusText = "notmodified"; 17461 17462 // If we have data, let's convert it 17463 } else { 17464 statusText = response.state; 17465 success = response.data; 17466 error = response.error; 17467 isSuccess = !error; 17468 } 17469 } else { 17470 17471 // Extract error from statusText and normalize for non-aborts 17472 error = statusText; 17473 if ( status || !statusText ) { 17474 statusText = "error"; 17475 if ( status < 0 ) { 17476 status = 0; 17477 } 17478 } 17479 } 17480 17481 // Set data for the fake xhr object 17482 jqXHR.status = status; 17483 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 17484 17485 // Success/Error 17486 if ( isSuccess ) { 17487 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 17488 } else { 17489 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 17490 } 17491 17492 // Status-dependent callbacks 17493 jqXHR.statusCode( statusCode ); 17494 statusCode = undefined; 17495 17496 if ( fireGlobals ) { 17497 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 17498 [ jqXHR, s, isSuccess ? success : error ] ); 17499 } 17500 17501 // Complete 17502 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 17503 17504 if ( fireGlobals ) { 17505 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 17506 17507 // Handle the global AJAX counter 17508 if ( !( --jQuery.active ) ) { 17509 jQuery.event.trigger( "ajaxStop" ); 17510 } 17511 } 17512 } 17513 17514 return jqXHR; 17515 }, 17516 17517 getJSON: function( url, data, callback ) { 17518 return jQuery.get( url, data, callback, "json" ); 17519 }, 17520 17521 getScript: function( url, callback ) { 17522 return jQuery.get( url, undefined, callback, "script" ); 17523 } 17524} ); 17525 17526jQuery.each( [ "get", "post" ], function( _i, method ) { 17527 jQuery[ method ] = function( url, data, callback, type ) { 17528 17529 // Shift arguments if data argument was omitted 17530 if ( isFunction( data ) ) { 17531 type = type || callback; 17532 callback = data; 17533 data = undefined; 17534 } 17535 17536 // The url can be an options object (which then must have .url) 17537 return jQuery.ajax( jQuery.extend( { 17538 url: url, 17539 type: method, 17540 dataType: type, 17541 data: data, 17542 success: callback 17543 }, jQuery.isPlainObject( url ) && url ) ); 17544 }; 17545} ); 17546 17547jQuery.ajaxPrefilter( function( s ) { 17548 var i; 17549 for ( i in s.headers ) { 17550 if ( i.toLowerCase() === "content-type" ) { 17551 s.contentType = s.headers[ i ] || ""; 17552 } 17553 } 17554} ); 17555 17556 17557jQuery._evalUrl = function( url, options, doc ) { 17558 return jQuery.ajax( { 17559 url: url, 17560 17561 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 17562 type: "GET", 17563 dataType: "script", 17564 cache: true, 17565 async: false, 17566 global: false, 17567 17568 // Only evaluate the response if it is successful (gh-4126) 17569 // dataFilter is not invoked for failure responses, so using it instead 17570 // of the default converter is kludgy but it works. 17571 converters: { 17572 "text script": function() {} 17573 }, 17574 dataFilter: function( response ) { 17575 jQuery.globalEval( response, options, doc ); 17576 } 17577 } ); 17578}; 17579 17580 17581jQuery.fn.extend( { 17582 wrapAll: function( html ) { 17583 var wrap; 17584 17585 if ( this[ 0 ] ) { 17586 if ( isFunction( html ) ) { 17587 html = html.call( this[ 0 ] ); 17588 } 17589 17590 // The elements to wrap the target around 17591 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 17592 17593 if ( this[ 0 ].parentNode ) { 17594 wrap.insertBefore( this[ 0 ] ); 17595 } 17596 17597 wrap.map( function() { 17598 var elem = this; 17599 17600 while ( elem.firstElementChild ) { 17601 elem = elem.firstElementChild; 17602 } 17603 17604 return elem; 17605 } ).append( this ); 17606 } 17607 17608 return this; 17609 }, 17610 17611 wrapInner: function( html ) { 17612 if ( isFunction( html ) ) { 17613 return this.each( function( i ) { 17614 jQuery( this ).wrapInner( html.call( this, i ) ); 17615 } ); 17616 } 17617 17618 return this.each( function() { 17619 var self = jQuery( this ), 17620 contents = self.contents(); 17621 17622 if ( contents.length ) { 17623 contents.wrapAll( html ); 17624 17625 } else { 17626 self.append( html ); 17627 } 17628 } ); 17629 }, 17630 17631 wrap: function( html ) { 17632 var htmlIsFunction = isFunction( html ); 17633 17634 return this.each( function( i ) { 17635 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 17636 } ); 17637 }, 17638 17639 unwrap: function( selector ) { 17640 this.parent( selector ).not( "body" ).each( function() { 17641 jQuery( this ).replaceWith( this.childNodes ); 17642 } ); 17643 return this; 17644 } 17645} ); 17646 17647 17648jQuery.expr.pseudos.hidden = function( elem ) { 17649 return !jQuery.expr.pseudos.visible( elem ); 17650}; 17651jQuery.expr.pseudos.visible = function( elem ) { 17652 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 17653}; 17654 17655 17656 17657 17658jQuery.ajaxSettings.xhr = function() { 17659 try { 17660 return new window.XMLHttpRequest(); 17661 } catch ( e ) {} 17662}; 17663 17664var xhrSuccessStatus = { 17665 17666 // File protocol always yields status code 0, assume 200 17667 0: 200, 17668 17669 // Support: IE <=9 only 17670 // trac-1450: sometimes IE returns 1223 when it should be 204 17671 1223: 204 17672 }, 17673 xhrSupported = jQuery.ajaxSettings.xhr(); 17674 17675support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 17676support.ajax = xhrSupported = !!xhrSupported; 17677 17678jQuery.ajaxTransport( function( options ) { 17679 var callback, errorCallback; 17680 17681 // Cross domain only allowed if supported through XMLHttpRequest 17682 if ( support.cors || xhrSupported && !options.crossDomain ) { 17683 return { 17684 send: function( headers, complete ) { 17685 var i, 17686 xhr = options.xhr(); 17687 17688 xhr.open( 17689 options.type, 17690 options.url, 17691 options.async, 17692 options.username, 17693 options.password 17694 ); 17695 17696 // Apply custom fields if provided 17697 if ( options.xhrFields ) { 17698 for ( i in options.xhrFields ) { 17699 xhr[ i ] = options.xhrFields[ i ]; 17700 } 17701 } 17702 17703 // Override mime type if needed 17704 if ( options.mimeType && xhr.overrideMimeType ) { 17705 xhr.overrideMimeType( options.mimeType ); 17706 } 17707 17708 // X-Requested-With header 17709 // For cross-domain requests, seeing as conditions for a preflight are 17710 // akin to a jigsaw puzzle, we simply never set it to be sure. 17711 // (it can always be set on a per-request basis or even using ajaxSetup) 17712 // For same-domain requests, won't change header if already provided. 17713 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 17714 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 17715 } 17716 17717 // Set headers 17718 for ( i in headers ) { 17719 xhr.setRequestHeader( i, headers[ i ] ); 17720 } 17721 17722 // Callback 17723 callback = function( type ) { 17724 return function() { 17725 if ( callback ) { 17726 callback = errorCallback = xhr.onload = 17727 xhr.onerror = xhr.onabort = xhr.ontimeout = 17728 xhr.onreadystatechange = null; 17729 17730 if ( type === "abort" ) { 17731 xhr.abort(); 17732 } else if ( type === "error" ) { 17733 17734 // Support: IE <=9 only 17735 // On a manual native abort, IE9 throws 17736 // errors on any property access that is not readyState 17737 if ( typeof xhr.status !== "number" ) { 17738 complete( 0, "error" ); 17739 } else { 17740 complete( 17741 17742 // File: protocol always yields status 0; see trac-8605, trac-14207 17743 xhr.status, 17744 xhr.statusText 17745 ); 17746 } 17747 } else { 17748 complete( 17749 xhrSuccessStatus[ xhr.status ] || xhr.status, 17750 xhr.statusText, 17751 17752 // Support: IE <=9 only 17753 // IE9 has no XHR2 but throws on binary (trac-11426) 17754 // For XHR2 non-text, let the caller handle it (gh-2498) 17755 ( xhr.responseType || "text" ) !== "text" || 17756 typeof xhr.responseText !== "string" ? 17757 { binary: xhr.response } : 17758 { text: xhr.responseText }, 17759 xhr.getAllResponseHeaders() 17760 ); 17761 } 17762 } 17763 }; 17764 }; 17765 17766 // Listen to events 17767 xhr.onload = callback(); 17768 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 17769 17770 // Support: IE 9 only 17771 // Use onreadystatechange to replace onabort 17772 // to handle uncaught aborts 17773 if ( xhr.onabort !== undefined ) { 17774 xhr.onabort = errorCallback; 17775 } else { 17776 xhr.onreadystatechange = function() { 17777 17778 // Check readyState before timeout as it changes 17779 if ( xhr.readyState === 4 ) { 17780 17781 // Allow onerror to be called first, 17782 // but that will not handle a native abort 17783 // Also, save errorCallback to a variable 17784 // as xhr.onerror cannot be accessed 17785 window.setTimeout( function() { 17786 if ( callback ) { 17787 errorCallback(); 17788 } 17789 } ); 17790 } 17791 }; 17792 } 17793 17794 // Create the abort callback 17795 callback = callback( "abort" ); 17796 17797 try { 17798 17799 // Do send the request (this may raise an exception) 17800 xhr.send( options.hasContent && options.data || null ); 17801 } catch ( e ) { 17802 17803 // trac-14683: Only rethrow if this hasn't been notified as an error yet 17804 if ( callback ) { 17805 throw e; 17806 } 17807 } 17808 }, 17809 17810 abort: function() { 17811 if ( callback ) { 17812 callback(); 17813 } 17814 } 17815 }; 17816 } 17817} ); 17818 17819 17820 17821 17822// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 17823jQuery.ajaxPrefilter( function( s ) { 17824 if ( s.crossDomain ) { 17825 s.contents.script = false; 17826 } 17827} ); 17828 17829// Install script dataType 17830jQuery.ajaxSetup( { 17831 accepts: { 17832 script: "text/javascript, application/javascript, " + 17833 "application/ecmascript, application/x-ecmascript" 17834 }, 17835 contents: { 17836 script: /\b(?:java|ecma)script\b/ 17837 }, 17838 converters: { 17839 "text script": function( text ) { 17840 jQuery.globalEval( text ); 17841 return text; 17842 } 17843 } 17844} ); 17845 17846// Handle cache's special case and crossDomain 17847jQuery.ajaxPrefilter( "script", function( s ) { 17848 if ( s.cache === undefined ) { 17849 s.cache = false; 17850 } 17851 if ( s.crossDomain ) { 17852 s.type = "GET"; 17853 } 17854} ); 17855 17856// Bind script tag hack transport 17857jQuery.ajaxTransport( "script", function( s ) { 17858 17859 // This transport only deals with cross domain or forced-by-attrs requests 17860 if ( s.crossDomain || s.scriptAttrs ) { 17861 var script, callback; 17862 return { 17863 send: function( _, complete ) { 17864 script = jQuery( "<script>" ) 17865 .attr( s.scriptAttrs || {} ) 17866 .prop( { charset: s.scriptCharset, src: s.url } ) 17867 .on( "load error", callback = function( evt ) { 17868 script.remove(); 17869 callback = null; 17870 if ( evt ) { 17871 complete( evt.type === "error" ? 404 : 200, evt.type ); 17872 } 17873 } ); 17874 17875 // Use native DOM manipulation to avoid our domManip AJAX trickery 17876 document.head.appendChild( script[ 0 ] ); 17877 }, 17878 abort: function() { 17879 if ( callback ) { 17880 callback(); 17881 } 17882 } 17883 }; 17884 } 17885} ); 17886 17887 17888 17889 17890var oldCallbacks = [], 17891 rjsonp = /(=)\?(?=&|$)|\?\?/; 17892 17893// Default jsonp settings 17894jQuery.ajaxSetup( { 17895 jsonp: "callback", 17896 jsonpCallback: function() { 17897 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 17898 this[ callback ] = true; 17899 return callback; 17900 } 17901} ); 17902 17903// Detect, normalize options and install callbacks for jsonp requests 17904jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 17905 17906 var callbackName, overwritten, responseContainer, 17907 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 17908 "url" : 17909 typeof s.data === "string" && 17910 ( s.contentType || "" ) 17911 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 17912 rjsonp.test( s.data ) && "data" 17913 ); 17914 17915 // Handle iff the expected data type is "jsonp" or we have a parameter to set 17916 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 17917 17918 // Get callback name, remembering preexisting value associated with it 17919 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 17920 s.jsonpCallback() : 17921 s.jsonpCallback; 17922 17923 // Insert callback into url or form data 17924 if ( jsonProp ) { 17925 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 17926 } else if ( s.jsonp !== false ) { 17927 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 17928 } 17929 17930 // Use data converter to retrieve json after script execution 17931 s.converters[ "script json" ] = function() { 17932 if ( !responseContainer ) { 17933 jQuery.error( callbackName + " was not called" ); 17934 } 17935 return responseContainer[ 0 ]; 17936 }; 17937 17938 // Force json dataType 17939 s.dataTypes[ 0 ] = "json"; 17940 17941 // Install callback 17942 overwritten = window[ callbackName ]; 17943 window[ callbackName ] = function() { 17944 responseContainer = arguments; 17945 }; 17946 17947 // Clean-up function (fires after converters) 17948 jqXHR.always( function() { 17949 17950 // If previous value didn't exist - remove it 17951 if ( overwritten === undefined ) { 17952 jQuery( window ).removeProp( callbackName ); 17953 17954 // Otherwise restore preexisting value 17955 } else { 17956 window[ callbackName ] = overwritten; 17957 } 17958 17959 // Save back as free 17960 if ( s[ callbackName ] ) { 17961 17962 // Make sure that re-using the options doesn't screw things around 17963 s.jsonpCallback = originalSettings.jsonpCallback; 17964 17965 // Save the callback name for future use 17966 oldCallbacks.push( callbackName ); 17967 } 17968 17969 // Call if it was a function and we have a response 17970 if ( responseContainer && isFunction( overwritten ) ) { 17971 overwritten( responseContainer[ 0 ] ); 17972 } 17973 17974 responseContainer = overwritten = undefined; 17975 } ); 17976 17977 // Delegate to script 17978 return "script"; 17979 } 17980} ); 17981 17982 17983 17984 17985// Support: Safari 8 only 17986// In Safari 8 documents created via document.implementation.createHTMLDocument 17987// collapse sibling forms: the second one becomes a child of the first one. 17988// Because of that, this security measure has to be disabled in Safari 8. 17989// https://bugs.webkit.org/show_bug.cgi?id=137337 17990support.createHTMLDocument = ( function() { 17991 var body = document.implementation.createHTMLDocument( "" ).body; 17992 body.innerHTML = "<form></form><form></form>"; 17993 return body.childNodes.length === 2; 17994} )(); 17995 17996 17997// Argument "data" should be string of html 17998// context (optional): If specified, the fragment will be created in this context, 17999// defaults to document 18000// keepScripts (optional): If true, will include scripts passed in the html string 18001jQuery.parseHTML = function( data, context, keepScripts ) { 18002 if ( typeof data !== "string" ) { 18003 return []; 18004 } 18005 if ( typeof context === "boolean" ) { 18006 keepScripts = context; 18007 context = false; 18008 } 18009 18010 var base, parsed, scripts; 18011 18012 if ( !context ) { 18013 18014 // Stop scripts or inline event handlers from being executed immediately 18015 // by using document.implementation 18016 if ( support.createHTMLDocument ) { 18017 context = document.implementation.createHTMLDocument( "" ); 18018 18019 // Set the base href for the created document 18020 // so any parsed elements with URLs 18021 // are based on the document's URL (gh-2965) 18022 base = context.createElement( "base" ); 18023 base.href = document.location.href; 18024 context.head.appendChild( base ); 18025 } else { 18026 context = document; 18027 } 18028 } 18029 18030 parsed = rsingleTag.exec( data ); 18031 scripts = !keepScripts && []; 18032 18033 // Single tag 18034 if ( parsed ) { 18035 return [ context.createElement( parsed[ 1 ] ) ]; 18036 } 18037 18038 parsed = buildFragment( [ data ], context, scripts ); 18039 18040 if ( scripts && scripts.length ) { 18041 jQuery( scripts ).remove(); 18042 } 18043 18044 return jQuery.merge( [], parsed.childNodes ); 18045}; 18046 18047 18048/** 18049 * Load a url into a page 18050 */ 18051jQuery.fn.load = function( url, params, callback ) { 18052 var selector, type, response, 18053 self = this, 18054 off = url.indexOf( " " ); 18055 18056 if ( off > -1 ) { 18057 selector = stripAndCollapse( url.slice( off ) ); 18058 url = url.slice( 0, off ); 18059 } 18060 18061 // If it's a function 18062 if ( isFunction( params ) ) { 18063 18064 // We assume that it's the callback 18065 callback = params; 18066 params = undefined; 18067 18068 // Otherwise, build a param string 18069 } else if ( params && typeof params === "object" ) { 18070 type = "POST"; 18071 } 18072 18073 // If we have elements to modify, make the request 18074 if ( self.length > 0 ) { 18075 jQuery.ajax( { 18076 url: url, 18077 18078 // If "type" variable is undefined, then "GET" method will be used. 18079 // Make value of this field explicit since 18080 // user can override it through ajaxSetup method 18081 type: type || "GET", 18082 dataType: "html", 18083 data: params 18084 } ).done( function( responseText ) { 18085 18086 // Save response for use in complete callback 18087 response = arguments; 18088 18089 self.html( selector ? 18090 18091 // If a selector was specified, locate the right elements in a dummy div 18092 // Exclude scripts to avoid IE 'Permission Denied' errors 18093 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 18094 18095 // Otherwise use the full result 18096 responseText ); 18097 18098 // If the request succeeds, this function gets "data", "status", "jqXHR" 18099 // but they are ignored because response was set above. 18100 // If it fails, this function gets "jqXHR", "status", "error" 18101 } ).always( callback && function( jqXHR, status ) { 18102 self.each( function() { 18103 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 18104 } ); 18105 } ); 18106 } 18107 18108 return this; 18109}; 18110 18111 18112 18113 18114jQuery.expr.pseudos.animated = function( elem ) { 18115 return jQuery.grep( jQuery.timers, function( fn ) { 18116 return elem === fn.elem; 18117 } ).length; 18118}; 18119 18120 18121 18122 18123jQuery.offset = { 18124 setOffset: function( elem, options, i ) { 18125 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 18126 position = jQuery.css( elem, "position" ), 18127 curElem = jQuery( elem ), 18128 props = {}; 18129 18130 // Set position first, in-case top/left are set even on static elem 18131 if ( position === "static" ) { 18132 elem.style.position = "relative"; 18133 } 18134 18135 curOffset = curElem.offset(); 18136 curCSSTop = jQuery.css( elem, "top" ); 18137 curCSSLeft = jQuery.css( elem, "left" ); 18138 calculatePosition = ( position === "absolute" || position === "fixed" ) && 18139 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 18140 18141 // Need to be able to calculate position if either 18142 // top or left is auto and position is either absolute or fixed 18143 if ( calculatePosition ) { 18144 curPosition = curElem.position(); 18145 curTop = curPosition.top; 18146 curLeft = curPosition.left; 18147 18148 } else { 18149 curTop = parseFloat( curCSSTop ) || 0; 18150 curLeft = parseFloat( curCSSLeft ) || 0; 18151 } 18152 18153 if ( isFunction( options ) ) { 18154 18155 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 18156 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 18157 } 18158 18159 if ( options.top != null ) { 18160 props.top = ( options.top - curOffset.top ) + curTop; 18161 } 18162 if ( options.left != null ) { 18163 props.left = ( options.left - curOffset.left ) + curLeft; 18164 } 18165 18166 if ( "using" in options ) { 18167 options.using.call( elem, props ); 18168 18169 } else { 18170 curElem.css( props ); 18171 } 18172 } 18173}; 18174 18175jQuery.fn.extend( { 18176 18177 // offset() relates an element's border box to the document origin 18178 offset: function( options ) { 18179 18180 // Preserve chaining for setter 18181 if ( arguments.length ) { 18182 return options === undefined ? 18183 this : 18184 this.each( function( i ) { 18185 jQuery.offset.setOffset( this, options, i ); 18186 } ); 18187 } 18188 18189 var rect, win, 18190 elem = this[ 0 ]; 18191 18192 if ( !elem ) { 18193 return; 18194 } 18195 18196 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 18197 // Support: IE <=11 only 18198 // Running getBoundingClientRect on a 18199 // disconnected node in IE throws an error 18200 if ( !elem.getClientRects().length ) { 18201 return { top: 0, left: 0 }; 18202 } 18203 18204 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 18205 rect = elem.getBoundingClientRect(); 18206 win = elem.ownerDocument.defaultView; 18207 return { 18208 top: rect.top + win.pageYOffset, 18209 left: rect.left + win.pageXOffset 18210 }; 18211 }, 18212 18213 // position() relates an element's margin box to its offset parent's padding box 18214 // This corresponds to the behavior of CSS absolute positioning 18215 position: function() { 18216 if ( !this[ 0 ] ) { 18217 return; 18218 } 18219 18220 var offsetParent, offset, doc, 18221 elem = this[ 0 ], 18222 parentOffset = { top: 0, left: 0 }; 18223 18224 // position:fixed elements are offset from the viewport, which itself always has zero offset 18225 if ( jQuery.css( elem, "position" ) === "fixed" ) { 18226 18227 // Assume position:fixed implies availability of getBoundingClientRect 18228 offset = elem.getBoundingClientRect(); 18229 18230 } else { 18231 offset = this.offset(); 18232 18233 // Account for the *real* offset parent, which can be the document or its root element 18234 // when a statically positioned element is identified 18235 doc = elem.ownerDocument; 18236 offsetParent = elem.offsetParent || doc.documentElement; 18237 while ( offsetParent && 18238 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 18239 jQuery.css( offsetParent, "position" ) === "static" ) { 18240 18241 offsetParent = offsetParent.parentNode; 18242 } 18243 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 18244 18245 // Incorporate borders into its offset, since they are outside its content origin 18246 parentOffset = jQuery( offsetParent ).offset(); 18247 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 18248 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 18249 } 18250 } 18251 18252 // Subtract parent offsets and element margins 18253 return { 18254 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 18255 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 18256 }; 18257 }, 18258 18259 // This method will return documentElement in the following cases: 18260 // 1) For the element inside the iframe without offsetParent, this method will return 18261 // documentElement of the parent window 18262 // 2) For the hidden or detached element 18263 // 3) For body or html element, i.e. in case of the html node - it will return itself 18264 // 18265 // but those exceptions were never presented as a real life use-cases 18266 // and might be considered as more preferable results. 18267 // 18268 // This logic, however, is not guaranteed and can change at any point in the future 18269 offsetParent: function() { 18270 return this.map( function() { 18271 var offsetParent = this.offsetParent; 18272 18273 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 18274 offsetParent = offsetParent.offsetParent; 18275 } 18276 18277 return offsetParent || documentElement; 18278 } ); 18279 } 18280} ); 18281 18282// Create scrollLeft and scrollTop methods 18283jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 18284 var top = "pageYOffset" === prop; 18285 18286 jQuery.fn[ method ] = function( val ) { 18287 return access( this, function( elem, method, val ) { 18288 18289 // Coalesce documents and windows 18290 var win; 18291 if ( isWindow( elem ) ) { 18292 win = elem; 18293 } else if ( elem.nodeType === 9 ) { 18294 win = elem.defaultView; 18295 } 18296 18297 if ( val === undefined ) { 18298 return win ? win[ prop ] : elem[ method ]; 18299 } 18300 18301 if ( win ) { 18302 win.scrollTo( 18303 !top ? val : win.pageXOffset, 18304 top ? val : win.pageYOffset 18305 ); 18306 18307 } else { 18308 elem[ method ] = val; 18309 } 18310 }, method, val, arguments.length ); 18311 }; 18312} ); 18313 18314// Support: Safari <=7 - 9.1, Chrome <=37 - 49 18315// Add the top/left cssHooks using jQuery.fn.position 18316// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 18317// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 18318// getComputedStyle returns percent when specified for top/left/bottom/right; 18319// rather than make the css module depend on the offset module, just check for it here 18320jQuery.each( [ "top", "left" ], function( _i, prop ) { 18321 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 18322 function( elem, computed ) { 18323 if ( computed ) { 18324 computed = curCSS( elem, prop ); 18325 18326 // If curCSS returns percentage, fallback to offset 18327 return rnumnonpx.test( computed ) ? 18328 jQuery( elem ).position()[ prop ] + "px" : 18329 computed; 18330 } 18331 } 18332 ); 18333} ); 18334 18335 18336// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 18337jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 18338 jQuery.each( { 18339 padding: "inner" + name, 18340 content: type, 18341 "": "outer" + name 18342 }, function( defaultExtra, funcName ) { 18343 18344 // Margin is only for outerHeight, outerWidth 18345 jQuery.fn[ funcName ] = function( margin, value ) { 18346 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 18347 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 18348 18349 return access( this, function( elem, type, value ) { 18350 var doc; 18351 18352 if ( isWindow( elem ) ) { 18353 18354 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 18355 return funcName.indexOf( "outer" ) === 0 ? 18356 elem[ "inner" + name ] : 18357 elem.document.documentElement[ "client" + name ]; 18358 } 18359 18360 // Get document width or height 18361 if ( elem.nodeType === 9 ) { 18362 doc = elem.documentElement; 18363 18364 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 18365 // whichever is greatest 18366 return Math.max( 18367 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 18368 elem.body[ "offset" + name ], doc[ "offset" + name ], 18369 doc[ "client" + name ] 18370 ); 18371 } 18372 18373 return value === undefined ? 18374 18375 // Get width or height on the element, requesting but not forcing parseFloat 18376 jQuery.css( elem, type, extra ) : 18377 18378 // Set width or height on the element 18379 jQuery.style( elem, type, value, extra ); 18380 }, type, chainable ? margin : undefined, chainable ); 18381 }; 18382 } ); 18383} ); 18384 18385 18386jQuery.each( [ 18387 "ajaxStart", 18388 "ajaxStop", 18389 "ajaxComplete", 18390 "ajaxError", 18391 "ajaxSuccess", 18392 "ajaxSend" 18393], function( _i, type ) { 18394 jQuery.fn[ type ] = function( fn ) { 18395 return this.on( type, fn ); 18396 }; 18397} ); 18398 18399 18400 18401 18402jQuery.fn.extend( { 18403 18404 bind: function( types, data, fn ) { 18405 return this.on( types, null, data, fn ); 18406 }, 18407 unbind: function( types, fn ) { 18408 return this.off( types, null, fn ); 18409 }, 18410 18411 delegate: function( selector, types, data, fn ) { 18412 return this.on( types, selector, data, fn ); 18413 }, 18414 undelegate: function( selector, types, fn ) { 18415 18416 // ( namespace ) or ( selector, types [, fn] ) 18417 return arguments.length === 1 ? 18418 this.off( selector, "**" ) : 18419 this.off( types, selector || "**", fn ); 18420 }, 18421 18422 hover: function( fnOver, fnOut ) { 18423 return this 18424 .on( "mouseenter", fnOver ) 18425 .on( "mouseleave", fnOut || fnOver ); 18426 } 18427} ); 18428 18429jQuery.each( 18430 ( "blur focus focusin focusout resize scroll click dblclick " + 18431 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 18432 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 18433 function( _i, name ) { 18434 18435 // Handle event binding 18436 jQuery.fn[ name ] = function( data, fn ) { 18437 return arguments.length > 0 ? 18438 this.on( name, null, data, fn ) : 18439 this.trigger( name ); 18440 }; 18441 } 18442); 18443 18444 18445 18446 18447// Support: Android <=4.0 only 18448// Make sure we trim BOM and NBSP 18449// Require that the "whitespace run" starts from a non-whitespace 18450// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 18451var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 18452 18453// Bind a function to a context, optionally partially applying any 18454// arguments. 18455// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 18456// However, it is not slated for removal any time soon 18457jQuery.proxy = function( fn, context ) { 18458 var tmp, args, proxy; 18459 18460 if ( typeof context === "string" ) { 18461 tmp = fn[ context ]; 18462 context = fn; 18463 fn = tmp; 18464 } 18465 18466 // Quick check to determine if target is callable, in the spec 18467 // this throws a TypeError, but we will just return undefined. 18468 if ( !isFunction( fn ) ) { 18469 return undefined; 18470 } 18471 18472 // Simulated bind 18473 args = slice.call( arguments, 2 ); 18474 proxy = function() { 18475 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 18476 }; 18477 18478 // Set the guid of unique handler to the same of original handler, so it can be removed 18479 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 18480 18481 return proxy; 18482}; 18483 18484jQuery.holdReady = function( hold ) { 18485 if ( hold ) { 18486 jQuery.readyWait++; 18487 } else { 18488 jQuery.ready( true ); 18489 } 18490}; 18491jQuery.isArray = Array.isArray; 18492jQuery.parseJSON = JSON.parse; 18493jQuery.nodeName = nodeName; 18494jQuery.isFunction = isFunction; 18495jQuery.isWindow = isWindow; 18496jQuery.camelCase = camelCase; 18497jQuery.type = toType; 18498 18499jQuery.now = Date.now; 18500 18501jQuery.isNumeric = function( obj ) { 18502 18503 // As of jQuery 3.0, isNumeric is limited to 18504 // strings and numbers (primitives or objects) 18505 // that can be coerced to finite numbers (gh-2662) 18506 var type = jQuery.type( obj ); 18507 return ( type === "number" || type === "string" ) && 18508 18509 // parseFloat NaNs numeric-cast false positives ("") 18510 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 18511 // subtraction forces infinities to NaN 18512 !isNaN( obj - parseFloat( obj ) ); 18513}; 18514 18515jQuery.trim = function( text ) { 18516 return text == null ? 18517 "" : 18518 ( text + "" ).replace( rtrim, "$1" ); 18519}; 18520 18521 18522 18523// Register as a named AMD module, since jQuery can be concatenated with other 18524// files that may use define, but not via a proper concatenation script that 18525// understands anonymous AMD modules. A named AMD is safest and most robust 18526// way to register. Lowercase jquery is used because AMD module names are 18527// derived from file names, and jQuery is normally delivered in a lowercase 18528// file name. Do this after creating the global so that if an AMD module wants 18529// to call noConflict to hide this version of jQuery, it will work. 18530 18531// Note that for maximum portability, libraries that are not jQuery should 18532// declare themselves as anonymous modules, and avoid setting a global if an 18533// AMD loader is present. jQuery is a special case. For more information, see 18534// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 18535 18536if ( true ) { 18537 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 18538 return jQuery; 18539 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 18540 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 18541} 18542 18543 18544 18545 18546var 18547 18548 // Map over jQuery in case of overwrite 18549 _jQuery = window.jQuery, 18550 18551 // Map over the $ in case of overwrite 18552 _$ = window.$; 18553 18554jQuery.noConflict = function( deep ) { 18555 if ( window.$ === jQuery ) { 18556 window.$ = _$; 18557 } 18558 18559 if ( deep && window.jQuery === jQuery ) { 18560 window.jQuery = _jQuery; 18561 } 18562 18563 return jQuery; 18564}; 18565 18566// Expose jQuery and $ identifiers, even in AMD 18567// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 18568// and CommonJS for browser emulators (trac-13566) 18569if ( typeof noGlobal === "undefined" ) { 18570 window.jQuery = window.$ = jQuery; 18571} 18572 18573 18574 18575 18576return jQuery; 18577} ); 18578 18579 18580/***/ }), 18581
vendor: 46,377 bytes, lines 18582-20529
18582/***/ "./node_modules/magnific-popup/dist/jquery.magnific-popup.js": 18583/*!*******************************************************************!*\ 18584 !*** ./node_modules/magnific-popup/dist/jquery.magnific-popup.js ***! 18585 \*******************************************************************/ 18586/***/ ((module, exports, __webpack_require__) => { 18587 18588var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Magnific Popup - v1.2.0 - 2024-06-08 18589* http://dimsemenov.com/plugins/magnific-popup/ 18590* Copyright (c) 2024 Dmytro Semenov; */ 18591;(function (factory) { 18592if (true) { 18593 // AMD. Register as an anonymous module. 18594 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 18595 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 18596 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 18597 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 18598 } else {} 18599 }(function($) { 18600 18601/*>>core*/ 18602/** 18603 * 18604 * Magnific Popup Core JS file 18605 * 18606 */ 18607 18608 18609/** 18610 * Private static constants 18611 */ 18612var CLOSE_EVENT = 'Close', 18613 BEFORE_CLOSE_EVENT = 'BeforeClose', 18614 AFTER_CLOSE_EVENT = 'AfterClose', 18615 BEFORE_APPEND_EVENT = 'BeforeAppend', 18616 MARKUP_PARSE_EVENT = 'MarkupParse', 18617 OPEN_EVENT = 'Open', 18618 CHANGE_EVENT = 'Change', 18619 NS = 'mfp', 18620 EVENT_NS = '.' + NS, 18621 READY_CLASS = 'mfp-ready', 18622 REMOVING_CLASS = 'mfp-removing', 18623 PREVENT_CLOSE_CLASS = 'mfp-prevent-close'; 18624 18625 18626/** 18627 * Private vars 18628 */ 18629/*jshint -W079 */ 18630var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this' 18631 MagnificPopup = function(){}, 18632 _isJQ = !!(window.jQuery), 18633 _prevStatus, 18634 _window = $(window), 18635 _document, 18636 _prevContentType, 18637 _wrapClasses, 18638 _currPopupType; 18639 18640 18641/** 18642 * Private functions 18643 */ 18644var _mfpOn = function(name, f) { 18645 mfp.ev.on(NS + name + EVENT_NS, f); 18646 }, 18647 _getEl = function(className, appendTo, html, raw) { 18648 var el = document.createElement('div'); 18649 el.className = 'mfp-'+className; 18650 if(html) { 18651 el.innerHTML = html; 18652 } 18653 if(!raw) { 18654 el = $(el); 18655 if(appendTo) { 18656 el.appendTo(appendTo); 18657 } 18658 } else if(appendTo) { 18659 appendTo.appendChild(el); 18660 } 18661 return el; 18662 }, 18663 _mfpTrigger = function(e, data) { 18664 mfp.ev.triggerHandler(NS + e, data); 18665 18666 if(mfp.st.callbacks) { 18667 // converts "mfpEventName" to "eventName" callback and triggers it if it's present 18668 e = e.charAt(0).toLowerCase() + e.slice(1); 18669 if(mfp.st.callbacks[e]) { 18670 mfp.st.callbacks[e].apply(mfp, Array.isArray(data) ? data : [data]); 18671 } 18672 } 18673 }, 18674 _getCloseBtn = function(type) { 18675 if(type !== _currPopupType || !mfp.currTemplate.closeBtn) { 18676 mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) ); 18677 _currPopupType = type; 18678 } 18679 return mfp.currTemplate.closeBtn; 18680 }, 18681 // Initialize Magnific Popup only when called at least once 18682 _checkInstance = function() { 18683 if(!$.magnificPopup.instance) { 18684 /*jshint -W020 */ 18685 mfp = new MagnificPopup(); 18686 mfp.init(); 18687 $.magnificPopup.instance = mfp; 18688 } 18689 }, 18690 // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr 18691 supportsTransitions = function() { 18692 var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist 18693 v = ['ms','O','Moz','Webkit']; // 'v' for vendor 18694 18695 if( s['transition'] !== undefined ) { 18696 return true; 18697 } 18698 18699 while( v.length ) { 18700 if( v.pop() + 'Transition' in s ) { 18701 return true; 18702 } 18703 } 18704 18705 return false; 18706 }; 18707 18708 18709 18710/** 18711 * Public functions 18712 */ 18713MagnificPopup.prototype = { 18714 18715 constructor: MagnificPopup, 18716 18717 /** 18718 * Initializes Magnific Popup plugin. 18719 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed 18720 */ 18721 init: function() { 18722 var appVersion = navigator.appVersion; 18723 mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener; 18724 mfp.isAndroid = (/android/gi).test(appVersion); 18725 mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion); 18726 mfp.supportsTransition = supportsTransitions(); 18727 18728 // We disable fixed positioned lightbox on devices that don't handle it nicely. 18729 // If you know a better way of detecting this - let me know. 18730 mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) ); 18731 _document = $(document); 18732 18733 mfp.popupsCache = {}; 18734 }, 18735 18736 /** 18737 * Opens popup 18738 * @param data [description] 18739 */ 18740 open: function(data) { 18741 18742 var i; 18743 18744 if(data.isObj === false) { 18745 // convert jQuery collection to array to avoid conflicts later 18746 mfp.items = data.items.toArray(); 18747 18748 mfp.index = 0; 18749 var items = data.items, 18750 item; 18751 for(i = 0; i < items.length; i++) { 18752 item = items[i]; 18753 if(item.parsed) { 18754 item = item.el[0]; 18755 } 18756 if(item === data.el[0]) { 18757 mfp.index = i; 18758 break; 18759 } 18760 } 18761 } else { 18762 mfp.items = Array.isArray(data.items) ? data.items : [data.items]; 18763 mfp.index = data.index || 0; 18764 } 18765 18766 // if popup is already opened - we just update the content 18767 if(mfp.isOpen) { 18768 mfp.updateItemHTML(); 18769 return; 18770 } 18771 18772 mfp.types = []; 18773 _wrapClasses = ''; 18774 if(data.mainEl && data.mainEl.length) { 18775 mfp.ev = data.mainEl.eq(0); 18776 } else { 18777 mfp.ev = _document; 18778 } 18779 18780 if(data.key) { 18781 if(!mfp.popupsCache[data.key]) { 18782 mfp.popupsCache[data.key] = {}; 18783 } 18784 mfp.currTemplate = mfp.popupsCache[data.key]; 18785 } else { 18786 mfp.currTemplate = {}; 18787 } 18788 18789 18790 18791 mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 18792 mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos; 18793 18794 if(mfp.st.modal) { 18795 mfp.st.closeOnContentClick = false; 18796 mfp.st.closeOnBgClick = false; 18797 mfp.st.showCloseBtn = false; 18798 mfp.st.enableEscapeKey = false; 18799 } 18800 18801 18802 // Building markup 18803 // main containers are created only once 18804 if(!mfp.bgOverlay) { 18805 18806 // Dark overlay 18807 mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() { 18808 mfp.close(); 18809 }); 18810 18811 mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) { 18812 if(mfp._checkIfClose(e.target)) { 18813 mfp.close(); 18814 } 18815 }); 18816 18817 mfp.container = _getEl('container', mfp.wrap); 18818 } 18819 18820 mfp.contentContainer = _getEl('content'); 18821 if(mfp.st.preloader) { 18822 mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading); 18823 } 18824 18825 18826 // Initializing modules 18827 var modules = $.magnificPopup.modules; 18828 for(i = 0; i < modules.length; i++) { 18829 var n = modules[i]; 18830 n = n.charAt(0).toUpperCase() + n.slice(1); 18831 mfp['init'+n].call(mfp); 18832 } 18833 _mfpTrigger('BeforeOpen'); 18834 18835 18836 if(mfp.st.showCloseBtn) { 18837 // Close button 18838 if(!mfp.st.closeBtnInside) { 18839 mfp.wrap.append( _getCloseBtn() ); 18840 } else { 18841 _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) { 18842 values.close_replaceWith = _getCloseBtn(item.type); 18843 }); 18844 _wrapClasses += ' mfp-close-btn-in'; 18845 } 18846 } 18847 18848 if(mfp.st.alignTop) { 18849 _wrapClasses += ' mfp-align-top'; 18850 } 18851 18852 18853 18854 if(mfp.fixedContentPos) { 18855 mfp.wrap.css({ 18856 overflow: mfp.st.overflowY, 18857 overflowX: 'hidden', 18858 overflowY: mfp.st.overflowY 18859 }); 18860 } else { 18861 mfp.wrap.css({ 18862 top: _window.scrollTop(), 18863 position: 'absolute' 18864 }); 18865 } 18866 if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) { 18867 mfp.bgOverlay.css({ 18868 height: _document.height(), 18869 position: 'absolute' 18870 }); 18871 } 18872 18873 18874 18875 if(mfp.st.enableEscapeKey) { 18876 // Close on ESC key 18877 _document.on('keyup' + EVENT_NS, function(e) { 18878 if(e.keyCode === 27) { 18879 mfp.close(); 18880 } 18881 }); 18882 } 18883 18884 _window.on('resize' + EVENT_NS, function() { 18885 mfp.updateSize(); 18886 }); 18887 18888 18889 if(!mfp.st.closeOnContentClick) { 18890 _wrapClasses += ' mfp-auto-cursor'; 18891 } 18892 18893 if(_wrapClasses) 18894 mfp.wrap.addClass(_wrapClasses); 18895 18896 18897 // this triggers recalculation of layout, so we get it once to not to trigger twice 18898 var windowHeight = mfp.wH = _window.height(); 18899 18900 18901 var windowStyles = {}; 18902 18903 if( mfp.fixedContentPos ) { 18904 if(mfp._hasScrollBar(windowHeight)){ 18905 var s = mfp._getScrollbarSize(); 18906 if(s) { 18907 windowStyles.marginRight = s; 18908 } 18909 } 18910 } 18911 18912 if(mfp.fixedContentPos) { 18913 if(!mfp.isIE7) { 18914 windowStyles.overflow = 'hidden'; 18915 } else { 18916 // ie7 double-scroll bug 18917 $('body, html').css('overflow', 'hidden'); 18918 } 18919 } 18920 18921 18922 18923 var classesToadd = mfp.st.mainClass; 18924 if(mfp.isIE7) { 18925 classesToadd += ' mfp-ie7'; 18926 } 18927 if(classesToadd) { 18928 mfp._addClassToMFP( classesToadd ); 18929 } 18930 18931 // add content 18932 mfp.updateItemHTML(); 18933 18934 _mfpTrigger('BuildControls'); 18935 18936 // remove scrollbar, add margin e.t.c 18937 $('html').css(windowStyles); 18938 18939 // add everything to DOM 18940 mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) ); 18941 18942 // Save last focused element 18943 mfp._lastFocusedEl = document.activeElement; 18944 18945 // Wait for next cycle to allow CSS transition 18946 setTimeout(function() { 18947 18948 if(mfp.content) { 18949 mfp._addClassToMFP(READY_CLASS); 18950 mfp._setFocus(); 18951 } else { 18952 // if content is not defined (not loaded e.t.c) we add class only for BG 18953 mfp.bgOverlay.addClass(READY_CLASS); 18954 } 18955 18956 // Trap the focus in popup 18957 _document.on('focusin' + EVENT_NS, mfp._onFocusIn); 18958 18959 }, 16); 18960 18961 mfp.isOpen = true; 18962 mfp.updateSize(windowHeight); 18963 _mfpTrigger(OPEN_EVENT); 18964 18965 return data; 18966 }, 18967 18968 /** 18969 * Closes the popup 18970 */ 18971 close: function() { 18972 if(!mfp.isOpen) return; 18973 _mfpTrigger(BEFORE_CLOSE_EVENT); 18974 18975 mfp.isOpen = false; 18976 // for CSS3 animation 18977 if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) { 18978 mfp._addClassToMFP(REMOVING_CLASS); 18979 setTimeout(function() { 18980 mfp._close(); 18981 }, mfp.st.removalDelay); 18982 } else { 18983 mfp._close(); 18984 } 18985 }, 18986 18987 /** 18988 * Helper for close() function 18989 */ 18990 _close: function() { 18991 _mfpTrigger(CLOSE_EVENT); 18992 18993 var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' '; 18994 18995 mfp.bgOverlay.detach(); 18996 mfp.wrap.detach(); 18997 mfp.container.empty(); 18998 18999 if(mfp.st.mainClass) { 19000 classesToRemove += mfp.st.mainClass + ' '; 19001 } 19002 19003 mfp._removeClassFromMFP(classesToRemove); 19004 19005 if(mfp.fixedContentPos) { 19006 var windowStyles = {marginRight: ''}; 19007 if(mfp.isIE7) { 19008 $('body, html').css('overflow', ''); 19009 } else { 19010 windowStyles.overflow = ''; 19011 } 19012 $('html').css(windowStyles); 19013 } 19014 19015 _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS); 19016 mfp.ev.off(EVENT_NS); 19017 19018 // clean up DOM elements that aren't removed 19019 mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style'); 19020 mfp.bgOverlay.attr('class', 'mfp-bg'); 19021 mfp.container.attr('class', 'mfp-container'); 19022 19023 // remove close button from target element 19024 if(mfp.st.showCloseBtn && 19025 (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) { 19026 if(mfp.currTemplate.closeBtn) 19027 mfp.currTemplate.closeBtn.detach(); 19028 } 19029 19030 19031 if(mfp.st.autoFocusLast && mfp._lastFocusedEl) { 19032 $(mfp._lastFocusedEl).trigger('focus'); // put tab focus back 19033 } 19034 mfp.currItem = null; 19035 mfp.content = null; 19036 mfp.currTemplate = null; 19037 mfp.prevHeight = 0; 19038 19039 _mfpTrigger(AFTER_CLOSE_EVENT); 19040 }, 19041 19042 updateSize: function(winHeight) { 19043 19044 if(mfp.isIOS) { 19045 // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2 19046 var zoomLevel = document.documentElement.clientWidth / window.innerWidth; 19047 var height = window.innerHeight * zoomLevel; 19048 mfp.wrap.css('height', height); 19049 mfp.wH = height; 19050 } else { 19051 mfp.wH = winHeight || _window.height(); 19052 } 19053 // Fixes #84: popup incorrectly positioned with position:relative on body 19054 if(!mfp.fixedContentPos) { 19055 mfp.wrap.css('height', mfp.wH); 19056 } 19057 19058 _mfpTrigger('Resize'); 19059 19060 }, 19061 19062 /** 19063 * Set content of popup based on current index 19064 */ 19065 updateItemHTML: function() { 19066 var item = mfp.items[mfp.index]; 19067 19068 // Detach and perform modifications 19069 mfp.contentContainer.detach(); 19070 19071 if(mfp.content) 19072 mfp.content.detach(); 19073 19074 if(!item.parsed) { 19075 item = mfp.parseEl( mfp.index ); 19076 } 19077 19078 var type = item.type; 19079 19080 _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]); 19081 // BeforeChange event works like so: 19082 // _mfpOn('BeforeChange', function(e, prevType, newType) { }); 19083 19084 mfp.currItem = item; 19085 19086 if(!mfp.currTemplate[type]) { 19087 var markup = mfp.st[type] ? mfp.st[type].markup : false; 19088 19089 // allows to modify markup 19090 _mfpTrigger('FirstMarkupParse', markup); 19091 19092 if(markup) { 19093 mfp.currTemplate[type] = $(markup); 19094 } else { 19095 // if there is no markup found we just define that template is parsed 19096 mfp.currTemplate[type] = true; 19097 } 19098 } 19099 19100 if(_prevContentType && _prevContentType !== item.type) { 19101 mfp.container.removeClass('mfp-'+_prevContentType+'-holder'); 19102 } 19103 19104 var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]); 19105 mfp.appendContent(newContent, type); 19106 19107 item.preloaded = true; 19108 19109 _mfpTrigger(CHANGE_EVENT, item); 19110 _prevContentType = item.type; 19111 19112 // Append container back after its content changed 19113 mfp.container.prepend(mfp.contentContainer); 19114 19115 _mfpTrigger('AfterChange'); 19116 }, 19117 19118 19119 /** 19120 * Set HTML content of popup 19121 */ 19122 appendContent: function(newContent, type) { 19123 mfp.content = newContent; 19124 19125 if(newContent) { 19126 if(mfp.st.showCloseBtn && mfp.st.closeBtnInside && 19127 mfp.currTemplate[type] === true) { 19128 // if there is no markup, we just append close button element inside 19129 if(!mfp.content.find('.mfp-close').length) { 19130 mfp.content.append(_getCloseBtn()); 19131 } 19132 } else { 19133 mfp.content = newContent; 19134 } 19135 } else { 19136 mfp.content = ''; 19137 } 19138 19139 _mfpTrigger(BEFORE_APPEND_EVENT); 19140 mfp.container.addClass('mfp-'+type+'-holder'); 19141 19142 mfp.contentContainer.append(mfp.content); 19143 }, 19144 19145 19146 /** 19147 * Creates Magnific Popup data object based on given data 19148 * @param {int} index Index of item to parse 19149 */ 19150 parseEl: function(index) { 19151 var item = mfp.items[index], 19152 type; 19153 19154 if(item.tagName) { 19155 item = { el: $(item) }; 19156 } else { 19157 type = item.type; 19158 item = { data: item, src: item.src }; 19159 } 19160 19161 if(item.el) { 19162 var types = mfp.types; 19163 19164 // check for 'mfp-TYPE' class 19165 for(var i = 0; i < types.length; i++) { 19166 if( item.el.hasClass('mfp-'+types[i]) ) { 19167 type = types[i]; 19168 break; 19169 } 19170 } 19171 19172 item.src = item.el.attr('data-mfp-src'); 19173 if(!item.src) { 19174 item.src = item.el.attr('href'); 19175 } 19176 } 19177 19178 item.type = type || mfp.st.type || 'inline'; 19179 item.index = index; 19180 item.parsed = true; 19181 mfp.items[index] = item; 19182 _mfpTrigger('ElementParse', item); 19183 19184 return mfp.items[index]; 19185 }, 19186 19187 19188 /** 19189 * Initializes single popup or a group of popups 19190 */ 19191 addGroup: function(el, options) { 19192 var eHandler = function(e) { 19193 e.mfpEl = this; 19194 mfp._openClick(e, el, options); 19195 }; 19196 19197 if(!options) { 19198 options = {}; 19199 } 19200 19201 var eName = 'click.magnificPopup'; 19202 options.mainEl = el; 19203 19204 if(options.items) { 19205 options.isObj = true; 19206 el.off(eName).on(eName, eHandler); 19207 } else { 19208 options.isObj = false; 19209 if(options.delegate) { 19210 el.off(eName).on(eName, options.delegate , eHandler); 19211 } else { 19212 options.items = el; 19213 el.off(eName).on(eName, eHandler); 19214 } 19215 } 19216 }, 19217 _openClick: function(e, el, options) { 19218 var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick; 19219 19220 19221 if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) { 19222 return; 19223 } 19224 19225 var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn; 19226 19227 if(disableOn) { 19228 if(typeof disableOn === "function") { 19229 if( !disableOn.call(mfp) ) { 19230 return true; 19231 } 19232 } else { // else it's number 19233 if( _window.width() < disableOn ) { 19234 return true; 19235 } 19236 } 19237 } 19238 19239 if(e.type) { 19240 e.preventDefault(); 19241 19242 // This will prevent popup from closing if element is inside and popup is already opened 19243 if(mfp.isOpen) { 19244 e.stopPropagation(); 19245 } 19246 } 19247 19248 options.el = $(e.mfpEl); 19249 if(options.delegate) { 19250 options.items = el.find(options.delegate); 19251 } 19252 mfp.open(options); 19253 }, 19254 19255 19256 /** 19257 * Updates text on preloader 19258 */ 19259 updateStatus: function(status, text) { 19260 19261 if(mfp.preloader) { 19262 if(_prevStatus !== status) { 19263 mfp.container.removeClass('mfp-s-'+_prevStatus); 19264 } 19265 19266 if(!text && status === 'loading') { 19267 text = mfp.st.tLoading; 19268 } 19269 19270 var data = { 19271 status: status, 19272 text: text 19273 }; 19274 // allows to modify status 19275 _mfpTrigger('UpdateStatus', data); 19276 19277 status = data.status; 19278 text = data.text; 19279 19280 if (mfp.st.allowHTMLInStatusIndicator) { 19281 mfp.preloader.html(text); 19282 } else { 19283 mfp.preloader.text(text); 19284 } 19285 19286 mfp.preloader.find('a').on('click', function(e) { 19287 e.stopImmediatePropagation(); 19288 }); 19289 19290 mfp.container.addClass('mfp-s-'+status); 19291 _prevStatus = status; 19292 } 19293 }, 19294 19295 19296 /* 19297 "Private" helpers that aren't private at all 19298 */ 19299 // Check to close popup or not 19300 // "target" is an element that was clicked 19301 _checkIfClose: function(target) { 19302 19303 if($(target).closest('.' + PREVENT_CLOSE_CLASS).length) { 19304 return; 19305 } 19306 19307 var closeOnContent = mfp.st.closeOnContentClick; 19308 var closeOnBg = mfp.st.closeOnBgClick; 19309 19310 if(closeOnContent && closeOnBg) { 19311 return true; 19312 } else { 19313 19314 // We close the popup if click is on close button or on preloader. Or if there is no content. 19315 if(!mfp.content || $(target).closest('.mfp-close').length || (mfp.preloader && target === mfp.preloader[0]) ) { 19316 return true; 19317 } 19318 19319 // if click is outside the content 19320 if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) { 19321 if(closeOnBg) { 19322 // last check, if the clicked element is in DOM, (in case it's removed onclick) 19323 if( $.contains(document, target) ) { 19324 return true; 19325 } 19326 } 19327 } else if(closeOnContent) { 19328 return true; 19329 } 19330 19331 } 19332 return false; 19333 }, 19334 _addClassToMFP: function(cName) { 19335 mfp.bgOverlay.addClass(cName); 19336 mfp.wrap.addClass(cName); 19337 }, 19338 _removeClassFromMFP: function(cName) { 19339 this.bgOverlay.removeClass(cName); 19340 mfp.wrap.removeClass(cName); 19341 }, 19342 _hasScrollBar: function(winHeight) { 19343 return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) ); 19344 }, 19345 _setFocus: function() { 19346 (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).trigger('focus'); 19347 }, 19348 _onFocusIn: function(e) { 19349 if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) { 19350 mfp._setFocus(); 19351 return false; 19352 } 19353 }, 19354 _parseMarkup: function(template, values, item) { 19355 var arr; 19356 if(item.data) { 19357 values = $.extend(item.data, values); 19358 } 19359 _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] ); 19360 19361 $.each(values, function(key, value) { 19362 if(value === undefined || value === false) { 19363 return true; 19364 } 19365 arr = key.split('_'); 19366 if(arr.length > 1) { 19367 var el = template.find(EVENT_NS + '-'+arr[0]); 19368 19369 if(el.length > 0) { 19370 var attr = arr[1]; 19371 if(attr === 'replaceWith') { 19372 if(el[0] !== value[0]) { 19373 el.replaceWith(value); 19374 } 19375 } else if(attr === 'img') { 19376 if(el.is('img')) { 19377 el.attr('src', value); 19378 } else { 19379 el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) ); 19380 } 19381 } else { 19382 el.attr(arr[1], value); 19383 } 19384 } 19385 19386 } else { 19387 if (mfp.st.allowHTMLInTemplate) { 19388 template.find(EVENT_NS + '-'+key).html(value); 19389 } else { 19390 template.find(EVENT_NS + '-'+key).text(value); 19391 } 19392 } 19393 }); 19394 }, 19395 19396 _getScrollbarSize: function() { 19397 // thx David 19398 if(mfp.scrollbarSize === undefined) { 19399 var scrollDiv = document.createElement("div"); 19400 scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; 19401 document.body.appendChild(scrollDiv); 19402 mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth; 19403 document.body.removeChild(scrollDiv); 19404 } 19405 return mfp.scrollbarSize; 19406 } 19407 19408}; /* MagnificPopup core prototype end */ 19409 19410 19411 19412 19413/** 19414 * Public static functions 19415 */ 19416$.magnificPopup = { 19417 instance: null, 19418 proto: MagnificPopup.prototype, 19419 modules: [], 19420 19421 open: function(options, index) { 19422 _checkInstance(); 19423 19424 if(!options) { 19425 options = {}; 19426 } else { 19427 options = $.extend(true, {}, options); 19428 } 19429 19430 options.isObj = true; 19431 options.index = index || 0; 19432 return this.instance.open(options); 19433 }, 19434 19435 close: function() { 19436 return $.magnificPopup.instance && $.magnificPopup.instance.close(); 19437 }, 19438 19439 registerModule: function(name, module) { 19440 if(module.options) { 19441 $.magnificPopup.defaults[name] = module.options; 19442 } 19443 $.extend(this.proto, module.proto); 19444 this.modules.push(name); 19445 }, 19446 19447 defaults: { 19448 19449 // Info about options is in docs: 19450 // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options 19451 19452 disableOn: 0, 19453 19454 key: null, 19455 19456 midClick: false, 19457 19458 mainClass: '', 19459 19460 preloader: true, 19461 19462 focus: '', // CSS selector of input to focus after popup is opened 19463 19464 closeOnContentClick: false, 19465 19466 closeOnBgClick: true, 19467 19468 closeBtnInside: true, 19469 19470 showCloseBtn: true, 19471 19472 enableEscapeKey: true, 19473 19474 modal: false, 19475 19476 alignTop: false, 19477 19478 removalDelay: 0, 19479 19480 prependTo: null, 19481 19482 fixedContentPos: 'auto', 19483 19484 fixedBgPos: 'auto', 19485 19486 overflowY: 'auto', 19487 19488 closeMarkup: '<button title="%title%" type="button" class="mfp-close">×</button>', 19489 19490 tClose: 'Close (Esc)', 19491 19492 tLoading: 'Loading...', 19493 19494 autoFocusLast: true, 19495 19496 allowHTMLInStatusIndicator: false, 19497 19498 allowHTMLInTemplate: false 19499 19500 } 19501}; 19502 19503 19504 19505$.fn.magnificPopup = function(options) { 19506 _checkInstance(); 19507 19508 var jqEl = $(this); 19509 19510 // We call some API method of first param is a string 19511 if (typeof options === "string" ) { 19512 19513 if(options === 'open') { 19514 var items, 19515 itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup, 19516 index = parseInt(arguments[1], 10) || 0; 19517 19518 if(itemOpts.items) { 19519 items = itemOpts.items[index]; 19520 } else { 19521 items = jqEl; 19522 if(itemOpts.delegate) { 19523 items = items.find(itemOpts.delegate); 19524 } 19525 items = items.eq( index ); 19526 } 19527 mfp._openClick({mfpEl:items}, jqEl, itemOpts); 19528 } else { 19529 if(mfp.isOpen) 19530 mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1)); 19531 } 19532 19533 } else { 19534 // clone options obj 19535 options = $.extend(true, {}, options); 19536 19537 /* 19538 * As Zepto doesn't support .data() method for objects 19539 * and it works only in normal browsers 19540 * we assign "options" object directly to the DOM element. FTW! 19541 */ 19542 if(_isJQ) { 19543 jqEl.data('magnificPopup', options); 19544 } else { 19545 jqEl[0].magnificPopup = options; 19546 } 19547 19548 mfp.addGroup(jqEl, options); 19549 19550 } 19551 return jqEl; 19552}; 19553 19554/*>>core*/ 19555 19556/*>>inline*/ 19557 19558var INLINE_NS = 'inline', 19559 _hiddenClass, 19560 _inlinePlaceholder, 19561 _lastInlineElement, 19562 _putInlineElementsBack = function() { 19563 if(_lastInlineElement) { 19564 _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach(); 19565 _lastInlineElement = null; 19566 } 19567 }; 19568 19569$.magnificPopup.registerModule(INLINE_NS, { 19570 options: { 19571 hiddenClass: 'hide', // will be appended with `mfp-` prefix 19572 markup: '', 19573 tNotFound: 'Content not found' 19574 }, 19575 proto: { 19576 19577 initInline: function() { 19578 mfp.types.push(INLINE_NS); 19579 19580 _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() { 19581 _putInlineElementsBack(); 19582 }); 19583 }, 19584 19585 getInline: function(item, template) { 19586 19587 _putInlineElementsBack(); 19588 19589 if(item.src) { 19590 var inlineSt = mfp.st.inline, 19591 el = $(item.src); 19592 19593 if(el.length) { 19594 19595 // If target element has parent - we replace it with placeholder and put it back after popup is closed 19596 var parent = el[0].parentNode; 19597 if(parent && parent.tagName) { 19598 if(!_inlinePlaceholder) { 19599 _hiddenClass = inlineSt.hiddenClass; 19600 _inlinePlaceholder = _getEl(_hiddenClass); 19601 _hiddenClass = 'mfp-'+_hiddenClass; 19602 } 19603 // replace target inline element with placeholder 19604 _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass); 19605 } 19606 19607 mfp.updateStatus('ready'); 19608 } else { 19609 mfp.updateStatus('error', inlineSt.tNotFound); 19610 el = $('<div>'); 19611 } 19612 19613 item.inlineElement = el; 19614 return el; 19615 } 19616 19617 mfp.updateStatus('ready'); 19618 mfp._parseMarkup(template, {}, item); 19619 return template; 19620 } 19621 } 19622}); 19623 19624/*>>inline*/ 19625 19626/*>>ajax*/ 19627var AJAX_NS = 'ajax', 19628 _ajaxCur, 19629 _removeAjaxCursor = function() { 19630 if(_ajaxCur) { 19631 $(document.body).removeClass(_ajaxCur); 19632 } 19633 }, 19634 _destroyAjaxRequest = function() { 19635 _removeAjaxCursor(); 19636 if(mfp.req) { 19637 mfp.req.abort(); 19638 } 19639 }; 19640 19641$.magnificPopup.registerModule(AJAX_NS, { 19642 19643 options: { 19644 settings: null, 19645 cursor: 'mfp-ajax-cur', 19646 tError: 'The content could not be loaded.' 19647 }, 19648 19649 proto: { 19650 initAjax: function() { 19651 mfp.types.push(AJAX_NS); 19652 _ajaxCur = mfp.st.ajax.cursor; 19653 19654 _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest); 19655 _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest); 19656 }, 19657 getAjax: function(item) { 19658 19659 if(_ajaxCur) { 19660 $(document.body).addClass(_ajaxCur); 19661 } 19662 19663 mfp.updateStatus('loading'); 19664 19665 var opts = $.extend({ 19666 url: item.src, 19667 success: function(data, textStatus, jqXHR) { 19668 var temp = { 19669 data:data, 19670 xhr:jqXHR 19671 }; 19672 19673 _mfpTrigger('ParseAjax', temp); 19674 19675 mfp.appendContent( $(temp.data), AJAX_NS ); 19676 19677 item.finished = true; 19678 19679 _removeAjaxCursor(); 19680 19681 mfp._setFocus(); 19682 19683 setTimeout(function() { 19684 mfp.wrap.addClass(READY_CLASS); 19685 }, 16); 19686 19687 mfp.updateStatus('ready'); 19688 19689 _mfpTrigger('AjaxContentAdded'); 19690 }, 19691 error: function() { 19692 _removeAjaxCursor(); 19693 item.finished = item.loadError = true; 19694 mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src)); 19695 } 19696 }, mfp.st.ajax.settings); 19697 19698 mfp.req = $.ajax(opts); 19699 19700 return ''; 19701 } 19702 } 19703}); 19704 19705/*>>ajax*/ 19706 19707/*>>image*/ 19708var _imgInterval, 19709 _getTitle = function(item) { 19710 if(item.data && item.data.title !== undefined) 19711 return item.data.title; 19712 19713 var src = mfp.st.image.titleSrc; 19714 19715 if(src) { 19716 if(typeof src === "function") { 19717 return src.call(mfp, item); 19718 } else if(item.el) { 19719 return item.el.attr(src) || ''; 19720 } 19721 } 19722 return ''; 19723 }; 19724 19725$.magnificPopup.registerModule('image', { 19726 19727 options: { 19728 markup: '<div class="mfp-figure">'+ 19729 '<div class="mfp-close"></div>'+ 19730 '<figure>'+ 19731 '<div class="mfp-img"></div>'+ 19732 '<figcaption>'+ 19733 '<div class="mfp-bottom-bar">'+ 19734 '<div class="mfp-title"></div>'+ 19735 '<div class="mfp-counter"></div>'+ 19736 '</div>'+ 19737 '</figcaption>'+ 19738 '</figure>'+ 19739 '</div>', 19740 cursor: 'mfp-zoom-out-cur', 19741 titleSrc: 'title', 19742 verticalFit: true, 19743 tError: 'The image could not be loaded.' 19744 }, 19745 19746 proto: { 19747 initImage: function() { 19748 var imgSt = mfp.st.image, 19749 ns = '.image'; 19750 19751 mfp.types.push('image'); 19752 19753 _mfpOn(OPEN_EVENT+ns, function() { 19754 if(mfp.currItem.type === 'image' && imgSt.cursor) { 19755 $(document.body).addClass(imgSt.cursor); 19756 } 19757 }); 19758 19759 _mfpOn(CLOSE_EVENT+ns, function() { 19760 if(imgSt.cursor) { 19761 $(document.body).removeClass(imgSt.cursor); 19762 } 19763 _window.off('resize' + EVENT_NS); 19764 }); 19765 19766 _mfpOn('Resize'+ns, mfp.resizeImage); 19767 if(mfp.isLowIE) { 19768 _mfpOn('AfterChange', mfp.resizeImage); 19769 } 19770 }, 19771 resizeImage: function() { 19772 var item = mfp.currItem; 19773 if(!item || !item.img) return; 19774 19775 if(mfp.st.image.verticalFit) { 19776 var decr = 0; 19777 // fix box-sizing in ie7/8 19778 if(mfp.isLowIE) { 19779 decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10); 19780 } 19781 item.img.css('max-height', mfp.wH-decr); 19782 } 19783 }, 19784 _onImageHasSize: function(item) { 19785 if(item.img) { 19786 19787 item.hasSize = true; 19788 19789 if(_imgInterval) { 19790 clearInterval(_imgInterval); 19791 } 19792 19793 item.isCheckingImgSize = false; 19794 19795 _mfpTrigger('ImageHasSize', item); 19796 19797 if(item.imgHidden) { 19798 if(mfp.content) 19799 mfp.content.removeClass('mfp-loading'); 19800 19801 item.imgHidden = false; 19802 } 19803 19804 } 19805 }, 19806 19807 /** 19808 * Function that loops until the image has size to display elements that rely on it asap 19809 */ 19810 findImageSize: function(item) { 19811 19812 var counter = 0, 19813 img = item.img[0], 19814 mfpSetInterval = function(delay) { 19815 19816 if(_imgInterval) { 19817 clearInterval(_imgInterval); 19818 } 19819 // decelerating interval that checks for size of an image 19820 _imgInterval = setInterval(function() { 19821 if(img.naturalWidth > 0) { 19822 mfp._onImageHasSize(item); 19823 return; 19824 } 19825 19826 if(counter > 200) { 19827 clearInterval(_imgInterval); 19828 } 19829 19830 counter++; 19831 if(counter === 3) { 19832 mfpSetInterval(10); 19833 } else if(counter === 40) { 19834 mfpSetInterval(50); 19835 } else if(counter === 100) { 19836 mfpSetInterval(500); 19837 } 19838 }, delay); 19839 }; 19840 19841 mfpSetInterval(1); 19842 }, 19843 19844 getImage: function(item, template) { 19845 19846 var guard = 0, 19847 19848 imgSt = mfp.st.image, 19849 19850 // image error handler 19851 onLoadError = function() { 19852 if(item) { 19853 item.img.off('.mfploader'); 19854 if(item === mfp.currItem){ 19855 mfp._onImageHasSize(item); 19856 mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); 19857 } 19858 19859 item.hasSize = true; 19860 item.loaded = true; 19861 item.loadError = true; 19862 } 19863 }, 19864 19865 // image load complete handler 19866 onLoadComplete = function() { 19867 if(item) { 19868 if (item.img[0].complete) { 19869 item.img.off('.mfploader'); 19870 19871 if(item === mfp.currItem){ 19872 mfp._onImageHasSize(item); 19873 19874 mfp.updateStatus('ready'); 19875 } 19876 19877 item.hasSize = true; 19878 item.loaded = true; 19879 19880 _mfpTrigger('ImageLoadComplete'); 19881 19882 } 19883 else { 19884 // if image complete check fails 200 times (20 sec), we assume that there was an error. 19885 guard++; 19886 if(guard < 200) { 19887 setTimeout(onLoadComplete,100); 19888 } else { 19889 onLoadError(); 19890 } 19891 } 19892 } 19893 }; 19894 19895 19896 19897 var el = template.find('.mfp-img'); 19898 if(el.length) { 19899 var img = document.createElement('img'); 19900 img.className = 'mfp-img'; 19901 if(item.el && item.el.find('img').length) { 19902 img.alt = item.el.find('img').attr('alt'); 19903 } 19904 item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError); 19905 img.src = item.src; 19906 19907 // without clone() "error" event is not firing when IMG is replaced by new IMG 19908 // TODO: find a way to avoid such cloning 19909 if(el.is('img')) { 19910 item.img = item.img.clone(); 19911 } 19912 19913 img = item.img[0]; 19914 if(img.naturalWidth > 0) { 19915 item.hasSize = true; 19916 } else if(!img.width) { 19917 item.hasSize = false; 19918 } 19919 } 19920 19921 mfp._parseMarkup(template, { 19922 title: _getTitle(item), 19923 img_replaceWith: item.img 19924 }, item); 19925 19926 mfp.resizeImage(); 19927 19928 if(item.hasSize) { 19929 if(_imgInterval) clearInterval(_imgInterval); 19930 19931 if(item.loadError) { 19932 template.addClass('mfp-loading'); 19933 mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); 19934 } else { 19935 template.removeClass('mfp-loading'); 19936 mfp.updateStatus('ready'); 19937 } 19938 return template; 19939 } 19940 19941 mfp.updateStatus('loading'); 19942 item.loading = true; 19943 19944 if(!item.hasSize) { 19945 item.imgHidden = true; 19946 template.addClass('mfp-loading'); 19947 mfp.findImageSize(item); 19948 } 19949 19950 return template; 19951 } 19952 } 19953}); 19954 19955/*>>image*/ 19956 19957/*>>zoom*/ 19958var hasMozTransform, 19959 getHasMozTransform = function() { 19960 if(hasMozTransform === undefined) { 19961 hasMozTransform = document.createElement('p').style.MozTransform !== undefined; 19962 } 19963 return hasMozTransform; 19964 }; 19965 19966$.magnificPopup.registerModule('zoom', { 19967 19968 options: { 19969 enabled: false, 19970 easing: 'ease-in-out', 19971 duration: 300, 19972 opener: function(element) { 19973 return element.is('img') ? element : element.find('img'); 19974 } 19975 }, 19976 19977 proto: { 19978 19979 initZoom: function() { 19980 var zoomSt = mfp.st.zoom, 19981 ns = '.zoom', 19982 image; 19983 19984 if(!zoomSt.enabled || !mfp.supportsTransition) { 19985 return; 19986 } 19987 19988 var duration = zoomSt.duration, 19989 getElToAnimate = function(image) { 19990 var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'), 19991 transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing, 19992 cssObj = { 19993 position: 'fixed', 19994 zIndex: 9999, 19995 left: 0, 19996 top: 0, 19997 '-webkit-backface-visibility': 'hidden' 19998 }, 19999 t = 'transition'; 20000 20001 cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition; 20002 20003 newImg.css(cssObj); 20004 return newImg; 20005 }, 20006 showMainContent = function() { 20007 mfp.content.css('visibility', 'visible'); 20008 }, 20009 openTimeout, 20010 animatedImg; 20011 20012 _mfpOn('BuildControls'+ns, function() { 20013 if(mfp._allowZoom()) { 20014 20015 clearTimeout(openTimeout); 20016 mfp.content.css('visibility', 'hidden'); 20017 20018 // Basically, all code below does is clones existing image, puts in on top of the current one and animated it 20019 20020 image = mfp._getItemToZoom(); 20021 20022 if(!image) { 20023 showMainContent(); 20024 return; 20025 } 20026 20027 animatedImg = getElToAnimate(image); 20028 20029 animatedImg.css( mfp._getOffset() ); 20030 20031 mfp.wrap.append(animatedImg); 20032 20033 openTimeout = setTimeout(function() { 20034 animatedImg.css( mfp._getOffset( true ) ); 20035 openTimeout = setTimeout(function() { 20036 20037 showMainContent(); 20038 20039 setTimeout(function() { 20040 animatedImg.remove(); 20041 image = animatedImg = null; 20042 _mfpTrigger('ZoomAnimationEnded'); 20043 }, 16); // avoid blink when switching images 20044 20045 }, duration); // this timeout equals animation duration 20046 20047 }, 16); // by adding this timeout we avoid short glitch at the beginning of animation 20048 20049 20050 // Lots of timeouts... 20051 } 20052 }); 20053 _mfpOn(BEFORE_CLOSE_EVENT+ns, function() { 20054 if(mfp._allowZoom()) { 20055 20056 clearTimeout(openTimeout); 20057 20058 mfp.st.removalDelay = duration; 20059 20060 if(!image) { 20061 image = mfp._getItemToZoom(); 20062 if(!image) { 20063 return; 20064 } 20065 animatedImg = getElToAnimate(image); 20066 } 20067 20068 animatedImg.css( mfp._getOffset(true) ); 20069 mfp.wrap.append(animatedImg); 20070 mfp.content.css('visibility', 'hidden'); 20071 20072 setTimeout(function() { 20073 animatedImg.css( mfp._getOffset() ); 20074 }, 16); 20075 } 20076 20077 }); 20078 20079 _mfpOn(CLOSE_EVENT+ns, function() { 20080 if(mfp._allowZoom()) { 20081 showMainContent(); 20082 if(animatedImg) { 20083 animatedImg.remove(); 20084 } 20085 image = null; 20086 } 20087 }); 20088 }, 20089 20090 _allowZoom: function() { 20091 return mfp.currItem.type === 'image'; 20092 }, 20093 20094 _getItemToZoom: function() { 20095 if(mfp.currItem.hasSize) { 20096 return mfp.currItem.img; 20097 } else { 20098 return false; 20099 } 20100 }, 20101 20102 // Get element postion relative to viewport 20103 _getOffset: function(isLarge) { 20104 var el; 20105 if(isLarge) { 20106 el = mfp.currItem.img; 20107 } else { 20108 el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem); 20109 } 20110 20111 var offset = el.offset(); 20112 var paddingTop = parseInt(el.css('padding-top'),10); 20113 var paddingBottom = parseInt(el.css('padding-bottom'),10); 20114 offset.top -= ( $(window).scrollTop() - paddingTop ); 20115 20116 20117 /* 20118 20119 Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa. 20120 20121 */ 20122 var obj = { 20123 width: el.width(), 20124 // fix Zepto height+padding issue 20125 height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop 20126 }; 20127 20128 // I hate to do this, but there is no another option 20129 if( getHasMozTransform() ) { 20130 obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)'; 20131 } else { 20132 obj.left = offset.left; 20133 obj.top = offset.top; 20134 } 20135 return obj; 20136 } 20137 20138 } 20139}); 20140 20141 20142 20143/*>>zoom*/ 20144 20145/*>>iframe*/ 20146 20147var IFRAME_NS = 'iframe', 20148 _emptyPage = '//about:blank', 20149 20150 _fixIframeBugs = function(isShowing) { 20151 if(mfp.currTemplate[IFRAME_NS]) { 20152 var el = mfp.currTemplate[IFRAME_NS].find('iframe'); 20153 if(el.length) { 20154 // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug 20155 if(!isShowing) { 20156 el[0].src = _emptyPage; 20157 } 20158 20159 // IE8 black screen bug fix 20160 if(mfp.isIE8) { 20161 el.css('display', isShowing ? 'block' : 'none'); 20162 } 20163 } 20164 } 20165 }; 20166 20167$.magnificPopup.registerModule(IFRAME_NS, { 20168 20169 options: { 20170 markup: '<div class="mfp-iframe-scaler">'+ 20171 '<div class="mfp-close"></div>'+ 20172 '<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+ 20173 '</div>', 20174 20175 srcAction: 'iframe_src', 20176 20177 // we don't care and support only one default type of URL by default 20178 patterns: { 20179 youtube: { 20180 index: 'youtube.com', 20181 id: 'v=', 20182 src: '//www.youtube.com/embed/%id%?autoplay=1' 20183 }, 20184 vimeo: { 20185 index: 'vimeo.com/', 20186 id: '/', 20187 src: '//player.vimeo.com/video/%id%?autoplay=1' 20188 }, 20189 gmaps: { 20190 index: '//maps.google.', 20191 src: '%id%&output=embed' 20192 } 20193 } 20194 }, 20195 20196 proto: { 20197 initIframe: function() { 20198 mfp.types.push(IFRAME_NS); 20199 20200 _mfpOn('BeforeChange', function(e, prevType, newType) { 20201 if(prevType !== newType) { 20202 if(prevType === IFRAME_NS) { 20203 _fixIframeBugs(); // iframe if removed 20204 } else if(newType === IFRAME_NS) { 20205 _fixIframeBugs(true); // iframe is showing 20206 } 20207 }// else { 20208 // iframe source is switched, don't do anything 20209 //} 20210 }); 20211 20212 _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() { 20213 _fixIframeBugs(); 20214 }); 20215 }, 20216 20217 getIframe: function(item, template) { 20218 var embedSrc = item.src; 20219 var iframeSt = mfp.st.iframe; 20220 20221 $.each(iframeSt.patterns, function() { 20222 if(embedSrc.indexOf( this.index ) > -1) { 20223 if(this.id) { 20224 if(typeof this.id === 'string') { 20225 embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length); 20226 } else { 20227 embedSrc = this.id.call( this, embedSrc ); 20228 } 20229 } 20230 embedSrc = this.src.replace('%id%', embedSrc ); 20231 return false; // break; 20232 } 20233 }); 20234 20235 var dataObj = {}; 20236 if(iframeSt.srcAction) { 20237 dataObj[iframeSt.srcAction] = embedSrc; 20238 } 20239 20240 mfp._parseMarkup(template, dataObj, item); 20241 20242 mfp.updateStatus('ready'); 20243 20244 return template; 20245 } 20246 } 20247}); 20248 20249 20250 20251/*>>iframe*/ 20252 20253/*>>gallery*/ 20254/** 20255 * Get looped index depending on number of slides 20256 */ 20257var _getLoopedId = function(index) { 20258 var numSlides = mfp.items.length; 20259 if(index > numSlides - 1) { 20260 return index - numSlides; 20261 } else if(index < 0) { 20262 return numSlides + index; 20263 } 20264 return index; 20265 }, 20266 _replaceCurrTotal = function(text, curr, total) { 20267 return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total); 20268 }; 20269 20270$.magnificPopup.registerModule('gallery', { 20271 20272 options: { 20273 enabled: false, 20274 arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>', 20275 preload: [0,2], 20276 navigateByImgClick: true, 20277 arrows: true, 20278 20279 tPrev: 'Previous (Left arrow key)', 20280 tNext: 'Next (Right arrow key)', 20281 tCounter: '%curr% of %total%', 20282 20283 langDir: null, 20284 loop: true, 20285 }, 20286 20287 proto: { 20288 initGallery: function() { 20289 20290 var gSt = mfp.st.gallery, 20291 ns = '.mfp-gallery'; 20292 20293 mfp.direction = true; // true - next, false - prev 20294 20295 if(!gSt || !gSt.enabled ) return false; 20296 20297 if (!gSt.langDir) { 20298 gSt.langDir = document.dir || 'ltr'; 20299 } 20300 20301 _wrapClasses += ' mfp-gallery'; 20302 20303 _mfpOn(OPEN_EVENT+ns, function() { 20304 20305 if(gSt.navigateByImgClick) { 20306 mfp.wrap.on('click'+ns, '.mfp-img', function() { 20307 if(mfp.items.length > 1) { 20308 mfp.next(); 20309 return false; 20310 } 20311 }); 20312 } 20313 20314 _document.on('keydown'+ns, function(e) { 20315 if (e.keyCode === 37) { 20316 if (gSt.langDir === 'rtl') mfp.next(); 20317 else mfp.prev(); 20318 } else if (e.keyCode === 39) { 20319 if (gSt.langDir === 'rtl') mfp.prev(); 20320 else mfp.next(); 20321 } 20322 }); 20323 20324 mfp.updateGalleryButtons(); 20325 20326 }); 20327 20328 _mfpOn('UpdateStatus'+ns, function(/*e, data*/) { 20329 mfp.updateGalleryButtons(); 20330 }); 20331 20332 _mfpOn('UpdateStatus'+ns, function(e, data) { 20333 if(data.text) { 20334 data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length); 20335 } 20336 }); 20337 20338 _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) { 20339 var l = mfp.items.length; 20340 values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : ''; 20341 }); 20342 20343 _mfpOn('BuildControls' + ns, function() { 20344 if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) { 20345 20346 var arrowLeftDesc, arrowRightDesc, arrowLeftAction, arrowRightAction; 20347 20348 if (gSt.langDir === 'rtl') { 20349 arrowLeftDesc = gSt.tNext; 20350 arrowRightDesc = gSt.tPrev; 20351 arrowLeftAction = 'next'; 20352 arrowRightAction = 'prev'; 20353 } else { 20354 arrowLeftDesc = gSt.tPrev; 20355 arrowRightDesc = gSt.tNext; 20356 arrowLeftAction = 'prev'; 20357 arrowRightAction = 'next'; 20358 } 20359 20360 var markup = gSt.arrowMarkup, 20361 arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, arrowLeftDesc).replace(/%action%/gi, arrowLeftAction).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS), 20362 arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, arrowRightDesc).replace(/%action%/gi, arrowRightAction).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS); 20363 20364 if (gSt.langDir === 'rtl') { 20365 mfp.arrowNext = arrowLeft; 20366 mfp.arrowPrev = arrowRight; 20367 } else { 20368 mfp.arrowNext = arrowRight; 20369 mfp.arrowPrev = arrowLeft; 20370 } 20371 20372 arrowLeft.on('click', function() { 20373 if (gSt.langDir === 'rtl') mfp.next(); 20374 else mfp.prev(); 20375 }); 20376 arrowRight.on('click', function() { 20377 if (gSt.langDir === 'rtl') mfp.prev(); 20378 else mfp.next(); 20379 }); 20380 20381 mfp.container.append(arrowLeft.add(arrowRight)); 20382 20383 } 20384 }); 20385 20386 _mfpOn(CHANGE_EVENT+ns, function() { 20387 if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout); 20388 20389 mfp._preloadTimeout = setTimeout(function() { 20390 mfp.preloadNearbyImages(); 20391 mfp._preloadTimeout = null; 20392 }, 16); 20393 }); 20394 20395 20396 _mfpOn(CLOSE_EVENT+ns, function() { 20397 _document.off(ns); 20398 mfp.wrap.off('click'+ns); 20399 mfp.arrowRight = mfp.arrowLeft = null; 20400 }); 20401 20402 }, 20403 next: function() { 20404 var newIndex = _getLoopedId(mfp.index + 1); 20405 if (!mfp.st.gallery.loop && newIndex === 0 ) return false; 20406 mfp.direction = true; 20407 mfp.index = newIndex; 20408 mfp.updateItemHTML(); 20409 }, 20410 prev: function() { 20411 var newIndex = mfp.index - 1; 20412 if (!mfp.st.gallery.loop && newIndex < 0) return false; 20413 mfp.direction = false; 20414 mfp.index = _getLoopedId(newIndex); 20415 mfp.updateItemHTML(); 20416 }, 20417 goTo: function(newIndex) { 20418 mfp.direction = (newIndex >= mfp.index); 20419 mfp.index = newIndex; 20420 mfp.updateItemHTML(); 20421 }, 20422 preloadNearbyImages: function() { 20423 var p = mfp.st.gallery.preload, 20424 preloadBefore = Math.min(p[0], mfp.items.length), 20425 preloadAfter = Math.min(p[1], mfp.items.length), 20426 i; 20427 20428 for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) { 20429 mfp._preloadItem(mfp.index+i); 20430 } 20431 for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) { 20432 mfp._preloadItem(mfp.index-i); 20433 } 20434 }, 20435 _preloadItem: function(index) { 20436 index = _getLoopedId(index); 20437 20438 if(mfp.items[index].preloaded) { 20439 return; 20440 } 20441 20442 var item = mfp.items[index]; 20443 if(!item.parsed) { 20444 item = mfp.parseEl( index ); 20445 } 20446 20447 _mfpTrigger('LazyLoad', item); 20448 20449 if(item.type === 'image') { 20450 item.img = $('<img class="mfp-img" />').on('load.mfploader', function() { 20451 item.hasSize = true; 20452 }).on('error.mfploader', function() { 20453 item.hasSize = true; 20454 item.loadError = true; 20455 _mfpTrigger('LazyLoadError', item); 20456 }).attr('src', item.src); 20457 } 20458 20459 20460 item.preloaded = true; 20461 }, 20462 20463 /** 20464 * Show/hide the gallery prev/next buttons if we're at the start/end, if looping is turned off 20465 * Added by Joloco for Veg 20466 */ 20467 updateGalleryButtons: function() { 20468 20469 if ( !mfp.st.gallery.loop && typeof mfp.arrowPrev === 'object' && mfp.arrowPrev !== null) { 20470 20471 if (mfp.index === 0) mfp.arrowPrev.hide(); 20472 else mfp.arrowPrev.show(); 20473 20474 if (mfp.index === (mfp.items.length - 1)) mfp.arrowNext.hide(); 20475 else mfp.arrowNext.show(); 20476 20477 } 20478 20479 }, 20480 20481 } 20482 20483}); 20484 20485 20486/*>>gallery*/ 20487 20488/*>>retina*/ 20489 20490var RETINA_NS = 'retina'; 20491 20492$.magnificPopup.registerModule(RETINA_NS, { 20493 options: { 20494 replaceSrc: function(item) { 20495 return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; }); 20496 }, 20497 ratio: 1 // Function or number. Set to 1 to disable. 20498 }, 20499 proto: { 20500 initRetina: function() { 20501 if(window.devicePixelRatio > 1) { 20502 20503 var st = mfp.st.retina, 20504 ratio = st.ratio; 20505 20506 ratio = !isNaN(ratio) ? ratio : ratio(); 20507 20508 if(ratio > 1) { 20509 _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) { 20510 item.img.css({ 20511 'max-width': item.img[0].naturalWidth / ratio, 20512 'width': '100%' 20513 }); 20514 }); 20515 _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) { 20516 item.src = st.replaceSrc(item, ratio); 20517 }); 20518 } 20519 } 20520 20521 } 20522 } 20523}); 20524 20525/*>>retina*/ 20526 _checkInstance(); })); 20527 20528/***/ }), 20529
20530/***/ "./Resources/Private/Scss/main.scss": 20531/*!******************************************!*\ 20532 !*** ./Resources/Private/Scss/main.scss ***! 20533 \******************************************/ 20534/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20535 20536"use strict"; 20537module.exports = __webpack_require__.p + "Css/main.min.css"; 20538 20539/***/ })
vendor: 4,820 bytes, lines 20539-20653
20539 20540 20541/******/ }); 20542/************************************************************************/ 20543/******/ // The module cache 20544/******/ var __webpack_module_cache__ = {}; 20545/******/ 20546/******/ // The require function 20547/******/ function __webpack_require__(moduleId) { 20548/******/ // Check if module is in cache 20549/******/ var cachedModule = __webpack_module_cache__[moduleId]; 20550/******/ if (cachedModule !== undefined) { 20551/******/ return cachedModule.exports; 20552/******/ } 20553/******/ // Create a new module (and put it into the cache) 20554/******/ var module = __webpack_module_cache__[moduleId] = { 20555/******/ // no module.id needed 20556/******/ // no module.loaded needed 20557/******/ exports: {} 20558/******/ }; 20559/******/ 20560/******/ // Execute the module function 20561/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 20562/******/ 20563/******/ // Return the exports of the module 20564/******/ return module.exports; 20565/******/ } 20566/******/ 20567/************************************************************************/ 20568/******/ /* webpack/runtime/compat get default export */ 20569/******/ (() => { 20570/******/ // getDefaultExport function for compatibility with non-harmony modules 20571/******/ __webpack_require__.n = (module) => { 20572/******/ var getter = module && module.__esModule ? 20573/******/ () => (module['default']) : 20574/******/ () => (module); 20575/******/ __webpack_require__.d(getter, { a: getter }); 20576/******/ return getter; 20577/******/ }; 20578/******/ })(); 20579/******/ 20580/******/ /* webpack/runtime/define property getters */ 20581/******/ (() => { 20582/******/ // define getter functions for harmony exports 20583/******/ __webpack_require__.d = (exports, definition) => { 20584/******/ for(var key in definition) { 20585/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 20586/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 20587/******/ } 20588/******/ } 20589/******/ }; 20590/******/ })(); 20591/******/ 20592/******/ /* webpack/runtime/global */ 20593/******/ (() => { 20594/******/ __webpack_require__.g = (function() { 20595/******/ if (typeof globalThis === 'object') return globalThis; 20596/******/ try { 20597/******/ return this || new Function('return this')(); 20598/******/ } catch (e) { 20599/******/ if (typeof window === 'object') return window; 20600/******/ } 20601/******/ })(); 20602/******/ })(); 20603/******/ 20604/******/ /* webpack/runtime/hasOwnProperty shorthand */ 20605/******/ (() => { 20606/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 20607/******/ })(); 20608/******/ 20609/******/ /* webpack/runtime/make namespace object */ 20610/******/ (() => { 20611/******/ // define __esModule on exports 20612/******/ __webpack_require__.r = (exports) => { 20613/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 20614/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 20615/******/ } 20616/******/ Object.defineProperty(exports, '__esModule', { value: true }); 20617/******/ }; 20618/******/ })(); 20619/******/ 20620/******/ /* webpack/runtime/publicPath */ 20621/******/ (() => { 20622/******/ var scriptUrl; 20623/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + ""; 20624/******/ var document = __webpack_require__.g.document; 20625/******/ if (!scriptUrl && document) { 20626/******/ if (document.currentScript) 20627/******/ scriptUrl = document.currentScript.src; 20628/******/ if (!scriptUrl) { 20629/******/ var scripts = document.getElementsByTagName("script"); 20630/******/ if(scripts.length) { 20631/******/ var i = scripts.length - 1; 20632/******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src; 20633/******/ } 20634/******/ } 20635/******/ } 20636/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration 20637/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic. 20638/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser"); 20639/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/"); 20640/******/ __webpack_require__.p = scriptUrl + "../"; 20641/******/ })(); 20642/******/ 20643/************************************************************************/ 20644/******/ 20645/******/ // startup 20646/******/ // Load entry module and return exports 20647/******/ __webpack_require__("./Resources/Private/JavaScript/main.js"); 20648/******/ // This entry module doesn't tell about it's top-level declarations so it can't be inlined 20649/******/ var __webpack_exports__ = __webpack_require__("./Resources/Private/Scss/main.scss"); 20650/******/ 20651/******/ })() 20652; 20653//# sourceMappingURL=main.min.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.