vendor: 4,402 bytes, lines 1-133
1 2/*! 3 * Bootstrap v5.1.3 (https://getbootstrap.com/) 4 * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 5 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 */ 7(function (global, factory) { 8 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) : 9 typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) : 10 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper)); 11})(this, (function (Popper) { 'use strict'; 12 13 function _interopNamespace(e) { 14 if (e && e.__esModule) return e; 15 const n = Object.create(null); 16 if (e) { 17 for (const k in e) { 18 if (k !== 'default') { 19 const d = Object.getOwnPropertyDescriptor(e, k); 20 Object.defineProperty(n, k, d.get ? d : { 21 enumerable: true, 22 get: () => e[k] 23 }); 24 } 25 } 26 } 27 n.default = e; 28 return Object.freeze(n); 29 } 30 31 const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper); 32 33 /** 34 * -------------------------------------------------------------------------- 35 * Bootstrap (v5.1.3): util/index.js 36 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 37 * -------------------------------------------------------------------------- 38 */ 39 const MAX_UID = 1000000; 40 const MILLISECONDS_MULTIPLIER = 1000; 41 const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 42 43 const toType = obj => { 44 if (obj === null || obj === undefined) { 45 return `${obj}`; 46 } 47 48 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 49 }; 50 /** 51 * -------------------------------------------------------------------------- 52 * Public Util Api 53 * -------------------------------------------------------------------------- 54 */ 55 56 57 const getUID = prefix => { 58 do { 59 prefix += Math.floor(Math.random() * MAX_UID); 60 } while (document.getElementById(prefix)); 61 62 return prefix; 63 }; 64 65 const getSelector = element => { 66 let selector = element.getAttribute('data-bs-target'); 67 68 if (!selector || selector === '#') { 69 let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, 70 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 71 // `document.querySelector` will rightfully complain it is invalid. 72 // See https://github.com/twbs/bootstrap/issues/32273 73 74 if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) { 75 return null; 76 } // Just in case some CMS puts out a full URL with the anchor appended 77 78 79 if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) { 80 hrefAttr = `#${hrefAttr.split('#')[1]}`; 81 } 82 83 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; 84 } 85 86 return selector; 87 }; 88 89 const getSelectorFromElement = element => { 90 const selector = getSelector(element); 91 92 if (selector) { 93 return document.querySelector(selector) ? selector : null; 94 } 95 96 return null; 97 }; 98 99 const getElementFromSelector = element => { 100 const selector = getSelector(element); 101 return selector ? document.querySelector(selector) : null; 102 }; 103 104 const getTransitionDurationFromElement = element => { 105 if (!element) { 106 return 0; 107 } // Get transition-duration of the element 108 109 110 let { 111 transitionDuration, 112 transitionDelay 113 } = window.getComputedStyle(element); 114 const floatTransitionDuration = Number.parseFloat(transitionDuration); 115 const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 116 117 if (!floatTransitionDuration && !floatTransitionDelay) { 118 return 0; 119 } // If multiple durations are defined, take the first 120 121 122 transitionDuration = transitionDuration.split(',')[0]; 123 transitionDelay = transitionDelay.split(',')[0]; 124 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 125 }; 126 127 const triggerTransitionEnd = element => { 128 element.dispatchEvent(new Event(TRANSITION_END)); 129 }; 130 131 const isElement = obj => { 132 if (!obj || typeof obj !== 'object') { 133 return false;
134 } 135 136 if (typeof obj.jquery !== 'undefined') { 137 obj = obj[0]; 138 } 139 140 return typeof obj.nodeType !== 'undefined'; 141 }; 142 143 const getElement = obj => { 144 if (isElement(obj)) { 145 // it's a jQuery object or a node element 146 return obj.jquery ? obj[0] : obj; 147 } 148 149 if (typeof obj === 'string' && obj.length > 0) { 150 return document.querySelector(obj); 151 } 152 153 return null; 154 }; 155 156 const typeCheckConfig = (componentName, config, configTypes) => { 157 Object.keys(configTypes).forEach(property => { 158 const expectedTypes = configTypes[property]; 159 const value = config[property]; 160 const valueType = value && isElement(value) ? 'element' : toType(value); 161 162 if (!new RegExp(expectedTypes).test(valueType)) { 163 throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 164 } 165 }); 166 }; 167 168 const isVisible = element => { 169 if (!isElement(element) || element.getClientRects().length === 0) { 170 return false; 171 } 172 173 return getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 174 }; 175 176 const isDisabled = element => { 177 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 178 return true; 179 } 180 181 if (element.classList.contains('disabled')) { 182 return true; 183 } 184 185 if (typeof element.disabled !== 'undefined') { 186 return element.disabled; 187 } 188 189 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 190 }; 191 192 const findShadowRoot = element => { 193 if (!document.documentElement.attachShadow) { 194 return null; 195 } // Can find the shadow root otherwise it'll return the document 196 197 198 if (typeof element.getRootNode === 'function') { 199 const root = element.getRootNode(); 200 return root instanceof ShadowRoot ? root : null; 201 } 202 203 if (element instanceof ShadowRoot) { 204 return element; 205 } // when we don't find a shadow root 206 207 208 if (!element.parentNode) { 209 return null; 210 } 211 212 return findShadowRoot(element.parentNode); 213 }; 214 215 const noop = () => {}; 216 /** 217 * Trick to restart an element's animation 218 * 219 * @param {HTMLElement} element 220 * @return void 221 * 222 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 223 */ 224 225 226 const reflow = element => { 227 // eslint-disable-next-line no-unused-expressions 228 element.offsetHeight; 229 }; 230 231 const getjQuery = () => { 232 const { 233 jQuery 234 } = window; 235 236 if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 237 return jQuery; 238 } 239 240 return null; 241 }; 242 243 const DOMContentLoadedCallbacks = []; 244 245 const onDOMContentLoaded = callback => { 246 if (document.readyState === 'loading') { 247 // add listener on the first call when the document is in loading state 248 if (!DOMContentLoadedCallbacks.length) { 249 document.addEventListener('DOMContentLoaded', () => { 250 DOMContentLoadedCallbacks.forEach(callback => callback()); 251 }); 252 } 253 254 DOMContentLoadedCallbacks.push(callback); 255 } else { 256 callback(); 257 } 258 }; 259 260 const isRTL = () => document.documentElement.dir === 'rtl'; 261 262 const defineJQueryPlugin = plugin => { 263 onDOMContentLoaded(() => { 264 const $ = getjQuery(); 265 /* istanbul ignore if */ 266 267 if ($) { 268 const name = plugin.NAME; 269 const JQUERY_NO_CONFLICT = $.fn[name]; 270 $.fn[name] = plugin.jQueryInterface; 271 $.fn[name].Constructor = plugin; 272 273 $.fn[name].noConflict = () => { 274 $.fn[name] = JQUERY_NO_CONFLICT; 275 return plugin.jQueryInterface; 276 }; 277 } 278 }); 279 }; 280 281 const execute = callback => { 282 if (typeof callback === 'function') { 283 callback(); 284 } 285 }; 286 287 const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 288 if (!waitForTransition) { 289 execute(callback); 290 return; 291 } 292 293 const durationPadding = 5; 294 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
295 let called = false; 296 297 const handler = ({ 298 target 299 }) => { 300 if (target !== transitionElement) { 301 return; 302 } 303 304 called = true; 305 transitionElement.removeEventListener(TRANSITION_END, handler); 306 execute(callback); 307 }; 308 309 transitionElement.addEventListener(TRANSITION_END, handler); 310 setTimeout(() => { 311 if (!called) { 312 triggerTransitionEnd(transitionElement); 313 } 314 }, emulatedDuration); 315 }; 316 /** 317 * Return the previous/next element of a list. 318 * 319 * @param {array} list The list of elements 320 * @param activeElement The active element 321 * @param shouldGetNext Choose to get next or previous element 322 * @param isCycleAllowed 323 * @return {Element|elem} The proper element 324 */ 325 326 327 const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 328 let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed 329 330 if (index === -1) { 331 return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]; 332 } 333 334 const listLength = list.length; 335 index += shouldGetNext ? 1 : -1; 336 337 if (isCycleAllowed) { 338 index = (index + listLength) % listLength; 339 } 340 341 return list[Math.max(0, Math.min(index, listLength - 1))]; 342 }; 343 344 /** 345 * -------------------------------------------------------------------------- 346 * Bootstrap (v5.1.3): dom/event-handler.js 347 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 348 * -------------------------------------------------------------------------- 349 */ 350 /** 351 * ------------------------------------------------------------------------ 352 * Constants 353 * ------------------------------------------------------------------------ 354 */ 355 356 const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 357 const stripNameRegex = /\..*/; 358 const stripUidRegex = /::\d+$/; 359 const eventRegistry = {}; // Events storage 360 361 let uidEvent = 1; 362 const customEvents = { 363 mouseenter: 'mouseover', 364 mouseleave: 'mouseout' 365 }; 366 const customEventsRegex = /^(mouseenter|mouseleave)/i; 367 const 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']); 368 /** 369 * ------------------------------------------------------------------------ 370 * Private methods 371 * ------------------------------------------------------------------------ 372 */ 373 374 function getUidEvent(element, uid) { 375 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 376 } 377 378 function getEvent(element) { 379 const uid = getUidEvent(element); 380 element.uidEvent = uid; 381 eventRegistry[uid] = eventRegistry[uid] || {}; 382 return eventRegistry[uid]; 383 } 384 385 function bootstrapHandler(element, fn) { 386 return function handler(event) { 387 event.delegateTarget = element; 388 389 if (handler.oneOff) { 390 EventHandler.off(element, event.type, fn); 391 } 392 393 return fn.apply(element, [event]); 394 }; 395 } 396 397 function bootstrapDelegationHandler(element, selector, fn) { 398 return function handler(event) { 399 const domElements = element.querySelectorAll(selector); 400 401 for (let { 402 target 403 } = event; target && target !== this; target = target.parentNode) { 404 for (let i = domElements.length; i--;) { 405 if (domElements[i] === target) { 406 event.delegateTarget = target; 407 408 if (handler.oneOff) { 409 EventHandler.off(element, event.type, selector, fn); 410 } 411 412 return fn.apply(target, [event]); 413 } 414 } 415 } // To please ESLint 416 417 418 return null; 419 }; 420 } 421 422 function findHandler(events, handler, delegationSelector = null) { 423 const uidEventList = Object.keys(events); 424 425 for (let i = 0, len = uidEventList.length; i < len; i++) { 426 const event = events[uidEventList[i]]; 427 428 if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { 429 return event; 430 } 431 } 432 433 return null; 434 } 435 436 function normalizeParams(originalTypeEvent, handler, delegationFn) { 437 const delegation = typeof handler === 'string'; 438 const originalHandler = delegation ? delegationFn : handler; 439 let typeEvent = getTypeEvent(originalTypeEvent); 440 const isNative = nativeEvents.has(typeEvent); 441 442 if (!isNative) { 443 typeEvent = originalTypeEvent; 444 } 445 446 return [delegation, originalHandler, typeEvent]; 447 } 448 449 function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { 450 if (typeof originalTypeEvent !== 'string' || !element) { 451 return; 452 } 453 454 if (!handler) { 455 handler = delegationFn; 456 delegationFn = null; 457 } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 458 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 459 460 461 if (customEventsRegex.test(originalTypeEvent)) { 462 const wrapFn = fn => { 463 return function (event) { 464 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
vendor: 10,268 bytes, lines 465-795
465 return fn.call(this, event); 466 } 467 }; 468 }; 469 470 if (delegationFn) { 471 delegationFn = wrapFn(delegationFn); 472 } else { 473 handler = wrapFn(handler); 474 } 475 } 476 477 const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); 478 const events = getEvent(element); 479 const handlers = events[typeEvent] || (events[typeEvent] = {}); 480 const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null); 481 482 if (previousFn) { 483 previousFn.oneOff = previousFn.oneOff && oneOff; 484 return; 485 } 486 487 const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')); 488 const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler); 489 fn.delegationSelector = delegation ? handler : null; 490 fn.originalHandler = originalHandler; 491 fn.oneOff = oneOff; 492 fn.uidEvent = uid; 493 handlers[uid] = fn; 494 element.addEventListener(typeEvent, fn, delegation); 495 } 496 497 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 498 const fn = findHandler(events[typeEvent], handler, delegationSelector); 499 500 if (!fn) { 501 return; 502 } 503 504 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 505 delete events[typeEvent][fn.uidEvent]; 506 } 507 508 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 509 const storeElementEvent = events[typeEvent] || {}; 510 Object.keys(storeElementEvent).forEach(handlerKey => { 511 if (handlerKey.includes(namespace)) { 512 const event = storeElementEvent[handlerKey]; 513 removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); 514 } 515 }); 516 } 517 518 function getTypeEvent(event) { 519 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 520 event = event.replace(stripNameRegex, ''); 521 return customEvents[event] || event; 522 } 523 524 const EventHandler = { 525 on(element, event, handler, delegationFn) { 526 addHandler(element, event, handler, delegationFn, false); 527 }, 528 529 one(element, event, handler, delegationFn) { 530 addHandler(element, event, handler, delegationFn, true); 531 }, 532 533 off(element, originalTypeEvent, handler, delegationFn) { 534 if (typeof originalTypeEvent !== 'string' || !element) { 535 return; 536 } 537 538 const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); 539 const inNamespace = typeEvent !== originalTypeEvent; 540 const events = getEvent(element); 541 const isNamespace = originalTypeEvent.startsWith('.'); 542 543 if (typeof originalHandler !== 'undefined') { 544 // Simplest case: handler is passed, remove that listener ONLY. 545 if (!events || !events[typeEvent]) { 546 return; 547 } 548 549 removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null); 550 return; 551 } 552 553 if (isNamespace) { 554 Object.keys(events).forEach(elementEvent => { 555 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 556 }); 557 } 558 559 const storeElementEvent = events[typeEvent] || {}; 560 Object.keys(storeElementEvent).forEach(keyHandlers => { 561 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 562 563 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 564 const event = storeElementEvent[keyHandlers]; 565 removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); 566 } 567 }); 568 }, 569 570 trigger(element, event, args) { 571 if (typeof event !== 'string' || !element) { 572 return null; 573 } 574 575 const $ = getjQuery(); 576 const typeEvent = getTypeEvent(event); 577 const inNamespace = event !== typeEvent; 578 const isNative = nativeEvents.has(typeEvent); 579 let jQueryEvent; 580 let bubbles = true; 581 let nativeDispatch = true; 582 let defaultPrevented = false; 583 let evt = null; 584 585 if (inNamespace && $) { 586 jQueryEvent = $.Event(event, args); 587 $(element).trigger(jQueryEvent); 588 bubbles = !jQueryEvent.isPropagationStopped(); 589 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 590 defaultPrevented = jQueryEvent.isDefaultPrevented(); 591 } 592 593 if (isNative) { 594 evt = document.createEvent('HTMLEvents'); 595 evt.initEvent(typeEvent, bubbles, true); 596 } else { 597 evt = new CustomEvent(event, { 598 bubbles, 599 cancelable: true 600 }); 601 } // merge custom information in our event 602 603 604 if (typeof args !== 'undefined') { 605 Object.keys(args).forEach(key => { 606 Object.defineProperty(evt, key, { 607 get() { 608 return args[key]; 609 } 610 611 }); 612 }); 613 } 614 615 if (defaultPrevented) { 616 evt.preventDefault(); 617 } 618 619 if (nativeDispatch) { 620 element.dispatchEvent(evt); 621 } 622 623 if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') { 624 jQueryEvent.preventDefault(); 625 } 626 627 return evt; 628 } 629 630 }; 631 632 /** 633 * -------------------------------------------------------------------------- 634 * Bootstrap (v5.1.3): dom/data.js 635 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 636 * -------------------------------------------------------------------------- 637 */ 638 639 /** 640 * ------------------------------------------------------------------------ 641 * Constants 642 * ------------------------------------------------------------------------ 643 */ 644 const elementMap = new Map(); 645 const Data = { 646 set(element, key, instance) { 647 if (!elementMap.has(element)) { 648 elementMap.set(element, new Map()); 649 } 650 651 const instanceMap = elementMap.get(element); // make it clear we only want one instance per element 652 // can be removed later when multiple key/instances are fine to be used 653 654 if (!instanceMap.has(key) && instanceMap.size !== 0) { 655 // eslint-disable-next-line no-console 656 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 657 return; 658 } 659 660 instanceMap.set(key, instance); 661 }, 662 663 get(element, key) { 664 if (elementMap.has(element)) { 665 return elementMap.get(element).get(key) || null; 666 } 667 668 return null; 669 }, 670 671 remove(element, key) { 672 if (!elementMap.has(element)) { 673 return; 674 } 675 676 const instanceMap = elementMap.get(element); 677 instanceMap.delete(key); // free up element references if there are no instances left for an element 678 679 if (instanceMap.size === 0) { 680 elementMap.delete(element); 681 } 682 } 683 684 }; 685 686 /** 687 * -------------------------------------------------------------------------- 688 * Bootstrap (v5.1.3): base-component.js 689 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 690 * -------------------------------------------------------------------------- 691 */ 692 /** 693 * ------------------------------------------------------------------------ 694 * Constants 695 * ------------------------------------------------------------------------ 696 */ 697 698 const VERSION = '5.1.3'; 699 700 class BaseComponent { 701 constructor(element) { 702 element = getElement(element); 703 704 if (!element) { 705 return; 706 } 707 708 this._element = element; 709 Data.set(this._element, this.constructor.DATA_KEY, this); 710 } 711 712 dispose() { 713 Data.remove(this._element, this.constructor.DATA_KEY); 714 EventHandler.off(this._element, this.constructor.EVENT_KEY); 715 Object.getOwnPropertyNames(this).forEach(propertyName => { 716 this[propertyName] = null; 717 }); 718 } 719 720 _queueCallback(callback, element, isAnimated = true) { 721 executeAfterTransition(callback, element, isAnimated); 722 } 723 /** Static */ 724 725 726 static getInstance(element) { 727 return Data.get(getElement(element), this.DATA_KEY); 728 } 729 730 static getOrCreateInstance(element, config = {}) { 731 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 732 } 733 734 static get VERSION() { 735 return VERSION; 736 } 737 738 static get NAME() { 739 throw new Error('You have to implement the static method "NAME", for each component!'); 740 } 741 742 static get DATA_KEY() { 743 return `bs.${this.NAME}`; 744 } 745 746 static get EVENT_KEY() { 747 return `.${this.DATA_KEY}`; 748 } 749 750 } 751 752 /** 753 * -------------------------------------------------------------------------- 754 * Bootstrap (v5.1.3): util/component-functions.js 755 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 756 * -------------------------------------------------------------------------- 757 */ 758 759 const enableDismissTrigger = (component, method = 'hide') => { 760 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 761 const name = component.NAME; 762 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 763 if (['A', 'AREA'].includes(this.tagName)) { 764 event.preventDefault(); 765 } 766 767 if (isDisabled(this)) { 768 return; 769 } 770 771 const target = getElementFromSelector(this) || this.closest(`.${name}`); 772 const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 773 774 instance[method](); 775 }); 776 }; 777 778 /** 779 * -------------------------------------------------------------------------- 780 * Bootstrap (v5.1.3): alert.js 781 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 782 * -------------------------------------------------------------------------- 783 */ 784 /** 785 * ------------------------------------------------------------------------ 786 * Constants 787 * ------------------------------------------------------------------------ 788 */ 789 790 const NAME$d = 'alert'; 791 const DATA_KEY$c = 'bs.alert'; 792 const EVENT_KEY$c = `.${DATA_KEY$c}`; 793 const EVENT_CLOSE = `close${EVENT_KEY$c}`; 794 const EVENT_CLOSED = `closed${EVENT_KEY$c}`; 795 const CLASS_NAME_FADE$5 = 'fade';
vendor: 4,515 bytes, lines 796-950
796 const CLASS_NAME_SHOW$8 = 'show'; 797 /** 798 * ------------------------------------------------------------------------ 799 * Class Definition 800 * ------------------------------------------------------------------------ 801 */ 802 803 class Alert extends BaseComponent { 804 // Getters 805 static get NAME() { 806 return NAME$d; 807 } // Public 808 809 810 close() { 811 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 812 813 if (closeEvent.defaultPrevented) { 814 return; 815 } 816 817 this._element.classList.remove(CLASS_NAME_SHOW$8); 818 819 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 820 821 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 822 } // Private 823 824 825 _destroyElement() { 826 this._element.remove(); 827 828 EventHandler.trigger(this._element, EVENT_CLOSED); 829 this.dispose(); 830 } // Static 831 832 833 static jQueryInterface(config) { 834 return this.each(function () { 835 const data = Alert.getOrCreateInstance(this); 836 837 if (typeof config !== 'string') { 838 return; 839 } 840 841 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 842 throw new TypeError(`No method named "${config}"`); 843 } 844 845 data[config](this); 846 }); 847 } 848 849 } 850 /** 851 * ------------------------------------------------------------------------ 852 * Data Api implementation 853 * ------------------------------------------------------------------------ 854 */ 855 856 857 enableDismissTrigger(Alert, 'close'); 858 /** 859 * ------------------------------------------------------------------------ 860 * jQuery 861 * ------------------------------------------------------------------------ 862 * add .Alert to jQuery only if jQuery is present 863 */ 864 865 defineJQueryPlugin(Alert); 866 867 /** 868 * -------------------------------------------------------------------------- 869 * Bootstrap (v5.1.3): button.js 870 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 871 * -------------------------------------------------------------------------- 872 */ 873 /** 874 * ------------------------------------------------------------------------ 875 * Constants 876 * ------------------------------------------------------------------------ 877 */ 878 879 const NAME$c = 'button'; 880 const DATA_KEY$b = 'bs.button'; 881 const EVENT_KEY$b = `.${DATA_KEY$b}`; 882 const DATA_API_KEY$7 = '.data-api'; 883 const CLASS_NAME_ACTIVE$3 = 'active'; 884 const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 885 const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`; 886 /** 887 * ------------------------------------------------------------------------ 888 * Class Definition 889 * ------------------------------------------------------------------------ 890 */ 891 892 class Button extends BaseComponent { 893 // Getters 894 static get NAME() { 895 return NAME$c; 896 } // Public 897 898 899 toggle() { 900 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 901 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 902 } // Static 903 904 905 static jQueryInterface(config) { 906 return this.each(function () { 907 const data = Button.getOrCreateInstance(this); 908 909 if (config === 'toggle') { 910 data[config](); 911 } 912 }); 913 } 914 915 } 916 /** 917 * ------------------------------------------------------------------------ 918 * Data Api implementation 919 * ------------------------------------------------------------------------ 920 */ 921 922 923 EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 924 event.preventDefault(); 925 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 926 const data = Button.getOrCreateInstance(button); 927 data.toggle(); 928 }); 929 /** 930 * ------------------------------------------------------------------------ 931 * jQuery 932 * ------------------------------------------------------------------------ 933 * add .Button to jQuery only if jQuery is present 934 */ 935 936 defineJQueryPlugin(Button); 937 938 /** 939 * -------------------------------------------------------------------------- 940 * Bootstrap (v5.1.3): dom/manipulator.js 941 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 942 * -------------------------------------------------------------------------- 943 */ 944 function normalizeData(val) { 945 if (val === 'true') { 946 return true; 947 } 948 949 if (val === 'false') { 950 return false;
951 } 952 953 if (val === Number(val).toString()) { 954 return Number(val); 955 } 956 957 if (val === '' || val === 'null') { 958 return null; 959 } 960 961 return val; 962 } 963 964 function normalizeDataKey(key) { 965 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 966 } 967 968 const Manipulator = { 969 setDataAttribute(element, key, value) { 970 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 971 }, 972 973 removeDataAttribute(element, key) { 974 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 975 }, 976 977 getDataAttributes(element) { 978 if (!element) { 979 return {}; 980 } 981 982 const attributes = {}; 983 Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => { 984 let pureKey = key.replace(/^bs/, ''); 985 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 986 attributes[pureKey] = normalizeData(element.dataset[key]); 987 }); 988 return attributes; 989 }, 990 991 getDataAttribute(element, key) { 992 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 993 }, 994 995 offset(element) { 996 const rect = element.getBoundingClientRect(); 997 return { 998 top: rect.top + window.pageYOffset, 999 left: rect.left + window.pageXOffset 1000 }; 1001 }, 1002 1003 position(element) { 1004 return { 1005 top: element.offsetTop, 1006 left: element.offsetLeft 1007 }; 1008 } 1009 1010 }; 1011 1012 /** 1013 * -------------------------------------------------------------------------- 1014 * Bootstrap (v5.1.3): dom/selector-engine.js 1015 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1016 * -------------------------------------------------------------------------- 1017 */ 1018 const NODE_TEXT = 3; 1019 const SelectorEngine = { 1020 find(selector, element = document.documentElement) { 1021 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 1022 }, 1023 1024 findOne(selector, element = document.documentElement) { 1025 return Element.prototype.querySelector.call(element, selector); 1026 }, 1027 1028 children(element, selector) { 1029 return [].concat(...element.children).filter(child => child.matches(selector)); 1030 }, 1031 1032 parents(element, selector) { 1033 const parents = []; 1034 let ancestor = element.parentNode; 1035 1036 while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { 1037 if (ancestor.matches(selector)) { 1038 parents.push(ancestor); 1039 } 1040 1041 ancestor = ancestor.parentNode; 1042 } 1043 1044 return parents; 1045 }, 1046 1047 prev(element, selector) { 1048 let previous = element.previousElementSibling; 1049 1050 while (previous) { 1051 if (previous.matches(selector)) { 1052 return [previous]; 1053 } 1054 1055 previous = previous.previousElementSibling; 1056 } 1057 1058 return []; 1059 }, 1060 1061 next(element, selector) { 1062 let next = element.nextElementSibling; 1063 1064 while (next) { 1065 if (next.matches(selector)) { 1066 return [next]; 1067 } 1068 1069 next = next.nextElementSibling; 1070 } 1071 1072 return []; 1073 }, 1074 1075 focusableChildren(element) { 1076 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', '); 1077 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 1078 } 1079 1080 }; 1081 1082 /** 1083 * -------------------------------------------------------------------------- 1084 * Bootstrap (v5.1.3): carousel.js 1085 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1086 * -------------------------------------------------------------------------- 1087 */ 1088 /** 1089 * ------------------------------------------------------------------------ 1090 * Constants 1091 * ------------------------------------------------------------------------ 1092 */ 1093 1094 const NAME$b = 'carousel'; 1095 const DATA_KEY$a = 'bs.carousel'; 1096 const EVENT_KEY$a = `.${DATA_KEY$a}`; 1097 const DATA_API_KEY$6 = '.data-api'; 1098 const ARROW_LEFT_KEY = 'ArrowLeft'; 1099 const ARROW_RIGHT_KEY = 'ArrowRight'; 1100 const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 1101 1102 const SWIPE_THRESHOLD = 40; 1103 const Default$a = { 1104 interval: 5000, 1105 keyboard: true, 1106 slide: false, 1107 pause: 'hover', 1108 wrap: true, 1109 touch: true 1110 }; 1111 const DefaultType$a = { 1112 interval: '(number|boolean)', 1113 keyboard: 'boolean', 1114 slide: '(boolean|string)', 1115 pause: '(string|boolean)', 1116 wrap: 'boolean', 1117 touch: 'boolean' 1118 }; 1119 const ORDER_NEXT = 'next'; 1120 const ORDER_PREV = 'prev'; 1121 const DIRECTION_LEFT = 'left'; 1122 const DIRECTION_RIGHT = 'right'; 1123 const KEY_TO_DIRECTION = { 1124 [ARROW_LEFT_KEY]: DIRECTION_RIGHT, 1125 [ARROW_RIGHT_KEY]: DIRECTION_LEFT 1126 }; 1127 const EVENT_SLIDE = `slide${EVENT_KEY$a}`; 1128 const EVENT_SLID = `slid${EVENT_KEY$a}`; 1129 const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`; 1130 const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`; 1131 const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`; 1132 const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`; 1133 const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`; 1134 const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`; 1135 const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`; 1136 const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`; 1137 const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`; 1138 const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`; 1139 const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 1140 const CLASS_NAME_CAROUSEL = 'carousel'; 1141 const CLASS_NAME_ACTIVE$2 = 'active'; 1142 const CLASS_NAME_SLIDE = 'slide'; 1143 const CLASS_NAME_END = 'carousel-item-end'; 1144 const CLASS_NAME_START = 'carousel-item-start';
1145 const CLASS_NAME_NEXT = 'carousel-item-next'; 1146 const CLASS_NAME_PREV = 'carousel-item-prev'; 1147 const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 1148 const SELECTOR_ACTIVE$1 = '.active'; 1149 const SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; 1150 const SELECTOR_ITEM = '.carousel-item'; 1151 const SELECTOR_ITEM_IMG = '.carousel-item img'; 1152 const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 1153 const SELECTOR_INDICATORS = '.carousel-indicators'; 1154 const SELECTOR_INDICATOR = '[data-bs-target]'; 1155 const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 1156 const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 1157 const POINTER_TYPE_TOUCH = 'touch'; 1158 const POINTER_TYPE_PEN = 'pen'; 1159 /** 1160 * ------------------------------------------------------------------------ 1161 * Class Definition 1162 * ------------------------------------------------------------------------ 1163 */ 1164 1165 class Carousel extends BaseComponent { 1166 constructor(element, config) { 1167 super(element); 1168 this._items = null; 1169 this._interval = null; 1170 this._activeElement = null; 1171 this._isPaused = false; 1172 this._isSliding = false; 1173 this.touchTimeout = null; 1174 this.touchStartX = 0; 1175 this.touchDeltaX = 0; 1176 this._config = this._getConfig(config); 1177 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 1178 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 1179 this._pointerEvent = Boolean(window.PointerEvent); 1180 1181 this._addEventListeners(); 1182 } // Getters 1183 1184 1185 static get Default() { 1186 return Default$a; 1187 } 1188 1189 static get NAME() { 1190 return NAME$b; 1191 } // Public 1192 1193 1194 next() { 1195 this._slide(ORDER_NEXT); 1196 } 1197 1198 nextWhenVisible() { 1199 // Don't call next when the page isn't visible 1200 // or the carousel or its parent isn't visible 1201 if (!document.hidden && isVisible(this._element)) { 1202 this.next(); 1203 } 1204 } 1205 1206 prev() { 1207 this._slide(ORDER_PREV); 1208 } 1209 1210 pause(event) { 1211 if (!event) { 1212 this._isPaused = true; 1213 } 1214 1215 if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) { 1216 triggerTransitionEnd(this._element); 1217 this.cycle(true); 1218 } 1219 1220 clearInterval(this._interval); 1221 this._interval = null; 1222 } 1223 1224 cycle(event) { 1225 if (!event) { 1226 this._isPaused = false; 1227 } 1228 1229 if (this._interval) { 1230 clearInterval(this._interval); 1231 this._interval = null; 1232 } 1233 1234 if (this._config && this._config.interval && !this._isPaused) { 1235 this._updateInterval(); 1236 1237 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 1238 } 1239 } 1240 1241 to(index) { 1242 this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 1243 1244 const activeIndex = this._getItemIndex(this._activeElement); 1245 1246 if (index > this._items.length - 1 || index < 0) { 1247 return; 1248 } 1249 1250 if (this._isSliding) { 1251 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 1252 return; 1253 } 1254 1255 if (activeIndex === index) { 1256 this.pause(); 1257 this.cycle(); 1258 return; 1259 } 1260 1261 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 1262 1263 this._slide(order, this._items[index]); 1264 } // Private 1265 1266 1267 _getConfig(config) { 1268 config = { ...Default$a, 1269 ...Manipulator.getDataAttributes(this._element), 1270 ...(typeof config === 'object' ? config : {}) 1271 }; 1272 typeCheckConfig(NAME$b, config, DefaultType$a); 1273 return config; 1274 } 1275 1276 _handleSwipe() { 1277 const absDeltax = Math.abs(this.touchDeltaX); 1278 1279 if (absDeltax <= SWIPE_THRESHOLD) { 1280 return; 1281 } 1282 1283 const direction = absDeltax / this.touchDeltaX; 1284 this.touchDeltaX = 0; 1285 1286 if (!direction) { 1287 return; 1288 } 1289 1290 this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT); 1291 } 1292 1293 _addEventListeners() { 1294 if (this._config.keyboard) { 1295 EventHandler.on(this._element, EVENT_KEYDOWN, event =>
1295 this._keydown(event)); 1296 } 1297 1298 if (this._config.pause === 'hover') { 1299 EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event)); 1300 EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event)); 1301 } 1302 1303 if (this._config.touch && this._touchSupported) { 1304 this._addTouchEventListeners(); 1305 } 1306 } 1307 1308 _addTouchEventListeners() { 1309 const hasPointerPenTouch = event => { 1310 return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 1311 }; 1312 1313 const start = event => { 1314 if (hasPointerPenTouch(event)) { 1315 this.touchStartX = event.clientX; 1316 } else if (!this._pointerEvent) { 1317 this.touchStartX = event.touches[0].clientX; 1318 } 1319 }; 1320 1321 const move = event => { 1322 // ensure swiping with one touch and not pinching 1323 this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX; 1324 }; 1325 1326 const end = event => { 1327 if (hasPointerPenTouch(event)) { 1328 this.touchDeltaX = event.clientX - this.touchStartX; 1329 } 1330 1331 this._handleSwipe(); 1332 1333 if (this._config.pause === 'hover') { 1334 // If it's a touch-enabled device, mouseenter/leave are fired as 1335 // part of the mouse compatibility events on first tap - the carousel 1336 // would stop cycling until user tapped out of it; 1337 // here, we listen for touchend, explicitly pause the carousel 1338 // (as if it's the second time we tap on it, mouseenter compat event 1339 // is NOT fired) and after a timeout (to allow for mouse compatibility 1340 // events to fire) we explicitly restart cycling 1341 this.pause(); 1342 1343 if (this.touchTimeout) { 1344 clearTimeout(this.touchTimeout); 1345 } 1346 1347 this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 1348 } 1349 }; 1350 1351 SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => { 1352 EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault()); 1353 }); 1354 1355 if (this._pointerEvent) { 1356 EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event)); 1357 EventHandler.on(this._element, EVENT_POINTERUP, event => end(event)); 1358 1359 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 1360 } else { 1361 EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event)); 1362 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event)); 1363 EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event)); 1364 } 1365 } 1366 1367 _keydown(event) { 1368 if (/input|textarea/i.test(event.target.tagName)) { 1369 return; 1370 } 1371 1372 const direction = KEY_TO_DIRECTION[event.key]; 1373 1374 if (direction) { 1375 event.preventDefault(); 1376 1377 this._slide(direction); 1378 } 1379 } 1380 1381 _getItemIndex(element) { 1382 this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : []; 1383 return this._items.indexOf(element); 1384 } 1385 1386 _getItemByOrder(order, activeElement) { 1387 const isNext = order === ORDER_NEXT; 1388 return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap); 1389 } 1390 1391 _triggerSlideEvent(relatedTarget, eventDirectionName) { 1392 const targetIndex = this._getItemIndex(relatedTarget); 1393 1394 const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)); 1395 1396 return EventHandler.trigger(this._element, EVENT_SLIDE, { 1397 relatedTarget, 1398 direction: eventDirectionName, 1399 from: fromIndex, 1400 to: targetIndex 1401 }); 1402 } 1403 1404 _setActiveIndicatorElement(element) { 1405 if (this._indicatorsElement) { 1406 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement); 1407 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 1408 activeIndicator.removeAttribute('aria-current'); 1409 const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement); 1410 1411 for (let i = 0; i < indicators.length; i++) { 1412 if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) { 1413 indicators[i].classList.add(CLASS_NAME_ACTIVE$2); 1414 indicators[i].setAttribute('aria-current', 'true'); 1415 break; 1416 } 1417 } 1418 } 1419 } 1420 1421 _updateInterval() { 1422 const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 1423 1424 if (!element) { 1425 return; 1426 } 1427 1428 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 1429 1430 if (elementInterval) { 1431 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 1432 this._config.interval = elementInterval; 1433 } else { 1434 this._config.interval = this._config.defaultInterval || this._config.interval; 1435 } 1436 } 1437 1438 _slide(directionOrOrder, element) { 1439 const order = this._directionToOrder(directionOrOrder); 1440 1441 const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 1442 1443 const activeElementIndex = this._getItemIndex(activeElement); 1444 1445 const nextElement = element || this._getItemByOrder(order, activeElement); 1446 1447 const nextElementIndex = this._getItemIndex(nextElement); 1448 1449 const isCycling = Boolean(this._interval); 1450 const isNext = order === ORDER_NEXT; 1451 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 1452 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 1453 1454 const eventDirectionName = this._orderToDirection(order); 1455 1456 if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) { 1457 this._isSliding = false;
1458 return; 1459 } 1460 1461 if (this._isSliding) { 1462 return; 1463 } 1464 1465 const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 1466 1467 if (slideEvent.defaultPrevented) { 1468 return; 1469 } 1470 1471 if (!activeElement || !nextElement) { 1472 // Some weirdness is happening, so we bail 1473 return; 1474 } 1475 1476 this._isSliding = true; 1477 1478 if (isCycling) { 1479 this.pause(); 1480 } 1481 1482 this._setActiveIndicatorElement(nextElement); 1483 1484 this._activeElement = nextElement; 1485 1486 const triggerSlidEvent = () => { 1487 EventHandler.trigger(this._element, EVENT_SLID, { 1488 relatedTarget: nextElement, 1489 direction: eventDirectionName, 1490 from: activeElementIndex, 1491 to: nextElementIndex 1492 }); 1493 }; 1494 1495 if (this._element.classList.contains(CLASS_NAME_SLIDE)) { 1496 nextElement.classList.add(orderClassName); 1497 reflow(nextElement); 1498 activeElement.classList.add(directionalClassName); 1499 nextElement.classList.add(directionalClassName); 1500 1501 const completeCallBack = () => { 1502 nextElement.classList.remove(directionalClassName, orderClassName); 1503 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 1504 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 1505 this._isSliding = false; 1506 setTimeout(triggerSlidEvent, 0); 1507 }; 1508 1509 this._queueCallback(completeCallBack, activeElement, true); 1510 } else { 1511 activeElement.classList.remove(CLASS_NAME_ACTIVE$2); 1512 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 1513 this._isSliding = false; 1514 triggerSlidEvent(); 1515 } 1516 1517 if (isCycling) { 1518 this.cycle(); 1519 } 1520 } 1521 1522 _directionToOrder(direction) { 1523 if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) { 1524 return direction; 1525 } 1526 1527 if (isRTL()) { 1528 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 1529 } 1530 1531 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 1532 } 1533 1534 _orderToDirection(order) { 1535 if (![ORDER_NEXT, ORDER_PREV].includes(order)) { 1536 return order; 1537 } 1538 1539 if (isRTL()) { 1540 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 1541 } 1542 1543 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 1544 } // Static 1545 1546 1547 static carouselInterface(element, config) { 1548 const data = Carousel.getOrCreateInstance(element, config); 1549 let { 1550 _config 1551 } = data; 1552 1553 if (typeof config === 'object') { 1554 _config = { ..._config, 1555 ...config 1556 }; 1557 } 1558 1559 const action = typeof config === 'string' ? config : _config.slide; 1560 1561 if (typeof config === 'number') { 1562 data.to(config); 1563 } else if (typeof action === 'string') { 1564 if (typeof data[action] === 'undefined') { 1565 throw new TypeError(`No method named "${action}"`); 1566 } 1567 1568 data[action](); 1569 } else if (_config.interval && _config.ride) { 1570 data.pause(); 1571 data.cycle(); 1572 } 1573 } 1574 1575 static jQueryInterface(config) { 1576 return this.each(function () { 1577 Carousel.carouselInterface(this, config); 1578 }); 1579 } 1580 1581 static dataApiClickHandler(event) { 1582 const target = getElementFromSelector(this); 1583 1584 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 1585 return; 1586 } 1587 1588 const config = { ...Manipulator.getDataAttributes(target), 1589 ...Manipulator.getDataAttributes(this) 1590 }; 1591 const slideIndex = this.getAttribute('data-bs-slide-to'); 1592 1593 if (slideIndex) { 1594 config.interval = false; 1595 } 1596 1597 Carousel.carouselInterface(target, config); 1598 1599 if (slideIndex) { 1600 Carousel.getInstance(target).to(slideIndex); 1601 } 1602 1603 event.preventDefault(); 1604 } 1605 1606 } 1607 /** 1608 * ------------------------------------------------------------------------ 1609 * Data Api implementation 1610 * ------------------------------------------------------------------------ 1611 */ 1612 1613 1614 EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler); 1615 EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 1616 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 1617 1618 for (let i = 0, len = carousels.length; i < len; i++) {
1619 Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i])); 1620 } 1621 }); 1622 /** 1623 * ------------------------------------------------------------------------ 1624 * jQuery 1625 * ------------------------------------------------------------------------ 1626 * add .Carousel to jQuery only if jQuery is present 1627 */ 1628 1629 defineJQueryPlugin(Carousel); 1630 1631 /** 1632 * -------------------------------------------------------------------------- 1633 * Bootstrap (v5.1.3): collapse.js 1634 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1635 * -------------------------------------------------------------------------- 1636 */ 1637 /** 1638 * ------------------------------------------------------------------------ 1639 * Constants 1640 * ------------------------------------------------------------------------ 1641 */ 1642 1643 const NAME$a = 'collapse'; 1644 const DATA_KEY$9 = 'bs.collapse'; 1645 const EVENT_KEY$9 = `.${DATA_KEY$9}`; 1646 const DATA_API_KEY$5 = '.data-api'; 1647 const Default$9 = { 1648 toggle: true, 1649 parent: null 1650 }; 1651 const DefaultType$9 = { 1652 toggle: 'boolean', 1653 parent: '(null|element)' 1654 }; 1655 const EVENT_SHOW$5 = `show${EVENT_KEY$9}`; 1656 const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`; 1657 const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`; 1658 const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`; 1659 const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`; 1660 const CLASS_NAME_SHOW$7 = 'show'; 1661 const CLASS_NAME_COLLAPSE = 'collapse'; 1662 const CLASS_NAME_COLLAPSING = 'collapsing'; 1663 const CLASS_NAME_COLLAPSED = 'collapsed'; 1664 const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 1665 const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 1666 const WIDTH = 'width'; 1667 const HEIGHT = 'height'; 1668 const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 1669 const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 1670 /** 1671 * ------------------------------------------------------------------------ 1672 * Class Definition 1673 * ------------------------------------------------------------------------ 1674 */ 1675 1676 class Collapse extends BaseComponent { 1677 constructor(element, config) { 1678 super(element); 1679 this._isTransitioning = false; 1680 this._config = this._getConfig(config); 1681 this._triggerArray = []; 1682 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 1683 1684 for (let i = 0, len = toggleList.length; i < len; i++) { 1685 const elem = toggleList[i]; 1686 const selector = getSelectorFromElement(elem); 1687 const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element); 1688 1689 if (selector !== null && filterElement.length) { 1690 this._selector = selector; 1691 1692 this._triggerArray.push(elem); 1693 } 1694 } 1695 1696 this._initializeChildren(); 1697 1698 if (!this._config.parent) { 1699 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 1700 } 1701 1702 if (this._config.toggle) { 1703 this.toggle(); 1704 } 1705 } // Getters 1706 1707 1708 static get Default() { 1709 return Default$9; 1710 } 1711 1712 static get NAME() { 1713 return NAME$a; 1714 } // Public 1715 1716 1717 toggle() { 1718 if (this._isShown()) { 1719 this.hide(); 1720 } else { 1721 this.show(); 1722 } 1723 } 1724 1725 show() { 1726 if (this._isTransitioning || this._isShown()) { 1727 return; 1728 } 1729 1730 let actives = []; 1731 let activesData; 1732 1733 if (this._config.parent) { 1734 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 1735 actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth 1736 } 1737 1738 const container = SelectorEngine.findOne(this._selector); 1739 1740 if (actives.length) { 1741 const tempActiveData = actives.find(elem => container !== elem); 1742 activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null; 1743 1744 if (activesData && activesData._isTransitioning) { 1745 return; 1746 } 1747 } 1748 1749 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5); 1750 1751 if (startEvent.defaultPrevented) { 1752 return; 1753 } 1754
1755 actives.forEach(elemActive => { 1756 if (container !== elemActive) { 1757 Collapse.getOrCreateInstance(elemActive, { 1758 toggle: false 1759 }).hide(); 1760 } 1761 1762 if (!activesData) { 1763 Data.set(elemActive, DATA_KEY$9, null); 1764 } 1765 }); 1766 1767 const dimension = this._getDimension(); 1768 1769 this._element.classList.remove(CLASS_NAME_COLLAPSE); 1770 1771 this._element.classList.add(CLASS_NAME_COLLAPSING); 1772 1773 this._element.style[dimension] = 0; 1774 1775 this._addAriaAndCollapsedClass(this._triggerArray, true); 1776 1777 this._isTransitioning = true; 1778 1779 const complete = () => { 1780 this._isTransitioning = false; 1781 1782 this._element.classList.remove(CLASS_NAME_COLLAPSING); 1783 1784 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 1785 1786 this._element.style[dimension] = ''; 1787 EventHandler.trigger(this._element, EVENT_SHOWN$5); 1788 }; 1789 1790 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 1791 const scrollSize = `scroll${capitalizedDimension}`; 1792 1793 this._queueCallback(complete, this._element, true); 1794 1795 this._element.style[dimension] = `${this._element[scrollSize]}px`; 1796 } 1797 1798 hide() { 1799 if (this._isTransitioning || !this._isShown()) { 1800 return; 1801 } 1802 1803 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5); 1804 1805 if (startEvent.defaultPrevented) { 1806 return; 1807 } 1808 1809 const dimension = this._getDimension(); 1810 1811 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 1812 reflow(this._element); 1813 1814 this._element.classList.add(CLASS_NAME_COLLAPSING); 1815 1816 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 1817 1818 const triggerArrayLength = this._triggerArray.length; 1819 1820 for (let i = 0; i < triggerArrayLength; i++) { 1821 const trigger = this._triggerArray[i]; 1822 const elem = getElementFromSelector(trigger); 1823 1824 if (elem && !this._isShown(elem)) { 1825 this._addAriaAndCollapsedClass([trigger], false); 1826 } 1827 } 1828 1829 this._isTransitioning = true; 1830 1831 const complete = () => { 1832 this._isTransitioning = false; 1833 1834 this._element.classList.remove(CLASS_NAME_COLLAPSING); 1835 1836 this._element.classList.add(CLASS_NAME_COLLAPSE); 1837 1838 EventHandler.trigger(this._element, EVENT_HIDDEN$5); 1839 }; 1840 1841 this._element.style[dimension] = ''; 1842 1843 this._queueCallback(complete, this._element, true); 1844 } 1845 1846 _isShown(element = this._element) { 1847 return element.classList.contains(CLASS_NAME_SHOW$7); 1848 } // Private 1849 1850 1851 _getConfig(config) { 1852 config = { ...Default$9, 1853 ...Manipulator.getDataAttributes(this._element), 1854 ...config 1855 }; 1856 config.toggle = Boolean(config.toggle); // Coerce string values 1857 1858 config.parent = getElement(config.parent); 1859 typeCheckConfig(NAME$a, config, DefaultType$9); 1860 return config; 1861 } 1862 1863 _getDimension() { 1864 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 1865 } 1866 1867 _initializeChildren() { 1868 if (!this._config.parent) { 1869 return; 1870 } 1871 1872 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 1873 SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => { 1874 const selected = getElementFromSelector(element); 1875 1876 if (selected) { 1877 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 1878 } 1879 }); 1880 } 1881 1882 _addAriaAndCollapsedClass(triggerArray, isOpen) { 1883 if (!triggerArray.length) { 1884 return; 1885 } 1886 1887 triggerArray.forEach(elem => { 1888 if (isOpen) { 1889 elem.classList.remove(CLASS_NAME_COLLAPSED); 1890 } else { 1891 elem.classList.add(CLASS_NAME_COLLAPSED); 1892 } 1893 1894 elem.setAttribute('aria-expanded', isOpen); 1895 }); 1896 } // Static 1897 1898 1899 static jQueryInterface(config) { 1900 return this.each(function () { 1901 const _config = {}; 1902 1903 if (typeof config === 'string' && /show|hide/.test(config)) { 1904 _config.toggle = false;
1905 } 1906 1907 const data = Collapse.getOrCreateInstance(this, _config); 1908 1909 if (typeof config === 'string') { 1910 if (typeof data[config] === 'undefined') { 1911 throw new TypeError(`No method named "${config}"`); 1912 } 1913 1914 data[config](); 1915 } 1916 }); 1917 } 1918 1919 } 1920 /** 1921 * ------------------------------------------------------------------------ 1922 * Data Api implementation 1923 * ------------------------------------------------------------------------ 1924 */ 1925 1926 1927 EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 1928 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 1929 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 1930 event.preventDefault(); 1931 } 1932 1933 const selector = getSelectorFromElement(this); 1934 const selectorElements = SelectorEngine.find(selector); 1935 selectorElements.forEach(element => { 1936 Collapse.getOrCreateInstance(element, { 1937 toggle: false 1938 }).toggle(); 1939 }); 1940 }); 1941 /** 1942 * ------------------------------------------------------------------------ 1943 * jQuery 1944 * ------------------------------------------------------------------------ 1945 * add .Collapse to jQuery only if jQuery is present 1946 */ 1947 1948 defineJQueryPlugin(Collapse); 1949 1950 /** 1951 * -------------------------------------------------------------------------- 1952 * Bootstrap (v5.1.3): dropdown.js 1953 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1954 * -------------------------------------------------------------------------- 1955 */ 1956 /** 1957 * ------------------------------------------------------------------------ 1958 * Constants 1959 * ------------------------------------------------------------------------ 1960 */ 1961 1962 const NAME$9 = 'dropdown'; 1963 const DATA_KEY$8 = 'bs.dropdown'; 1964 const EVENT_KEY$8 = `.${DATA_KEY$8}`; 1965 const DATA_API_KEY$4 = '.data-api'; 1966 const ESCAPE_KEY$2 = 'Escape'; 1967 const SPACE_KEY = 'Space'; 1968 const TAB_KEY$1 = 'Tab'; 1969 const ARROW_UP_KEY = 'ArrowUp'; 1970 const ARROW_DOWN_KEY = 'ArrowDown'; 1971 const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 1972 1973 const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`); 1974 const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`; 1975 const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`; 1976 const EVENT_SHOW$4 = `show${EVENT_KEY$8}`; 1977 const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`; 1978 const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`; 1979 const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`; 1980 const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`; 1981 const CLASS_NAME_SHOW$6 = 'show'; 1982 const CLASS_NAME_DROPUP = 'dropup'; 1983 const CLASS_NAME_DROPEND = 'dropend'; 1984 const CLASS_NAME_DROPSTART = 'dropstart'; 1985 const CLASS_NAME_NAVBAR = 'navbar'; 1986 const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]'; 1987 const SELECTOR_MENU = '.dropdown-menu'; 1988 const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 1989 const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 1990 const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 1991 const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 1992 const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 1993 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 1994 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 1995 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 1996 const Default$8 = { 1997 offset: [0, 2], 1998 boundary: 'clippingParents', 1999 reference: 'toggle', 2000 display: 'dynamic', 2001 popperConfig: null, 2002 autoClose: true 2003 }; 2004 const DefaultType$8 = { 2005 offset: '(array|string|function)', 2006 boundary: '(string|element)', 2007 reference: '(string|element|object)', 2008 display: 'string', 2009 popperConfig: '(null|object|function)', 2010 autoClose: '(boolean|string)' 2011 }; 2012 /** 2013 * ------------------------------------------------------------------------ 2014 * Class Definition 2015 * ------------------------------------------------------------------------ 2016 */ 2017 2018 class Dropdown extends BaseComponent { 2019 constructor(element, config) { 2020 super(element); 2021 this._popper = null; 2022 this._config = this._getConfig(config); 2023 this._menu = this._getMenuElement(); 2024 this._inNavbar = this._detectNavbar(); 2025 } // Getters 2026 2027 2028 static get Default() { 2029 return Default$8; 2030 } 2031 2032 static get DefaultType() { 2033 return DefaultType$8; 2034 } 2035 2036 static get NAME() { 2037 return NAME$9; 2038 } // Public 2039 2040 2041 toggle() { 2042 return this._isShown() ? this.hide() : this.show(); 2043 } 2044 2045 show() { 2046 if (isDisabled(this._element) || this._isShown(this._menu)) { 2047 return; 2048 } 2049 2050 const relatedTarget = { 2051 relatedTarget: this._element 2052 }; 2053 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget); 2054 2055 if (showEvent.defaultPrevented) { 2056 return; 2057 } 2058 2059 const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar 2060 2061 if (this._inNavbar) { 2062 Manipulator.setDataAttribute(this._menu, 'popper', 'none'); 2063 } else { 2064 this._createPopper(parent); 2065 } // If this is a touch-enabled device we add extra 2066 // empty mouseover listeners to the body's immediate children; 2067 // only needed because of broken event delegation on iOS 2068 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 2069 2070 2071 if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
2072 [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop)); 2073 } 2074 2075 this._element.focus(); 2076 2077 this._element.setAttribute('aria-expanded', true); 2078 2079 this._menu.classList.add(CLASS_NAME_SHOW$6); 2080 2081 this._element.classList.add(CLASS_NAME_SHOW$6); 2082 2083 EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget); 2084 } 2085 2086 hide() { 2087 if (isDisabled(this._element) || !this._isShown(this._menu)) { 2088 return; 2089 } 2090 2091 const relatedTarget = { 2092 relatedTarget: this._element 2093 }; 2094 2095 this._completeHide(relatedTarget); 2096 } 2097 2098 dispose() { 2099 if (this._popper) { 2100 this._popper.destroy(); 2101 } 2102 2103 super.dispose(); 2104 } 2105 2106 update() { 2107 this._inNavbar = this._detectNavbar(); 2108 2109 if (this._popper) { 2110 this._popper.update(); 2111 } 2112 } // Private 2113 2114 2115 _completeHide(relatedTarget) { 2116 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget); 2117 2118 if (hideEvent.defaultPrevented) { 2119 return; 2120 } // If this is a touch-enabled device we remove the extra 2121 // empty mouseover listeners we added for iOS support 2122 2123 2124 if ('ontouchstart' in document.documentElement) { 2125 [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop)); 2126 } 2127 2128 if (this._popper) { 2129 this._popper.destroy(); 2130 } 2131 2132 this._menu.classList.remove(CLASS_NAME_SHOW$6); 2133 2134 this._element.classList.remove(CLASS_NAME_SHOW$6); 2135 2136 this._element.setAttribute('aria-expanded', 'false'); 2137 2138 Manipulator.removeDataAttribute(this._menu, 'popper'); 2139 EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget); 2140 } 2141 2142 _getConfig(config) { 2143 config = { ...this.constructor.Default, 2144 ...Manipulator.getDataAttributes(this._element), 2145 ...config 2146 }; 2147 typeCheckConfig(NAME$9, config, this.constructor.DefaultType); 2148 2149 if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 2150 // Popper virtual elements require a getBoundingClientRect method 2151 throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 2152 } 2153 2154 return config; 2155 } 2156 2157 _createPopper(parent) { 2158 if (typeof Popper__namespace === 'undefined') { 2159 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 2160 } 2161 2162 let referenceElement = this._element; 2163 2164 if (this._config.reference === 'parent') { 2165 referenceElement = parent; 2166 } else if (isElement(this._config.reference)) { 2167 referenceElement = getElement(this._config.reference); 2168 } else if (typeof this._config.reference === 'object') { 2169 referenceElement = this._config.reference; 2170 } 2171 2172 const popperConfig = this._getPopperConfig(); 2173 2174 const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false); 2175 this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig); 2176 2177 if (isDisplayStatic) { 2178 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); 2179 } 2180 } 2181 2182 _isShown(element = this._element) { 2183 return element.classList.contains(CLASS_NAME_SHOW$6); 2184 } 2185 2186 _getMenuElement() { 2187 return SelectorEngine.next(this._element, SELECTOR_MENU)[0]; 2188 } 2189 2190 _getPlacement() { 2191 const parentDropdown = this._element.parentNode; 2192 2193 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 2194 return PLACEMENT_RIGHT; 2195 } 2196 2197 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 2198 return PLACEMENT_LEFT; 2199 } // We need to trim the value because custom properties can also include spaces 2200 2201 2202 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 2203 2204 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 2205 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 2206 } 2207 2208 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 2209 } 2210 2211 _detectNavbar() { 2212 return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null; 2213 } 2214 2215 _getOffset() { 2216 const { 2217 offset 2218 } = this._config; 2219 2220 if (typeof offset === 'string') { 2221 return offset.split(',').map(val => Number.parseInt(val, 10)); 2222 } 2223 2224 if (typeof offset === 'function') { 2225 return popperData => offset(popperData, this._element); 2226 } 2227 2228 return offset; 2229 } 2230 2231 _getPopperConfig() { 2232 const defaultBsPopperConfig = { 2233 placement: this._getPlacement(), 2234 modifiers: [{ 2235 name: 'preventOverflow', 2236 options: {
2237 boundary: this._config.boundary 2238 } 2239 }, { 2240 name: 'offset', 2241 options: { 2242 offset: this._getOffset() 2243 } 2244 }] 2245 }; // Disable Popper if we have a static display 2246 2247 if (this._config.display === 'static') { 2248 defaultBsPopperConfig.modifiers = [{ 2249 name: 'applyStyles', 2250 enabled: false 2251 }]; 2252 } 2253 2254 return { ...defaultBsPopperConfig, 2255 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 2256 }; 2257 } 2258 2259 _selectMenuItem({ 2260 key, 2261 target 2262 }) { 2263 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible); 2264 2265 if (!items.length) { 2266 return; 2267 } // if target isn't included in items (e.g. when expanding the dropdown) 2268 // allow cycling to get the last item in case key equals ARROW_UP_KEY 2269 2270 2271 getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus(); 2272 } // Static 2273 2274 2275 static jQueryInterface(config) { 2276 return this.each(function () { 2277 const data = Dropdown.getOrCreateInstance(this, config); 2278 2279 if (typeof config !== 'string') { 2280 return; 2281 } 2282 2283 if (typeof data[config] === 'undefined') { 2284 throw new TypeError(`No method named "${config}"`); 2285 } 2286 2287 data[config](); 2288 }); 2289 } 2290 2291 static clearMenus(event) { 2292 if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) { 2293 return; 2294 } 2295 2296 const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3); 2297 2298 for (let i = 0, len = toggles.length; i < len; i++) { 2299 const context = Dropdown.getInstance(toggles[i]); 2300 2301 if (!context || context._config.autoClose === false) { 2302 continue; 2303 } 2304 2305 if (!context._isShown()) { 2306 continue; 2307 } 2308 2309 const relatedTarget = { 2310 relatedTarget: context._element 2311 }; 2312 2313 if (event) { 2314 const composedPath = event.composedPath(); 2315 const isMenuTarget = composedPath.includes(context._menu); 2316 2317 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 2318 continue; 2319 } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 2320 2321 2322 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 2323 continue; 2324 } 2325 2326 if (event.type === 'click') { 2327 relatedTarget.clickEvent = event; 2328 } 2329 } 2330 2331 context._completeHide(relatedTarget); 2332 } 2333 } 2334 2335 static getParentFromElement(element) { 2336 return getElementFromSelector(element) || element.parentNode; 2337 } 2338 2339 static dataApiKeydownHandler(event) { 2340 // If not input/textarea: 2341 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 2342 // If input/textarea: 2343 // - If space key => not a dropdown command 2344 // - If key is other than escape 2345 // - If key is not up or down => not a dropdown command 2346 // - If trigger inside the menu => not a dropdown command 2347 if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) { 2348 return; 2349 } 2350 2351 const isActive = this.classList.contains(CLASS_NAME_SHOW$6); 2352 2353 if (!isActive && event.key === ESCAPE_KEY$2) { 2354 return; 2355 } 2356 2357 event.preventDefault(); 2358 event.stopPropagation(); 2359 2360 if (isDisabled(this)) { 2361 return; 2362 } 2363 2364 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0]; 2365 const instance = Dropdown.getOrCreateInstance(getToggleButton); 2366 2367 if (event.key === ESCAPE_KEY$2) { 2368 instance.hide(); 2369 return; 2370 } 2371 2372 if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) { 2373 if (!isActive) { 2374 instance.show(); 2375 } 2376 2377 instance._selectMenuItem(event); 2378 2379 return; 2380 } 2381 2382 if (!isActive || event.key === SPACE_KEY) { 2383 Dropdown.clearMenus(); 2384 } 2385 } 2386 2387 } 2388 /** 2389 * ------------------------------------------------------------------------ 2390 * Data Api implementation 2391 * ------------------------------------------------------------------------ 2392 */ 2393 2394 2395 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 2396 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 2397 EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 2398 EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 2399 EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 2400 event.preventDefault(); 2401 Dropdown.getOrCreateInstance(this).toggle(); 2402 }); 2403 /** 2404 * ------------------------------------------------------------------------ 2405 * jQuery 2406 * ------------------------------------------------------------------------ 2407 * add .Dropdown to jQuery only if jQuery is present 2408 */ 2409 2410 defineJQueryPlugin(Dropdown); 2411 2412 /** 2413 * -------------------------------------------------------------------------- 2414 * Bootstrap (v5.1.3): util/scrollBar.js 2415 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2416 * -------------------------------------------------------------------------- 2417 */ 2418 const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 2419 const SELECTOR_STICKY_CONTENT = '.sticky-top'; 2420 2421 class ScrollBarHelper { 2422 constructor() { 2423 this._element = document.body; 2424 } 2425 2426 getWidth() { 2427 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 2428 const documentWidth = document.documentElement.clientWidth; 2429 return Math.abs(window.innerWidth - documentWidth); 2430 } 2431 2432 hide() { 2433 const width = this.getWidth(); 2434 2435 this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width 2436 2437 2438 this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width);
2438 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 2439 2440 2441 this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width); 2442 2443 this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width); 2444 } 2445 2446 _disableOverFlow() { 2447 this._saveInitialAttribute(this._element, 'overflow'); 2448 2449 this._element.style.overflow = 'hidden'; 2450 } 2451 2452 _setElementAttributes(selector, styleProp, callback) { 2453 const scrollbarWidth = this.getWidth(); 2454 2455 const manipulationCallBack = element => { 2456 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 2457 return; 2458 } 2459 2460 this._saveInitialAttribute(element, styleProp); 2461 2462 const calculatedValue = window.getComputedStyle(element)[styleProp]; 2463 element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`; 2464 }; 2465 2466 this._applyManipulationCallback(selector, manipulationCallBack); 2467 } 2468 2469 reset() { 2470 this._resetElementAttributes(this._element, 'overflow'); 2471 2472 this._resetElementAttributes(this._element, 'paddingRight'); 2473 2474 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight'); 2475 2476 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight'); 2477 } 2478 2479 _saveInitialAttribute(element, styleProp) { 2480 const actualValue = element.style[styleProp]; 2481 2482 if (actualValue) { 2483 Manipulator.setDataAttribute(element, styleProp, actualValue); 2484 } 2485 } 2486 2487 _resetElementAttributes(selector, styleProp) { 2488 const manipulationCallBack = element => { 2489 const value = Manipulator.getDataAttribute(element, styleProp); 2490 2491 if (typeof value === 'undefined') { 2492 element.style.removeProperty(styleProp); 2493 } else { 2494 Manipulator.removeDataAttribute(element, styleProp); 2495 element.style[styleProp] = value; 2496 } 2497 }; 2498 2499 this._applyManipulationCallback(selector, manipulationCallBack); 2500 } 2501 2502 _applyManipulationCallback(selector, callBack) { 2503 if (isElement(selector)) { 2504 callBack(selector); 2505 } else { 2506 SelectorEngine.find(selector, this._element).forEach(callBack); 2507 } 2508 } 2509 2510 isOverflowing() { 2511 return this.getWidth() > 0; 2512 } 2513 2514 } 2515 2516 /** 2517 * -------------------------------------------------------------------------- 2518 * Bootstrap (v5.1.3): util/backdrop.js 2519 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2520 * -------------------------------------------------------------------------- 2521 */ 2522 const Default$7 = { 2523 className: 'modal-backdrop', 2524 isVisible: true, 2525 // if false, we use the backdrop helper without adding any element to the dom 2526 isAnimated: false, 2527 rootElement: 'body', 2528 // give the choice to place backdrop under different elements 2529 clickCallback: null 2530 }; 2531 const DefaultType$7 = { 2532 className: 'string', 2533 isVisible: 'boolean', 2534 isAnimated: 'boolean', 2535 rootElement: '(element|string)', 2536 clickCallback: '(function|null)' 2537 }; 2538 const NAME$8 = 'backdrop'; 2539 const CLASS_NAME_FADE$4 = 'fade';
2540 const CLASS_NAME_SHOW$5 = 'show'; 2541 const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`; 2542 2543 class Backdrop { 2544 constructor(config) { 2545 this._config = this._getConfig(config); 2546 this._isAppended = false; 2547 this._element = null; 2548 } 2549 2550 show(callback) { 2551 if (!this._config.isVisible) { 2552 execute(callback); 2553 return; 2554 } 2555 2556 this._append(); 2557 2558 if (this._config.isAnimated) { 2559 reflow(this._getElement()); 2560 } 2561 2562 this._getElement().classList.add(CLASS_NAME_SHOW$5); 2563 2564 this._emulateAnimation(() => { 2565 execute(callback); 2566 }); 2567 } 2568 2569 hide(callback) { 2570 if (!this._config.isVisible) { 2571 execute(callback); 2572 return; 2573 } 2574 2575 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 2576 2577 this._emulateAnimation(() => { 2578 this.dispose(); 2579 execute(callback); 2580 }); 2581 } // Private 2582 2583 2584 _getElement() { 2585 if (!this._element) { 2586 const backdrop = document.createElement('div'); 2587 backdrop.className = this._config.className; 2588 2589 if (this._config.isAnimated) { 2590 backdrop.classList.add(CLASS_NAME_FADE$4); 2591 } 2592 2593 this._element = backdrop; 2594 } 2595 2596 return this._element; 2597 } 2598 2599 _getConfig(config) { 2600 config = { ...Default$7, 2601 ...(typeof config === 'object' ? config : {}) 2602 }; // use getElement() with the default "body" to get a fresh Element on each instantiation 2603 2604 config.rootElement = getElement(config.rootElement); 2605 typeCheckConfig(NAME$8, config, DefaultType$7); 2606 return config; 2607 } 2608 2609 _append() { 2610 if (this._isAppended) { 2611 return; 2612 } 2613 2614 this._config.rootElement.append(this._getElement()); 2615 2616 EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => { 2617 execute(this._config.clickCallback); 2618 }); 2619 this._isAppended = true; 2620 } 2621 2622 dispose() { 2623 if (!this._isAppended) { 2624 return; 2625 } 2626 2627 EventHandler.off(this._element, EVENT_MOUSEDOWN); 2628 2629 this._element.remove(); 2630 2631 this._isAppended = false; 2632 } 2633 2634 _emulateAnimation(callback) { 2635 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 2636 } 2637 2638 } 2639 2640 /** 2641 * -------------------------------------------------------------------------- 2642 * Bootstrap (v5.1.3): util/focustrap.js 2643 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2644 * -------------------------------------------------------------------------- 2645 */ 2646 const Default$6 = { 2647 trapElement: null, 2648 // The element to trap focus inside of 2649 autofocus: true 2650 }; 2651 const DefaultType$6 = { 2652 trapElement: 'element', 2653 autofocus: 'boolean' 2654 }; 2655 const NAME$7 = 'focustrap'; 2656 const DATA_KEY$7 = 'bs.focustrap'; 2657 const EVENT_KEY$7 = `.${DATA_KEY$7}`; 2658 const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`; 2659 const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`; 2660 const TAB_KEY = 'Tab'; 2661 const TAB_NAV_FORWARD = 'forward'; 2662 const TAB_NAV_BACKWARD = 'backward'; 2663 2664 class FocusTrap { 2665 constructor(config) { 2666 this._config = this._getConfig(config); 2667 this._isActive = false; 2668 this._lastTabNavDirection = null; 2669 } 2670 2671 activate() { 2672 const { 2673 trapElement, 2674 autofocus 2675 } = this._config; 2676 2677 if (this._isActive) { 2678 return; 2679 } 2680 2681 if (autofocus) { 2682 trapElement.focus(); 2683 } 2684 2685 EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop 2686 2687 EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event)); 2688 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 2689 this._isActive = true; 2690 } 2691 2692 deactivate() { 2693 if (!this._isActive) { 2694 return; 2695 } 2696 2697 this._isActive = false; 2698 EventHandler.off(document, EVENT_KEY$7); 2699 } // Private 2700 2701 2702 _handleFocusin(event) { 2703 const { 2704 target 2705 } = event; 2706 const { 2707 trapElement 2708 } = this._config; 2709 2710 if (target === document || target === trapElement || trapElement.contains(target)) { 2711 return; 2712 } 2713 2714 const elements = SelectorEngine.focusableChildren(trapElement); 2715 2716 if (elements.length === 0) { 2717 trapElement.focus(); 2718 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 2719 elements[elements.length - 1].focus(); 2720 } else { 2721 elements[0].focus(); 2722 } 2723 } 2724 2725 _handleKeydown(event) { 2726 if (event.key !== TAB_KEY) { 2727 return; 2728 } 2729 2730 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 2731 } 2732 2733 _getConfig(config) { 2734 config = { ...Default$6, 2735 ...(typeof config === 'object' ? config : {}) 2736 }; 2737 typeCheckConfig(NAME$7, config, DefaultType$6); 2738 return config; 2739 } 2740 2741 } 2742 2743 /** 2744 * -------------------------------------------------------------------------- 2745 * Bootstrap (v5.1.3): modal.js 2746 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2747 * -------------------------------------------------------------------------- 2748 */ 2749 /** 2750 * ------------------------------------------------------------------------ 2751 * Constants 2752 * ------------------------------------------------------------------------ 2753 */ 2754 2755 const NAME$6 = 'modal'; 2756 const DATA_KEY$6 = 'bs.modal'; 2757 const EVENT_KEY$6 = `.${DATA_KEY$6}`; 2758 const DATA_API_KEY$3 = '.data-api'; 2759 const ESCAPE_KEY$1 = 'Escape';
2760 const Default$5 = { 2761 backdrop: true, 2762 keyboard: true, 2763 focus: true 2764 }; 2765 const DefaultType$5 = { 2766 backdrop: '(boolean|string)', 2767 keyboard: 'boolean', 2768 focus: 'boolean' 2769 }; 2770 const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`; 2771 const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`; 2772 const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`; 2773 const EVENT_SHOW$3 = `show${EVENT_KEY$6}`; 2774 const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`; 2775 const EVENT_RESIZE = `resize${EVENT_KEY$6}`; 2776 const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`; 2777 const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`; 2778 const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`; 2779 const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`; 2780 const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 2781 const CLASS_NAME_OPEN = 'modal-open'; 2782 const CLASS_NAME_FADE$3 = 'fade'; 2783 const CLASS_NAME_SHOW$4 = 'show'; 2784 const CLASS_NAME_STATIC = 'modal-static'; 2785 const OPEN_SELECTOR$1 = '.modal.show'; 2786 const SELECTOR_DIALOG = '.modal-dialog'; 2787 const SELECTOR_MODAL_BODY = '.modal-body'; 2788 const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 2789 /** 2790 * ------------------------------------------------------------------------ 2791 * Class Definition 2792 * ------------------------------------------------------------------------ 2793 */ 2794 2795 class Modal extends BaseComponent { 2796 constructor(element, config) { 2797 super(element); 2798 this._config = this._getConfig(config); 2799 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 2800 this._backdrop = this._initializeBackDrop(); 2801 this._focustrap = this._initializeFocusTrap(); 2802 this._isShown = false; 2803 this._ignoreBackdropClick = false; 2804 this._isTransitioning = false; 2805 this._scrollBar = new ScrollBarHelper(); 2806 } // Getters 2807 2808 2809 static get Default() { 2810 return Default$5; 2811 } 2812 2813 static get NAME() { 2814 return NAME$6; 2815 } // Public 2816 2817 2818 toggle(relatedTarget) { 2819 return this._isShown ? this.hide() : this.show(relatedTarget); 2820 } 2821 2822 show(relatedTarget) { 2823 if (this._isShown || this._isTransitioning) { 2824 return; 2825 } 2826 2827 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 2828 relatedTarget 2829 }); 2830 2831 if (showEvent.defaultPrevented) { 2832 return; 2833 } 2834 2835 this._isShown = true; 2836 2837 if (this._isAnimated()) { 2838 this._isTransitioning = true; 2839 } 2840 2841 this._scrollBar.hide(); 2842 2843 document.body.classList.add(CLASS_NAME_OPEN); 2844 2845 this._adjustDialog(); 2846 2847 this._setEscapeEvent(); 2848 2849 this._setResizeEvent(); 2850 2851 EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { 2852 EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => { 2853 if (event.target === this._element) { 2854 this._ignoreBackdropClick = true; 2855 } 2856 }); 2857 }); 2858 2859 this._showBackdrop(() => this._showElement(relatedTarget)); 2860 } 2861 2862 hide() { 2863 if (!this._isShown || this._isTransitioning) { 2864 return; 2865 } 2866 2867 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 2868 2869 if (hideEvent.defaultPrevented) { 2870 return; 2871 } 2872 2873 this._isShown = false; 2874 2875 const isAnimated = this._isAnimated(); 2876 2877 if (isAnimated) { 2878 this._isTransitioning = true; 2879 } 2880 2881 this._setEscapeEvent(); 2882 2883 this._setResizeEvent(); 2884 2885 this._focustrap.deactivate(); 2886 2887 this._element.classList.remove(CLASS_NAME_SHOW$4); 2888 2889 EventHandler.off(this._element, EVENT_CLICK_DISMISS); 2890 EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS); 2891 2892 this._queueCallback(() => this._hideModal(), this._element, isAnimated); 2893 } 2894 2895 dispose() { 2896 [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6)); 2897 2898 this._backdrop.dispose(); 2899 2900 this._focustrap.deactivate(); 2901 2902 super.dispose(); 2903 } 2904 2905 handleUpdate() { 2906 this._adjustDialog(); 2907 } // Private 2908 2909 2910 _initializeBackDrop() { 2911 return new Backdrop({ 2912 isVisible: Boolean(this._config.backdrop), 2913 // 'static' option will be translated to true, and booleans will keep their value 2914 isAnimated: this._isAnimated() 2915 }); 2916 } 2917 2918 _initializeFocusTrap() { 2919 return new FocusTrap({ 2920 trapElement: this._element 2921 }); 2922 } 2923 2924 _getConfig(config) { 2925 config = { ...Default$5, 2926 ...Manipulator.getDataAttributes(this._element), 2927 ...(typeof config === 'object' ? config : {}) 2928 }; 2929 typeCheckConfig(NAME$6, config, DefaultType$5); 2930 return config; 2931 } 2932 2933 _showElement(relatedTarget) { 2934 const isAnimated = this._isAnimated(); 2935 2936 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 2937 2938 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 2939 // Don't move modal's DOM position 2940 document.body.append(this._element); 2941 } 2942 2943 this._element.style.display = 'block'; 2944 2945 this._element.removeAttribute('aria-hidden'); 2946 2947 this._element.setAttribute('aria-modal', true); 2948 2949 this._element.setAttribute('role', 'dialog'); 2950 2951 this._element.scrollTop = 0; 2952 2953 if (modalBody) { 2954 modalBody.scrollTop = 0; 2955 } 2956 2957 if (isAnimated) { 2958 reflow(this._element); 2959 } 2960 2961 this._element.classList.add(CLASS_NAME_SHOW$4); 2962 2963 const transitionComplete = () => { 2964 if (this._config.focus) { 2965 this._focustrap.activate(); 2966 } 2967 2968 this._isTransitioning = false;
2969 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 2970 relatedTarget 2971 }); 2972 }; 2973 2974 this._queueCallback(transitionComplete, this._dialog, isAnimated); 2975 } 2976 2977 _setEscapeEvent() { 2978 if (this._isShown) { 2979 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 2980 if (this._config.keyboard && event.key === ESCAPE_KEY$1) { 2981 event.preventDefault(); 2982 this.hide(); 2983 } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) { 2984 this._triggerBackdropTransition(); 2985 } 2986 }); 2987 } else { 2988 EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1); 2989 } 2990 } 2991 2992 _setResizeEvent() { 2993 if (this._isShown) { 2994 EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog()); 2995 } else { 2996 EventHandler.off(window, EVENT_RESIZE); 2997 } 2998 } 2999 3000 _hideModal() { 3001 this._element.style.display = 'none'; 3002 3003 this._element.setAttribute('aria-hidden', true); 3004 3005 this._element.removeAttribute('aria-modal'); 3006 3007 this._element.removeAttribute('role'); 3008 3009 this._isTransitioning = false; 3010 3011 this._backdrop.hide(() => { 3012 document.body.classList.remove(CLASS_NAME_OPEN); 3013 3014 this._resetAdjustments(); 3015 3016 this._scrollBar.reset(); 3017 3018 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 3019 }); 3020 } 3021 3022 _showBackdrop(callback) { 3023 EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => { 3024 if (this._ignoreBackdropClick) { 3025 this._ignoreBackdropClick = false; 3026 return; 3027 } 3028 3029 if (event.target !== event.currentTarget) { 3030 return; 3031 } 3032 3033 if (this._config.backdrop === true) { 3034 this.hide(); 3035 } else if (this._config.backdrop === 'static') { 3036 this._triggerBackdropTransition(); 3037 } 3038 }); 3039 3040 this._backdrop.show(callback); 3041 } 3042 3043 _isAnimated() { 3044 return this._element.classList.contains(CLASS_NAME_FADE$3); 3045 } 3046 3047 _triggerBackdropTransition() { 3048 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 3049 3050 if (hideEvent.defaultPrevented) { 3051 return; 3052 } 3053 3054 const { 3055 classList, 3056 scrollHeight, 3057 style 3058 } = this._element; 3059 const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed 3060 3061 if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) { 3062 return; 3063 } 3064 3065 if (!isModalOverflowing) { 3066 style.overflowY = 'hidden'; 3067 } 3068 3069 classList.add(CLASS_NAME_STATIC); 3070 3071 this._queueCallback(() => { 3072 classList.remove(CLASS_NAME_STATIC); 3073 3074 if (!isModalOverflowing) { 3075 this._queueCallback(() => { 3076 style.overflowY = ''; 3077 }, this._dialog); 3078 } 3079 }, this._dialog); 3080 3081 this._element.focus(); 3082 } // ---------------------------------------------------------------------- 3083 // the following methods are used to handle overflowing modals 3084 // ---------------------------------------------------------------------- 3085 3086 3087 _adjustDialog() { 3088 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 3089 3090 const scrollbarWidth = this._scrollBar.getWidth(); 3091 3092 const isBodyOverflowing = scrollbarWidth > 0; 3093 3094 if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) { 3095 this._element.style.paddingLeft = `${scrollbarWidth}px`; 3096 } 3097 3098 if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) { 3099 this._element.style.paddingRight = `${scrollbarWidth}px`; 3100 } 3101 } 3102 3103 _resetAdjustments() { 3104 this._element.style.paddingLeft = ''; 3105 this._element.style.paddingRight = ''; 3106 } // Static 3107 3108 3109 static jQueryInterface(config, relatedTarget) { 3110 return this.each(function () { 3111 const data = Modal.getOrCreateInstance(this, config); 3112 3113 if (typeof config !== 'string') { 3114 return; 3115 } 3116 3117 if (typeof data[config] === 'undefined') {
vendor: 4,925 bytes, lines 3118-3299
3118 throw new TypeError(`No method named "${config}"`); 3119 } 3120 3121 data[config](relatedTarget); 3122 }); 3123 } 3124 3125 } 3126 /** 3127 * ------------------------------------------------------------------------ 3128 * Data Api implementation 3129 * ------------------------------------------------------------------------ 3130 */ 3131 3132 3133 EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 3134 const target = getElementFromSelector(this); 3135 3136 if (['A', 'AREA'].includes(this.tagName)) { 3137 event.preventDefault(); 3138 } 3139 3140 EventHandler.one(target, EVENT_SHOW$3, showEvent => { 3141 if (showEvent.defaultPrevented) { 3142 // only register focus restorer if modal will actually get shown 3143 return; 3144 } 3145 3146 EventHandler.one(target, EVENT_HIDDEN$3, () => { 3147 if (isVisible(this)) { 3148 this.focus(); 3149 } 3150 }); 3151 }); // avoid conflict when clicking moddal toggler while another one is open 3152 3153 const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 3154 3155 if (allReadyOpen) { 3156 Modal.getInstance(allReadyOpen).hide(); 3157 } 3158 3159 const data = Modal.getOrCreateInstance(target); 3160 data.toggle(this); 3161 }); 3162 enableDismissTrigger(Modal); 3163 /** 3164 * ------------------------------------------------------------------------ 3165 * jQuery 3166 * ------------------------------------------------------------------------ 3167 * add .Modal to jQuery only if jQuery is present 3168 */ 3169 3170 defineJQueryPlugin(Modal); 3171 3172 /** 3173 * -------------------------------------------------------------------------- 3174 * Bootstrap (v5.1.3): offcanvas.js 3175 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3176 * -------------------------------------------------------------------------- 3177 */ 3178 /** 3179 * ------------------------------------------------------------------------ 3180 * Constants 3181 * ------------------------------------------------------------------------ 3182 */ 3183 3184 const NAME$5 = 'offcanvas'; 3185 const DATA_KEY$5 = 'bs.offcanvas'; 3186 const EVENT_KEY$5 = `.${DATA_KEY$5}`; 3187 const DATA_API_KEY$2 = '.data-api'; 3188 const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`; 3189 const ESCAPE_KEY = 'Escape'; 3190 const Default$4 = { 3191 backdrop: true, 3192 keyboard: true, 3193 scroll: false 3194 }; 3195 const DefaultType$4 = { 3196 backdrop: 'boolean', 3197 keyboard: 'boolean', 3198 scroll: 'boolean' 3199 }; 3200 const CLASS_NAME_SHOW$3 = 'show'; 3201 const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 3202 const OPEN_SELECTOR = '.offcanvas.show'; 3203 const EVENT_SHOW$2 = `show${EVENT_KEY$5}`; 3204 const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`; 3205 const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`; 3206 const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`; 3207 const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`; 3208 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`; 3209 const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 3210 /** 3211 * ------------------------------------------------------------------------ 3212 * Class Definition 3213 * ------------------------------------------------------------------------ 3214 */ 3215 3216 class Offcanvas extends BaseComponent { 3217 constructor(element, config) { 3218 super(element); 3219 this._config = this._getConfig(config); 3220 this._isShown = false; 3221 this._backdrop = this._initializeBackDrop(); 3222 this._focustrap = this._initializeFocusTrap(); 3223 3224 this._addEventListeners(); 3225 } // Getters 3226 3227 3228 static get NAME() { 3229 return NAME$5; 3230 } 3231 3232 static get Default() { 3233 return Default$4; 3234 } // Public 3235 3236 3237 toggle(relatedTarget) { 3238 return this._isShown ? this.hide() : this.show(relatedTarget); 3239 } 3240 3241 show(relatedTarget) { 3242 if (this._isShown) { 3243 return; 3244 } 3245 3246 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, { 3247 relatedTarget 3248 }); 3249 3250 if (showEvent.defaultPrevented) { 3251 return; 3252 } 3253 3254 this._isShown = true; 3255 this._element.style.visibility = 'visible'; 3256 3257 this._backdrop.show(); 3258 3259 if (!this._config.scroll) { 3260 new ScrollBarHelper().hide(); 3261 } 3262 3263 this._element.removeAttribute('aria-hidden'); 3264 3265 this._element.setAttribute('aria-modal', true); 3266 3267 this._element.setAttribute('role', 'dialog'); 3268 3269 this._element.classList.add(CLASS_NAME_SHOW$3); 3270 3271 const completeCallBack = () => { 3272 if (!this._config.scroll) { 3273 this._focustrap.activate(); 3274 } 3275 3276 EventHandler.trigger(this._element, EVENT_SHOWN$2, { 3277 relatedTarget 3278 }); 3279 }; 3280 3281 this._queueCallback(completeCallBack, this._element, true); 3282 } 3283 3284 hide() { 3285 if (!this._isShown) { 3286 return; 3287 } 3288 3289 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2); 3290 3291 if (hideEvent.defaultPrevented) { 3292 return; 3293 } 3294 3295 this._focustrap.deactivate(); 3296 3297 this._element.blur(); 3298 3299 this._isShown = false;
3300 3301 this._element.classList.remove(CLASS_NAME_SHOW$3); 3302 3303 this._backdrop.hide(); 3304 3305 const completeCallback = () => { 3306 this._element.setAttribute('aria-hidden', true); 3307 3308 this._element.removeAttribute('aria-modal'); 3309 3310 this._element.removeAttribute('role'); 3311 3312 this._element.style.visibility = 'hidden'; 3313 3314 if (!this._config.scroll) { 3315 new ScrollBarHelper().reset(); 3316 } 3317 3318 EventHandler.trigger(this._element, EVENT_HIDDEN$2); 3319 }; 3320 3321 this._queueCallback(completeCallback, this._element, true); 3322 } 3323 3324 dispose() { 3325 this._backdrop.dispose(); 3326 3327 this._focustrap.deactivate(); 3328 3329 super.dispose(); 3330 } // Private 3331 3332 3333 _getConfig(config) { 3334 config = { ...Default$4, 3335 ...Manipulator.getDataAttributes(this._element), 3336 ...(typeof config === 'object' ? config : {}) 3337 }; 3338 typeCheckConfig(NAME$5, config, DefaultType$4); 3339 return config; 3340 } 3341 3342 _initializeBackDrop() { 3343 return new Backdrop({ 3344 className: CLASS_NAME_BACKDROP, 3345 isVisible: this._config.backdrop, 3346 isAnimated: true, 3347 rootElement: this._element.parentNode, 3348 clickCallback: () => this.hide() 3349 }); 3350 } 3351 3352 _initializeFocusTrap() { 3353 return new FocusTrap({ 3354 trapElement: this._element 3355 }); 3356 } 3357 3358 _addEventListeners() { 3359 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 3360 if (this._config.keyboard && event.key === ESCAPE_KEY) { 3361 this.hide(); 3362 } 3363 }); 3364 } // Static 3365 3366 3367 static jQueryInterface(config) { 3368 return this.each(function () { 3369 const data = Offcanvas.getOrCreateInstance(this, config); 3370 3371 if (typeof config !== 'string') { 3372 return; 3373 } 3374 3375 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 3376 throw new TypeError(`No method named "${config}"`); 3377 } 3378 3379 data[config](this); 3380 }); 3381 } 3382 3383 } 3384 /** 3385 * ------------------------------------------------------------------------ 3386 * Data Api implementation 3387 * ------------------------------------------------------------------------ 3388 */ 3389 3390 3391 EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 3392 const target = getElementFromSelector(this); 3393 3394 if (['A', 'AREA'].includes(this.tagName)) { 3395 event.preventDefault(); 3396 } 3397 3398 if (isDisabled(this)) { 3399 return; 3400 } 3401 3402 EventHandler.one(target, EVENT_HIDDEN$2, () => { 3403 // focus on trigger when it is closed 3404 if (isVisible(this)) { 3405 this.focus(); 3406 } 3407 }); // avoid conflict when clicking a toggler of an offcanvas, while another is open 3408 3409 const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 3410 3411 if (allReadyOpen && allReadyOpen !== target) { 3412 Offcanvas.getInstance(allReadyOpen).hide(); 3413 } 3414 3415 const data = Offcanvas.getOrCreateInstance(target); 3416 data.toggle(this); 3417 }); 3418 EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())); 3419 enableDismissTrigger(Offcanvas); 3420 /** 3421 * ------------------------------------------------------------------------ 3422 * jQuery 3423 * ------------------------------------------------------------------------ 3424 */ 3425 3426 defineJQueryPlugin(Offcanvas); 3427 3428 /** 3429 * -------------------------------------------------------------------------- 3430 * Bootstrap (v5.1.3): util/sanitizer.js 3431 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3432 * -------------------------------------------------------------------------- 3433 */ 3434 const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 3435 const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 3436 /** 3437 * A pattern that recognizes a commonly useful subset of URLs that are safe. 3438 * 3439 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 3440 */ 3441 3442 const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 3443 /** 3444 * A pattern that matches safe data URLs. Only matches image, video and audio types. 3445 * 3446 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 3447 */ 3448 3449 const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 3450 3451 const allowedAttribute = (attribute, allowedAttributeList) => {
3452 const attributeName = attribute.nodeName.toLowerCase(); 3453 3454 if (allowedAttributeList.includes(attributeName)) { 3455 if (uriAttributes.has(attributeName)) { 3456 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 3457 } 3458 3459 return true; 3460 } 3461 3462 const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute. 3463 3464 for (let i = 0, len = regExp.length; i < len; i++) { 3465 if (regExp[i].test(attributeName)) { 3466 return true; 3467 } 3468 } 3469 3470 return false; 3471 }; 3472 3473 const DefaultAllowlist = { 3474 // Global attributes allowed on any supplied element below. 3475 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 3476 a: ['target', 'href', 'title', 'rel'], 3477 area: [], 3478 b: [], 3479 br: [], 3480 col: [], 3481 code: [], 3482 div: [], 3483 em: [], 3484 hr: [], 3485 h1: [], 3486 h2: [], 3487 h3: [], 3488 h4: [], 3489 h5: [], 3490 h6: [], 3491 i: [], 3492 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 3493 li: [], 3494 ol: [], 3495 p: [], 3496 pre: [], 3497 s: [], 3498 small: [], 3499 span: [], 3500 sub: [], 3501 sup: [], 3502 strong: [], 3503 u: [], 3504 ul: [] 3505 }; 3506 function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) { 3507 if (!unsafeHtml.length) { 3508 return unsafeHtml; 3509 } 3510 3511 if (sanitizeFn && typeof sanitizeFn === 'function') { 3512 return sanitizeFn(unsafeHtml); 3513 } 3514 3515 const domParser = new window.DOMParser(); 3516 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 3517 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 3518 3519 for (let i = 0, len = elements.length; i < len; i++) { 3520 const element = elements[i]; 3521 const elementName = element.nodeName.toLowerCase(); 3522 3523 if (!Object.keys(allowList).includes(elementName)) { 3524 element.remove(); 3525 continue; 3526 } 3527 3528 const attributeList = [].concat(...element.attributes); 3529 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 3530 attributeList.forEach(attribute => { 3531 if (!allowedAttribute(attribute, allowedAttributes)) { 3532 element.removeAttribute(attribute.nodeName); 3533 } 3534 }); 3535 } 3536 3537 return createdDocument.body.innerHTML; 3538 } 3539 3540 /** 3541 * -------------------------------------------------------------------------- 3542 * Bootstrap (v5.1.3): tooltip.js 3543 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3544 * -------------------------------------------------------------------------- 3545 */ 3546 /** 3547 * ------------------------------------------------------------------------ 3548 * Constants 3549 * ------------------------------------------------------------------------ 3550 */ 3551 3552 const NAME$4 = 'tooltip'; 3553 const DATA_KEY$4 = 'bs.tooltip'; 3554 const EVENT_KEY$4 = `.${DATA_KEY$4}`; 3555 const CLASS_PREFIX$1 = 'bs-tooltip'; 3556 const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 3557 const DefaultType$3 = { 3558 animation: 'boolean', 3559 template: 'string', 3560 title: '(string|element|function)', 3561 trigger: 'string', 3562 delay: '(number|object)', 3563 html: 'boolean', 3564 selector: '(string|boolean)', 3565 placement: '(string|function)', 3566 offset: '(array|string|function)', 3567 container: '(string|element|boolean)', 3568 fallbackPlacements: 'array', 3569 boundary: '(string|element)', 3570 customClass: '(string|function)', 3571 sanitize: 'boolean', 3572 sanitizeFn: '(null|function)', 3573 allowList: 'object', 3574 popperConfig: '(null|object|function)' 3575 }; 3576 const AttachmentMap = { 3577 AUTO: 'auto', 3578 TOP: 'top', 3579 RIGHT: isRTL() ? 'left' : 'right', 3580 BOTTOM: 'bottom', 3581 LEFT: isRTL() ? 'right' : 'left' 3582 }; 3583 const Default$3 = { 3584 animation: true, 3585 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 3586 trigger: 'hover focus', 3587 title: '', 3588 delay: 0, 3589 html: false, 3590 selector: false, 3591 placement: 'top', 3592 offset: [0, 0], 3593 container: false, 3594 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 3595 boundary: 'clippingParents', 3596 customClass: '', 3597 sanitize: true, 3598 sanitizeFn: null, 3599 allowList: DefaultAllowlist, 3600 popperConfig: null 3601 }; 3602 const Event$2 = { 3603 HIDE: `hide${EVENT_KEY$4}`, 3604 HIDDEN: `hidden${EVENT_KEY$4}`, 3605 SHOW: `show${EVENT_KEY$4}`, 3606 SHOWN: `shown${EVENT_KEY$4}`, 3607 INSERTED: `inserted${EVENT_KEY$4}`, 3608 CLICK: `click${EVENT_KEY$4}`, 3609 FOCUSIN: `focusin${EVENT_KEY$4}`, 3610 FOCUSOUT: `focusout${EVENT_KEY$4}`, 3611 MOUSEENTER: `mouseenter${EVENT_KEY$4}`, 3612 MOUSELEAVE: `mouseleave${EVENT_KEY$4}` 3613 }; 3614 const CLASS_NAME_FADE$2 = 'fade';
3615 const CLASS_NAME_MODAL = 'modal'; 3616 const CLASS_NAME_SHOW$2 = 'show'; 3617 const HOVER_STATE_SHOW = 'show'; 3618 const HOVER_STATE_OUT = 'out'; 3619 const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 3620 const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 3621 const EVENT_MODAL_HIDE = 'hide.bs.modal'; 3622 const TRIGGER_HOVER = 'hover'; 3623 const TRIGGER_FOCUS = 'focus'; 3624 const TRIGGER_CLICK = 'click'; 3625 const TRIGGER_MANUAL = 'manual'; 3626 /** 3627 * ------------------------------------------------------------------------ 3628 * Class Definition 3629 * ------------------------------------------------------------------------ 3630 */ 3631 3632 class Tooltip extends BaseComponent { 3633 constructor(element, config) { 3634 if (typeof Popper__namespace === 'undefined') { 3635 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 3636 } 3637 3638 super(element); // private 3639 3640 this._isEnabled = true; 3641 this._timeout = 0; 3642 this._hoverState = ''; 3643 this._activeTrigger = {}; 3644 this._popper = null; // Protected 3645 3646 this._config = this._getConfig(config); 3647 this.tip = null; 3648 3649 this._setListeners(); 3650 } // Getters 3651 3652 3653 static get Default() { 3654 return Default$3; 3655 } 3656 3657 static get NAME() { 3658 return NAME$4; 3659 } 3660 3661 static get Event() { 3662 return Event$2; 3663 } 3664 3665 static get DefaultType() { 3666 return DefaultType$3; 3667 } // Public 3668 3669 3670 enable() { 3671 this._isEnabled = true; 3672 } 3673 3674 disable() { 3675 this._isEnabled = false; 3676 } 3677 3678 toggleEnabled() { 3679 this._isEnabled = !this._isEnabled; 3680 } 3681 3682 toggle(event) { 3683 if (!this._isEnabled) { 3684 return; 3685 } 3686 3687 if (event) { 3688 const context = this._initializeOnDelegatedTarget(event); 3689 3690 context._activeTrigger.click = !context._activeTrigger.click; 3691 3692 if (context._isWithActiveTrigger()) { 3693 context._enter(null, context); 3694 } else { 3695 context._leave(null, context); 3696 } 3697 } else { 3698 if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) { 3699 this._leave(null, this); 3700 3701 return; 3702 } 3703 3704 this._enter(null, this); 3705 } 3706 } 3707 3708 dispose() { 3709 clearTimeout(this._timeout); 3710 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 3711 3712 if (this.tip) { 3713 this.tip.remove(); 3714 } 3715 3716 this._disposePopper(); 3717 3718 super.dispose(); 3719 } 3720 3721 show() { 3722 if (this._element.style.display === 'none') { 3723 throw new Error('Please use show on visible elements'); 3724 } 3725 3726 if (!(this.isWithContent() && this._isEnabled)) { 3727 return; 3728 } 3729 3730 const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW); 3731 const shadowRoot = findShadowRoot(this._element); 3732 const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element); 3733 3734 if (showEvent.defaultPrevented || !isInTheDom) { 3735 return; 3736 } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title` 3737 // This will be removed later in favor of a `setContent` method 3738 3739 3740 if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) { 3741 this._disposePopper(); 3742 3743 this.tip.remove(); 3744 this.tip = null; 3745 } 3746 3747 const tip = this.getTipElement(); 3748 const tipId = getUID(this.constructor.NAME);
3749 tip.setAttribute('id', tipId); 3750 3751 this._element.setAttribute('aria-describedby', tipId); 3752 3753 if (this._config.animation) { 3754 tip.classList.add(CLASS_NAME_FADE$2); 3755 } 3756 3757 const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; 3758 3759 const attachment = this._getAttachment(placement); 3760 3761 this._addAttachmentClass(attachment); 3762 3763 const { 3764 container 3765 } = this._config; 3766 Data.set(tip, this.constructor.DATA_KEY, this); 3767 3768 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 3769 container.append(tip); 3770 EventHandler.trigger(this._element, this.constructor.Event.INSERTED); 3771 } 3772 3773 if (this._popper) { 3774 this._popper.update(); 3775 } else { 3776 this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment)); 3777 } 3778 3779 tip.classList.add(CLASS_NAME_SHOW$2); 3780 3781 const customClass = this._resolvePossibleFunction(this._config.customClass); 3782 3783 if (customClass) { 3784 tip.classList.add(...customClass.split(' ')); 3785 } // If this is a touch-enabled device we add extra 3786 // empty mouseover listeners to the body's immediate children; 3787 // only needed because of broken event delegation on iOS 3788 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 3789 3790 3791 if ('ontouchstart' in document.documentElement) { 3792 [].concat(...document.body.children).forEach(element => { 3793 EventHandler.on(element, 'mouseover', noop); 3794 }); 3795 } 3796 3797 const complete = () => { 3798 const prevHoverState = this._hoverState; 3799 this._hoverState = null; 3800 EventHandler.trigger(this._element, this.constructor.Event.SHOWN); 3801 3802 if (prevHoverState === HOVER_STATE_OUT) { 3803 this._leave(null, this); 3804 } 3805 }; 3806 3807 const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2); 3808 3809 this._queueCallback(complete, this.tip, isAnimated); 3810 } 3811 3812 hide() { 3813 if (!this._popper) { 3814 return; 3815 } 3816 3817 const tip = this.getTipElement(); 3818 3819 const complete = () => { 3820 if (this._isWithActiveTrigger()) { 3821 return; 3822 } 3823 3824 if (this._hoverState !== HOVER_STATE_SHOW) { 3825 tip.remove(); 3826 } 3827 3828 this._cleanTipClass(); 3829 3830 this._element.removeAttribute('aria-describedby'); 3831 3832 EventHandler.trigger(this._element, this.constructor.Event.HIDDEN); 3833 3834 this._disposePopper(); 3835 }; 3836 3837 const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE); 3838 3839 if (hideEvent.defaultPrevented) { 3840 return; 3841 } 3842 3843 tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra 3844 // empty mouseover listeners we added for iOS support 3845 3846 if ('ontouchstart' in document.documentElement) { 3847 [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop)); 3848 } 3849 3850 this._activeTrigger[TRIGGER_CLICK] = false; 3851 this._activeTrigger[TRIGGER_FOCUS] = false; 3852 this._activeTrigger[TRIGGER_HOVER] = false; 3853 const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2); 3854 3855 this._queueCallback(complete, this.tip, isAnimated); 3856 3857 this._hoverState = ''; 3858 } 3859 3860 update() { 3861 if (this._popper !== null) { 3862 this._popper.update(); 3863 } 3864 } // Protected 3865 3866 3867 isWithContent() { 3868 return Boolean(this.getTitle()); 3869 } 3870 3871 getTipElement() { 3872 if (this.tip) { 3873 return this.tip; 3874 } 3875 3876 const element = document.createElement('div'); 3877 element.innerHTML = this._config.template; 3878 const tip = element.children[0]; 3879 this.setContent(tip); 3880 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 3881 this.tip = tip; 3882 return this.tip; 3883 } 3884 3885 setContent(tip) { 3886 this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER); 3887 } 3888 3889 _sanitizeAndSetContent(template, content, selector) { 3890 const templateElement = SelectorEngine.findOne(selector, template); 3891 3892 if (!content && templateElement) { 3893 templateElement.remove(); 3894 return; 3895 } // we use append for html objects to maintain js events 3896 3897 3898 this.setElementContent(templateElement, content); 3899 } 3900 3901 setElementContent(element, content) { 3902 if (element === null) { 3903 return; 3904 } 3905 3906 if (isElement(content)) { 3907 content = getElement(content); // content is a DOM node or a jQuery 3908 3909 if (this._config.html) { 3910 if (content.parentNode !== element) { 3911 element.innerHTML = ''; 3912 element.append(content); 3913 } 3914 } else { 3915 element.textContent = content.textContent; 3916 } 3917 3918 return; 3919 } 3920 3921 if (this._config.html) { 3922 if (this._config.sanitize) { 3923 content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn); 3924 } 3925 3926 element.innerHTML = content; 3927 } else { 3928 element.textContent = content; 3929 } 3930 } 3931 3932 getTitle() { 3933 const title = this._element.getAttribute('data-bs-original-title') || this._config.title; 3934 3935 return this._resolvePossibleFunction(title); 3936 } 3937 3938 updateAttachment(attachment) { 3939 if (attachment === 'right') { 3940 return 'end'; 3941 } 3942 3943 if (attachment === 'left') { 3944 return 'start'; 3945 } 3946 3947 return attachment; 3948 } // Private 3949 3950 3951 _initializeOnDelegatedTarget(event, context) { 3952 return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 3953 } 3954 3955 _getOffset() { 3956 const { 3957 offset 3958 } = this._config; 3959 3960 if (typeof offset === 'string') { 3961 return offset.split(',').map(val => Number.parseInt(val, 10)); 3962 } 3963 3964 if (typeof offset === 'function') { 3965 return popperData => offset(popperData, this._element); 3966 } 3967 3968 return offset; 3969 } 3970 3971 _resolvePossibleFunction(content) { 3972 return typeof content === 'function' ? content.call(this._element) : content; 3973 } 3974 3975 _getPopperConfig(attachment) { 3976 const defaultBsPopperConfig = { 3977 placement: attachment, 3978 modifiers: [{ 3979 name: 'flip', 3980 options: { 3981 fallbackPlacements: this._config.fallbackPlacements 3982 } 3983 }, { 3984 name: 'offset', 3985 options: { 3986 offset: this._getOffset() 3987 } 3988 }, { 3989 name: 'preventOverflow', 3990 options: {
3991 boundary: this._config.boundary 3992 } 3993 }, { 3994 name: 'arrow', 3995 options: { 3996 element: `.${this.constructor.NAME}-arrow` 3997 } 3998 }, { 3999 name: 'onChange', 4000 enabled: true, 4001 phase: 'afterWrite', 4002 fn: data => this._handlePopperPlacementChange(data) 4003 }], 4004 onFirstUpdate: data => { 4005 if (data.options.placement !== data.placement) { 4006 this._handlePopperPlacementChange(data); 4007 } 4008 } 4009 }; 4010 return { ...defaultBsPopperConfig, 4011 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 4012 }; 4013 } 4014 4015 _addAttachmentClass(attachment) { 4016 this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`); 4017 } 4018 4019 _getAttachment(placement) { 4020 return AttachmentMap[placement.toUpperCase()]; 4021 } 4022 4023 _setListeners() { 4024 const triggers = this._config.trigger.split(' '); 4025 4026 triggers.forEach(trigger => { 4027 if (trigger === 'click') { 4028 EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event)); 4029 } else if (trigger !== TRIGGER_MANUAL) { 4030 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN; 4031 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT; 4032 EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event)); 4033 EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event)); 4034 } 4035 }); 4036 4037 this._hideModalHandler = () => { 4038 if (this._element) { 4039 this.hide(); 4040 } 4041 }; 4042 4043 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 4044 4045 if (this._config.selector) { 4046 this._config = { ...this._config, 4047 trigger: 'manual', 4048 selector: '' 4049 }; 4050 } else { 4051 this._fixTitle(); 4052 } 4053 } 4054 4055 _fixTitle() { 4056 const title = this._element.getAttribute('title'); 4057 4058 const originalTitleType = typeof this._element.getAttribute('data-bs-original-title'); 4059 4060 if (title || originalTitleType !== 'string') { 4061 this._element.setAttribute('data-bs-original-title', title || ''); 4062 4063 if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) { 4064 this._element.setAttribute('aria-label', title); 4065 } 4066 4067 this._element.setAttribute('title', ''); 4068 } 4069 } 4070 4071 _enter(event, context) { 4072 context = this._initializeOnDelegatedTarget(event, context); 4073 4074 if (event) { 4075 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 4076 } 4077 4078 if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) { 4079 context._hoverState = HOVER_STATE_SHOW; 4080 return; 4081 } 4082 4083 clearTimeout(context._timeout); 4084 context._hoverState = HOVER_STATE_SHOW; 4085 4086 if (!context._config.delay || !context._config.delay.show) { 4087 context.show(); 4088 return; 4089 } 4090 4091 context._timeout = setTimeout(() => { 4092 if (context._hoverState === HOVER_STATE_SHOW) { 4093 context.show(); 4094 } 4095 }, context._config.delay.show); 4096 } 4097 4098 _leave(event, context) { 4099 context = this._initializeOnDelegatedTarget(event, context); 4100 4101 if (event) { 4102 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 4103 } 4104 4105 if (context._isWithActiveTrigger()) { 4106 return; 4107 } 4108 4109 clearTimeout(context._timeout); 4110 context._hoverState = HOVER_STATE_OUT; 4111 4112 if (!context._config.delay || !context._config.delay.hide) { 4113 context.hide(); 4114 return; 4115 } 4116 4117 context._timeout = setTimeout(() => { 4118 if (context._hoverState === HOVER_STATE_OUT) { 4119 context.hide(); 4120 } 4121 }, context._config.delay.hide); 4122 } 4123 4124 _isWithActiveTrigger() { 4125 for (const trigger in this._activeTrigger) { 4126 if (this._activeTrigger[trigger]) { 4127 return true; 4128 } 4129 } 4130 4131 return false;
4132 } 4133 4134 _getConfig(config) { 4135 const dataAttributes = Manipulator.getDataAttributes(this._element); 4136 Object.keys(dataAttributes).forEach(dataAttr => { 4137 if (DISALLOWED_ATTRIBUTES.has(dataAttr)) { 4138 delete dataAttributes[dataAttr]; 4139 } 4140 }); 4141 config = { ...this.constructor.Default, 4142 ...dataAttributes, 4143 ...(typeof config === 'object' && config ? config : {}) 4144 }; 4145 config.container = config.container === false ? document.body : getElement(config.container); 4146 4147 if (typeof config.delay === 'number') { 4148 config.delay = { 4149 show: config.delay, 4150 hide: config.delay 4151 }; 4152 } 4153 4154 if (typeof config.title === 'number') { 4155 config.title = config.title.toString(); 4156 } 4157 4158 if (typeof config.content === 'number') { 4159 config.content = config.content.toString(); 4160 } 4161 4162 typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 4163 4164 if (config.sanitize) { 4165 config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn); 4166 } 4167 4168 return config; 4169 } 4170 4171 _getDelegateConfig() { 4172 const config = {}; 4173 4174 for (const key in this._config) { 4175 if (this.constructor.Default[key] !== this._config[key]) { 4176 config[key] = this._config[key]; 4177 } 4178 } // In the future can be replaced with: 4179 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 4180 // `Object.fromEntries(keysWithDifferentValues)` 4181 4182 4183 return config; 4184 } 4185 4186 _cleanTipClass() { 4187 const tip = this.getTipElement(); 4188 const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g'); 4189 const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex); 4190 4191 if (tabClass !== null && tabClass.length > 0) { 4192 tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass)); 4193 } 4194 } 4195 4196 _getBasicClassPrefix() { 4197 return CLASS_PREFIX$1; 4198 } 4199 4200 _handlePopperPlacementChange(popperData) { 4201 const { 4202 state 4203 } = popperData; 4204 4205 if (!state) { 4206 return; 4207 } 4208 4209 this.tip = state.elements.popper; 4210 4211 this._cleanTipClass(); 4212 4213 this._addAttachmentClass(this._getAttachment(state.placement)); 4214 } 4215 4216 _disposePopper() { 4217 if (this._popper) { 4218 this._popper.destroy(); 4219 4220 this._popper = null; 4221 } 4222 } // Static 4223 4224 4225 static jQueryInterface(config) { 4226 return this.each(function () { 4227 const data = Tooltip.getOrCreateInstance(this, config); 4228 4229 if (typeof config === 'string') { 4230 if (typeof data[config] === 'undefined') { 4231 throw new TypeError(`No method named "${config}"`); 4232 } 4233 4234 data[config](); 4235 } 4236 }); 4237 } 4238 4239 } 4240 /** 4241 * ------------------------------------------------------------------------ 4242 * jQuery 4243 * ------------------------------------------------------------------------ 4244 * add .Tooltip to jQuery only if jQuery is present 4245 */ 4246 4247 4248 defineJQueryPlugin(Tooltip); 4249 4250 /** 4251 * -------------------------------------------------------------------------- 4252 * Bootstrap (v5.1.3): popover.js 4253 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4254 * -------------------------------------------------------------------------- 4255 */ 4256 /** 4257 * ------------------------------------------------------------------------ 4258 * Constants 4259 * ------------------------------------------------------------------------ 4260 */ 4261 4262 const NAME$3 = 'popover'; 4263 const DATA_KEY$3 = 'bs.popover'; 4264 const EVENT_KEY$3 = `.${DATA_KEY$3}`; 4265 const CLASS_PREFIX = 'bs-popover'; 4266 const Default$2 = { ...Tooltip.Default, 4267 placement: 'right', 4268 offset: [0, 8], 4269 trigger: 'click', 4270 content: '', 4271 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>' 4272 }; 4273 const DefaultType$2 = { ...Tooltip.DefaultType, 4274 content: '(string|element|function)' 4275 }; 4276 const Event$1 = { 4277 HIDE: `hide${EVENT_KEY$3}`, 4278 HIDDEN: `hidden${EVENT_KEY$3}`, 4279 SHOW: `show${EVENT_KEY$3}`, 4280 SHOWN: `shown${EVENT_KEY$3}`, 4281 INSERTED: `inserted${EVENT_KEY$3}`, 4282 CLICK: `click${EVENT_KEY$3}`, 4283 FOCUSIN: `focusin${EVENT_KEY$3}`, 4284 FOCUSOUT: `focusout${EVENT_KEY$3}`, 4285 MOUSEENTER: `mouseenter${EVENT_KEY$3}`, 4286 MOUSELEAVE: `mouseleave${EVENT_KEY$3}` 4287 }; 4288 const SELECTOR_TITLE = '.popover-header';
4289 const SELECTOR_CONTENT = '.popover-body'; 4290 /** 4291 * ------------------------------------------------------------------------ 4292 * Class Definition 4293 * ------------------------------------------------------------------------ 4294 */ 4295 4296 class Popover extends Tooltip { 4297 // Getters 4298 static get Default() { 4299 return Default$2; 4300 } 4301 4302 static get NAME() { 4303 return NAME$3; 4304 } 4305 4306 static get Event() { 4307 return Event$1; 4308 } 4309 4310 static get DefaultType() { 4311 return DefaultType$2; 4312 } // Overrides 4313 4314 4315 isWithContent() { 4316 return this.getTitle() || this._getContent(); 4317 } 4318 4319 setContent(tip) { 4320 this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE); 4321 4322 this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT); 4323 } // Private 4324 4325 4326 _getContent() { 4327 return this._resolvePossibleFunction(this._config.content); 4328 } 4329 4330 _getBasicClassPrefix() { 4331 return CLASS_PREFIX; 4332 } // Static 4333 4334 4335 static jQueryInterface(config) { 4336 return this.each(function () { 4337 const data = Popover.getOrCreateInstance(this, config); 4338 4339 if (typeof config === 'string') { 4340 if (typeof data[config] === 'undefined') { 4341 throw new TypeError(`No method named "${config}"`); 4342 } 4343 4344 data[config](); 4345 } 4346 }); 4347 } 4348 4349 } 4350 /** 4351 * ------------------------------------------------------------------------ 4352 * jQuery 4353 * ------------------------------------------------------------------------ 4354 * add .Popover to jQuery only if jQuery is present 4355 */ 4356 4357 4358 defineJQueryPlugin(Popover); 4359 4360 /** 4361 * -------------------------------------------------------------------------- 4362 * Bootstrap (v5.1.3): scrollspy.js 4363 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4364 * -------------------------------------------------------------------------- 4365 */ 4366 /** 4367 * ------------------------------------------------------------------------ 4368 * Constants 4369 * ------------------------------------------------------------------------ 4370 */ 4371 4372 const NAME$2 = 'scrollspy'; 4373 const DATA_KEY$2 = 'bs.scrollspy'; 4374 const EVENT_KEY$2 = `.${DATA_KEY$2}`; 4375 const DATA_API_KEY$1 = '.data-api'; 4376 const Default$1 = { 4377 offset: 10, 4378 method: 'auto', 4379 target: '' 4380 }; 4381 const DefaultType$1 = { 4382 offset: 'number', 4383 method: 'string', 4384 target: '(string|element)' 4385 }; 4386 const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 4387 const EVENT_SCROLL = `scroll${EVENT_KEY$2}`; 4388 const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`; 4389 const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 4390 const CLASS_NAME_ACTIVE$1 = 'active'; 4391 const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 4392 const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 4393 const SELECTOR_NAV_LINKS = '.nav-link'; 4394 const SELECTOR_NAV_ITEMS = '.nav-item'; 4395 const SELECTOR_LIST_ITEMS = '.list-group-item'; 4396 const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`; 4397 const SELECTOR_DROPDOWN$1 = '.dropdown'; 4398 const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 4399 const METHOD_OFFSET = 'offset'; 4400 const METHOD_POSITION = 'position'; 4401 /** 4402 * ------------------------------------------------------------------------ 4403 * Class Definition 4404 * ------------------------------------------------------------------------ 4405 */ 4406 4407 class ScrollSpy extends BaseComponent { 4408 constructor(element, config) { 4409 super(element); 4410 this._scrollElement = this._element.tagName === 'BODY' ? window : this._element; 4411 this._config = this._getConfig(config); 4412 this._offsets = []; 4413 this._targets = []; 4414 this._activeTarget = null; 4415 this._scrollHeight = 0; 4416 EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process()); 4417 this.refresh(); 4418 4419 this._process(); 4420 } // Getters 4421 4422 4423 static get Default() { 4424 return Default$1; 4425 } 4426 4427 static get NAME() { 4428 return NAME$2; 4429 } // Public 4430 4431 4432 refresh() { 4433 const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 4434 const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 4435 const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 4436 this._offsets = []; 4437 this._targets = []; 4438 this._scrollHeight = this._getScrollHeight(); 4439 const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target); 4440 targets.map(element => { 4441 const targetSelector = getSelectorFromElement(element); 4442 const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null; 4443 4444 if (target) { 4445 const targetBCR = target.getBoundingClientRect(); 4446 4447 if (targetBCR.width || targetBCR.height) { 4448 return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector]; 4449 } 4450 } 4451 4452 return null; 4453 }).filter(item => item).sort((a, b) =>
4453 a[0] - b[0]).forEach(item => { 4454 this._offsets.push(item[0]); 4455 4456 this._targets.push(item[1]); 4457 }); 4458 } 4459 4460 dispose() { 4461 EventHandler.off(this._scrollElement, EVENT_KEY$2); 4462 super.dispose(); 4463 } // Private 4464 4465 4466 _getConfig(config) { 4467 config = { ...Default$1, 4468 ...Manipulator.getDataAttributes(this._element), 4469 ...(typeof config === 'object' && config ? config : {}) 4470 }; 4471 config.target = getElement(config.target) || document.documentElement; 4472 typeCheckConfig(NAME$2, config, DefaultType$1); 4473 return config; 4474 } 4475 4476 _getScrollTop() { 4477 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 4478 } 4479 4480 _getScrollHeight() { 4481 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 4482 } 4483 4484 _getOffsetHeight() { 4485 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 4486 } 4487 4488 _process() { 4489 const scrollTop = this._getScrollTop() + this._config.offset; 4490 4491 const scrollHeight = this._getScrollHeight(); 4492 4493 const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 4494 4495 if (this._scrollHeight !== scrollHeight) { 4496 this.refresh(); 4497 } 4498 4499 if (scrollTop >= maxScroll) { 4500 const target = this._targets[this._targets.length - 1]; 4501 4502 if (this._activeTarget !== target) { 4503 this._activate(target); 4504 } 4505 4506 return; 4507 } 4508 4509 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 4510 this._activeTarget = null; 4511 4512 this._clear(); 4513 4514 return; 4515 } 4516 4517 for (let i = this._offsets.length; i--;) { 4518 const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 4519 4520 if (isActiveTarget) { 4521 this._activate(this._targets[i]); 4522 } 4523 } 4524 } 4525 4526 _activate(target) { 4527 this._activeTarget = target; 4528 4529 this._clear(); 4530 4531 const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`); 4532 const link = SelectorEngine.findOne(queries.join(','), this._config.target); 4533 link.classList.add(CLASS_NAME_ACTIVE$1); 4534 4535 if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 4536 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1); 4537 } else { 4538 SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => { 4539 // Set triggered links parents as active
4540 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 4541 SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item 4542 4543 SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => { 4544 SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); 4545 }); 4546 }); 4547 } 4548 4549 EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, { 4550 relatedTarget: target 4551 }); 4552 } 4553 4554 _clear() { 4555 SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1)); 4556 } // Static 4557 4558 4559 static jQueryInterface(config) { 4560 return this.each(function () { 4561 const data = ScrollSpy.getOrCreateInstance(this, config); 4562 4563 if (typeof config !== 'string') { 4564 return; 4565 } 4566 4567 if (typeof data[config] === 'undefined') { 4568 throw new TypeError(`No method named "${config}"`); 4569 } 4570 4571 data[config](); 4572 }); 4573 } 4574 4575 } 4576 /** 4577 * ------------------------------------------------------------------------ 4578 * Data Api implementation 4579 * ------------------------------------------------------------------------ 4580 */ 4581 4582 4583 EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 4584 SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy)); 4585 }); 4586 /** 4587 * ------------------------------------------------------------------------ 4588 * jQuery 4589 * ------------------------------------------------------------------------ 4590 * add .ScrollSpy to jQuery only if jQuery is present 4591 */ 4592 4593 defineJQueryPlugin(ScrollSpy); 4594 4595 /** 4596 * -------------------------------------------------------------------------- 4597 * Bootstrap (v5.1.3): tab.js 4598 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4599 * -------------------------------------------------------------------------- 4600 */ 4601 /** 4602 * ------------------------------------------------------------------------ 4603 * Constants 4604 * ------------------------------------------------------------------------ 4605 */ 4606 4607 const NAME$1 = 'tab'; 4608 const DATA_KEY$1 = 'bs.tab'; 4609 const EVENT_KEY$1 = `.${DATA_KEY$1}`; 4610 const DATA_API_KEY = '.data-api'; 4611 const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 4612 const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 4613 const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 4614 const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 4615 const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`; 4616 const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 4617 const CLASS_NAME_ACTIVE = 'active'; 4618 const CLASS_NAME_FADE$1 = 'fade';
4619 const CLASS_NAME_SHOW$1 = 'show'; 4620 const SELECTOR_DROPDOWN = '.dropdown'; 4621 const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 4622 const SELECTOR_ACTIVE = '.active'; 4623 const SELECTOR_ACTIVE_UL = ':scope > li > .active'; 4624 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; 4625 const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 4626 const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'; 4627 /** 4628 * ------------------------------------------------------------------------ 4629 * Class Definition 4630 * ------------------------------------------------------------------------ 4631 */ 4632 4633 class Tab extends BaseComponent { 4634 // Getters 4635 static get NAME() { 4636 return NAME$1; 4637 } // Public 4638 4639 4640 show() { 4641 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) { 4642 return; 4643 } 4644 4645 let previous; 4646 const target = getElementFromSelector(this._element); 4647 4648 const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP); 4649 4650 if (listElement) { 4651 const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 4652 previous = SelectorEngine.find(itemSelector, listElement); 4653 previous = previous[previous.length - 1]; 4654 } 4655 4656 const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, { 4657 relatedTarget: this._element 4658 }) : null; 4659 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, { 4660 relatedTarget: previous 4661 }); 4662 4663 if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) { 4664 return; 4665 } 4666 4667 this._activate(this._element, listElement); 4668 4669 const complete = () => { 4670 EventHandler.trigger(previous, EVENT_HIDDEN$1, { 4671 relatedTarget: this._element 4672 }); 4673 EventHandler.trigger(this._element, EVENT_SHOWN$1, { 4674 relatedTarget: previous 4675 }); 4676 }; 4677 4678 if (target) { 4679 this._activate(target, target.parentNode, complete); 4680 } else { 4681 complete(); 4682 } 4683 } // Private 4684 4685 4686 _activate(element, container, callback) { 4687 const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE); 4688 const active = activeElements[0]; 4689 const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1); 4690 4691 const complete = () => this._transitionComplete(element, active, callback); 4692 4693 if (active && isTransitioning) { 4694 active.classList.remove(CLASS_NAME_SHOW$1); 4695 4696 this._queueCallback(complete, element, true); 4697 } else { 4698 complete(); 4699 } 4700 } 4701 4702 _transitionComplete(element, active, callback) { 4703 if (active) { 4704 active.classList.remove(CLASS_NAME_ACTIVE);
4705 const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode); 4706 4707 if (dropdownChild) { 4708 dropdownChild.classList.remove(CLASS_NAME_ACTIVE); 4709 } 4710 4711 if (active.getAttribute('role') === 'tab') { 4712 active.setAttribute('aria-selected', false); 4713 } 4714 } 4715 4716 element.classList.add(CLASS_NAME_ACTIVE); 4717 4718 if (element.getAttribute('role') === 'tab') { 4719 element.setAttribute('aria-selected', true); 4720 } 4721 4722 reflow(element); 4723 4724 if (element.classList.contains(CLASS_NAME_FADE$1)) { 4725 element.classList.add(CLASS_NAME_SHOW$1); 4726 } 4727 4728 let parent = element.parentNode; 4729 4730 if (parent && parent.nodeName === 'LI') { 4731 parent = parent.parentNode; 4732 } 4733 4734 if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) { 4735 const dropdownElement = element.closest(SELECTOR_DROPDOWN); 4736 4737 if (dropdownElement) { 4738 SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE)); 4739 } 4740 4741 element.setAttribute('aria-expanded', true); 4742 } 4743 4744 if (callback) { 4745 callback(); 4746 } 4747 } // Static 4748 4749 4750 static jQueryInterface(config) { 4751 return this.each(function () { 4752 const data = Tab.getOrCreateInstance(this); 4753 4754 if (typeof config === 'string') { 4755 if (typeof data[config] === 'undefined') { 4756 throw new TypeError(`No method named "${config}"`); 4757 } 4758 4759 data[config](); 4760 } 4761 }); 4762 } 4763 4764 } 4765 /** 4766 * ------------------------------------------------------------------------ 4767 * Data Api implementation 4768 * ------------------------------------------------------------------------ 4769 */ 4770 4771 4772 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 4773 if (['A', 'AREA'].includes(this.tagName)) { 4774 event.preventDefault(); 4775 } 4776 4777 if (isDisabled(this)) { 4778 return; 4779 } 4780 4781 const data = Tab.getOrCreateInstance(this); 4782 data.show(); 4783 }); 4784 /** 4785 * ------------------------------------------------------------------------ 4786 * jQuery 4787 * ------------------------------------------------------------------------ 4788 * add .Tab to jQuery only if jQuery is present 4789 */ 4790 4791 defineJQueryPlugin(Tab); 4792 4793 /** 4794 * -------------------------------------------------------------------------- 4795 * Bootstrap (v5.1.3): toast.js 4796 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4797 * -------------------------------------------------------------------------- 4798 */ 4799 /** 4800 * ------------------------------------------------------------------------ 4801 * Constants 4802 * ------------------------------------------------------------------------ 4803 */ 4804 4805 const NAME = 'toast'; 4806 const DATA_KEY = 'bs.toast'; 4807 const EVENT_KEY = `.${DATA_KEY}`; 4808 const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 4809 const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 4810 const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 4811 const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 4812 const EVENT_HIDE = `hide${EVENT_KEY}`; 4813 const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 4814 const EVENT_SHOW = `show${EVENT_KEY}`; 4815 const EVENT_SHOWN = `shown${EVENT_KEY}`; 4816 const CLASS_NAME_FADE = 'fade';
vendor: 4,599 bytes, lines 4817-5002
4817 const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 4818 4819 const CLASS_NAME_SHOW = 'show'; 4820 const CLASS_NAME_SHOWING = 'showing'; 4821 const DefaultType = { 4822 animation: 'boolean', 4823 autohide: 'boolean', 4824 delay: 'number' 4825 }; 4826 const Default = { 4827 animation: true, 4828 autohide: true, 4829 delay: 5000 4830 }; 4831 /** 4832 * ------------------------------------------------------------------------ 4833 * Class Definition 4834 * ------------------------------------------------------------------------ 4835 */ 4836 4837 class Toast extends BaseComponent { 4838 constructor(element, config) { 4839 super(element); 4840 this._config = this._getConfig(config); 4841 this._timeout = null; 4842 this._hasMouseInteraction = false; 4843 this._hasKeyboardInteraction = false; 4844 4845 this._setListeners(); 4846 } // Getters 4847 4848 4849 static get DefaultType() { 4850 return DefaultType; 4851 } 4852 4853 static get Default() { 4854 return Default; 4855 } 4856 4857 static get NAME() { 4858 return NAME; 4859 } // Public 4860 4861 4862 show() { 4863 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 4864 4865 if (showEvent.defaultPrevented) { 4866 return; 4867 } 4868 4869 this._clearTimeout(); 4870 4871 if (this._config.animation) { 4872 this._element.classList.add(CLASS_NAME_FADE); 4873 } 4874 4875 const complete = () => { 4876 this._element.classList.remove(CLASS_NAME_SHOWING); 4877 4878 EventHandler.trigger(this._element, EVENT_SHOWN); 4879 4880 this._maybeScheduleHide(); 4881 }; 4882 4883 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 4884 4885 4886 reflow(this._element); 4887 4888 this._element.classList.add(CLASS_NAME_SHOW); 4889 4890 this._element.classList.add(CLASS_NAME_SHOWING); 4891 4892 this._queueCallback(complete, this._element, this._config.animation); 4893 } 4894 4895 hide() { 4896 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 4897 return; 4898 } 4899 4900 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 4901 4902 if (hideEvent.defaultPrevented) { 4903 return; 4904 } 4905 4906 const complete = () => { 4907 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 4908 4909 4910 this._element.classList.remove(CLASS_NAME_SHOWING); 4911 4912 this._element.classList.remove(CLASS_NAME_SHOW); 4913 4914 EventHandler.trigger(this._element, EVENT_HIDDEN); 4915 }; 4916 4917 this._element.classList.add(CLASS_NAME_SHOWING); 4918 4919 this._queueCallback(complete, this._element, this._config.animation); 4920 } 4921 4922 dispose() { 4923 this._clearTimeout(); 4924 4925 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 4926 this._element.classList.remove(CLASS_NAME_SHOW); 4927 } 4928 4929 super.dispose(); 4930 } // Private 4931 4932 4933 _getConfig(config) { 4934 config = { ...Default, 4935 ...Manipulator.getDataAttributes(this._element), 4936 ...(typeof config === 'object' && config ? config : {}) 4937 }; 4938 typeCheckConfig(NAME, config, this.constructor.DefaultType); 4939 return config; 4940 } 4941 4942 _maybeScheduleHide() { 4943 if (!this._config.autohide) { 4944 return; 4945 } 4946 4947 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 4948 return; 4949 } 4950 4951 this._timeout = setTimeout(() => { 4952 this.hide(); 4953 }, this._config.delay); 4954 } 4955 4956 _onInteraction(event, isInteracting) { 4957 switch (event.type) { 4958 case 'mouseover': 4959 case 'mouseout': 4960 this._hasMouseInteraction = isInteracting; 4961 break; 4962 4963 case 'focusin': 4964 case 'focusout': 4965 this._hasKeyboardInteraction = isInteracting; 4966 break; 4967 } 4968 4969 if (isInteracting) { 4970 this._clearTimeout(); 4971 4972 return; 4973 } 4974 4975 const nextElement = event.relatedTarget; 4976 4977 if (this._element === nextElement || this._element.contains(nextElement)) { 4978 return; 4979 } 4980 4981 this._maybeScheduleHide(); 4982 } 4983 4984 _setListeners() { 4985 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 4986 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 4987 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 4988 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 4989 } 4990 4991 _clearTimeout() { 4992 clearTimeout(this._timeout); 4993 this._timeout = null; 4994 } // Static 4995 4996 4997 static jQueryInterface(config) { 4998 return this.each(function () { 4999 const data = Toast.getOrCreateInstance(this, config); 5000 5001 if (typeof config === 'string') { 5002 if (typeof data[config] === 'undefined') {
5003 throw new TypeError(`No method named "${config}"`); 5004 } 5005 5006 data[config](this); 5007 } 5008 }); 5009 } 5010 5011 } 5012 5013 enableDismissTrigger(Toast); 5014 /** 5015 * ------------------------------------------------------------------------ 5016 * jQuery 5017 * ------------------------------------------------------------------------ 5018 * add .Toast to jQuery only if jQuery is present 5019 */ 5020 5021 defineJQueryPlugin(Toast); 5022 5023 /** 5024 * -------------------------------------------------------------------------- 5025 * Bootstrap (v5.1.3): index.umd.js 5026 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5027 * -------------------------------------------------------------------------- 5028 */ 5029 const index_umd = { 5030 Alert, 5031 Button, 5032 Carousel, 5033 Collapse, 5034 Dropdown, 5035 Modal, 5036 Offcanvas, 5037 Popover, 5038 ScrollSpy, 5039 Tab, 5040 Toast, 5041 Tooltip 5042 }; 5043 5044 return index_umd; 5045 5046})); 5047//# sourceMappingURL=bootstrap.js.map 5048
vendor: 89,947 bytes, lines 5049-5050
5049/*! jQuery v3.6.3 | (c) OpenJS Foundation and other contributors | jquery.org/license */ 5050!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.3",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector(:is("+c+"))"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E});
vendor: 7,142 bytes, lines 5051-5111
5051 5052/*! URI.js v1.19.11 http://medialize.github.io/URI.js/ */ 5053/* build contains: IPv6.js, punycode.js, SecondLevelDomains.js, URI.js, jquery.URI.js */ 5054/* 5055 URI.js - Mutating URLs 5056 IPv6 Support 5057 5058 Version: 1.19.11 5059 5060 Author: Rodney Rehm 5061 Web: http://medialize.github.io/URI.js/ 5062 5063 Licensed under 5064 MIT License http://www.opensource.org/licenses/mit-license 5065 5066 https://mths.be/punycode v1.4.0 by @mathias URI.js - Mutating URLs 5067 Second Level Domain (SLD) Support 5068 5069 Version: 1.19.11 5070 5071 Author: Rodney Rehm 5072 Web: http://medialize.github.io/URI.js/ 5073 5074 Licensed under 5075 MIT License http://www.opensource.org/licenses/mit-license 5076 5077 URI.js - Mutating URLs 5078 5079 Version: 1.19.11 5080 5081 Author: Rodney Rehm 5082 Web: http://medialize.github.io/URI.js/ 5083 5084 Licensed under 5085 MIT License http://www.opensource.org/licenses/mit-license 5086 5087 URI.js - Mutating URLs 5088 jQuery Plugin 5089 5090 Version: 1.19.11 5091 5092 Author: Rodney Rehm 5093 Web: http://medialize.github.io/URI.js/jquery-uri-plugin.html 5094 5095 Licensed under 5096 MIT License http://www.opensource.org/licenses/mit-license 5097 5098*/ 5099(function(m,u){"object"===typeof module&&module.exports?module.exports=u():"function"===typeof define&&define.amd?define(u):m.IPv6=u(m)})(this,function(m){var u=m&&m.IPv6;return{best:function(q){q=q.toLowerCase().split(":");var k=q.length,d=8;""===q[0]&&""===q[1]&&""===q[2]?(q.shift(),q.shift()):""===q[0]&&""===q[1]?q.shift():""===q[k-1]&&""===q[k-2]&&q.pop();k=q.length;-1!==q[k-1].indexOf(".")&&(d=7);var n;for(n=0;n<k&&""!==q[n];n++);if(n<d)for(q.splice(n,1,"0000");q.length<d;)q.splice(n,0,"0000"); 5100 for(n=0;n<d;n++){k=q[n].split("");for(var z=0;3>z;z++)if("0"===k[0]&&1<k.length)k.splice(0,1);else break;q[n]=k.join("")}k=-1;var x=z=0,M=-1,F=!1;for(n=0;n<d;n++)F?"0"===q[n]?x+=1:(F=!1,x>z&&(k=M,z=x)):"0"===q[n]&&(F=!0,M=n,x=1);x>z&&(k=M,z=x);1<z&&q.splice(k,z,"");k=q.length;d="";""===q[0]&&(d=":");for(n=0;n<k;n++){d+=q[n];if(n===k-1)break;d+=":"}""===q[k-1]&&(d+=":");return d},noConflict:function(){m.IPv6===this&&(m.IPv6=u);return this}}}); 5101(function(m){function u(p){throw new RangeError(J[p]);}function q(p,t){for(var y=p.length,v=[];y--;)v[y]=t(p[y]);return v}function k(p,t){var y=p.split("@"),v="";1<y.length&&(v=y[0]+"@",p=y[1]);p=p.replace(G,".");y=p.split(".");y=q(y,t).join(".");return v+y}function d(p){for(var t=[],y=0,v=p.length,C,H;y<v;)C=p.charCodeAt(y++),55296<=C&&56319>=C&&y<v?(H=p.charCodeAt(y++),56320==(H&64512)?t.push(((C&1023)<<10)+(H&1023)+65536):(t.push(C),y--)):t.push(C);return t}function n(p){return q(p,function(t){var y= 5102 "";65535<t&&(t-=65536,y+=g(t>>>10&1023|55296),t=56320|t&1023);return y+=g(t)}).join("")}function z(p,t,y){var v=0;p=y?K(p/700):p>>1;for(p+=K(p/t);455<p;v+=36)p=K(p/35);return K(v+36*p/(p+38))}function x(p){var t=[],y=p.length,v=0,C=128,H=72,a,b;var c=p.lastIndexOf("-");0>c&&(c=0);for(a=0;a<c;++a)128<=p.charCodeAt(a)&&u("not-basic"),t.push(p.charCodeAt(a));for(c=0<c?c+1:0;c<y;){a=v;var e=1;for(b=36;;b+=36){c>=y&&u("invalid-input");var f=p.charCodeAt(c++);f=10>f-48?f-22:26>f-65?f-65:26>f-97?f-97:36; 5103 (36<=f||f>K((2147483647-v)/e))&&u("overflow");v+=f*e;var l=b<=H?1:b>=H+26?26:b-H;if(f<l)break;f=36-l;e>K(2147483647/f)&&u("overflow");e*=f}e=t.length+1;H=z(v-a,e,0==a);K(v/e)>2147483647-C&&u("overflow");C+=K(v/e);v%=e;t.splice(v++,0,C)}return n(t)}function M(p){var t,y,v,C=[];p=d(p);var H=p.length;var a=128;var b=0;var c=72;for(v=0;v<H;++v){var e=p[v];128>e&&C.push(g(e))}for((t=y=C.length)&&C.push("-");t<H;){var f=2147483647;for(v=0;v<H;++v)e=p[v],e>=a&&e<f&&(f=e);var l=t+1;f-a>K((2147483647-b)/l)&& 5104u("overflow");b+=(f-a)*l;a=f;for(v=0;v<H;++v)if(e=p[v],e<a&&2147483647<++b&&u("overflow"),e==a){var w=b;for(f=36;;f+=36){e=f<=c?1:f>=c+26?26:f-c;if(w<e)break;var B=w-e;w=36-e;var D=C;e+=B%w;D.push.call(D,g(e+22+75*(26>e)-0));w=K(B/w)}C.push(g(w+22+75*(26>w)-0));c=z(b,l,t==y);b=0;++t}++b;++a}return C.join("")}var F="object"==typeof exports&&exports&&!exports.nodeType&&exports,P="object"==typeof module&&module&&!module.nodeType&&module,h="object"==typeof global&&global;if(h.global===h||h.window===h|| 5105 h.self===h)m=h;var r=/^xn--/,A=/[^\x20-\x7E]/,G=/[\x2E\u3002\uFF0E\uFF61]/g,J={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},K=Math.floor,g=String.fromCharCode,E;var I={version:"1.3.2",ucs2:{decode:d,encode:n},decode:x,encode:M,toASCII:function(p){return k(p,function(t){return A.test(t)?"xn--"+M(t):t})},toUnicode:function(p){return k(p,function(t){return r.test(t)?x(t.slice(4).toLowerCase()): 5106 t})}};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return I});else if(F&&P)if(module.exports==F)P.exports=I;else for(E in I)I.hasOwnProperty(E)&&(F[E]=I[E]);else m.punycode=I})(this); 5107(function(m,u){"object"===typeof module&&module.exports?module.exports=u():"function"===typeof define&&define.amd?define(u):m.SecondLevelDomains=u(m)})(this,function(m){var u=m&&m.SecondLevelDomains,q={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ", 5108 bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ", 5109 ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ","do":" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ", 5110 es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ", 5111 id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ","in":" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" c
5111o net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ", 5112 kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ", 5113 mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ", 5114 ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ", 5115 ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ", 5116 tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ", 5117 rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ", 5118 tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk d
vendor: 30,898 bytes, lines 5118-5176
5118p edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ", 5119 us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ", 5120 org:"ae",de:"com "},has:function(k){var d=k.lastIndexOf(".");if(0>=d||d>=k.length-1)return!1;var n=k.lastIndexOf(".",d-1);if(0>=n||n>=d-1)return!1;var z=q.list[k.slice(d+1)];return z?0<=z.indexOf(" "+k.slice(n+1,d)+" "):!1},is:function(k){var d=k.lastIndexOf(".");if(0>=d||d>=k.length-1||0<=k.lastIndexOf(".",d-1))return!1;var n=q.list[k.slice(d+1)];return n?0<=n.indexOf(" "+k.slice(0,d)+" "):!1},get:function(k){var d=k.lastIndexOf(".");if(0>=d||d>=k.length-1)return null;var n=k.lastIndexOf(".",d-1); 5121 if(0>=n||n>=d-1)return null;var z=q.list[k.slice(d+1)];return!z||0>z.indexOf(" "+k.slice(n+1,d)+" ")?null:k.slice(n+1)},noConflict:function(){m.SecondLevelDomains===this&&(m.SecondLevelDomains=u);return this}};return q}); 5122(function(m,u){"object"===typeof module&&module.exports?module.exports=u(require("./punycode"),require("./IPv6"),require("./SecondLevelDomains")):"function"===typeof define&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],u):m.URI=u(m.punycode,m.IPv6,m.SecondLevelDomains,m)})(this,function(m,u,q,k){function d(a,b){var c=1<=arguments.length,e=2<=arguments.length;if(!(this instanceof d))return c?e?new d(a,b):new d(a):new d;if(void 0===a){if(c)throw new TypeError("undefined is not a valid argument for URI"); 5123 a="undefined"!==typeof location?location.href+"":""}if(null===a&&c)throw new TypeError("null is not a valid argument for URI");this.href(a);return void 0!==b?this.absoluteTo(b):this}function n(a){return a.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function z(a){return void 0===a?"Undefined":String(Object.prototype.toString.call(a)).slice(8,-1)}function x(a){return"Array"===z(a)}function M(a,b){var c={},e;if("RegExp"===z(b))c=null;else if(x(b)){var f=0;for(e=b.length;f<e;f++)c[b[f]]=!0}else c[b]= 5124 !0;f=0;for(e=a.length;f<e;f++)if(c&&void 0!==c[a[f]]||!c&&b.test(a[f]))a.splice(f,1),e--,f--;return a}function F(a,b){var c;if(x(b)){var e=0;for(c=b.length;e<c;e++)if(!F(a,b[e]))return!1;return!0}var f=z(b);e=0;for(c=a.length;e<c;e++)if("RegExp"===f){if("string"===typeof a[e]&&a[e].match(b))return!0}else if(a[e]===b)return!0;return!1}function P(a,b){if(!x(a)||!x(b)||a.length!==b.length)return!1;a.sort();b.sort();for(var c=0,e=a.length;c<e;c++)if(a[c]!==b[c])return!1;return!0}function h(a){return a.replace(/^\/+|\/+$/g, 5125 "")}function r(a){return escape(a)}function A(a){return encodeURIComponent(a).replace(/[!'()*]/g,r).replace(/\*/g,"%2A")}function G(a){return function(b,c){if(void 0===b)return this._parts[a]||"";this._parts[a]=b||null;this.build(!c);return this}}function J(a,b){return function(c,e){if(void 0===c)return this._parts[a]||"";null!==c&&(c+="",c.charAt(0)===b&&(c=c.substring(1)));this._parts[a]=c;this.build(!e);return this}}var K=k&&k.URI;d.version="1.19.11";var g=d.prototype,E=Object.prototype.hasOwnProperty; 5126 d._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,preventInvalidHostname:d.preventInvalidHostname,duplicateQueryParameters:d.duplicateQueryParameters,escapeQuerySpace:d.escapeQuerySpace}};d.preventInvalidHostname=!1;d.duplicateQueryParameters=!1;d.escapeQuerySpace=!0;d.protocol_expression=/^[a-z][a-z0-9.+-]*$/i;d.idn_expression=/[^a-z0-9\._-]/i;d.punycode_expression=/(xn--)/i;d.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; 5127 d.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; 5128 d.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019]))/ig;d.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u201e\u2018\u2019]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g};d.leading_whitespace_expression=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/; 5129 d.ascii_tab_whitespace=/[\u0009\u000A\u000D]+/g;d.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"};d.hostProtocols=["http","https"];d.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/;d.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"};d.getDomAttribute=function(a){if(a&&a.nodeName){var b=a.nodeName.toLowerCase();if("input"!== 5130 b||"image"===a.type)return d.domAttributes[b]}};d.encode=A;d.decode=decodeURIComponent;d.iso8859=function(){d.encode=escape;d.decode=unescape};d.unicode=function(){d.encode=A;d.decode=decodeURIComponent};d.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig, 5131 map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}};d.encodeQuery=function(a,b){var c=d.encode(a+""); 5132 void 0===b&&(b=d.escapeQuerySpace);return b?c.replace(/%20/g,"+"):c};d.decodeQuery=function(a,b){a+="";void 0===b&&(b=d.escapeQuerySpace);try{return d.decode(b?a.replace(/\+/g,"%20"):a)}catch(c){return a}};var I={encode:"encode",decode:"decode"},p,t=function(a,b){return function(c){try{return d[b](c+"").replace(d.characters[a][b].expression,function(e){return d.characters[a][b].map[e]})}catch(e){return c}}};for(p in I)d[p+"PathSegment"]=t("pathname",I[p]),d[p+"UrnPathSegment"]=t("urnpath",I[p]);I= 5133 function(a,b,c){return function(e){var f=c?function(B){return d[b](d[c](B))}:d[b];e=(e+"").split(a);for(var l=0,w=e.length;l<w;l++)e[l]=f(e[l]);return e.join(a)}};d.decodePath=I("/","decodePathSegment");d.decodeUrnPath=I(":","decodeUrnPathSegment");d.recodePath=I("/","encodePathSegment","decode");d.recodeUrnPath=I(":","encodeUrnPathSegment","decode");d.encodeReserved=t("reserved","encode");d.parse=function(a,b){b||(b={preventInvalidHostname:d.preventInvalidHostname});a=a.replace(d.leading_whitespace_expression, 5134 "");a=a.replace(d.ascii_tab_whitespace,"");var c=a.indexOf("#");-1<c&&(b.fragment=a.substring(c+1)||null,a=a.substring(0,c));c=a.indexOf("?");-1<c&&(b.query=a.substring(c+1)||null,a=a.substring(0,c));a=a.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://");a=a.replace(/^[/\\]{2,}/i,"//");"//"===a.substring(0,2)?(b.protocol=null,a=a.substring(2),a=d.parseAuthority(a,b)):(c=a.indexOf(":"),-1<c&&(b.protocol=a.substring(0,c)||null,b.protocol&&!b.protocol.match(d.protocol_expression)?b.protocol=void 0:"//"=== 5135 a.substring(c+1,c+3).replace(/\\/g,"/")?(a=a.substring(c+3),a=d.parseAuthority(a,b)):(a=a.substring(c+1),b.urn=!0)));b.path=a;return b};d.parseHost=function(a,b){a||(a="");a=a.replace(/\\/g,"/");var c=a.indexOf("/");-1===c&&(c=a.length);if("["===a.charAt(0)){var e=a.indexOf("]");b.hostname=a.substring(1,e)||null;b.port=a.substring(e+2,c)||null;"/"===b.port&&(b.port=null)}else{var f=a.indexOf(":");e=a.indexOf("/");f=a.indexOf(":",f+1);-1!==f&&(-1===e||f<e)?(b.hostname=a.substring(0,c)||null,b.port= 5136 null):(e=a.substring(0,c).split(":"),b.hostname=e[0]||null,b.port=e[1]||null)}b.hostname&&"/"!==a.substring(c).charAt(0)&&(c++,a="/"+a);b.preventInvalidHostname&&d.ensureValidHostname(b.hostname,b.protocol);b.port&&d.ensureValidPort(b.port);return a.substring(c)||"/"};d.parseAuthority=function(a,b){a=d.parseUserinfo(a,b);return d.parseHost(a,b)};d.parseUserinfo=function(a,b){var c=a;-1!==a.indexOf("\\")&&(a=a.replace(/\\/g,"/"));var e=a.indexOf("/"),f=a.lastIndexOf("@",-1<e?e:a.length-1);-1<f&&(-1=== 5137 e||f<e)?(e=a.substring(0,f).split(":"),b.username=e[0]?d.decode(e[0]):null,e.shift(),b.password=e[0]?d.decode(e.join(":")):null,a=c.substring(f+1)):(b.username=null,b.password=null);return a};d.parseQuery=function(a,b){if(!a)return{};a=a.replace(/&+/g,"&").replace(/^\?*&*|&+$/g,"");if(!a)return{};for(var c={},e=a.split("&"),f=e.length,l,w,B=0;B<f;B++)if(l=e[B].split("="),w=d.decodeQuery(l.shift(),b),l=l.length?d.decodeQuery(l.join("="),b):null,"__proto__"!==w)if(E.call(c,w)){if("string"===typeof c[w]|| 5138 null===c[w])c[w]=[c[w]];c[w].push(l)}else c[w]=l;return c};d.build=function(a){var b="",c=!1;a.protocol&&(b+=a.protocol+":");a.urn||!b&&!a.hostname||(b+="//",c=!0);b+=d.buildAuthority(a)||"";"string"===typeof a.path&&("/"!==a.path.charAt(0)&&c&&(b+="/"),b+=a.path);"string"===typeof a.query&&a.query&&(b+="?"+a.query);"string"===typeof a.fragment&&a.fragment&&(b+="#"+a.fragment);return b};d.buildHost=function(a){var b="";if(a.hostname)b=d.ip6_expression.test(a.hostname)?b+("["+a.hostname+"]"):b+a.hostname; 5139 else return"";a.port&&(b+=":"+a.port);return b};d.buildAuthority=function(a){return d.buildUserinfo(a)+d.buildHost(a)};d.buildUserinfo=function(a){var b="";a.username&&(b+=d.encode(a.username));a.password&&(b+=":"+d.encode(a.password));b&&(b+="@");return b};d.buildQuery=function(a,b,c){var e="",f,l;for(f in a)if("__proto__"!==f&&E.call(a,f))if(x(a[f])){var w={};var B=0;for(l=a[f].length;B<l;B++)void 0!==a[f][B]&&void 0===w[a[f][B]+""]&&(e+="&"+d.buildQueryParameter(f,a[f][B],c),!0!==b&&(w[a[f][B]+ 5140 ""]=!0))}else void 0!==a[f]&&(e+="&"+d.buildQueryParameter(f,a[f],c));return e.substring(1)};d.buildQueryParameter=function(a,b,c){return d.encodeQuery(a,c)+(null!==b?"="+d.encodeQuery(b,c):"")};d.addQuery=function(a,b,c){if("object"===typeof b)for(var e in b)E.call(b,e)&&d.addQuery(a,e,b[e]);else if("string"===typeof b)void 0===a[b]?a[b]=c:("string"===typeof a[b]&&(a[b]=[a[b]]),x(c)||(c=[c]),a[b]=(a[b]||[]).concat(c));else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter"); 5141 };d.setQuery=function(a,b,c){if("object"===typeof b)for(var e in b)E.call(b,e)&&d.setQuery(a,e,b[e]);else if("string"===typeof b)a[b]=void 0===c?null:c;else throw new TypeError("URI.setQuery() accepts an object, string as the name parameter");};d.removeQuery=function(a,b,c){var e;if(x(b))for(c=0,e=b.length;c<e;c++)a[b[c]]=void 0;else if("RegExp"===z(b))for(e in a)b.test(e)&&(a[e]=void 0);else if("object"===typeof b)for(e in b)E.call(b,e)&&d.removeQuery(a,e,b[e]);else if("string"===typeof b)void 0!== 5142 c?"RegExp"===z(c)?!x(a[b])&&c.test(a[b])?a[b]=void 0:a[b]=M(a[b],c):a[b]!==String(c)||x(c)&&1!==c.length?x(a[b])&&(a[b]=M(a[b],c)):a[b]=void 0:a[b]=void 0;else throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter");};d.hasQuery=function(a,b,c,e){switch(z(b)){case "String":break;case "RegExp":for(var f in a)if(E.call(a,f)&&b.test(f)&&(void 0===c||d.hasQuery(a,f,c)))return!0;return!1;case "Object":for(var l in b)if(E.call(b,l)&&!d.hasQuery(a,l,b[l]))return!1; 5143 return!0;default:throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter");}switch(z(c)){case "Undefined":return b in a;case "Boolean":return a=!(x(a[b])?!a[b].length:!a[b]),c===a;case "Function":return!!c(a[b],b,a);case "Array":return x(a[b])?(e?F:P)(a[b],c):!1;case "RegExp":return x(a[b])?e?F(a[b],c):!1:!(!a[b]||!a[b].match(c));case "Number":c=String(c);case "String":return x(a[b])?e?F(a[b],c):!1:a[b]===c;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter"); 5144 }};d.joinPaths=function(){for(var a=[],b=[],c=0,e=0;e<arguments.length;e++){var f=new d(arguments[e]);a.push(f);f=f.segment();for(var l=0;l<f.length;l++)"string"===typeof f[l]&&b.push(f[l]),f[l]&&c++}if(!b.length||!c)return new d("");b=(new d("")).segment(b);""!==a[0].path()&&"/"!==a[0].path().slice(0,1)||b.path("/"+b.path());return b.normalize()};d.commonPath=function(a,b){var c=Math.min(a.length,b.length),e;for(e=0;e<c;e++)if(a.charAt(e)!==b.charAt(e)){e--;break}if(1>e)return a.charAt(0)===b.charAt(0)&& 5145 "/"===a.charAt(0)?"/":"";if("/"!==a.charAt(e)||"/"!==b.charAt(e))e=a.substring(0,e).lastIndexOf("/");return a.substring(0,e+1)};d.withinString=function(a,b,c){c||(c={});var e=c.start||d.findUri.start,f=c.end||d.findUri.end,l=c.trim||d.findUri.trim,w=c.parens||d.findUri.parens,B=/[a-z0-9-]=["']?$/i;for(e.lastIndex=0;;){var D=e.exec(a);if(!D)break;var O=D.index;if(c.ignoreHtml){var L=a.slice(Math.max(O-3,0),O);if(L&&B.test(L))continue}var N=O+a.slice(O).search(f);L=a.slice(O,N);for(N=-1;;){var Q=w.exec(L); 5146 if(!Q)break;N=Math.max(N,Q.index+Q[0].length)}L=-1<N?L.slice(0,N)+L.slice(N).replace(l,""):L.replace(l,"");L.length<=D[0].length||c.ignore&&c.ignore.test(L)||(N=O+L.length,D=b(L,O,N,a),void 0===D?e.lastIndex=N:(D=String(D),a=a.slice(0,O)+D+a.slice(N),e.lastIndex=O+D.length))}e.lastIndex=0;return a};d.ensureValidHostname=function(a,b){var c=!!a,e=!1;b&&(e=F(d.hostProtocols,b));if(e&&!c)throw new TypeError("Hostname cannot be empty, if protocol is "+b);if(a&&a.match(d.invalid_hostname_characters)){if(!m)throw new TypeError('Hostname "'+ 5147 a+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(m.toASCII(a).match(d.invalid_hostname_characters))throw new TypeError('Hostname "'+a+'" contains characters other than [A-Z0-9.-:_]');}};d.ensureValidPort=function(a){if(a){var b=Number(a);if(!(/^[0-9]+$/.test(b)&&0<b&&65536>b))throw new TypeError('Port "'+a+'" is not a valid port');}};d.noConflict=function(a){if(a)return a={URI:this.noConflict()},k.URITemplate&&"function"===typeof k.URITemplate.noConflict&&(a.URITemplate= 5148 k.URITemplate.noConflict()),k.IPv6&&"function"===typeof k.IPv6.noConflict&&(a.IPv6=k.IPv6.noConflict()),k.SecondLevelDomains&&"function"===typeof k.SecondLevelDomains.noConflict&&(a.SecondLevelDomains=k.SecondLevelDomains.noConflict()),a;k.URI===this&&(k.URI=K);return this};g.build=function(a){if(!0===a)this._deferred_build=!0;else if(void 0===a||this._deferred_build)this._string=d.build(this._parts),this._deferred_build=!1;return this};g.clone=function(){return new d(this)};g.valueOf=g.toString= 5149 function(){return this.build(!1)._string};g.protocol=G("protocol");g.username=G("username");g.password=G("password");g.hostname=G("hostname");g.port=G("port");g.query=J("query","?");g.fragment=J("fragment","#");g.search=function(a,b){var c=this.query(a,b);return"string"===typeof c&&c.length?"?"+c:c};g.hash=function(a,b){var c=this.fragment(a,b);return"string"===typeof c&&c.length?"#"+c:c};g.pathname=function(a,b){if(void 0===a||!0===a){var c=this._parts.path||(this._parts.hostname?"/":"");return a? 5150 (this._parts.urn?d.decodeUrnPath:d.decodePath)(c):c}this._parts.path=this._parts.urn?a?d.recodeUrnPath(a):"":a?d.recodePath(a):"/";this.build(!b);return this};g.path=g.pathname;g.href=function(a,b){var c;if(void 0===a)return this.toString();this._string="";this._parts=d._parts();var e=a instanceof d,f="object"===typeof a&&(a.hostname||a.path||a.pathname);a.nodeName&&(f=d.getDomAttribute(a),a=a[f]||"",f=!1);!e&&f&&void 0!==a.pathname&&(a=a.toString());if("string"===typeof a||a instanceof String)this._parts= 5151 d.parse(String(a),this._parts);else if(e||f){e=e?a._parts:a;for(c in e)"query"!==c&&E.call(this._parts,c)&&(this._parts[c]=e[c]);e.query&&this.query(e.query,!1)}else throw new TypeError("invalid input");this.build(!b);return this};g.is=function(a){var b=!1,c=!1,e=!1,f=!1,l=!1,w=!1,B=!1,D=!this._parts.urn;this._parts.hostname&&(D=!1,c=d.ip4_expression.test(this._parts.hostname),e=d.ip6_expression.test(this._parts.hostname),b=c||e,l=(f=!b)&&q&&q.has(this._parts.hostname),w=f&&d.idn_expression.test(this._parts.hostname), 5152 B=f&&d.punycode_expression.test(this._parts.hostname));switch(a.toLowerCase()){case "relative":return D;case "absolute":return!D;case "domain":case "name":return f;case "sld":return l;case "ip":return b;case "ip4":case "ipv4":case "inet4":return c;case "ip6":case "ipv6":case "inet6":return e;case "idn":return w;case "url":return!this._parts.urn;case "urn":return!!this._parts.urn;case "punycode":return B}return null};var y=g.protocol,v=g.port,C=g.hostname;g.protocol=function(a,b){if(a&&(a=a.replace(/:(\/\/)?$/, 5153 ""),!a.match(d.protocol_expression)))throw new TypeError('Protocol "'+a+"\" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]");return y.call(this,a,b)};g.scheme=g.protocol;g.port=function(a,b){if(this._parts.urn)return void 0===a?"":this;void 0!==a&&(0===a&&(a=null),a&&(a+="",":"===a.charAt(0)&&(a=a.substring(1)),d.ensureValidPort(a)));return v.call(this,a,b)};g.hostname=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0!==a){var c={preventInvalidHostname:this._parts.preventInvalidHostname}; 5154 if("/"!==d.parseHost(a,c))throw new TypeError('Hostname "'+a+'" contains characters other than [A-Z0-9.-]');a=c.hostname;this._parts.preventInvalidHostname&&d.ensureValidHostname(a,this._parts.protocol)}return C.call(this,a,b)};g.origin=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a){var c=this.protocol();return this.authority()?(c?c+"://":"")+this.authority():""}c=d(a);this.protocol(c.protocol()).authority(c.authority()).build(!b);return this};g.host=function(a,b){if(this._parts.urn)return void 0=== 5155 a?"":this;if(void 0===a)return this._parts.hostname?d.buildHost(this._parts):"";if("/"!==d.parseHost(a,this._parts))throw new TypeError('Hostname "'+a+'" contains characters other than [A-Z0-9.-]');this.build(!b);return this};g.authority=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a)return this._parts.hostname?d.buildAuthority(this._parts):"";if("/"!==d.parseAuthority(a,this._parts))throw new TypeError('Hostname "'+a+'" contains characters other than [A-Z0-9.-]');this.build(!b); 5156 return this};g.userinfo=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a){var c=d.buildUserinfo(this._parts);return c?c.substring(0,c.length-1):c}"@"!==a[a.length-1]&&(a+="@");d.parseUserinfo(a,this._parts);this.build(!b);return this};g.resource=function(a,b){if(void 0===a)return this.path()+this.search()+this.hash();var c=d.parse(a);this._parts.path=c.path;this._parts.query=c.query;this._parts.fragment=c.fragment;this.build(!b);return this};g.subdomain=function(a,b){if(this._parts.urn)return void 0=== 5157 a?"":this;if(void 0===a){if(!this._parts.hostname||this.is("IP"))return"";var c=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,c)||""}c=this._parts.hostname.length-this.domain().length;c=this._parts.hostname.substring(0,c);c=new RegExp("^"+n(c));a&&"."!==a.charAt(a.length-1)&&(a+=".");if(-1!==a.indexOf(":"))throw new TypeError("Domains cannot contain colons");a&&d.ensureValidHostname(a,this._parts.protocol);this._parts.hostname=this._parts.hostname.replace(c, 5158 a);this.build(!b);return this};g.domain=function(a,b){if(this._parts.urn)return void 0===a?"":this;"boolean"===typeof a&&(b=a,a=void 0);if(void 0===a){if(!this._parts.hostname||this.is("IP"))return"";var c=this._parts.hostname.match(/\./g);if(c&&2>c.length)return this._parts.hostname;c=this._parts.hostname.length-this.tld(b).length-1;c=this._parts.hostname.lastIndexOf(".",c-1)+1;return this._parts.hostname.substring(c)||""}if(!a)throw new TypeError("cannot set domain empty");if(-1!==a.indexOf(":"))throw new TypeError("Domains cannot contain colons"); 5159 d.ensureValidHostname(a,this._parts.protocol);!this._parts.hostname||this.is("IP")?this._parts.hostname=a:(c=new RegExp(n(this.domain())+"$"),this._parts.hostname=this._parts.hostname.replace(c,a));this.build(!b);return this};g.tld=function(a,b){if(this._parts.urn)return void 0===a?"":this;"boolean"===typeof a&&(b=a,a=void 0);if(void 0===a){if(!this._parts.hostname||this.is("IP"))return"";var c=this._parts.hostname.lastIndexOf(".");c=this._parts.hostname.substring(c+1);return!0!==b&&q&&q.list[c.toLowerCase()]? 5160 q.get(this._parts.hostname)||c:c}if(a)if(a.match(/[^a-zA-Z0-9-]/))if(q&&q.is(a))c=new RegExp(n(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(c,a);else throw new TypeError('TLD "'+a+'" contains characters other than [A-Z0-9]');else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");c=new RegExp(n(this.tld())+"$");this._parts.hostname=this._parts.hostname.replace(c,a)}else throw new TypeError("cannot set TLD empty");this.build(!b); 5161 return this};g.directory=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a||!0===a){if(!this._parts.path&&!this._parts.hostname)return"";if("/"===this._parts.path)return"/";var c=this._parts.path.length-this.filename().length-1;c=this._parts.path.substring(0,c)||(this._parts.hostname?"/":"");return a?d.decodePath(c):c}c=this._parts.path.length-this.filename().length;c=this._parts.path.substring(0,c);c=new RegExp("^"+n(c));this.is("relative")||(a||(a="/"),"/"!==a.charAt(0)&& 5162 (a="/"+a));a&&"/"!==a.charAt(a.length-1)&&(a+="/");a=d.recodePath(a);this._parts.path=this._parts.path.replace(c,a);this.build(!b);return this};g.filename=function(a,b){if(this._parts.urn)return void 0===a?"":this;if("string"!==typeof a){if(!this._parts.path||"/"===this._parts.path)return"";var c=this._parts.path.lastIndexOf("/");c=this._parts.path.substring(c+1);return a?d.decodePathSegment(c):c}c=!1;"/"===a.charAt(0)&&(a=a.substring(1));a.match(/\.?\//)&&(c=!0);var e=new RegExp(n(this.filename())+ 5163 "$");a=d.recodePath(a);this._parts.path=this._parts.path.replace(e,a);c?this.normalizePath(b):this.build(!b);return this};g.suffix=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";var c=this.filename(),e=c.lastIndexOf(".");if(-1===e)return"";c=c.substring(e+1);c=/^[a-z0-9%]+$/i.test(c)?c:"";return a?d.decodePathSegment(c):c}"."===a.charAt(0)&&(a=a.substring(1));if(c=this.suffix())e=a?new RegExp(n(c)+"$"):new RegExp(n("."+ 5164 c)+"$");else{if(!a)return this;this._parts.path+="."+d.recodePath(a)}e&&(a=d.recodePath(a),this._parts.path=this._parts.path.replace(e,a));this.build(!b);return this};g.segment=function(a,b,c){var e=this._parts.urn?":":"/",f=this.path(),l="/"===f.substring(0,1);f=f.split(e);void 0!==a&&"number"!==typeof a&&(c=b,b=a,a=void 0);if(void 0!==a&&"number"!==typeof a)throw Error('Bad segment "'+a+'", must be 0-based integer');l&&f.shift();0>a&&(a=Math.max(f.length+a,0));if(void 0===b)return void 0===a?f: 5165 f[a];if(null===a||void 0===f[a])if(x(b)){f=[];a=0;for(var w=b.length;a<w;a++)if(b[a].length||f.length&&f[f.length-1].length)f.length&&!f[f.length-1].length&&f.pop(),f.push(h(b[a]))}else{if(b||"string"===typeof b)b=h(b),""===f[f.length-1]?f[f.length-1]=b:f.push(b)}else b?f[a]=h(b):f.splice(a,1);l&&f.unshift("");return this.path(f.join(e),c)};g.segmentCoded=function(a,b,c){var e;"number"!==typeof a&&(c=b,b=a,a=void 0);if(void 0===b){a=this.segment(a,b,c);if(x(a)){var f=0;for(e=a.length;f<e;f++)a[f]= 5166 d.decode(a[f])}else a=void 0!==a?d.decode(a):void 0;return a}if(x(b))for(f=0,e=b.length;f<e;f++)b[f]=d.encode(b[f]);else b="string"===typeof b||b instanceof String?d.encode(b):b;return this.segment(a,b,c)};var H=g.query;g.query=function(a,b){if(!0===a)return d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if("function"===typeof a){var c=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace),e=a.call(this,c);this._parts.query=d.buildQuery(e||c,this._parts.duplicateQueryParameters, 5167 this._parts.escapeQuerySpace);this.build(!b);return this}return void 0!==a&&"string"!==typeof a?(this._parts.query=d.buildQuery(a,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!b),this):H.call(this,a,b)};g.setQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if("string"===typeof a||a instanceof String)e[a]=void 0!==b?b:null;else if("object"===typeof a)for(var f in a)E.call(a,f)&&(e[f]=a[f]);else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter"); 5168 this._parts.query=d.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);"string"!==typeof a&&(c=b);this.build(!c);return this};g.addQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);d.addQuery(e,a,void 0===b?null:b);this._parts.query=d.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);"string"!==typeof a&&(c=b);this.build(!c);return this};g.removeQuery=function(a,b,c){var e=d.parseQuery(this._parts.query, 5169 this._parts.escapeQuerySpace);d.removeQuery(e,a,b);this._parts.query=d.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);"string"!==typeof a&&(c=b);this.build(!c);return this};g.hasQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return d.hasQuery(e,a,b,c)};g.setSearch=g.setQuery;g.addSearch=g.addQuery;g.removeSearch=g.removeQuery;g.hasSearch=g.hasQuery;g.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build(): 5170 this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()};g.normalizeProtocol=function(a){"string"===typeof this._parts.protocol&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!a));return this};g.normalizeHostname=function(a){this._parts.hostname&&(this.is("IDN")&&m?this._parts.hostname=m.toASCII(this._parts.hostname):this.is("IPv6")&&u&&(this._parts.hostname=u.best(this._parts.hostname)),this._parts.hostname= 5171 this._parts.hostname.toLowerCase(),this.build(!a));return this};g.normalizePort=function(a){"string"===typeof this._parts.protocol&&this._parts.port===d.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!a));return this};g.normalizePath=function(a){var b=this._parts.path;if(!b)return this;if(this._parts.urn)return this._parts.path=d.recodeUrnPath(this._parts.path),this.build(!a),this;if("/"===this._parts.path)return this;b=d.recodePath(b);var c="";if("/"!==b.charAt(0)){var e=!0; 5172 b="/"+b}if("/.."===b.slice(-3)||"/."===b.slice(-2))b+="/";b=b.replace(/(\/(\.\/)+)|(\/\.$)/g,"/").replace(/\/{2,}/g,"/");e&&(c=b.substring(1).match(/^(\.\.\/)+/)||"")&&(c=c[0]);for(;;){var f=b.search(/\/\.\.(\/|$)/);if(-1===f)break;else if(0===f){b=b.substring(3);continue}var l=b.substring(0,f).lastIndexOf("/");-1===l&&(l=f);b=b.substring(0,l)+b.substring(f+3)}e&&this.is("relative")&&(b=c+b.substring(1));this._parts.path=b;this.build(!a);return this};g.normalizePathname=g.normalizePath;g.normalizeQuery= 5173 function(a){"string"===typeof this._parts.query&&(this._parts.query.length?this.query(d.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!a));return this};g.normalizeFragment=function(a){this._parts.fragment||(this._parts.fragment=null,this.build(!a));return this};g.normalizeSearch=g.normalizeQuery;g.normalizeHash=g.normalizeFragment;g.iso8859=function(){var a=d.encode,b=d.decode;d.encode=escape;d.decode=decodeURIComponent;try{this.normalize()}finally{d.encode= 5174 a,d.decode=b}return this};g.unicode=function(){var a=d.encode,b=d.decode;d.encode=A;d.decode=unescape;try{this.normalize()}finally{d.encode=a,d.decode=b}return this};g.readable=function(){var a=this.clone();a.username("").password("").normalize();var b="";a._parts.protocol&&(b+=a._parts.protocol+"://");a._parts.hostname&&(a.is("punycode")&&m?(b+=m.toUnicode(a._parts.hostname),a._parts.port&&(b+=":"+a._parts.port)):b+=a.host());a._parts.hostname&&a._parts.path&&"/"!==a._parts.path.charAt(0)&&(b+="/"); 5175 b+=a.path(!0);if(a._parts.query){for(var c="",e=0,f=a._parts.query.split("&"),l=f.length;e<l;e++){var w=(f[e]||"").split("=");c+="&"+d.decodeQuery(w[0],this._parts.escapeQuerySpace).replace(/&/g,"%26");void 0!==w[1]&&(c+="="+d.decodeQuery(w[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}b+="?"+c.substring(1)}return b+=d.decodeQuery(a.hash(),!0)};g.absoluteTo=function(a){var b=this.clone(),c=["protocol","username","password","hostname","port"],e,f;if(this._parts.urn)throw Error("URNs do not have any generally defined hierarchical components"); 5176 a instanceof d||(a=new d(a));if(b._parts.protocol)return b;b._parts.protocol=a._parts.protocol;if(this._parts.hostname)return b;for(e=0;f=c[e];e++)b._parts[f]=a._parts[f];b._parts.path?(".."===b._parts.path.substring(-2)&&(b._parts.path+="/"),"/"!==b.path().charAt(0)&&(c=(c=a.directory())?c:0===a.path().indexOf("/")?"/":"",b._parts.path=(c?c+"/":"")+b._parts.path,b.normalizePath())):(b._parts.path=a._parts.path,b._parts.query||(b._parts.query=a._parts.query
5176));b.build();return b};g.relativeTo=function(a){var b= 5177 this.clone().normalize();if(b._parts.urn)throw Error("URNs do not have any generally defined hierarchical components");a=(new d(a)).normalize();var c=b._parts;var e=a._parts;var f=b.path();a=a.path();if("/"!==f.charAt(0))throw Error("URI is already relative");if("/"!==a.charAt(0))throw Error("Cannot calculate a URI relative to another relative URI");c.protocol===e.protocol&&(c.protocol=null);if(c.username===e.username&&c.password===e.password&&null===c.protocol&&null===c.username&&null===c.password&& 5178 c.hostname===e.hostname&&c.port===e.port)c.hostname=null,c.port=null;else return b.build();if(f===a)return c.path="",b.build();f=d.commonPath(f,a);if(!f)return b.build();e=e.path.substring(f.length).replace(/[^\/]*$/,"").replace(/.*?\//g,"../");c.path=e+c.path.substring(f.length)||"./";return b.build()};g.equals=function(a){var b=this.clone(),c=new d(a);a={};var e;b.normalize();c.normalize();if(b.toString()===c.toString())return!0;var f=b.query();var l=c.query();b.query("");c.query("");if(b.toString()!== 5179 c.toString()||f.length!==l.length)return!1;b=d.parseQuery(f,this._parts.escapeQuerySpace);l=d.parseQuery(l,this._parts.escapeQuerySpace);for(e in b)if(E.call(b,e)){if(!x(b[e])){if(b[e]!==l[e])return!1}else if(!P(b[e],l[e]))return!1;a[e]=!0}for(e in l)if(E.call(l,e)&&!a[e])return!1;return!0};g.preventInvalidHostname=function(a){this._parts.preventInvalidHostname=!!a;return this};g.duplicateQueryParameters=function(a){this._parts.duplicateQueryParameters=!!a;return this};g.escapeQuerySpace=function(a){this._parts.escapeQuerySpace= 5180 !!a;return this};return d}); 5181(function(m,u){"object"===typeof module&&module.exports?module.exports=u(require("jquery"),require("./URI")):"function"===typeof define&&define.amd?define(["jquery","./URI"],u):u(m.jQuery,m.URI)})(this,function(m,u){function q(h){return h.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function k(h){var r=h.nodeName.toLowerCase();if("input"!==r||"image"===h.type)return u.domAttributes[r]}function d(h){return{get:function(r){return m(r).uri()[h]()},set:function(r,A){m(r).uri()[h](A);return A}}}function n(h, 5182 r){if(!k(h)||!r)return!1;var A=r.match(F);if(!A||!A[5]&&":"!==A[2]&&!x[A[2]])return!1;var G=m(h).uri();if(A[5])return G.is(A[5]);if(":"===A[2]){var J=A[1].toLowerCase()+":";return x[J]?x[J](G,A[4]):!1}J=A[1].toLowerCase();return z[J]?x[A[2]](G[J](),A[4],J):!1}var z={},x={"=":function(h,r){return h===r},"^=":function(h,r){return!!(h+"").match(new RegExp("^"+q(r),"i"))},"$=":function(h,r){return!!(h+"").match(new RegExp(q(r)+"$","i"))},"*=":function(h,r,A){"directory"===A&&(h+="/");return!!(h+"").match(new RegExp(q(r), 5183 "i"))},"equals:":function(h,r){return h.equals(r)},"is:":function(h,r){return h.is(r)}};m.each("origin authority directory domain filename fragment hash host hostname href password path pathname port protocol query resource scheme search subdomain suffix tld username".split(" "),function(h,r){z[r]=!0;m.attrHooks["uri:"+r]=d(r)});var M=function(h,r){return m(h).uri().href(r).toString()};m.each(["src","href","action","uri","cite"],function(h,r){m.attrHooks[r]={set:M}});m.attrHooks.uri.get=function(h){return m(h).uri()}; 5184 m.fn.uri=function(h){var r=this.first(),A=r.get(0),G=k(A);if(!G)throw Error('Element "'+A.nodeName+'" does not have either property: href, src, action, cite');if(void 0!==h){var J=r.data("uri");if(J)return J.href(h);h instanceof u||(h=u(h||""))}else{if(h=r.data("uri"))return h;h=u(r.attr(G)||"")}h._dom_element=A;h._dom_attribute=G;h.normalize();r.data("uri",h);return h};u.prototype.build=function(h){if(this._dom_element)this._string=u.build(this._parts),this._deferred_build=!1,this._dom_element.setAttribute(this._dom_attribute, 5185 this._string),this._dom_element[this._dom_attribute]=this._string;else if(!0===h)this._deferred_build=!0;else if(void 0===h||this._deferred_build)this._string=u.build(this._parts),this._deferred_build=!1;return this};var F=/^([a-zA-Z]+)\s*([\^\$*]?=|:)\s*(['"]?)(.+)\3|^\s*([a-zA-Z0-9]+)\s*$/;var P=m.expr.createPseudo?m.expr.createPseudo(function(h){return function(r){return n(r,h)}}):function(h,r,A){return n(h,A[3])};m.expr[":"].uri=P;return m}); 5186 5187 5188function SearchController() { 5189 var _this = this; 5190 5191 _this.ajaxType = 7383; 5192 5193 this.init = function() { 5194 jQuery("body").delegate("a.solr-ajaxified", "click", _this.handleClickOnAjaxifiedUri); 5195 }; 5196 5197 this.handleClickOnAjaxifiedUri = function() { 5198 var clickedLink = jQuery(this); 5199 5200 var solrContainer = clickedLink.closest(".tx_solr"); 5201 var solrParent = solrContainer.parent(); 5202 5203 var loader = jQuery("<div class='tx-solr-loader'></div>"); 5204 var uri = clickedLink.uri(); 5205 5206 solrParent.append(loader); 5207 uri.addQuery("type", _this.ajaxType); 5208 5209 jQuery.get( 5210 uri.href(), 5211 function(data) { 5212 solrContainer = solrContainer.replaceWith(data); 5213 _this.scrollToTopOfElement(solrParent, 50); 5214 jQuery("body").trigger("tx_solr_updated"); 5215 loader.fadeOut().remove(); 5216 history.replaceState({}, null, uri.removeQuery("type").href()); 5217 } 5218 ); 5219 return false;
5220 }; 5221 5222 this.scrollToTopOfElement = function(element, deltaTop) { 5223 jQuery('html, body').animate({ 5224 scrollTop: (element.offset().top - deltaTop) + 'px' 5225 }, 'slow'); 5226 }; 5227 5228 this.setAjaxType = function(ajaxType) { 5229 _this.ajaxType = ajaxType; 5230 }; 5231} 5232 5233jQuery(document).ready(function() { 5234 var solrSearchController = new SearchController(); 5235 solrSearchController.init(); 5236 5237 if(typeof solrSearchAjaxType !== "undefined") { 5238 solrSearchController.setAjaxType(solrSearchAjaxType); 5239 } 5240}); 5241 5242/** 5243 * Ajax Autocomplete for jQuery, version 1.4.11 5244 * (c) 2017 Tomas Kirda 5245 * 5246 * Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license. 5247 * For details, see the web site: https://github.com/devbridge/jQuery-Autocomplete 5248 */ 5249!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports&&"function"==typeof require?t(require("jquery")):t(jQuery)}(function(t){"use strict";var e={escapeRegExChars:function(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},createNode:function(t){var e=document.createElement("div");return e.className=t,e.style.position="absolute",e.style.display="none",e}},s=27,i=9,n=13,o=38,a=39,u=40,l=t.noop;function r(e,s){this.element=e,this.el=t(e),this.suggestions=[],this.badQueries=[],this.selectedIndex=-1,this.currentValue=this.element.value,this.timeoutId=null,this.cachedResponse={},this.onChangeTimeout=null,this.onChange=null,this.isLocal=!1,this.suggestionsContainer=null,this.noSuggestionsContainer=null,this.options=t.extend(!0,{},r.defaults,s),this.classes={selected:"autocomplete-selected",suggestion:"autocomplete-suggestion"},this.hint=null,this.hintValue="",this.selection=null,this.initialize(),this.setOptions(s)}r.utils=e,t.Autocomplete=r,r.defaults={ajaxSettings:{},autoSelectFirst:!1,appendTo:"body",serviceUrl:null,lookup:null,onSelect:null,onHint:null,width:"auto",minChars:1,maxHeight:300,deferRequestBy:0,params:{},formatResult:function(t,s){if(!s)return t.value;var i="("+e.escapeRegExChars(s)+")";return t.value.replace(new RegExp(i,"gi"),"<strong>$1</strong>").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/<(\/?strong)>/g,"<$1>")},formatGroup:function(t,e){return'<div class="autocomplete-group">'+e+"</div>"},delimiter:null,zIndex:9999,type:"GET",noCache:!1,onSearchStart:l,onSearchComplete:l,onSearchError:l,preserveInput:!1,containerClass:"autocomplete-suggestions",tabDisabled:!1,dataType:"text",currentRequest:null,triggerSelectOnValidInput:!0,preventBadQueries:!0,lookupFilter:function(t,e,s){return-1!==t.value.toLowerCase().indexOf(s)},paramName:"query",transformResult:function(e){return"string"==typeof e?t.parseJSON(e):e},showNoSuggestionNotice:!1,noSuggestionNotice:"No results",orientation:"bottom",forceFixPosition:!1},r.prototype={initialize:function(){var e,s=this,i="."+s.classes.suggestion,n=s.classes.selected,o=s.options;s.element.setAttribute("autocomplete","off"),s.noSuggestionsContainer=t('<div class="autocomplete-no-suggestion"></div>').html(this.options.noSuggestionNotice).get(0),s.suggestionsContainer=r.utils.createNode(o.containerClass),(e=t(s.suggestionsContainer)).appendTo(o.appendTo||"body"),"auto"!==o.width&&e.css("width",o.width),e.on("mouseover.autocomplete",i,function(){s.activate(t(this).data("index"))}),e.on("mouseout.autocomplete",function(){s.selectedIndex=-1,e.children("."+n).removeClass(n)}),e.on("click.autocomplete",i,function(){s.select(t(this).data("index"))}),e.on("click.autocomplete",function(){clearTimeout(s.blurTimeoutId)}),s.fixPositionCapture=function(){s.visible&&s.fixPosition()},t(window).on("resize.autocomplete",s.fixPositionCapture),s.el.on("keydown.autocomplete",function(t){s.onKeyPress(t)}),s.el.on("keyup.autocomplete",function(t){s.onKeyUp(t)}),s.el.on("blur.autocomplete",function(){s.onBlur()}),s.el.on("focus.autocomplete",function(){s.onFocus()}),s.el.on("change.autocomplete",function(t){s.onKeyUp(t)}),s.el.on("input.autocomplete",function(t){s.onKeyUp(t)})},onFocus:function(){this.disabled||(this.fixPosition(),this.el.val().length>=this.options.minChars&&this.onValueChange())},onBlur:function(){var e=this,s=e.options,i=e.el.val(),n=e.getQuery(i);e.blurTimeoutId=setTimeout(function(){e.hide(),e.selection&&e.currentValue!==n&&(s.onInvalidateSelection||t.noop).call(e.element)},200)},abortAjax:function(){this.currentRequest&&(this.currentRequest.abort(),this.currentRequest=null)},setOptions:function(e){var s=t.extend({},this.options,e);this.isLocal=Array.isArray(s.lookup),this.isLocal&&(s.lookup=this.verifySuggestionsFormat(s.lookup)),s.orientation=this.validateOrientation(s.orientation,"bottom"),t(this.suggestionsContainer).css({"max-height":s.maxHeight+"px",width:s.width+"px","z-index":s.zIndex}),this.options=s},clearCache:function(){this.cachedResponse={},this.badQueries=[]},clear:function(){this.clearCache(),this.currentValue="",this.suggestions=[]},disable:function(){this.disabled=!0,clearTimeout(this.onChangeTimeout),this.abortAjax()},enable:function(){this.disabled=!1},fixPosition:function(){var e=t(this.suggestionsContainer),s=e.parent().get(0);if(s===document.body||this.options.forceFixPosition){var i=this.options.orientation,n=e.outerHeight(),o=this.el.outerHeight(),a=this.el.offset(),u={top:a.top,left
5249:a.left};if("auto"===i){var l=t(window).height(),r=t(window).scrollTop(),h=-r+a.top-n,c=r+l-(a.top+o+n);i=Math.max(h,c)===h?"top":"bottom"}if(u.top+="top"===i?-n:o,s!==document.body){var g,d=e.css("opacity");this.visible||e.css("opacity",0).show(),g=e.offsetParent().offset(),u.top-=g.top,u.top+=s.scrollTop,u.left-=g.left,this.visible||e.css("opacity",d).hide()}"auto"===this.options.width&&(u.width=this.el.outerWidth()+"px"),e.css(u)}},isCursorAtEnd:function(){var t,e=this.el.val().length,s=this.element.selectionStart;return"number"==typeof s?s===e:!document.selection||((t=document.selection.createRange()).moveStart("character",-e),e===t.text.length)},onKeyPress:function(t){if(this.disabled||this.visible||t.which!==u||!this.currentValue){if(!this.disabled&&this.visible){switch(t.which){case s:this.el.val(this.currentValue),this.hide();break;case a:if(this.hint&&this.options.onHint&&this.isCursorAtEnd()){this.selectHint();break}return;case i:if(this.hint&&this.options.onHint)return void this.selectHint();if(-1===this.selectedIndex)return void this.hide();if(this.select(this.selectedIndex),!1===this.options.tabDisabled)return;break;case n:if(-1===this.selectedIndex)return void this.hide();this.select(this.selectedIndex);break;case o:this.moveUp();break;case u:this.moveDown();break;default:return}t.stopImmediatePropagation(),t.preventDefault()}}else this.suggest()},onKeyUp:function(t){var e=this;if(!e.disabled){switch(t.which){case o:case u:return}clearTimeout(e.onChangeTimeout),e.currentValue!==e.el.val()&&(e.findBestHint(),e.options.deferRequestBy>0?e.onChangeTimeout=setTimeout(function(){e.onValueChange()},e.options.deferRequestBy):e.onValueChange())}},onValueChange:function(){if(this.ignoreValueChange)this.ignoreValueChange=!1;else{var e=this.options,s=this.el.val(),i=this.getQuery(s);this.selection&&this.currentValue!==i&&(this.selection=null,(e.onInvalidateSelection||t.noop).call(this.element)),clearTimeout(this.onChangeTimeout),this.currentValue=s,this.selectedIndex=-1,e.triggerSelectOnValidInput&&this.isExactMatch(i)?this.select(0):i.length<e.minChars?this.hide():this.getSuggestions(i)}},isExactMatch:function(t){var e=this.suggestions;return 1===e.length&&e[0].value.toLowerCase()===t.toLowerCase()},getQuery:function(e){var s,i=this.options.delimiter;return i?(s=e.split(i),t.trim(s[s.length-1])):e},getSuggestionsLocal:function(e){var s,i=this.options,n=e.toLowerCase(),o=i.lookupFilter,a=parseInt(i.lookupLimit,10);return s={suggestions:t.grep(i.lookup,function(t){return o(t,e,n)})},a&&s.suggestions.length>a&&(s.suggestions=s.suggestions.slice(0,a)),s},getSuggestions:function(e){var s,i,n,o,a=this,u=a.options,l=u.serviceUrl;u.params[u.paramName]=e,!1!==u.onSearchStart.call(a.element,u.params)&&(i=u.ignoreParams?null:u.params,t.isFunction(u.lookup)?u.lookup(e,function(t){a.suggestions=t.suggestions,a.suggest(),u.onSearchComplete.call(a.element,e,t.suggestions)}):(a.isLocal?s=a.getSuggestionsLocal(e):(t.isFunction(l)&&(l=l.call(a.element,e)),n=l+"?"+t.param(i||{}),s=a.cachedResponse[n]),s&&Array.isArray(s.suggestions)?(a.suggestions=s.suggestions,a.suggest(),u.onSearchComplete.call(a.element,e,s.suggestions)):a.isBadQuery(e)?u.onSearchComplete.call(a.element,e,[]):(a.abortAjax(),o={url:l,data:i,type:u.type,dataType:u.dataType},t.extend(o,u.ajaxSettings),a.currentRequest=t.ajax(o).done(function(t){var s;a.currentRequest=null,s=u.transformResult(t,e),a.processResponse(s,e,n),u.onSearchComplete.call(a.element,e,s.suggestions)}).fail(function(t,s,i){u.onSearchError.call(a.element,e,t,s,i)}))))},isBadQuery:function(t){if(!this.options.preventBadQueries)return!1;for(var e=this.badQueries,s=e.length;s--;)if(0===t.indexOf(e[s]))return!0;return!1},hide:function(){var e=t(this.suggestionsContainer);t.isFunction(this.options.onHide)&&this.visible&&this.options.onHide.call(this.element,e),this.visible=!1,this.selectedIndex=-1,clearTimeout(this.onChangeTimeout),t(this.suggestionsContainer).hide(),this.onHint(null)},suggest:function(){if(this.suggestions.length){var e,s=this.options,i=s.groupBy,n=s.formatResult,o=this.getQuery(this.currentValue),a=this.classes.suggestion,u=this.classes.selected,l=t(this.suggestionsContainer),r=t(this.noSuggestionsContainer),h=s.beforeRender,c="";s.triggerSelectOnValidInput&&this.isExactMatch(o)?this.select(0):(t.each(this.suggestions,function(t,u){i&&(c+=function(t,n){var o=t.data[i];return e===o?"":(e=o,s.formatGroup(t,e))}(u,0)),c+='<div class="'+a+'" data-index="'+t+'">'+n(u,o,t)+"</div>"}),this.adjustContainerWidth(),r.detach(),l.html(c),t.isFunction(h)&&h.call(this.element,l,this.suggestions),this.fixPosition(),l.show(),s.autoSelectFirst&&(this.selectedIndex=0,l.scrollTop(0),l.children("."+a).first().addClass(u)),this.visible=!0,this.findBestHint())}else this.options.showNoSuggestionNotice?this.noSuggestions():this.hide()},noSuggestions:function(){var e=this.options.beforeRender,s=t(this.suggestionsContainer),i=t(this.noSuggestionsContainer);this.adjustContainerWidth(),i.detach(),s.empty(),s.append(i),t.isFunction(e)&&e.call(this.element,s,this.suggestions),this.fixPosition(),s.show(),this.visible=!0},adjustContainerWidth:function(){var e,s=this.options,i=t(this.suggestionsContainer);"auto"===s.width?(e=this.el.outerWidth(),i.css("width",e>0?e:300)):"flex"===s.width&&i.css("width","")},findBestHint:function(){var e=this.el.val().toLowerCase(),s=null;e&&(t.each(this.suggestions,function(t,i){var n=0===i.value.toLowerCase().indexOf(e);return n&&(s=i),!n}),this.onHint(s))},onHint:function(e){var s=this.options.onHint,i="";e&&(i=this.currentValue+e.value.substr(this.currentValue.length)),this.hintValue!==i&&(this.hintValue=i,this.hint=e,t.isFunction(s)&&s.call(this.element,i))},verifySuggestionsFormat:function(e){return e.length&&"string"==typeof e[0]?t.map(e,function(t){return{value:t,data:null}}):e},validateOrientation:function(e,s){return e=t.trim(e||"").toLowerCase(),-1===t.inArray(e,["auto","bottom","top"])&&(e=s),e},processResponse:function(t,e,s){var i=this.options;t.suggestions=this.verifySuggestionsFormat(t.suggestions),i.noCache||(this.cachedResponse[s]=t,i.preventBadQueries&&!t.suggestions.length&&this.badQueries.push(e)),e===this.getQuery(this.currentValue)&&(this.suggestions=t.suggestions,this.suggest())},activate:function(e){var s,i=this.classes.selected,n=t(this.suggestionsContainer),o=n.find("."+this.classes.suggestion);return n.find("."+i).removeClass(i),this.selectedIndex=e,-1!==this.selectedIndex&&o.length>this.selectedIndex?(s=o.get(this.selectedIndex),t(s).addClass(i),s):null},selectHint:function(){var e=t.inArray(this.hint,this.suggestions);this.select(e)},select:function(t){this.hide(),this.onSelect(t)},moveUp:function(){if(-1!==this.selectedIndex)return 0===this.selectedIndex?(t(this.suggestionsContainer).children("."+this.classes.suggestion).first().removeClass(this.classes.selected),this.selectedIndex=-1,this.ignoreValueChange=!1,this.el.val(this.currentValue),void this.findBestHint()):void this.adjustScroll(this.selectedIndex-1)},moveDown:function(){this.selectedIndex!==this.suggestions.length-1&&this.adjustScroll(this.selectedIndex+1)},adjustScroll:function(e){var s=this.activate(e);if(s){var i,n,o,a=t(s).outerHeight();i=s.offsetTop,o=(n=t(this.suggestionsContainer).scrollTop())+this.options.maxHeight-a,i<n?t(this.suggestionsContainer).scrollTop(i):i>o&&t(this.suggestionsContainer).scrollTop(i-this.options.maxHeight+a),this.options.preserveInput||(this.ignoreValueChange=!0,this.el.val(this.getValue(this.suggestions[e].value))),this.onHint(null)}},onSelect:function(e){var s=this.options.onSelect,i=this.suggestions[e];this.currentValue=this.getValue(i.value),this.currentValue===this.el.val()||this.options.preserveInput||this.el.val(this.currentValue),this.onHint(null),this.suggestions=[],this.selection=i,t.isFunction(s)&&s.call(this.element,i)},getValue:function(t){var e,s,i=this.options.delimiter;return i?1===(s=(e=this.currentValue).split(i)).length?t:e.substr(0,e.length-s[s.length-1].length)+t:t},dispose:function(){this.el.off(".autocomplete").removeData("autocomplete"),t(window).off("resize.autocomplete",this.fixPositionCapture),t(this.suggestionsContainer).remove()}},t.fn.devbridgeAutocomplete=function(e,s){return arguments.length?this.each(function(){var i=t(this),n=i.data("autocomplete");"string"==typeof e?n&&"function"==typeof n[e]&&n[e](s):(n&&n.dispose&&n.dispose(),n=new r(this,e),i.data("autocomplete",n))}):this.first().data("autocomplete")}
5249,t.fn.autocomplete||(t.fn.autocomplete=t.fn.devbridgeAutocomplete)}); 5250 5251/** 5252 * Project override of EXT:solr's suggest_controller.js. 5253 * 5254 * Only change vs. the vendor original: `width` is 'flex' instead of a fixed 5255 * px value (searchBox.outerWidth() * 0.66). Combined with the 5256 * `tx-solr-autocomplete` wrapper (position: relative) around the search 5257 * field in SolrSearchHeadForm.html, this makes the devbridge-autocomplete 5258 * plugin skip its own top/left/width calculation entirely (it only computes 5259 * those when appended directly to <body>) and lets CSS 5260 * (.tx-solr-autosuggest in _custom.scss) size the suggestion box to exactly 5261 * match the search field at every breakpoint, instead of a fixed multiplier. 5262 */ 5263function SuggestController() { 5264 5265 this.init = function () { 5266 5267 jQuery('form[data-suggest]').each(function () { 5268 var $form = $(this), $searchBox = $form.find('.tx-solr-suggest'), $formAutoComplete; 5269 5270 if ($form.find('.tx-solr-autocomplete').length > 0){ 5271 $formAutoComplete = $form.find('.tx-solr-autocomplete'); 5272 } else { 5273 $formAutoComplete = $('body'); 5274 } 5275 5276 // when no specific container found, use the form as container 5277 if ($searchBox.length === 0) { 5278 $searchBox = $form; 5279 } 5280 $searchBox.css('position', 'relative'); 5281 5282 $form.find('.tx-solr-suggest-focus').focus(); 5283 5284 // Prevent submit of empty search form 5285 $form.on('submit', function (e) { 5286 if ($form.find('.tx-solr-suggest-focus').val() === '') { 5287 e.preventDefault(); 5288 $form.find('.tx-solr-suggest-focus').focus(); 5289 } 5290 }); 5291 5292 $form.find('.tx-solr-suggest').devbridgeAutocomplete({ 5293 serviceUrl: $form.data('suggest'), 5294 dataType: 'json', 5295 paramName: 'tx_solr[queryString]', 5296 groupBy: 'category', 5297 maxHeight: 1000, 5298 appendTo: $formAutoComplete, 5299 autoSelectFirst: false, 5300 triggerSelectOnValidInput: false, 5301 width: 'flex', 5302 onSelect: function (suggestion) { 5303 // go to link when selecting found result 5304 if (suggestion.data.link) { 5305 // Open youtube in overlay 5306 if (suggestion.data.link.indexOf('https://www.youtube.com') === 0) { 5307 openVideoOverlay(suggestion.data.link); 5308 } else { 5309 location.href = suggestion.data.link; 5310 } 5311 // else trigger form submit (do search) 5312 } else { 5313 $form.trigger('submit'); 5314 } 5315 }, 5316 transformResult: function (response) { 5317 if (!response.suggestions) return {suggestions: []}; 5318 var firstSuggestion, result = { 5319 suggestions: $.map(response.suggestions, function (count, suggestion) { 5320 if (!firstSuggestion) firstSuggestion = suggestion; 5321 return {value: suggestion, data: {category: 'suggestion', count: count}}; 5322 }) 5323 }; 5324 5325 $.each(response.documents, function (key, value) { 5326 var dataObject = value; 5327 5328 var defaultGroup = $form.data('suggest-header') ? $form.data('suggest-header') : 'Top results'; 5329 dataObject.category = defaultGroup; 5330 5331 // if a group is set we try to get a label 5332 if(dataObject.group) { 5333 dataObject.category = $form.data('suggest-header-' + dataObject.group) ? $form.data('suggest-header-' + dataObject.group) : dataObject.group; 5334 } 5335 5336 result.suggestions.push( 5337 { 5338 value: firstSuggestion, 5339 data: dataObject 5340 } 5341 ); 5342 }); 5343 5344 return result; 5345 }, 5346 beforeRender: function (container) { 5347 // remove first group header 5348 container.find('.autocomplete-group:first').remove(); 5349 container.addClass('tx-solr-autosuggest'); 5350 5351 // add active class to container 5352 $searchBox.parent().addClass('autocomplete-active').fadeIn(); 5353 }, 5354 formatResult: function (suggestion, currentValue) {
5355 // Do not replace anything if there current value is empty 5356 if (!currentValue) { 5357 return suggestion.value; 5358 } 5359 var pattern = '(' + $.Autocomplete.utils.escapeRegExChars(currentValue.trim()) + ')'; 5360 // normal suggestion 5361 if (suggestion.data.category === 'suggestion') { 5362 return suggestion.value 5363 .replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>') 5364 .replace(/&/g, '&') 5365 .replace(/</g, '<') 5366 .replace(/>/g, '>') 5367 .replace(/"/g, '"') 5368 .replace(/<(\/?strong)>/g, '<$1>'); 5369 5370 // results 5371 } else { 5372 var title = suggestion.data.title 5373 .replace(new RegExp(pattern, 'gi'), '<em>$1<\/em>') 5374 .replace(/&/g, '&') 5375 .replace(/</g, '<') 5376 .replace(/>/g, '>') 5377 .replace(/"/g, '"') 5378 .replace(/<(\/?em)>/g, '<$1>'); 5379 5380 return '<div class="' + suggestion.data.type + '">' + 5381 (!!suggestion.data.previewImage ? '<figure ' + (!!suggestion.data.hasVideo ? 'class="hasVideo"' : '') + '>
5381<img src="' + suggestion.data.previewImage + '" /></figure>' : '') + 5382 '<a href="' + suggestion.data.link + '" class="internal-link">' + title + '</a>' + 5383 '</div>'; 5384 } 5385 5386 } 5387 }).on('blur', function () { 5388 $searchBox.parent().removeClass('autocomplete-active'); 5389 var $box = $(this); 5390 setTimeout(function () { 5391 $box.devbridgeAutocomplete('hide'); 5392 }, 200); 5393 }); 5394 }); 5395 }; 5396} 5397 5398jQuery(document).ready(function() { 5399 /** solr search autocomplete **/ 5400 var solrSuggestController = new SuggestController(); 5401 solrSuggestController.init(); 5402 5403 jQuery("body").on("tx_solr_updated", function() { 5404 solrSuggestController.init(); 5405 }); 5406});
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.