1/******/ (function() { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3
vendor: 9,994 bytes, lines 4-227
4/***/ "./node_modules/@popperjs/core/lib/createPopper.js": 5/*!*********************************************************!*\ 6 !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! 7 \*********************************************************/ 8/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 9 10"use strict"; 11__webpack_require__.r(__webpack_exports__); 12/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13/* harmony export */ createPopper: function() { return /* binding */ createPopper; }, 14/* harmony export */ detectOverflow: function() { return /* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }, 15/* harmony export */ popperGenerator: function() { return /* binding */ popperGenerator; } 16/* harmony export */ }); 17/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js"); 18/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 19/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); 20/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 21/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js"); 22/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js"); 23/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js"); 24/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 25/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 26 27 28 29 30 31 32 33 34 35var DEFAULT_OPTIONS = { 36 placement: 'bottom', 37 modifiers: [], 38 strategy: 'absolute' 39}; 40 41function areValidElements() { 42 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 43 args[_key] = arguments[_key]; 44 } 45 46 return !args.some(function (element) { 47 return !(element && typeof element.getBoundingClientRect === 'function'); 48 }); 49} 50 51function popperGenerator(generatorOptions) { 52 if (generatorOptions === void 0) { 53 generatorOptions = {}; 54 } 55 56 var _generatorOptions = generatorOptions, 57 _generatorOptions$def = _generatorOptions.defaultModifiers, 58 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 59 _generatorOptions$def2 = _generatorOptions.defaultOptions, 60 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 61 return function createPopper(reference, popper, options) { 62 if (options === void 0) { 63 options = defaultOptions; 64 } 65 66 var state = { 67 placement: 'bottom', 68 orderedModifiers: [], 69 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 70 modifiersData: {}, 71 elements: { 72 reference: reference, 73 popper: popper 74 }, 75 attributes: {}, 76 styles: {} 77 }; 78 var effectCleanupFns = []; 79 var isDestroyed = false; 80 var instance = { 81 state: state, 82 setOptions: function setOptions(setOptionsAction) { 83 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 84 cleanupModifierEffects(); 85 state.options = Object.assign({}, defaultOptions, state.options, options); 86 state.scrollParents = { 87 reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [], 88 popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper) 89 }; // Orders the modifiers based on their dependencies and `phase` 90 // properties 91 92 var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 93 94 state.orderedModifiers = orderedModifiers.filter(function (m) { 95 return m.enabled; 96 }); 97 runModifierEffects(); 98 return instance.update(); 99 }, 100 // Sync update â it will always be executed, even if not necessary. This 101 // is useful for low frequency updates where sync behavior simplifies the 102 // logic. 103 // For high frequency updates (e.g. `resize` and `scroll` events), always 104 // prefer the async Popper#update method 105 forceUpdate: function forceUpdate() { 106 if (isDestroyed) { 107 return; 108 } 109 110 var _state$elements = state.elements, 111 reference = _state$elements.reference, 112 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 113 // anymore 114 115 if (!areValidElements(reference, popper)) { 116 return; 117 } // Store the reference and popper rects to be read by modifiers 118 119 120 state.rects = { 121 reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(popper), state.options.strategy === 'fixed'), 122 popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(popper) 123 }; // Modifiers have the ability to reset the current update cycle. The 124 // most common use case for this is the `flip` modifier changing the 125 // placement, which then needs to re-run all the modifiers, because the 126 // logic was previously ran for the previous placement and is therefore 127 // stale/incorrect 128 129 state.reset = false; 130 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 131 // is filled with the initial data specified by the modifier. This means 132 // it doesn't persist and is fresh on each update. 133 // To ensure persistent data, use `${name}#persistent` 134 135 state.orderedModifiers.forEach(function (modifier) { 136 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 137 }); 138 139 for (var index = 0; index < state.orderedModifiers.length; index++) { 140 if (state.reset === true) { 141 state.reset = false; 142 index = -1; 143 continue; 144 } 145 146 var _state$orderedModifie = state.orderedModifiers[index], 147 fn = _state$orderedModifie.fn, 148 _state$orderedModifie2 = _state$orderedModifie.options, 149 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 150 name = _state$orderedModifie.name; 151 152 if (typeof fn === 'function') { 153 state = fn({ 154 state: state, 155 options: _options, 156 name: name, 157 instance: instance 158 }) || state; 159 } 160 } 161 }, 162 // Async and optimistically optimized update â it will not be executed if 163 // not necessary (debounced to run at most once-per-tick) 164 update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__["default"])(function () { 165 return new Promise(function (resolve) { 166 instance.forceUpdate(); 167 resolve(state); 168 }); 169 }), 170 destroy: function destroy() { 171 cleanupModifierEffects(); 172 isDestroyed = true; 173 } 174 }; 175 176 if (!areValidElements(reference, popper)) { 177 return instance; 178 } 179 180 instance.setOptions(options).then(function (state) { 181 if (!isDestroyed && options.onFirstUpdate) { 182 options.onFirstUpdate(state); 183 } 184 }); // Modifiers have the ability to execute arbitrary code before the first 185 // update cycle runs. They will be executed in the same order as the update 186 // cycle. This is useful when a modifier adds some persistent data that 187 // other modifiers need to use, but the modifier is run after the dependent 188 // one. 189 190 function runModifierEffects() { 191 state.orderedModifiers.forEach(function (_ref) { 192 var name = _ref.name, 193 _ref$options = _ref.options, 194 options = _ref$options === void 0 ? {} : _ref$options, 195 effect = _ref.effect; 196 197 if (typeof effect === 'function') { 198 var cleanupFn = effect({ 199 state: state, 200 name: name, 201 instance: instance, 202 options: options 203 }); 204 205 var noopFn = function noopFn() {}; 206 207 effectCleanupFns.push(cleanupFn || noopFn); 208 } 209 }); 210 } 211 212 function cleanupModifierEffects() { 213 effectCleanupFns.forEach(function (fn) { 214 return fn(); 215 }); 216 effectCleanupFns = []; 217 } 218 219 return instance; 220 }; 221} 222var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 223 224 225 226/***/ }), 227
vendor: 1,438 bytes, lines 228-265
228/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": 229/*!***************************************************************!*\ 230 !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! 231 \***************************************************************/ 232/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 233 234"use strict"; 235__webpack_require__.r(__webpack_exports__); 236/* harmony export */ __webpack_require__.d(__webpack_exports__, { 237/* harmony export */ "default": function() { return /* binding */ contains; } 238/* harmony export */ }); 239/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 240 241function contains(parent, child) { 242 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 243 244 if (parent.contains(child)) { 245 return true; 246 } // then fallback to custom implementation with Shadow DOM support 247 else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) { 248 var next = child; 249 250 do { 251 if (next && parent.isSameNode(next)) { 252 return true; 253 } // $FlowFixMe[prop-missing]: need a better way to handle this... 254 255 256 next = next.parentNode || next.host; 257 } while (next); 258 } // Give up, the result is false 259 260 261 return false; 262} 263 264/***/ }), 265
vendor: 2,826 bytes, lines 266-324
266/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": 267/*!****************************************************************************!*\ 268 !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! 269 \****************************************************************************/ 270/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 271 272"use strict"; 273__webpack_require__.r(__webpack_exports__); 274/* harmony export */ __webpack_require__.d(__webpack_exports__, { 275/* harmony export */ "default": function() { return /* binding */ getBoundingClientRect; } 276/* harmony export */ }); 277/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 278/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 279/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 280/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"); 281 282 283 284 285function getBoundingClientRect(element, includeScale, isFixedStrategy) { 286 if (includeScale === void 0) { 287 includeScale = false; 288 } 289 290 if (isFixedStrategy === void 0) { 291 isFixedStrategy = false; 292 } 293 294 var clientRect = element.getBoundingClientRect(); 295 var scaleX = 1; 296 var scaleY = 1; 297 298 if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { 299 scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1; 300 scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1; 301 } 302 303 var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) : window, 304 visualViewport = _ref.visualViewport; 305 306 var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])() && isFixedStrategy; 307 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 308 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 309 var width = clientRect.width / scaleX; 310 var height = clientRect.height / scaleY; 311 return { 312 width: width, 313 height: height, 314 top: y, 315 right: x + width, 316 bottom: y + height, 317 left: x, 318 x: x, 319 y: y 320 }; 321} 322 323/***/ }), 324
vendor: 6,936 bytes, lines 325-422
325/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": 326/*!**********************************************************************!*\ 327 !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! 328 \**********************************************************************/ 329/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 330 331"use strict"; 332__webpack_require__.r(__webpack_exports__); 333/* harmony export */ __webpack_require__.d(__webpack_exports__, { 334/* harmony export */ "default": function() { return /* binding */ getClippingRect; } 335/* harmony export */ }); 336/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 337/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js"); 338/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js"); 339/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); 340/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 341/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 342/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 343/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 344/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 345/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 346/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); 347/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 348/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); 349/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365function getInnerBoundingClientRect(element, strategy) { 366 var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, false, strategy === 'fixed'); 367 rect.top = rect.top + element.clientTop; 368 rect.left = rect.left + element.clientLeft; 369 rect.bottom = rect.top + element.clientHeight; 370 rect.right = rect.left + element.clientWidth; 371 rect.width = element.clientWidth; 372 rect.height = element.clientHeight; 373 rect.x = rect.left; 374 rect.y = rect.top; 375 return rect; 376} 377 378function getClientRectFromMixedType(element, clippingParent, strategy) { 379 return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element))); 380} // A "clipping parent" is an overflowable container with the characteristic of 381// clipping (or hiding) overflowing elements with a position different from 382// `initial` 383 384 385function getClippingParents(element) { 386 var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element)); 387 var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0; 388 var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element; 389 390 if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) { 391 return []; 392 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 393 394 395 return clippingParents.filter(function (clippingParent) { 396 return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body'; 397 }); 398} // Gets the maximum area that the element is visible in due to any number of 399// clipping parents 400 401 402function getClippingRect(element, boundary, rootBoundary, strategy) { 403 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 404 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 405 var firstClippingParent = clippingParents[0]; 406 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 407 var rect = getClientRectFromMixedType(element, clippingParent, strategy); 408 accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top); 409 accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right); 410 accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom); 411 accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left); 412 return accRect; 413 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 414 clippingRect.width = clippingRect.right - clippingRect.left; 415 clippingRect.height = clippingRect.bottom - clippingRect.top; 416 clippingRect.x = clippingRect.left; 417 clippingRect.y = clippingRect.top; 418 return clippingRect; 419} 420 421/***/ }), 422
vendor: 4,372 bytes, lines 423-502
423/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": 424/*!***********************************************************************!*\ 425 !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! 426 \***********************************************************************/ 427/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 428 429"use strict"; 430__webpack_require__.r(__webpack_exports__); 431/* harmony export */ __webpack_require__.d(__webpack_exports__, { 432/* harmony export */ "default": function() { return /* binding */ getCompositeRect; } 433/* harmony export */ }); 434/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 435/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js"); 436/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 437/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 438/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 439/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 440/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 441/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 442 443 444 445 446 447 448 449 450 451function isElementScaled(element) { 452 var rect = element.getBoundingClientRect(); 453 var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1; 454 var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1; 455 return scaleX !== 1 || scaleY !== 1; 456} // Returns the composite rect of an element relative to its offsetParent. 457// Composite means it takes into account transforms as well as layout. 458 459 460function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 461 if (isFixed === void 0) { 462 isFixed = false; 463 } 464 465 var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent); 466 var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent); 467 var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent); 468 var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled, isFixed); 469 var scroll = { 470 scrollLeft: 0, 471 scrollTop: 0 472 }; 473 var offsets = { 474 x: 0, 475 y: 0 476 }; 477 478 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 479 if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 480 (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) { 481 scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent); 482 } 483 484 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) { 485 offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true); 486 offsets.x += offsetParent.clientLeft; 487 offsets.y += offsetParent.clientTop; 488 } else if (documentElement) { 489 offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement); 490 } 491 } 492 493 return { 494 x: rect.left + scroll.scrollLeft - offsets.x, 495 y: rect.top + scroll.scrollTop - offsets.y, 496 width: rect.width, 497 height: rect.height 498 }; 499} 500 501/***/ }), 502
vendor: 954 bytes, lines 503-521
503/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": 504/*!***********************************************************************!*\ 505 !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! 506 \***********************************************************************/ 507/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 508 509"use strict"; 510__webpack_require__.r(__webpack_exports__); 511/* harmony export */ __webpack_require__.d(__webpack_exports__, { 512/* harmony export */ "default": function() { return /* binding */ getComputedStyle; } 513/* harmony export */ }); 514/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 515 516function getComputedStyle(element) { 517 return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element); 518} 519 520/***/ }), 521
vendor: 1,125 bytes, lines 522-542
522/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": 523/*!*************************************************************************!*\ 524 !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! 525 \*************************************************************************/ 526/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 527 528"use strict"; 529__webpack_require__.r(__webpack_exports__); 530/* harmony export */ __webpack_require__.d(__webpack_exports__, { 531/* harmony export */ "default": function() { return /* binding */ getDocumentElement; } 532/* harmony export */ }); 533/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 534 535function getDocumentElement(element) { 536 // $FlowFixMe[incompatible-return]: assume body is always available 537 return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 538 element.document) || window.document).documentElement; 539} 540 541/***/ }), 542
vendor: 2,878 bytes, lines 543-590
543/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": 544/*!**********************************************************************!*\ 545 !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! 546 \**********************************************************************/ 547/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 548 549"use strict"; 550__webpack_require__.r(__webpack_exports__); 551/* harmony export */ __webpack_require__.d(__webpack_exports__, { 552/* harmony export */ "default": function() { return /* binding */ getDocumentRect; } 553/* harmony export */ }); 554/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 555/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 556/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 557/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 558/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 559 560 561 562 563 // Gets the entire size of the scrollable document area, even extending outside 564// of the `<html>` and `<body>` rect bounds if horizontally scrollable 565 566function getDocumentRect(element) { 567 var _element$ownerDocumen; 568 569 var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 570 var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 571 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 572 var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 573 var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 574 var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); 575 var y = -winScroll.scrollTop; 576 577 if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') { 578 x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width; 579 } 580 581 return { 582 width: width, 583 height: height, 584 x: x, 585 y: y 586 }; 587} 588 589/***/ }), 590
vendor: 786 bytes, lines 591-610
591/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": 592/*!***************************************************************************!*\ 593 !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! 594 \***************************************************************************/ 595/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 596 597"use strict"; 598__webpack_require__.r(__webpack_exports__); 599/* harmony export */ __webpack_require__.d(__webpack_exports__, { 600/* harmony export */ "default": function() { return /* binding */ getHTMLElementScroll; } 601/* harmony export */ }); 602function getHTMLElementScroll(element) { 603 return { 604 scrollLeft: element.scrollLeft, 605 scrollTop: element.scrollTop 606 }; 607} 608 609/***/ }), 610
vendor: 1,570 bytes, lines 611-650
611/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": 612/*!********************************************************************!*\ 613 !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! 614 \********************************************************************/ 615/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 616 617"use strict"; 618__webpack_require__.r(__webpack_exports__); 619/* harmony export */ __webpack_require__.d(__webpack_exports__, { 620/* harmony export */ "default": function() { return /* binding */ getLayoutRect; } 621/* harmony export */ }); 622/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 623 // Returns the layout rect of an element relative to its offsetParent. Layout 624// means it doesn't take into account transforms. 625 626function getLayoutRect(element) { 627 var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed. 628 // Fixes https://github.com/popperjs/popper-core/issues/1223 629 630 var width = element.offsetWidth; 631 var height = element.offsetHeight; 632 633 if (Math.abs(clientRect.width - width) <= 1) { 634 width = clientRect.width; 635 } 636 637 if (Math.abs(clientRect.height - height) <= 1) { 638 height = clientRect.height; 639 } 640 641 return { 642 x: element.offsetLeft, 643 y: element.offsetTop, 644 width: width, 645 height: height 646 }; 647} 648 649/***/ }), 650
vendor: 713 bytes, lines 651-667
651/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": 652/*!******************************************************************!*\ 653 !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! 654 \******************************************************************/ 655/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 656 657"use strict"; 658__webpack_require__.r(__webpack_exports__); 659/* harmony export */ __webpack_require__.d(__webpack_exports__, { 660/* harmony export */ "default": function() { return /* binding */ getNodeName; } 661/* harmony export */ }); 662function getNodeName(element) { 663 return element ? (element.nodeName || '').toLowerCase() : null; 664} 665 666/***/ }), 667
vendor: 1,744 bytes, lines 668-696
668/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": 669/*!********************************************************************!*\ 670 !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! 671 \********************************************************************/ 672/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 673 674"use strict"; 675__webpack_require__.r(__webpack_exports__); 676/* harmony export */ __webpack_require__.d(__webpack_exports__, { 677/* harmony export */ "default": function() { return /* binding */ getNodeScroll; } 678/* harmony export */ }); 679/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 680/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 681/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 682/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js"); 683 684 685 686 687function getNodeScroll(node) { 688 if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) { 689 return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node); 690 } else { 691 return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node); 692 } 693} 694 695/***/ }), 696
vendor: 4,992 bytes, lines 697-786
697/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": 698/*!**********************************************************************!*\ 699 !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! 700 \**********************************************************************/ 701/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 702 703"use strict"; 704__webpack_require__.r(__webpack_exports__); 705/* harmony export */ __webpack_require__.d(__webpack_exports__, { 706/* harmony export */ "default": function() { return /* binding */ getOffsetParent; } 707/* harmony export */ }); 708/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 709/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 710/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 711/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 712/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js"); 713/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 714/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js"); 715 716 717 718 719 720 721 722 723function getTrueOffsetParent(element) { 724 if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837 725 (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') { 726 return null; 727 } 728 729 return element.offsetParent; 730} // `.offsetParent` reports `null` for fixed elements, while absolute elements 731// return the containing block 732 733 734function getContainingBlock(element) { 735 var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])()); 736 var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])()); 737 738 if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { 739 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 740 var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 741 742 if (elementCss.position === 'fixed') { 743 return null; 744 } 745 } 746 747 var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); 748 749 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) { 750 currentNode = currentNode.host; 751 } 752 753 while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(currentNode)) < 0) { 754 var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that 755 // create a containing block. 756 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 757 758 if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { 759 return currentNode; 760 } else { 761 currentNode = currentNode.parentNode; 762 } 763 } 764 765 return null; 766} // Gets the closest ancestor positioned element. Handles some edge cases, 767// such as table ancestors and cross browser bugs. 768 769 770function getOffsetParent(element) { 771 var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element); 772 var offsetParent = getTrueOffsetParent(element); 773 774 while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') { 775 offsetParent = getTrueOffsetParent(offsetParent); 776 } 777 778 if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) { 779 return window; 780 } 781 782 return offsetParent || getContainingBlock(element) || window; 783} 784 785/***/ }), 786
vendor: 1,920 bytes, lines 787-822
787/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": 788/*!********************************************************************!*\ 789 !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! 790 \********************************************************************/ 791/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 792 793"use strict"; 794__webpack_require__.r(__webpack_exports__); 795/* harmony export */ __webpack_require__.d(__webpack_exports__, { 796/* harmony export */ "default": function() { return /* binding */ getParentNode; } 797/* harmony export */ }); 798/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 799/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 800/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 801 802 803 804function getParentNode(element) { 805 if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') { 806 return element; 807 } 808 809 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 810 // $FlowFixMe[incompatible-return] 811 // $FlowFixMe[prop-missing] 812 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 813 element.parentNode || ( // DOM Element detected 814 (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected 815 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 816 (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback 817 818 ); 819} 820 821/***/ }), 822
vendor: 1,898 bytes, lines 823-856
823/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": 824/*!**********************************************************************!*\ 825 !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! 826 \**********************************************************************/ 827/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 828 829"use strict"; 830__webpack_require__.r(__webpack_exports__); 831/* harmony export */ __webpack_require__.d(__webpack_exports__, { 832/* harmony export */ "default": function() { return /* binding */ getScrollParent; } 833/* harmony export */ }); 834/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 835/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 836/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 837/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 838 839 840 841 842function getScrollParent(node) { 843 if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) { 844 // $FlowFixMe[incompatible-return]: assume body is always available 845 return node.ownerDocument.body; 846 } 847 848 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) { 849 return node; 850 } 851 852 return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node)); 853} 854 855/***/ }), 856
vendor: 2,254 bytes, lines 857-905
857/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": 858/*!**********************************************************************!*\ 859 !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! 860 \**********************************************************************/ 861/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 862 863"use strict"; 864__webpack_require__.r(__webpack_exports__); 865/* harmony export */ __webpack_require__.d(__webpack_exports__, { 866/* harmony export */ "default": function() { return /* binding */ getViewportRect; } 867/* harmony export */ }); 868/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 869/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 870/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 871/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"); 872 873 874 875 876function getViewportRect(element, strategy) { 877 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 878 var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 879 var visualViewport = win.visualViewport; 880 var width = html.clientWidth; 881 var height = html.clientHeight; 882 var x = 0; 883 var y = 0; 884 885 if (visualViewport) { 886 width = visualViewport.width; 887 height = visualViewport.height; 888 var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); 889 890 if (layoutViewport || !layoutViewport && strategy === 'fixed') { 891 x = visualViewport.offsetLeft; 892 y = visualViewport.offsetTop; 893 } 894 } 895 896 return { 897 width: width, 898 height: height, 899 x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element), 900 y: y 901 }; 902} 903 904/***/ }), 905
vendor: 862 bytes, lines 906-931
906/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": 907/*!****************************************************************!*\ 908 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! 909 \****************************************************************/ 910/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 911 912"use strict"; 913__webpack_require__.r(__webpack_exports__); 914/* harmony export */ __webpack_require__.d(__webpack_exports__, { 915/* harmony export */ "default": function() { return /* binding */ getWindow; } 916/* harmony export */ }); 917function getWindow(node) { 918 if (node == null) { 919 return window; 920 } 921 922 if (node.toString() !== '[object Window]') { 923 var ownerDocument = node.ownerDocument; 924 return ownerDocument ? ownerDocument.defaultView || window : window; 925 } 926 927 return node; 928} 929 930/***/ }), 931
vendor: 1,059 bytes, lines 932-956
932/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": 933/*!**********************************************************************!*\ 934 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! 935 \**********************************************************************/ 936/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 937 938"use strict"; 939__webpack_require__.r(__webpack_exports__); 940/* harmony export */ __webpack_require__.d(__webpack_exports__, { 941/* harmony export */ "default": function() { return /* binding */ getWindowScroll; } 942/* harmony export */ }); 943/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 944 945function getWindowScroll(node) { 946 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node); 947 var scrollLeft = win.pageXOffset; 948 var scrollTop = win.pageYOffset; 949 return { 950 scrollLeft: scrollLeft, 951 scrollTop: scrollTop 952 }; 953} 954 955/***/ }), 956
vendor: 1,933 bytes, lines 957-986
957/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": 958/*!**************************************************************************!*\ 959 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! 960 \**************************************************************************/ 961/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 962 963"use strict"; 964__webpack_require__.r(__webpack_exports__); 965/* harmony export */ __webpack_require__.d(__webpack_exports__, { 966/* harmony export */ "default": function() { return /* binding */ getWindowScrollBarX; } 967/* harmony export */ }); 968/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 969/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 970/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 971 972 973 974function getWindowScrollBarX(element) { 975 // If <html> has a CSS width greater than the viewport, then this will be 976 // incorrect for RTL. 977 // Popper 1 is broken in this case and never had a bug report so let's assume 978 // it's not an issue. I don't think anyone ever specifies width on <html> 979 // anyway. 980 // Browsers where the left scrollbar doesn't cause an issue report `0` for 981 // this (e.g. Edge 2019, IE11, Safari) 982 return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft; 983} 984 985/***/ }), 986
vendor: 1,635 bytes, lines 987-1026
987/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": 988/*!*****************************************************************!*\ 989 !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! 990 \*****************************************************************/ 991/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 992 993"use strict"; 994__webpack_require__.r(__webpack_exports__); 995/* harmony export */ __webpack_require__.d(__webpack_exports__, { 996/* harmony export */ isElement: function() { return /* binding */ isElement; }, 997/* harmony export */ isHTMLElement: function() { return /* binding */ isHTMLElement; }, 998/* harmony export */ isShadowRoot: function() { return /* binding */ isShadowRoot; } 999/* harmony export */ }); 1000/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1001 1002 1003function isElement(node) { 1004 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element; 1005 return node instanceof OwnElement || node instanceof Element; 1006} 1007 1008function isHTMLElement(node) { 1009 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement; 1010 return node instanceof OwnElement || node instanceof HTMLElement; 1011} 1012 1013function isShadowRoot(node) { 1014 // IE 11 has no ShadowRoot 1015 if (typeof ShadowRoot === 'undefined') { 1016 return false; 1017 } 1018 1019 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot; 1020 return node instanceof OwnElement || node instanceof ShadowRoot; 1021} 1022 1023 1024 1025/***/ }), 1026
vendor: 969 bytes, lines 1027-1045
1027/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js": 1028/*!***********************************************************************!*\ 1029 !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***! 1030 \***********************************************************************/ 1031/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1032 1033"use strict"; 1034__webpack_require__.r(__webpack_exports__); 1035/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1036/* harmony export */ "default": function() { return /* binding */ isLayoutViewport; } 1037/* harmony export */ }); 1038/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js"); 1039 1040function isLayoutViewport() { 1041 return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__["default"])()); 1042} 1043 1044/***/ }), 1045
vendor: 1,243 bytes, lines 1046-1070
1046/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": 1047/*!*********************************************************************!*\ 1048 !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! 1049 \*********************************************************************/ 1050/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1051 1052"use strict"; 1053__webpack_require__.r(__webpack_exports__); 1054/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1055/* harmony export */ "default": function() { return /* binding */ isScrollParent; } 1056/* harmony export */ }); 1057/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1058 1059function isScrollParent(element) { 1060 // Firefox wants us to check `-x` and `-y` variations as well 1061 var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element), 1062 overflow = _getComputedStyle.overflow, 1063 overflowX = _getComputedStyle.overflowX, 1064 overflowY = _getComputedStyle.overflowY; 1065 1066 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 1067} 1068 1069/***/ }), 1070
vendor: 960 bytes, lines 1071-1089
1071/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": 1072/*!*********************************************************************!*\ 1073 !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! 1074 \*********************************************************************/ 1075/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1076 1077"use strict"; 1078__webpack_require__.r(__webpack_exports__); 1079/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1080/* harmony export */ "default": function() { return /* binding */ isTableElement; } 1081/* harmony export */ }); 1082/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1083 1084function isTableElement(element) { 1085 return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0; 1086} 1087 1088/***/ }), 1089
vendor: 2,549 bytes, lines 1090-1133
1090/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": 1091/*!************************************************************************!*\ 1092 !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! 1093 \************************************************************************/ 1094/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1095 1096"use strict"; 1097__webpack_require__.r(__webpack_exports__); 1098/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1099/* harmony export */ "default": function() { return /* binding */ listScrollParents; } 1100/* harmony export */ }); 1101/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js"); 1102/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 1103/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1104/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 1105 1106 1107 1108 1109/* 1110given a DOM element, return the list of all scroll parents, up the list of ancesors 1111until we get to the top window object. This list is what we attach scroll listeners 1112to, because if any of these parent elements scroll, we'll need to re-calculate the 1113reference element's position. 1114*/ 1115 1116function listScrollParents(element, list) { 1117 var _element$ownerDocumen; 1118 1119 if (list === void 0) { 1120 list = []; 1121 } 1122 1123 var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 1124 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 1125 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent); 1126 var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent; 1127 var updatedList = list.concat(target); 1128 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 1129 updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target))); 1130} 1131 1132/***/ }), 1133
vendor: 3,563 bytes, lines 1134-1201
1134/***/ "./node_modules/@popperjs/core/lib/enums.js": 1135/*!**************************************************!*\ 1136 !*** ./node_modules/@popperjs/core/lib/enums.js ***! 1137 \**************************************************/ 1138/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1139 1140"use strict"; 1141__webpack_require__.r(__webpack_exports__); 1142/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1143/* harmony export */ afterMain: function() { return /* binding */ afterMain; }, 1144/* harmony export */ afterRead: function() { return /* binding */ afterRead; }, 1145/* harmony export */ afterWrite: function() { return /* binding */ afterWrite; }, 1146/* harmony export */ auto: function() { return /* binding */ auto; }, 1147/* harmony export */ basePlacements: function() { return /* binding */ basePlacements; }, 1148/* harmony export */ beforeMain: function() { return /* binding */ beforeMain; }, 1149/* harmony export */ beforeRead: function() { return /* binding */ beforeRead; }, 1150/* harmony export */ beforeWrite: function() { return /* binding */ beforeWrite; }, 1151/* harmony export */ bottom: function() { return /* binding */ bottom; }, 1152/* harmony export */ clippingParents: function() { return /* binding */ clippingParents; }, 1153/* harmony export */ end: function() { return /* binding */ end; }, 1154/* harmony export */ left: function() { return /* binding */ left; }, 1155/* harmony export */ main: function() { return /* binding */ main; }, 1156/* harmony export */ modifierPhases: function() { return /* binding */ modifierPhases; }, 1157/* harmony export */ placements: function() { return /* binding */ placements; }, 1158/* harmony export */ popper: function() { return /* binding */ popper; }, 1159/* harmony export */ read: function() { return /* binding */ read; }, 1160/* harmony export */ reference: function() { return /* binding */ reference; }, 1161/* harmony export */ right: function() { return /* binding */ right; }, 1162/* harmony export */ start: function() { return /* binding */ start; }, 1163/* harmony export */ top: function() { return /* binding */ top; }, 1164/* harmony export */ variationPlacements: function() { return /* binding */ variationPlacements; }, 1165/* harmony export */ viewport: function() { return /* binding */ viewport; }, 1166/* harmony export */ write: function() { return /* binding */ write; } 1167/* harmony export */ }); 1168var top = 'top'; 1169var bottom = 'bottom'; 1170var right = 'right'; 1171var left = 'left'; 1172var auto = 'auto'; 1173var basePlacements = [top, bottom, right, left]; 1174var start = 'start'; 1175var end = 'end'; 1176var clippingParents = 'clippingParents'; 1177var viewport = 'viewport'; 1178var popper = 'popper'; 1179var reference = 'reference'; 1180var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 1181 return acc.concat([placement + "-" + start, placement + "-" + end]); 1182}, []); 1183var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 1184 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 1185}, []); // modifiers that need to read the DOM 1186 1187var beforeRead = 'beforeRead'; 1188var read = 'read'; 1189var afterRead = 'afterRead'; // pure-logic modifiers 1190 1191var beforeMain = 'beforeMain'; 1192var main = 'main'; 1193var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 1194 1195var beforeWrite = 'beforeWrite'; 1196var write = 'write'; 1197var afterWrite = 'afterWrite'; 1198var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 1199 1200/***/ }), 1201
vendor: 6,597 bytes, lines 1202-1266
1202/***/ "./node_modules/@popperjs/core/lib/index.js": 1203/*!**************************************************!*\ 1204 !*** ./node_modules/@popperjs/core/lib/index.js ***! 1205 \**************************************************/ 1206/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1207 1208"use strict"; 1209__webpack_require__.r(__webpack_exports__); 1210/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1211/* harmony export */ afterMain: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain; }, 1212/* harmony export */ afterRead: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead; }, 1213/* harmony export */ afterWrite: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite; }, 1214/* harmony export */ applyStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles; }, 1215/* harmony export */ arrow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow; }, 1216/* harmony export */ auto: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto; }, 1217/* harmony export */ basePlacements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; }, 1218/* harmony export */ beforeMain: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain; }, 1219/* harmony export */ beforeRead: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead; }, 1220/* harmony export */ beforeWrite: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite; }, 1221/* harmony export */ bottom: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom; }, 1222/* harmony export */ clippingParents: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents; }, 1223/* harmony export */ computeStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles; }, 1224/* harmony export */ createPopper: function() { return /* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper; }, 1225/* harmony export */ createPopperBase: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper; }, 1226/* harmony export */ createPopperLite: function() { return /* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper; }, 1227/* harmony export */ detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }, 1228/* harmony export */ end: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end; }, 1229/* harmony export */ eventListeners: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners; }, 1230/* harmony export */ flip: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip; }, 1231/* harmony export */ hide: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide; }, 1232/* harmony export */ left: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left; }, 1233/* harmony export */ main: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main; }, 1234/* harmony export */ modifierPhases: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases; }, 1235/* harmony export */ offset: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset; }, 1236/* harmony export */ placements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements; }, 1237/* harmony export */ popper: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; }, 1238/* harmony export */ popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator; }, 1239/* harmony export */ popperOffsets: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets; }, 1240/* harmony export */ preventOverflow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow; }, 1241/* harmony export */ read: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read; }, 1242/* harmony export */ reference: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference; }, 1243/* harmony export */ right: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right; }, 1244/* harmony export */ start: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start; }, 1245/* harmony export */ top: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top; }, 1246/* harmony export */ variationPlacements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements; }, 1247/* harmony export */ viewport: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport; }, 1248/* harmony export */ write: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write; } 1249/* harmony export */ }); 1250/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1251/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); 1252/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 1253/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1254/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ "./node_modules/@popperjs/core/lib/popper.js"); 1255/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); 1256 1257 // eslint-disable-next-line import/no-unused-modules 1258 1259 // eslint-disable-next-line import/no-unused-modules 1260 1261 // eslint-disable-next-line import/no-unused-modules 1262 1263 1264 1265/***/ }), 1266
vendor: 3,532 bytes, lines 1267-1363
1267/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": 1268/*!******************************************************************!*\ 1269 !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! 1270 \******************************************************************/ 1271/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1272 1273"use strict"; 1274__webpack_require__.r(__webpack_exports__); 1275/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1276/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1277 1278 // This modifier takes the styles prepared by the `computeStyles` modifier 1279// and applies them to the HTMLElements such as popper and arrow 1280 1281function applyStyles(_ref) { 1282 var state = _ref.state; 1283 Object.keys(state.elements).forEach(function (name) { 1284 var style = state.styles[name] || {}; 1285 var attributes = state.attributes[name] || {}; 1286 var element = state.elements[name]; // arrow is optional + virtual elements 1287 1288 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { 1289 return; 1290 } // Flow doesn't support to extend this property, but it's the most 1291 // effective way to apply styles to an HTMLElement 1292 // $FlowFixMe[cannot-write] 1293 1294 1295 Object.assign(element.style, style); 1296 Object.keys(attributes).forEach(function (name) { 1297 var value = attributes[name]; 1298 1299 if (value === false) { 1300 element.removeAttribute(name); 1301 } else { 1302 element.setAttribute(name, value === true ? '' : value); 1303 } 1304 }); 1305 }); 1306} 1307 1308function effect(_ref2) { 1309 var state = _ref2.state; 1310 var initialStyles = { 1311 popper: { 1312 position: state.options.strategy, 1313 left: '0', 1314 top: '0', 1315 margin: '0' 1316 }, 1317 arrow: { 1318 position: 'absolute' 1319 }, 1320 reference: {} 1321 }; 1322 Object.assign(state.elements.popper.style, initialStyles.popper); 1323 state.styles = initialStyles; 1324 1325 if (state.elements.arrow) { 1326 Object.assign(state.elements.arrow.style, initialStyles.arrow); 1327 } 1328 1329 return function () { 1330 Object.keys(state.elements).forEach(function (name) { 1331 var element = state.elements[name]; 1332 var attributes = state.attributes[name] || {}; 1333 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 1334 1335 var style = styleProperties.reduce(function (style, property) { 1336 style[property] = ''; 1337 return style; 1338 }, {}); // arrow is optional + virtual elements 1339 1340 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { 1341 return; 1342 } 1343 1344 Object.assign(element.style, style); 1345 Object.keys(attributes).forEach(function (attribute) { 1346 element.removeAttribute(attribute); 1347 }); 1348 }); 1349 }; 1350} // eslint-disable-next-line import/no-unused-modules 1351 1352 1353/* harmony default export */ __webpack_exports__["default"] = ({ 1354 name: 'applyStyles', 1355 enabled: true, 1356 phase: 'write', 1357 fn: applyStyles, 1358 effect: effect, 1359 requires: ['computeStyles'] 1360}); 1361 1362/***/ }), 1363
vendor: 5,833 bytes, lines 1364-1473
1364/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js": 1365/*!************************************************************!*\ 1366 !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***! 1367 \************************************************************/ 1368/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1369 1370"use strict"; 1371__webpack_require__.r(__webpack_exports__); 1372/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1373/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 1374/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); 1375/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 1376/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 1377/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); 1378/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); 1379/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); 1380/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1381 1382 1383 1384 1385 1386 1387 1388 1389 // eslint-disable-next-line import/no-unused-modules 1390 1391var toPaddingObject = function toPaddingObject(padding, state) { 1392 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 1393 placement: state.placement 1394 })) : padding; 1395 return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements)); 1396}; 1397 1398function arrow(_ref) { 1399 var _state$modifiersData$; 1400 1401 var state = _ref.state, 1402 name = _ref.name, 1403 options = _ref.options; 1404 var arrowElement = state.elements.arrow; 1405 var popperOffsets = state.modifiersData.popperOffsets; 1406 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement); 1407 var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement); 1408 var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0; 1409 var len = isVertical ? 'height' : 'width'; 1410 1411 if (!arrowElement || !popperOffsets) { 1412 return; 1413 } 1414 1415 var paddingObject = toPaddingObject(options.padding, state); 1416 var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement); 1417 var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left; 1418 var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right; 1419 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 1420 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 1421 var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement); 1422 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 1423 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 1424 // outside of the popper bounds 1425 1426 var min = paddingObject[minProp]; 1427 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 1428 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 1429 var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting... 1430 1431 var axisProp = axis; 1432 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 1433} 1434 1435function effect(_ref2) { 1436 var state = _ref2.state, 1437 options = _ref2.options; 1438 var _options$element = options.element, 1439 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 1440 1441 if (arrowElement == null) { 1442 return; 1443 } // CSS selector 1444 1445 1446 if (typeof arrowElement === 'string') { 1447 arrowElement = state.elements.popper.querySelector(arrowElement); 1448 1449 if (!arrowElement) { 1450 return; 1451 } 1452 } 1453 1454 if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__["default"])(state.elements.popper, arrowElement)) { 1455 return; 1456 } 1457 1458 state.elements.arrow = arrowElement; 1459} // eslint-disable-next-line import/no-unused-modules 1460 1461 1462/* harmony default export */ __webpack_exports__["default"] = ({ 1463 name: 'arrow', 1464 enabled: true, 1465 phase: 'main', 1466 fn: arrow, 1467 effect: effect, 1468 requires: ['popperOffsets'], 1469 requiresIfExists: ['preventOverflow'] 1470}); 1471 1472/***/ }), 1473
vendor: 8,437 bytes, lines 1474-1664
1474/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": 1475/*!********************************************************************!*\ 1476 !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! 1477 \********************************************************************/ 1478/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1479 1480"use strict"; 1481__webpack_require__.r(__webpack_exports__); 1482/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1483/* harmony export */ mapToStyles: function() { return /* binding */ mapToStyles; } 1484/* harmony export */ }); 1485/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1486/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 1487/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1488/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1489/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1490/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1491/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 1492/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 1493 1494 1495 1496 1497 1498 1499 1500 // eslint-disable-next-line import/no-unused-modules 1501 1502var unsetSides = { 1503 top: 'auto', 1504 right: 'auto', 1505 bottom: 'auto', 1506 left: 'auto' 1507}; // Round the offsets to the nearest suitable subpixel based on the DPR. 1508// Zooming can change the DPR, but it seems to report a value that will 1509// cleanly divide the values into the appropriate subpixels. 1510 1511function roundOffsetsByDPR(_ref, win) { 1512 var x = _ref.x, 1513 y = _ref.y; 1514 var dpr = win.devicePixelRatio || 1; 1515 return { 1516 x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0, 1517 y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0 1518 }; 1519} 1520 1521function mapToStyles(_ref2) { 1522 var _Object$assign2; 1523 1524 var popper = _ref2.popper, 1525 popperRect = _ref2.popperRect, 1526 placement = _ref2.placement, 1527 variation = _ref2.variation, 1528 offsets = _ref2.offsets, 1529 position = _ref2.position, 1530 gpuAcceleration = _ref2.gpuAcceleration, 1531 adaptive = _ref2.adaptive, 1532 roundOffsets = _ref2.roundOffsets, 1533 isFixed = _ref2.isFixed; 1534 var _offsets$x = offsets.x, 1535 x = _offsets$x === void 0 ? 0 : _offsets$x, 1536 _offsets$y = offsets.y, 1537 y = _offsets$y === void 0 ? 0 : _offsets$y; 1538 1539 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 1540 x: x, 1541 y: y 1542 }) : { 1543 x: x, 1544 y: y 1545 }; 1546 1547 x = _ref3.x; 1548 y = _ref3.y; 1549 var hasX = offsets.hasOwnProperty('x'); 1550 var hasY = offsets.hasOwnProperty('y'); 1551 var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left; 1552 var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; 1553 var win = window; 1554 1555 if (adaptive) { 1556 var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper); 1557 var heightProp = 'clientHeight'; 1558 var widthProp = 'clientWidth'; 1559 1560 if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) { 1561 offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper); 1562 1563 if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') { 1564 heightProp = 'scrollHeight'; 1565 widthProp = 'scrollWidth'; 1566 } 1567 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 1568 1569 1570 offsetParent = offsetParent; 1571 1572 if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { 1573 sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom; 1574 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] 1575 offsetParent[heightProp]; 1576 y -= offsetY - popperRect.height; 1577 y *= gpuAcceleration ? 1 : -1; 1578 } 1579 1580 if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { 1581 sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right; 1582 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] 1583 offsetParent[widthProp]; 1584 x -= offsetX - popperRect.width; 1585 x *= gpuAcceleration ? 1 : -1; 1586 } 1587 } 1588 1589 var commonStyles = Object.assign({ 1590 position: position 1591 }, adaptive && unsetSides); 1592 1593 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 1594 x: x, 1595 y: y 1596 }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) : { 1597 x: x, 1598 y: y 1599 }; 1600 1601 x = _ref4.x; 1602 y = _ref4.y; 1603 1604 if (gpuAcceleration) { 1605 var _Object$assign; 1606 1607 return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); 1608 } 1609 1610 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 1611} 1612 1613function computeStyles(_ref5) { 1614 var state = _ref5.state, 1615 options = _ref5.options; 1616 var _options$gpuAccelerat = options.gpuAcceleration, 1617 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 1618 _options$adaptive = options.adaptive, 1619 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 1620 _options$roundOffsets = options.roundOffsets, 1621 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 1622 var commonStyles = { 1623 placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement), 1624 variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement), 1625 popper: state.elements.popper, 1626 popperRect: state.rects.popper, 1627 gpuAcceleration: gpuAcceleration, 1628 isFixed: state.options.strategy === 'fixed' 1629 }; 1630 1631 if (state.modifiersData.popperOffsets != null) { 1632 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 1633 offsets: state.modifiersData.popperOffsets, 1634 position: state.options.strategy, 1635 adaptive: adaptive, 1636 roundOffsets: roundOffsets 1637 }))); 1638 } 1639 1640 if (state.modifiersData.arrow != null) { 1641 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 1642 offsets: state.modifiersData.arrow, 1643 position: 'absolute', 1644 adaptive: false, 1645 roundOffsets: roundOffsets 1646 }))); 1647 } 1648 1649 state.attributes.popper = Object.assign({}, state.attributes.popper, { 1650 'data-popper-placement': state.placement 1651 }); 1652} // eslint-disable-next-line import/no-unused-modules 1653 1654 1655/* harmony default export */ __webpack_exports__["default"] = ({ 1656 name: 'computeStyles', 1657 enabled: true, 1658 phase: 'beforeWrite', 1659 fn: computeStyles, 1660 data: {} 1661}); 1662 1663/***/ }), 1664
vendor: 2,033 bytes, lines 1665-1725
1665/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": 1666/*!*********************************************************************!*\ 1667 !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! 1668 \*********************************************************************/ 1669/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1670 1671"use strict"; 1672__webpack_require__.r(__webpack_exports__); 1673/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1674 // eslint-disable-next-line import/no-unused-modules 1675 1676var passive = { 1677 passive: true 1678}; 1679 1680function effect(_ref) { 1681 var state = _ref.state, 1682 instance = _ref.instance, 1683 options = _ref.options; 1684 var _options$scroll = options.scroll, 1685 scroll = _options$scroll === void 0 ? true : _options$scroll, 1686 _options$resize = options.resize, 1687 resize = _options$resize === void 0 ? true : _options$resize; 1688 var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper); 1689 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 1690 1691 if (scroll) { 1692 scrollParents.forEach(function (scrollParent) { 1693 scrollParent.addEventListener('scroll', instance.update, passive); 1694 }); 1695 } 1696 1697 if (resize) { 1698 window.addEventListener('resize', instance.update, passive); 1699 } 1700 1701 return function () { 1702 if (scroll) { 1703 scrollParents.forEach(function (scrollParent) { 1704 scrollParent.removeEventListener('scroll', instance.update, passive); 1705 }); 1706 } 1707 1708 if (resize) { 1709 window.removeEventListener('resize', instance.update, passive); 1710 } 1711 }; 1712} // eslint-disable-next-line import/no-unused-modules 1713 1714 1715/* harmony default export */ __webpack_exports__["default"] = ({ 1716 name: 'eventListeners', 1717 enabled: true, 1718 phase: 'write', 1719 fn: function fn() {}, 1720 effect: effect, 1721 data: {} 1722}); 1723 1724/***/ }), 1725
vendor: 7,381 bytes, lines 1726-1890
1726/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js": 1727/*!***********************************************************!*\ 1728 !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***! 1729 \***********************************************************/ 1730/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1731 1732"use strict"; 1733__webpack_require__.r(__webpack_exports__); 1734/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js"); 1735/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1736/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js"); 1737/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1738/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js"); 1739/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1740/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 1741 1742 1743 1744 1745 1746 1747 // eslint-disable-next-line import/no-unused-modules 1748 1749function getExpandedFallbackPlacements(placement) { 1750 if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) { 1751 return []; 1752 } 1753 1754 var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement); 1755 return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)]; 1756} 1757 1758function flip(_ref) { 1759 var state = _ref.state, 1760 options = _ref.options, 1761 name = _ref.name; 1762 1763 if (state.modifiersData[name]._skip) { 1764 return; 1765 } 1766 1767 var _options$mainAxis = options.mainAxis, 1768 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 1769 _options$altAxis = options.altAxis, 1770 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 1771 specifiedFallbackPlacements = options.fallbackPlacements, 1772 padding = options.padding, 1773 boundary = options.boundary, 1774 rootBoundary = options.rootBoundary, 1775 altBoundary = options.altBoundary, 1776 _options$flipVariatio = options.flipVariations, 1777 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 1778 allowedAutoPlacements = options.allowedAutoPlacements; 1779 var preferredPlacement = state.options.placement; 1780 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement); 1781 var isBasePlacement = basePlacement === preferredPlacement; 1782 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 1783 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 1784 return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, { 1785 placement: placement, 1786 boundary: boundary, 1787 rootBoundary: rootBoundary, 1788 padding: padding, 1789 flipVariations: flipVariations, 1790 allowedAutoPlacements: allowedAutoPlacements 1791 }) : placement); 1792 }, []); 1793 var referenceRect = state.rects.reference; 1794 var popperRect = state.rects.popper; 1795 var checksMap = new Map(); 1796 var makeFallbackChecks = true; 1797 var firstFittingPlacement = placements[0]; 1798 1799 for (var i = 0; i < placements.length; i++) { 1800 var placement = placements[i]; 1801 1802 var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); 1803 1804 var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start; 1805 var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0; 1806 var len = isVertical ? 'width' : 'height'; 1807 var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, { 1808 placement: placement, 1809 boundary: boundary, 1810 rootBoundary: rootBoundary, 1811 altBoundary: altBoundary, 1812 padding: padding 1813 }); 1814 var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; 1815 1816 if (referenceRect[len] > popperRect[len]) { 1817 mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); 1818 } 1819 1820 var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); 1821 var checks = []; 1822 1823 if (checkMainAxis) { 1824 checks.push(overflow[_basePlacement] <= 0); 1825 } 1826 1827 if (checkAltAxis) { 1828 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 1829 } 1830 1831 if (checks.every(function (check) { 1832 return check; 1833 })) { 1834 firstFittingPlacement = placement; 1835 makeFallbackChecks = false; 1836 break; 1837 } 1838 1839 checksMap.set(placement, checks); 1840 } 1841 1842 if (makeFallbackChecks) { 1843 // `2` may be desired in some cases â research later 1844 var numberOfChecks = flipVariations ? 3 : 1; 1845 1846 var _loop = function _loop(_i) { 1847 var fittingPlacement = placements.find(function (placement) { 1848 var checks = checksMap.get(placement); 1849 1850 if (checks) { 1851 return checks.slice(0, _i).every(function (check) { 1852 return check; 1853 }); 1854 } 1855 }); 1856 1857 if (fittingPlacement) { 1858 firstFittingPlacement = fittingPlacement; 1859 return "break"; 1860 } 1861 }; 1862 1863 for (var _i = numberOfChecks; _i > 0; _i--) { 1864 var _ret = _loop(_i); 1865 1866 if (_ret === "break") break; 1867 } 1868 } 1869 1870 if (state.placement !== firstFittingPlacement) { 1871 state.modifiersData[name]._skip = true; 1872 state.placement = firstFittingPlacement; 1873 state.reset = true; 1874 } 1875} // eslint-disable-next-line import/no-unused-modules 1876 1877 1878/* harmony default export */ __webpack_exports__["default"] = ({ 1879 name: 'flip', 1880 enabled: true, 1881 phase: 'main', 1882 fn: flip, 1883 requiresIfExists: ['offset'], 1884 data: { 1885 _skip: false 1886 } 1887}); 1888 1889/***/ }), 1890
vendor: 2,917 bytes, lines 1891-1964
1891/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js": 1892/*!***********************************************************!*\ 1893 !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***! 1894 \***********************************************************/ 1895/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1896 1897"use strict"; 1898__webpack_require__.r(__webpack_exports__); 1899/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1900/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1901 1902 1903 1904function getSideOffsets(overflow, rect, preventedOffsets) { 1905 if (preventedOffsets === void 0) { 1906 preventedOffsets = { 1907 x: 0, 1908 y: 0 1909 }; 1910 } 1911 1912 return { 1913 top: overflow.top - rect.height - preventedOffsets.y, 1914 right: overflow.right - rect.width + preventedOffsets.x, 1915 bottom: overflow.bottom - rect.height + preventedOffsets.y, 1916 left: overflow.left - rect.width - preventedOffsets.x 1917 }; 1918} 1919 1920function isAnySideFullyClipped(overflow) { 1921 return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) { 1922 return overflow[side] >= 0; 1923 }); 1924} 1925 1926function hide(_ref) { 1927 var state = _ref.state, 1928 name = _ref.name; 1929 var referenceRect = state.rects.reference; 1930 var popperRect = state.rects.popper; 1931 var preventedOffsets = state.modifiersData.preventOverflow; 1932 var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { 1933 elementContext: 'reference' 1934 }); 1935 var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { 1936 altBoundary: true 1937 }); 1938 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 1939 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 1940 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 1941 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 1942 state.modifiersData[name] = { 1943 referenceClippingOffsets: referenceClippingOffsets, 1944 popperEscapeOffsets: popperEscapeOffsets, 1945 isReferenceHidden: isReferenceHidden, 1946 hasPopperEscaped: hasPopperEscaped 1947 }; 1948 state.attributes.popper = Object.assign({}, state.attributes.popper, { 1949 'data-popper-reference-hidden': isReferenceHidden, 1950 'data-popper-escaped': hasPopperEscaped 1951 }); 1952} // eslint-disable-next-line import/no-unused-modules 1953 1954 1955/* harmony default export */ __webpack_exports__["default"] = ({ 1956 name: 'hide', 1957 enabled: true, 1958 phase: 'main', 1959 requiresIfExists: ['preventOverflow'], 1960 fn: hide 1961}); 1962 1963/***/ }), 1964
vendor: 3,279 bytes, lines 1965-2004
1965/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js": 1966/*!************************************************************!*\ 1967 !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***! 1968 \************************************************************/ 1969/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 1970 1971"use strict"; 1972__webpack_require__.r(__webpack_exports__); 1973/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1974/* harmony export */ applyStyles: function() { return /* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }, 1975/* harmony export */ arrow: function() { return /* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }, 1976/* harmony export */ computeStyles: function() { return /* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }, 1977/* harmony export */ eventListeners: function() { return /* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }, 1978/* harmony export */ flip: function() { return /* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }, 1979/* harmony export */ hide: function() { return /* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }, 1980/* harmony export */ offset: function() { return /* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }, 1981/* harmony export */ popperOffsets: function() { return /* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }, 1982/* harmony export */ preventOverflow: function() { return /* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]; } 1983/* harmony export */ }); 1984/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 1985/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); 1986/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 1987/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 1988/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); 1989/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); 1990/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); 1991/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 1992/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003/***/ }), 2004
vendor: 2,760 bytes, lines 2005-2074
2005/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js": 2006/*!*************************************************************!*\ 2007 !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***! 2008 \*************************************************************/ 2009/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2010 2011"use strict"; 2012__webpack_require__.r(__webpack_exports__); 2013/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2014/* harmony export */ distanceAndSkiddingToXY: function() { return /* binding */ distanceAndSkiddingToXY; } 2015/* harmony export */ }); 2016/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2017/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2018 2019 // eslint-disable-next-line import/no-unused-modules 2020 2021function distanceAndSkiddingToXY(placement, rects, offset) { 2022 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); 2023 var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1; 2024 2025 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 2026 placement: placement 2027 })) : offset, 2028 skidding = _ref[0], 2029 distance = _ref[1]; 2030 2031 skidding = skidding || 0; 2032 distance = (distance || 0) * invertDistance; 2033 return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? { 2034 x: distance, 2035 y: skidding 2036 } : { 2037 x: skidding, 2038 y: distance 2039 }; 2040} 2041 2042function offset(_ref2) { 2043 var state = _ref2.state, 2044 options = _ref2.options, 2045 name = _ref2.name; 2046 var _options$offset = options.offset, 2047 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 2048 var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) { 2049 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 2050 return acc; 2051 }, {}); 2052 var _data$state$placement = data[state.placement], 2053 x = _data$state$placement.x, 2054 y = _data$state$placement.y; 2055 2056 if (state.modifiersData.popperOffsets != null) { 2057 state.modifiersData.popperOffsets.x += x; 2058 state.modifiersData.popperOffsets.y += y; 2059 } 2060 2061 state.modifiersData[name] = data; 2062} // eslint-disable-next-line import/no-unused-modules 2063 2064 2065/* harmony default export */ __webpack_exports__["default"] = ({ 2066 name: 'offset', 2067 enabled: true, 2068 phase: 'main', 2069 requires: ['popperOffsets'], 2070 fn: offset 2071}); 2072 2073/***/ }), 2074
vendor: 1,398 bytes, lines 2075-2111
2075/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": 2076/*!********************************************************************!*\ 2077 !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! 2078 \********************************************************************/ 2079/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2080 2081"use strict"; 2082__webpack_require__.r(__webpack_exports__); 2083/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); 2084 2085 2086function popperOffsets(_ref) { 2087 var state = _ref.state, 2088 name = _ref.name; 2089 // Offsets are the actual position the popper needs to have to be 2090 // properly positioned near its reference element 2091 // This is the most basic placement, and will be adjusted by 2092 // the modifiers in the next step 2093 state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 2094 reference: state.rects.reference, 2095 element: state.rects.popper, 2096 strategy: 'absolute', 2097 placement: state.placement 2098 }); 2099} // eslint-disable-next-line import/no-unused-modules 2100 2101 2102/* harmony default export */ __webpack_exports__["default"] = ({ 2103 name: 'popperOffsets', 2104 enabled: true, 2105 phase: 'read', 2106 fn: popperOffsets, 2107 data: {} 2108}); 2109 2110/***/ }), 2111
vendor: 9,747 bytes, lines 2112-2275
2112/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js": 2113/*!**********************************************************************!*\ 2114 !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***! 2115 \**********************************************************************/ 2116/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2117 2118"use strict"; 2119__webpack_require__.r(__webpack_exports__); 2120/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2121/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2122/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 2123/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js"); 2124/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); 2125/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 2126/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 2127/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2128/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2129/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); 2130/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143function preventOverflow(_ref) { 2144 var state = _ref.state, 2145 options = _ref.options, 2146 name = _ref.name; 2147 var _options$mainAxis = options.mainAxis, 2148 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 2149 _options$altAxis = options.altAxis, 2150 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 2151 boundary = options.boundary, 2152 rootBoundary = options.rootBoundary, 2153 altBoundary = options.altBoundary, 2154 padding = options.padding, 2155 _options$tether = options.tether, 2156 tether = _options$tether === void 0 ? true : _options$tether, 2157 _options$tetherOffset = options.tetherOffset, 2158 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 2159 var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, { 2160 boundary: boundary, 2161 rootBoundary: rootBoundary, 2162 padding: padding, 2163 altBoundary: altBoundary 2164 }); 2165 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement); 2166 var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement); 2167 var isBasePlacement = !variation; 2168 var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement); 2169 var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis); 2170 var popperOffsets = state.modifiersData.popperOffsets; 2171 var referenceRect = state.rects.reference; 2172 var popperRect = state.rects.popper; 2173 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 2174 placement: state.placement 2175 })) : tetherOffset; 2176 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 2177 mainAxis: tetherOffsetValue, 2178 altAxis: tetherOffsetValue 2179 } : Object.assign({ 2180 mainAxis: 0, 2181 altAxis: 0 2182 }, tetherOffsetValue); 2183 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 2184 var data = { 2185 x: 0, 2186 y: 0 2187 }; 2188 2189 if (!popperOffsets) { 2190 return; 2191 } 2192 2193 if (checkMainAxis) { 2194 var _offsetModifierState$; 2195 2196 var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; 2197 var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; 2198 var len = mainAxis === 'y' ? 'height' : 'width'; 2199 var offset = popperOffsets[mainAxis]; 2200 var min = offset + overflow[mainSide]; 2201 var max = offset - overflow[altSide]; 2202 var additive = tether ? -popperRect[len] / 2 : 0; 2203 var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len]; 2204 var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 2205 // outside the reference bounds 2206 2207 var arrowElement = state.elements.arrow; 2208 var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : { 2209 width: 0, 2210 height: 0 2211 }; 2212 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])(); 2213 var arrowPaddingMin = arrowPaddingObject[mainSide]; 2214 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 2215 // to include its full size in the calculation. If the reference is small 2216 // and near the edge of a boundary, the popper can overflow even if the 2217 // reference is not overflowing as well (e.g. virtual elements with no 2218 // width or height) 2219 2220 var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]); 2221 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 2222 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 2223 var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow); 2224 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 2225 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 2226 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 2227 var tetherMax = offset + maxOffset - offsetModifierValue; 2228 var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max); 2229 popperOffsets[mainAxis] = preventedOffset; 2230 data[mainAxis] = preventedOffset - offset; 2231 } 2232 2233 if (checkAltAxis) { 2234 var _offsetModifierState$2; 2235 2236 var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; 2237 2238 var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; 2239 2240 var _offset = popperOffsets[altAxis]; 2241 2242 var _len = altAxis === 'y' ? 'height' : 'width'; 2243 2244 var _min = _offset + overflow[_mainSide]; 2245 2246 var _max = _offset - overflow[_altSide]; 2247 2248 var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1; 2249 2250 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 2251 2252 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 2253 2254 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 2255 2256 var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 2257 2258 popperOffsets[altAxis] = _preventedOffset; 2259 data[altAxis] = _preventedOffset - _offset; 2260 } 2261 2262 state.modifiersData[name] = data; 2263} // eslint-disable-next-line import/no-unused-modules 2264 2265 2266/* harmony default export */ __webpack_exports__["default"] = ({ 2267 name: 'preventOverflow', 2268 enabled: true, 2269 phase: 'main', 2270 fn: preventOverflow, 2271 requiresIfExists: ['offset'] 2272}); 2273 2274/***/ }), 2275
vendor: 2,629 bytes, lines 2276-2309
2276/***/ "./node_modules/@popperjs/core/lib/popper-lite.js": 2277/*!********************************************************!*\ 2278 !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! 2279 \********************************************************/ 2280/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2281 2282"use strict"; 2283__webpack_require__.r(__webpack_exports__); 2284/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2285/* harmony export */ createPopper: function() { return /* binding */ createPopper; }, 2286/* harmony export */ defaultModifiers: function() { return /* binding */ defaultModifiers; }, 2287/* harmony export */ detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }, 2288/* harmony export */ popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator; } 2289/* harmony export */ }); 2290/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 2291/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2292/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2293/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2294/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2295/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2296 2297 2298 2299 2300 2301var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]]; 2302var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({ 2303 defaultModifiers: defaultModifiers 2304}); // eslint-disable-next-line import/no-unused-modules 2305 2306 2307 2308/***/ }), 2309
vendor: 5,718 bytes, lines 2310-2369
2310/***/ "./node_modules/@popperjs/core/lib/popper.js": 2311/*!***************************************************!*\ 2312 !*** ./node_modules/@popperjs/core/lib/popper.js ***! 2313 \***************************************************/ 2314/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2315 2316"use strict"; 2317__webpack_require__.r(__webpack_exports__); 2318/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2319/* harmony export */ applyStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles; }, 2320/* harmony export */ arrow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow; }, 2321/* harmony export */ computeStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles; }, 2322/* harmony export */ createPopper: function() { return /* binding */ createPopper; }, 2323/* harmony export */ createPopperLite: function() { return /* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper; }, 2324/* harmony export */ defaultModifiers: function() { return /* binding */ defaultModifiers; }, 2325/* harmony export */ detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }, 2326/* harmony export */ eventListeners: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners; }, 2327/* harmony export */ flip: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip; }, 2328/* harmony export */ hide: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide; }, 2329/* harmony export */ offset: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset; }, 2330/* harmony export */ popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator; }, 2331/* harmony export */ popperOffsets: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets; }, 2332/* harmony export */ preventOverflow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow; } 2333/* harmony export */ }); 2334/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 2335/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2336/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2337/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2338/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2339/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2340/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); 2341/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); 2342/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); 2343/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); 2344/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); 2345/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); 2346/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]]; 2358var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({ 2359 defaultModifiers: defaultModifiers 2360}); // eslint-disable-next-line import/no-unused-modules 2361 2362 // eslint-disable-next-line import/no-unused-modules 2363 2364 // eslint-disable-next-line import/no-unused-modules 2365 2366 2367 2368/***/ }), 2369
vendor: 3,116 bytes, lines 2370-2430
2370/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js": 2371/*!***********************************************************************!*\ 2372 !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***! 2373 \***********************************************************************/ 2374/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2375 2376"use strict"; 2377__webpack_require__.r(__webpack_exports__); 2378/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2379/* harmony export */ "default": function() { return /* binding */ computeAutoPlacement; } 2380/* harmony export */ }); 2381/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2382/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2383/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2384/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2385 2386 2387 2388 2389function computeAutoPlacement(state, options) { 2390 if (options === void 0) { 2391 options = {}; 2392 } 2393 2394 var _options = options, 2395 placement = _options.placement, 2396 boundary = _options.boundary, 2397 rootBoundary = _options.rootBoundary, 2398 padding = _options.padding, 2399 flipVariations = _options.flipVariations, 2400 _options$allowedAutoP = _options.allowedAutoPlacements, 2401 allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP; 2402 var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement); 2403 var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) { 2404 return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation; 2405 }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; 2406 var allowedPlacements = placements.filter(function (placement) { 2407 return allowedAutoPlacements.indexOf(placement) >= 0; 2408 }); 2409 2410 if (allowedPlacements.length === 0) { 2411 allowedPlacements = placements; 2412 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 2413 2414 2415 var overflows = allowedPlacements.reduce(function (acc, placement) { 2416 acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, { 2417 placement: placement, 2418 boundary: boundary, 2419 rootBoundary: rootBoundary, 2420 padding: padding 2421 })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)]; 2422 return acc; 2423 }, {}); 2424 return Object.keys(overflows).sort(function (a, b) { 2425 return overflows[a] - overflows[b]; 2426 }); 2427} 2428 2429/***/ }), 2430
vendor: 3,214 bytes, lines 2431-2518
2431/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": 2432/*!*****************************************************************!*\ 2433 !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! 2434 \*****************************************************************/ 2435/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2436 2437"use strict"; 2438__webpack_require__.r(__webpack_exports__); 2439/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2440/* harmony export */ "default": function() { return /* binding */ computeOffsets; } 2441/* harmony export */ }); 2442/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2443/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2444/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 2445/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2446 2447 2448 2449 2450function computeOffsets(_ref) { 2451 var reference = _ref.reference, 2452 element = _ref.element, 2453 placement = _ref.placement; 2454 var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null; 2455 var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null; 2456 var commonX = reference.x + reference.width / 2 - element.width / 2; 2457 var commonY = reference.y + reference.height / 2 - element.height / 2; 2458 var offsets; 2459 2460 switch (basePlacement) { 2461 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top: 2462 offsets = { 2463 x: commonX, 2464 y: reference.y - element.height 2465 }; 2466 break; 2467 2468 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom: 2469 offsets = { 2470 x: commonX, 2471 y: reference.y + reference.height 2472 }; 2473 break; 2474 2475 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right: 2476 offsets = { 2477 x: reference.x + reference.width, 2478 y: commonY 2479 }; 2480 break; 2481 2482 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left: 2483 offsets = { 2484 x: reference.x - element.width, 2485 y: commonY 2486 }; 2487 break; 2488 2489 default: 2490 offsets = { 2491 x: reference.x, 2492 y: reference.y 2493 }; 2494 } 2495 2496 var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null; 2497 2498 if (mainAxis != null) { 2499 var len = mainAxis === 'y' ? 'height' : 'width'; 2500 2501 switch (variation) { 2502 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start: 2503 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 2504 break; 2505 2506 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end: 2507 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 2508 break; 2509 2510 default: 2511 } 2512 } 2513 2514 return offsets; 2515} 2516 2517/***/ }), 2518
vendor: 870 bytes, lines 2519-2547
2519/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": 2520/*!***********************************************************!*\ 2521 !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! 2522 \***********************************************************/ 2523/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2524 2525"use strict"; 2526__webpack_require__.r(__webpack_exports__); 2527/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2528/* harmony export */ "default": function() { return /* binding */ debounce; } 2529/* harmony export */ }); 2530function debounce(fn) { 2531 var pending; 2532 return function () { 2533 if (!pending) { 2534 pending = new Promise(function (resolve) { 2535 Promise.resolve().then(function () { 2536 pending = undefined; 2537 resolve(fn()); 2538 }); 2539 }); 2540 } 2541 2542 return pending; 2543 }; 2544} 2545 2546/***/ }), 2547
vendor: 6,246 bytes, lines 2548-2635
2548/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": 2549/*!*****************************************************************!*\ 2550 !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! 2551 \*****************************************************************/ 2552/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2553 2554"use strict"; 2555__webpack_require__.r(__webpack_exports__); 2556/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2557/* harmony export */ "default": function() { return /* binding */ detectOverflow; } 2558/* harmony export */ }); 2559/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js"); 2560/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 2561/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 2562/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); 2563/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); 2564/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2565/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 2566/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); 2567/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); 2568 2569 2570 2571 2572 2573 2574 2575 2576 // eslint-disable-next-line import/no-unused-modules 2577 2578function detectOverflow(state, options) { 2579 if (options === void 0) { 2580 options = {}; 2581 } 2582 2583 var _options = options, 2584 _options$placement = _options.placement, 2585 placement = _options$placement === void 0 ? state.placement : _options$placement, 2586 _options$strategy = _options.strategy, 2587 strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, 2588 _options$boundary = _options.boundary, 2589 boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary, 2590 _options$rootBoundary = _options.rootBoundary, 2591 rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary, 2592 _options$elementConte = _options.elementContext, 2593 elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte, 2594 _options$altBoundary = _options.altBoundary, 2595 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 2596 _options$padding = _options.padding, 2597 padding = _options$padding === void 0 ? 0 : _options$padding; 2598 var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements)); 2599 var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; 2600 var popperRect = state.rects.popper; 2601 var element = state.elements[altBoundary ? altContext : elementContext]; 2602 var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary, strategy); 2603 var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference); 2604 var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({ 2605 reference: referenceClientRect, 2606 element: popperRect, 2607 strategy: 'absolute', 2608 placement: placement 2609 }); 2610 var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets)); 2611 var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 2612 // 0 or negative = within the clipping rect 2613 2614 var overflowOffsets = { 2615 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 2616 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 2617 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 2618 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 2619 }; 2620 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 2621 2622 if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) { 2623 var offset = offsetData[placement]; 2624 Object.keys(overflowOffsets).forEach(function (key) { 2625 var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1; 2626 var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x'; 2627 overflowOffsets[key] += offset[axis] * multiply; 2628 }); 2629 } 2630 2631 return overflowOffsets; 2632} 2633 2634/***/ }), 2635
vendor: 762 bytes, lines 2636-2655
2636/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": 2637/*!******************************************************************!*\ 2638 !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! 2639 \******************************************************************/ 2640/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2641 2642"use strict"; 2643__webpack_require__.r(__webpack_exports__); 2644/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2645/* harmony export */ "default": function() { return /* binding */ expandToHashMap; } 2646/* harmony export */ }); 2647function expandToHashMap(value, keys) { 2648 return keys.reduce(function (hashMap, key) { 2649 hashMap[key] = value; 2650 return hashMap; 2651 }, {}); 2652} 2653 2654/***/ }), 2655
vendor: 657 bytes, lines 2656-2672
2656/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js": 2657/*!*************************************************************!*\ 2658 !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***! 2659 \*************************************************************/ 2660/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2661 2662"use strict"; 2663__webpack_require__.r(__webpack_exports__); 2664/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2665/* harmony export */ "default": function() { return /* binding */ getAltAxis; } 2666/* harmony export */ }); 2667function getAltAxis(axis) { 2668 return axis === 'x' ? 'y' : 'x'; 2669} 2670 2671/***/ }), 2672
vendor: 698 bytes, lines 2673-2690
2673/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": 2674/*!*******************************************************************!*\ 2675 !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! 2676 \*******************************************************************/ 2677/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2678 2679"use strict"; 2680__webpack_require__.r(__webpack_exports__); 2681/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2682/* harmony export */ "default": function() { return /* binding */ getBasePlacement; } 2683/* harmony export */ }); 2684 2685function getBasePlacement(placement) { 2686 return placement.split('-')[0]; 2687} 2688 2689/***/ }), 2690
vendor: 735 bytes, lines 2691-2712
2691/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": 2692/*!*********************************************************************!*\ 2693 !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! 2694 \*********************************************************************/ 2695/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2696 2697"use strict"; 2698__webpack_require__.r(__webpack_exports__); 2699/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2700/* harmony export */ "default": function() { return /* binding */ getFreshSideObject; } 2701/* harmony export */ }); 2702function getFreshSideObject() { 2703 return { 2704 top: 0, 2705 right: 0, 2706 bottom: 0, 2707 left: 0 2708 }; 2709} 2710 2711/***/ }), 2712
vendor: 775 bytes, lines 2713-2729
2713/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": 2714/*!***************************************************************************!*\ 2715 !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! 2716 \***************************************************************************/ 2717/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2718 2719"use strict"; 2720__webpack_require__.r(__webpack_exports__); 2721/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2722/* harmony export */ "default": function() { return /* binding */ getMainAxisFromPlacement; } 2723/* harmony export */ }); 2724function getMainAxisFromPlacement(placement) { 2725 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 2726} 2727 2728/***/ }), 2729
vendor: 876 bytes, lines 2730-2754
2730/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js": 2731/*!***********************************************************************!*\ 2732 !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***! 2733 \***********************************************************************/ 2734/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2735 2736"use strict"; 2737__webpack_require__.r(__webpack_exports__); 2738/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2739/* harmony export */ "default": function() { return /* binding */ getOppositePlacement; } 2740/* harmony export */ }); 2741var hash = { 2742 left: 'right', 2743 right: 'left', 2744 bottom: 'top', 2745 top: 'bottom' 2746}; 2747function getOppositePlacement(placement) { 2748 return placement.replace(/left|right|bottom|top/g, function (matched) { 2749 return hash[matched]; 2750 }); 2751} 2752 2753/***/ }), 2754
vendor: 882 bytes, lines 2755-2777
2755/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js": 2756/*!********************************************************************************!*\ 2757 !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***! 2758 \********************************************************************************/ 2759/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2760 2761"use strict"; 2762__webpack_require__.r(__webpack_exports__); 2763/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2764/* harmony export */ "default": function() { return /* binding */ getOppositeVariationPlacement; } 2765/* harmony export */ }); 2766var hash = { 2767 start: 'end', 2768 end: 'start' 2769}; 2770function getOppositeVariationPlacement(placement) { 2771 return placement.replace(/start|end/g, function (matched) { 2772 return hash[matched]; 2773 }); 2774} 2775 2776/***/ }), 2777
vendor: 673 bytes, lines 2778-2794
2778/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": 2779/*!***************************************************************!*\ 2780 !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! 2781 \***************************************************************/ 2782/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2783 2784"use strict"; 2785__webpack_require__.r(__webpack_exports__); 2786/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2787/* harmony export */ "default": function() { return /* binding */ getVariation; } 2788/* harmony export */ }); 2789function getVariation(placement) { 2790 return placement.split('-')[1]; 2791} 2792 2793/***/ }), 2794
vendor: 763 bytes, lines 2795-2813
2795/***/ "./node_modules/@popperjs/core/lib/utils/math.js": 2796/*!*******************************************************!*\ 2797 !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! 2798 \*******************************************************/ 2799/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2800 2801"use strict"; 2802__webpack_require__.r(__webpack_exports__); 2803/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2804/* harmony export */ max: function() { return /* binding */ max; }, 2805/* harmony export */ min: function() { return /* binding */ min; }, 2806/* harmony export */ round: function() { return /* binding */ round; } 2807/* harmony export */ }); 2808var max = Math.max; 2809var min = Math.min; 2810var round = Math.round; 2811 2812/***/ }), 2813
vendor: 1,107 bytes, lines 2814-2841
2814/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": 2815/*!**************************************************************!*\ 2816 !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! 2817 \**************************************************************/ 2818/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2819 2820"use strict"; 2821__webpack_require__.r(__webpack_exports__); 2822/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2823/* harmony export */ "default": function() { return /* binding */ mergeByName; } 2824/* harmony export */ }); 2825function mergeByName(modifiers) { 2826 var merged = modifiers.reduce(function (merged, current) { 2827 var existing = merged[current.name]; 2828 merged[current.name] = existing ? Object.assign({}, existing, current, { 2829 options: Object.assign({}, existing.options, current.options), 2830 data: Object.assign({}, existing.data, current.data) 2831 }) : current; 2832 return merged; 2833 }, {}); // IE11 does not support Object.values 2834 2835 return Object.keys(merged).map(function (key) { 2836 return merged[key]; 2837 }); 2838} 2839 2840/***/ }), 2841
vendor: 989 bytes, lines 2842-2860
2842/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": 2843/*!*********************************************************************!*\ 2844 !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! 2845 \*********************************************************************/ 2846/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2847 2848"use strict"; 2849__webpack_require__.r(__webpack_exports__); 2850/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2851/* harmony export */ "default": function() { return /* binding */ mergePaddingObject; } 2852/* harmony export */ }); 2853/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); 2854 2855function mergePaddingObject(paddingObject) { 2856 return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject); 2857} 2858 2859/***/ }), 2860
vendor: 1,984 bytes, lines 2861-2919
2861/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": 2862/*!*****************************************************************!*\ 2863 !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! 2864 \*****************************************************************/ 2865/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2866 2867"use strict"; 2868__webpack_require__.r(__webpack_exports__); 2869/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2870/* harmony export */ "default": function() { return /* binding */ orderModifiers; } 2871/* harmony export */ }); 2872/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2873 // source: https://stackoverflow.com/questions/49875255 2874 2875function order(modifiers) { 2876 var map = new Map(); 2877 var visited = new Set(); 2878 var result = []; 2879 modifiers.forEach(function (modifier) { 2880 map.set(modifier.name, modifier); 2881 }); // On visiting object, check for its dependencies and visit them recursively 2882 2883 function sort(modifier) { 2884 visited.add(modifier.name); 2885 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 2886 requires.forEach(function (dep) { 2887 if (!visited.has(dep)) { 2888 var depModifier = map.get(dep); 2889 2890 if (depModifier) { 2891 sort(depModifier); 2892 } 2893 } 2894 }); 2895 result.push(modifier); 2896 } 2897 2898 modifiers.forEach(function (modifier) { 2899 if (!visited.has(modifier.name)) { 2900 // check for visited object 2901 sort(modifier); 2902 } 2903 }); 2904 return result; 2905} 2906 2907function orderModifiers(modifiers) { 2908 // order based on dependencies 2909 var orderedModifiers = order(modifiers); // order based on phase 2910 2911 return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) { 2912 return acc.concat(orderedModifiers.filter(function (modifier) { 2913 return modifier.phase === phase; 2914 })); 2915 }, []); 2916} 2917 2918/***/ }), 2919
vendor: 799 bytes, lines 2920-2941
2920/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": 2921/*!*******************************************************************!*\ 2922 !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! 2923 \*******************************************************************/ 2924/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2925 2926"use strict"; 2927__webpack_require__.r(__webpack_exports__); 2928/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2929/* harmony export */ "default": function() { return /* binding */ rectToClientRect; } 2930/* harmony export */ }); 2931function rectToClientRect(rect) { 2932 return Object.assign({}, rect, { 2933 left: rect.x, 2934 top: rect.y, 2935 right: rect.x + rect.width, 2936 bottom: rect.y + rect.height 2937 }); 2938} 2939 2940/***/ }), 2941
vendor: 876 bytes, lines 2942-2966
2942/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js": 2943/*!************************************************************!*\ 2944 !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***! 2945 \************************************************************/ 2946/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2947 2948"use strict"; 2949__webpack_require__.r(__webpack_exports__); 2950/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2951/* harmony export */ "default": function() { return /* binding */ getUAString; } 2952/* harmony export */ }); 2953function getUAString() { 2954 var uaData = navigator.userAgentData; 2955 2956 if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { 2957 return uaData.brands.map(function (item) { 2958 return item.brand + "/" + item.version; 2959 }).join(' '); 2960 } 2961 2962 return navigator.userAgent; 2963} 2964 2965/***/ }), 2966
vendor: 1,081 bytes, lines 2967-2990
2967/***/ "./node_modules/@popperjs/core/lib/utils/within.js": 2968/*!*********************************************************!*\ 2969 !*** ./node_modules/@popperjs/core/lib/utils/within.js ***! 2970 \*********************************************************/ 2971/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2972 2973"use strict"; 2974__webpack_require__.r(__webpack_exports__); 2975/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2976/* harmony export */ within: function() { return /* binding */ within; }, 2977/* harmony export */ withinMaxClamp: function() { return /* binding */ withinMaxClamp; } 2978/* harmony export */ }); 2979/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 2980 2981function within(min, value, max) { 2982 return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max)); 2983} 2984function withinMaxClamp(min, value, max) { 2985 var v = within(min, value, max); 2986 return v > max ? max : v; 2987} 2988 2989/***/ }), 2990
vendor: 145,731 bytes, lines 2991-7494
2991/***/ "./node_modules/bootstrap/dist/js/bootstrap.js": 2992/*!*****************************************************!*\ 2993 !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***! 2994 \*****************************************************/ 2995/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 2996 2997/* provided dependency */ var __webpack_provided_window_dot_jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery-exposed-exposed.js"); 2998/*! 2999 * Bootstrap v5.3.3 (https://getbootstrap.com/) 3000 * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 3001 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3002 */ 3003(function (global, factory) { 3004 true ? module.exports = factory(__webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/index.js")) : 3005 0; 3006})(this, (function (Popper) { 'use strict'; 3007 3008 function _interopNamespaceDefault(e) { 3009 const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }); 3010 if (e) { 3011 for (const k in e) { 3012 if (k !== 'default') { 3013 const d = Object.getOwnPropertyDescriptor(e, k); 3014 Object.defineProperty(n, k, d.get ? d : { 3015 enumerable: true, 3016 get: () => e[k] 3017 }); 3018 } 3019 } 3020 } 3021 n.default = e; 3022 return Object.freeze(n); 3023 } 3024 3025 const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper); 3026 3027 /** 3028 * -------------------------------------------------------------------------- 3029 * Bootstrap dom/data.js 3030 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3031 * -------------------------------------------------------------------------- 3032 */ 3033 3034 /** 3035 * Constants 3036 */ 3037 3038 const elementMap = new Map(); 3039 const Data = { 3040 set(element, key, instance) { 3041 if (!elementMap.has(element)) { 3042 elementMap.set(element, new Map()); 3043 } 3044 const instanceMap = elementMap.get(element); 3045 3046 // make it clear we only want one instance per element 3047 // can be removed later when multiple key/instances are fine to be used 3048 if (!instanceMap.has(key) && instanceMap.size !== 0) { 3049 // eslint-disable-next-line no-console 3050 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 3051 return; 3052 } 3053 instanceMap.set(key, instance); 3054 }, 3055 get(element, key) { 3056 if (elementMap.has(element)) { 3057 return elementMap.get(element).get(key) || null; 3058 } 3059 return null; 3060 }, 3061 remove(element, key) { 3062 if (!elementMap.has(element)) { 3063 return; 3064 } 3065 const instanceMap = elementMap.get(element); 3066 instanceMap.delete(key); 3067 3068 // free up element references if there are no instances left for an element 3069 if (instanceMap.size === 0) { 3070 elementMap.delete(element); 3071 } 3072 } 3073 }; 3074 3075 /** 3076 * -------------------------------------------------------------------------- 3077 * Bootstrap util/index.js 3078 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3079 * -------------------------------------------------------------------------- 3080 */ 3081 3082 const MAX_UID = 1000000; 3083 const MILLISECONDS_MULTIPLIER = 1000; 3084 const TRANSITION_END = 'transitionend'; 3085 3086 /** 3087 * Properly escape IDs selectors to handle weird IDs 3088 * @param {string} selector 3089 * @returns {string} 3090 */ 3091 const parseSelector = selector => { 3092 if (selector && window.CSS && window.CSS.escape) { 3093 // document.querySelector needs escaping to handle IDs (html5+) containing for instance / 3094 selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); 3095 } 3096 return selector; 3097 }; 3098 3099 // Shout-out Angus Croll (https://goo.gl/pxwQGp) 3100 const toType = object => { 3101 if (object === null || object === undefined) { 3102 return `${object}`; 3103 } 3104 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 3105 }; 3106 3107 /** 3108 * Public Util API 3109 */ 3110 3111 const getUID = prefix => { 3112 do { 3113 prefix += Math.floor(Math.random() * MAX_UID); 3114 } while (document.getElementById(prefix)); 3115 return prefix; 3116 }; 3117 const getTransitionDurationFromElement = element => { 3118 if (!element) { 3119 return 0; 3120 } 3121 3122 // Get transition-duration of the element 3123 let { 3124 transitionDuration, 3125 transitionDelay 3126 } = window.getComputedStyle(element); 3127 const floatTransitionDuration = Number.parseFloat(transitionDuration); 3128 const floatTransitionDelay = Number.parseFloat(transitionDelay); 3129 3130 // Return 0 if element or transition duration is not found 3131 if (!floatTransitionDuration && !floatTransitionDelay) { 3132 return 0; 3133 } 3134 3135 // If multiple durations are defined, take the first 3136 transitionDuration = transitionDuration.split(',')[0]; 3137 transitionDelay = transitionDelay.split(',')[0]; 3138 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 3139 }; 3140 const triggerTransitionEnd = element => { 3141 element.dispatchEvent(new Event(TRANSITION_END)); 3142 }; 3143 const isElement = object => { 3144 if (!object || typeof object !== 'object') { 3145 return false; 3146 } 3147 if (typeof object.jquery !== 'undefined') { 3148 object = object[0]; 3149 } 3150 return typeof object.nodeType !== 'undefined'; 3151 }; 3152 const getElement = object => { 3153 // it's a jQuery object or a node element 3154 if (isElement(object)) { 3155 return object.jquery ? object[0] : object; 3156 } 3157 if (typeof object === 'string' && object.length > 0) { 3158 return document.querySelector(parseSelector(object)); 3159 } 3160 return null; 3161 }; 3162 const isVisible = element => { 3163 if (!isElement(element) || element.getClientRects().length === 0) { 3164 return false; 3165 } 3166 const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 3167 // Handle `details` element as its content may falsie appear visible when it is closed 3168 const closedDetails = element.closest('details:not([open])'); 3169 if (!closedDetails) { 3170 return elementIsVisible; 3171 } 3172 if (closedDetails !== element) { 3173 const summary = element.closest('summary'); 3174 if (summary && summary.parentNode !== closedDetails) { 3175 return false; 3176 } 3177 if (summary === null) { 3178 return false; 3179 } 3180 } 3181 return elementIsVisible; 3182 }; 3183 const isDisabled = element => { 3184 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 3185 return true; 3186 } 3187 if (element.classList.contains('disabled')) { 3188 return true; 3189 } 3190 if (typeof element.disabled !== 'undefined') { 3191 return element.disabled; 3192 } 3193 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 3194 }; 3195 const findShadowRoot = element => { 3196 if (!document.documentElement.attachShadow) { 3197 return null; 3198 } 3199 3200 // Can find the shadow root otherwise it'll return the document 3201 if (typeof element.getRootNode === 'function') { 3202 const root = element.getRootNode(); 3203 return root instanceof ShadowRoot ? root : null; 3204 } 3205 if (element instanceof ShadowRoot) { 3206 return element; 3207 } 3208 3209 // when we don't find a shadow root 3210 if (!element.parentNode) { 3211 return null; 3212 } 3213 return findShadowRoot(element.parentNode); 3214 }; 3215 const noop = () => {}; 3216 3217 /** 3218 * Trick to restart an element's animation 3219 * 3220 * @param {HTMLElement} element 3221 * @return void 3222 * 3223 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 3224 */ 3225 const reflow = element => { 3226 element.offsetHeight; // eslint-disable-line no-unused-expressions 3227 }; 3228 const getjQuery = () => { 3229 if (__webpack_provided_window_dot_jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 3230 return __webpack_provided_window_dot_jQuery; 3231 } 3232 return null; 3233 }; 3234 const DOMContentLoadedCallbacks = []; 3235 const onDOMContentLoaded = callback => { 3236 if (document.readyState === 'loading') { 3237 // add listener on the first call when the document is in loading state 3238 if (!DOMContentLoadedCallbacks.length) { 3239 document.addEventListener('DOMContentLoaded', () => { 3240 for (const callback of DOMContentLoadedCallbacks) { 3241 callback(); 3242 } 3243 }); 3244 } 3245 DOMContentLoadedCallbacks.push(callback); 3246 } else { 3247 callback(); 3248 } 3249 }; 3250 const isRTL = () => document.documentElement.dir === 'rtl'; 3251 const defineJQueryPlugin = plugin => { 3252 onDOMContentLoaded(() => { 3253 const $ = getjQuery(); 3254 /* istanbul ignore if */ 3255 if ($) { 3256 const name = plugin.NAME; 3257 const JQUERY_NO_CONFLICT = $.fn[name]; 3258 $.fn[name] = plugin.jQueryInterface; 3259 $.fn[name].Constructor = plugin; 3260 $.fn[name].noConflict = () => { 3261 $.fn[name] = JQUERY_NO_CONFLICT; 3262 return plugin.jQueryInterface; 3263 }; 3264 } 3265 }); 3266 }; 3267 const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { 3268 return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue; 3269 }; 3270 const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 3271 if (!waitForTransition) { 3272 execute(callback); 3273 return; 3274 } 3275 const durationPadding = 5; 3276 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; 3277 let called = false; 3278 const handler = ({ 3279 target 3280 }) => { 3281 if (target !== transitionElement) { 3282 return; 3283 } 3284 called = true; 3285 transitionElement.removeEventListener(TRANSITION_END, handler); 3286 execute(callback); 3287 }; 3288 transitionElement.addEventListener(TRANSITION_END, handler); 3289 setTimeout(() => { 3290 if (!called) { 3291 triggerTransitionEnd(transitionElement); 3292 } 3293 }, emulatedDuration); 3294 }; 3295 3296 /** 3297 * Return the previous/next element of a list. 3298 * 3299 * @param {array} list The list of elements 3300 * @param activeElement The active element 3301 * @param shouldGetNext Choose to get next or previous element 3302 * @param isCycleAllowed 3303 * @return {Element|elem} The proper element 3304 */ 3305 const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 3306 const listLength = list.length; 3307 let index = list.indexOf(activeElement); 3308 3309 // if the element does not exist in the list return an element 3310 // depending on the direction and if cycle is allowed 3311 if (index === -1) { 3312 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 3313 } 3314 index += shouldGetNext ? 1 : -1; 3315 if (isCycleAllowed) { 3316 index = (index + listLength) % listLength; 3317 } 3318 return list[Math.max(0, Math.min(index, listLength - 1))]; 3319 }; 3320 3321 /** 3322 * -------------------------------------------------------------------------- 3323 * Bootstrap dom/event-handler.js 3324 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3325 * -------------------------------------------------------------------------- 3326 */ 3327 3328 3329 /** 3330 * Constants 3331 */ 3332 3333 const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 3334 const stripNameRegex = /\..*/; 3335 const stripUidRegex = /::\d+$/; 3336 const eventRegistry = {}; // Events storage 3337 let uidEvent = 1; 3338 const customEvents = { 3339 mouseenter: 'mouseover', 3340 mouseleave: 'mouseout' 3341 }; 3342 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']); 3343 3344 /** 3345 * Private methods 3346 */ 3347 3348 function makeEventUid(element, uid) { 3349 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 3350 } 3351 function getElementEvents(element) { 3352 const uid = makeEventUid(element); 3353 element.uidEvent = uid; 3354 eventRegistry[uid] = eventRegistry[uid] || {}; 3355 return eventRegistry[uid]; 3356 } 3357 function bootstrapHandler(element, fn) { 3358 return function handler(event) { 3359 hydrateObj(event, { 3360 delegateTarget: element 3361 }); 3362 if (handler.oneOff) { 3363 EventHandler.off(element, event.type, fn); 3364 } 3365 return fn.apply(element, [event]); 3366 }; 3367 } 3368 function bootstrapDelegationHandler(element, selector, fn) { 3369 return function handler(event) { 3370 const domElements = element.querySelectorAll(selector); 3371 for (let { 3372 target 3373 } = event; target && target !== this; target = target.parentNode) { 3374 for (const domElement of domElements) { 3375 if (domElement !== target) { 3376 continue; 3377 } 3378 hydrateObj(event, { 3379 delegateTarget: target 3380 }); 3381 if (handler.oneOff) { 3382 EventHandler.off(element, event.type, selector, fn); 3383 } 3384 return fn.apply(target, [event]); 3385 } 3386 } 3387 }; 3388 } 3389 function findHandler(events, callable, delegationSelector = null) { 3390 return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); 3391 } 3392 function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 3393 const isDelegated = typeof handler === 'string'; 3394 // TODO: tooltip passes `false` instead of selector, so we need to check 3395 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 3396 let typeEvent = getTypeEvent(originalTypeEvent); 3397 if (!nativeEvents.has(typeEvent)) { 3398 typeEvent = originalTypeEvent; 3399 } 3400 return [isDelegated, callable, typeEvent]; 3401 } 3402 function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 3403 if (typeof originalTypeEvent !== 'string' || !element) { 3404 return; 3405 } 3406 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3407 3408 // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 3409 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 3410 if (originalTypeEvent in customEvents) { 3411 const wrapFunction = fn => { 3412 return function (event) { 3413 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 3414 return fn.call(this, event); 3415 } 3416 }; 3417 }; 3418 callable = wrapFunction(callable); 3419 } 3420 const events = getElementEvents(element); 3421 const handlers = events[typeEvent] || (events[typeEvent] = {}); 3422 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 3423 if (previousFunction) { 3424 previousFunction.oneOff = previousFunction.oneOff && oneOff; 3425 return; 3426 } 3427 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); 3428 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 3429 fn.delegationSelector = isDelegated ? handler : null; 3430 fn.callable = callable; 3431 fn.oneOff = oneOff; 3432 fn.uidEvent = uid; 3433 handlers[uid] = fn; 3434 element.addEventListener(typeEvent, fn, isDelegated); 3435 } 3436 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 3437 const fn = findHandler(events[typeEvent], handler, delegationSelector); 3438 if (!fn) { 3439 return; 3440 } 3441 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 3442 delete events[typeEvent][fn.uidEvent]; 3443 } 3444 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 3445 const storeElementEvent = events[typeEvent] || {}; 3446 for (const [handlerKey, event] of Object.entries(storeElementEvent)) { 3447 if (handlerKey.includes(namespace)) { 3448 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3449 } 3450 } 3451 } 3452 function getTypeEvent(event) { 3453 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 3454 event = event.replace(stripNameRegex, ''); 3455 return customEvents[event] || event; 3456 } 3457 const EventHandler = { 3458 on(element, event, handler, delegationFunction) { 3459 addHandler(element, event, handler, delegationFunction, false); 3460 }, 3461 one(element, event, handler, delegationFunction) { 3462 addHandler(element, event, handler, delegationFunction, true); 3463 }, 3464 off(element, originalTypeEvent, handler, delegationFunction) { 3465 if (typeof originalTypeEvent !== 'string' || !element) { 3466 return; 3467 } 3468 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3469 const inNamespace = typeEvent !== originalTypeEvent; 3470 const events = getElementEvents(element); 3471 const storeElementEvent = events[typeEvent] || {}; 3472 const isNamespace = originalTypeEvent.startsWith('.'); 3473 if (typeof callable !== 'undefined') { 3474 // Simplest case: handler is passed, remove that listener ONLY. 3475 if (!Object.keys(storeElementEvent).length) { 3476 return; 3477 } 3478 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 3479 return; 3480 } 3481 if (isNamespace) { 3482 for (const elementEvent of Object.keys(events)) { 3483 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 3484 } 3485 } 3486 for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { 3487 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 3488 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 3489 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3490 } 3491 } 3492 }, 3493 trigger(element, event, args) { 3494 if (typeof event !== 'string' || !element) { 3495 return null; 3496 } 3497 const $ = getjQuery(); 3498 const typeEvent = getTypeEvent(event); 3499 const inNamespace = event !== typeEvent; 3500 let jQueryEvent = null; 3501 let bubbles = true; 3502 let nativeDispatch = true; 3503 let defaultPrevented = false; 3504 if (inNamespace && $) { 3505 jQueryEvent = $.Event(event, args); 3506 $(element).trigger(jQueryEvent); 3507 bubbles = !jQueryEvent.isPropagationStopped(); 3508 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 3509 defaultPrevented = jQueryEvent.isDefaultPrevented(); 3510 } 3511 const evt = hydrateObj(new Event(event, { 3512 bubbles, 3513 cancelable: true 3514 }), args); 3515 if (defaultPrevented) { 3516 evt.preventDefault(); 3517 } 3518 if (nativeDispatch) { 3519 element.dispatchEvent(evt); 3520 } 3521 if (evt.defaultPrevented && jQueryEvent) { 3522 jQueryEvent.preventDefault(); 3523 } 3524 return evt; 3525 } 3526 }; 3527 function hydrateObj(obj, meta = {}) { 3528 for (const [key, value] of Object.entries(meta)) { 3529 try { 3530 obj[key] = value; 3531 } catch (_unused) { 3532 Object.defineProperty(obj, key, { 3533 configurable: true, 3534 get() { 3535 return value; 3536 } 3537 }); 3538 } 3539 } 3540 return obj; 3541 } 3542 3543 /** 3544 * -------------------------------------------------------------------------- 3545 * Bootstrap dom/manipulator.js 3546 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3547 * -------------------------------------------------------------------------- 3548 */ 3549 3550 function normalizeData(value) { 3551 if (value === 'true') { 3552 return true; 3553 } 3554 if (value === 'false') { 3555 return false; 3556 } 3557 if (value === Number(value).toString()) { 3558 return Number(value); 3559 } 3560 if (value === '' || value === 'null') { 3561 return null; 3562 } 3563 if (typeof value !== 'string') { 3564 return value; 3565 } 3566 try { 3567 return JSON.parse(decodeURIComponent(value)); 3568 } catch (_unused) { 3569 return value; 3570 } 3571 } 3572 function normalizeDataKey(key) { 3573 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 3574 } 3575 const Manipulator = { 3576 setDataAttribute(element, key, value) { 3577 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 3578 }, 3579 removeDataAttribute(element, key) { 3580 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 3581 }, 3582 getDataAttributes(element) { 3583 if (!element) { 3584 return {}; 3585 } 3586 const attributes = {}; 3587 const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); 3588 for (const key of bsKeys) { 3589 let pureKey = key.replace(/^bs/, ''); 3590 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 3591 attributes[pureKey] = normalizeData(element.dataset[key]); 3592 } 3593 return attributes; 3594 }, 3595 getDataAttribute(element, key) { 3596 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 3597 } 3598 }; 3599 3600 /** 3601 * -------------------------------------------------------------------------- 3602 * Bootstrap util/config.js 3603 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3604 * -------------------------------------------------------------------------- 3605 */ 3606 3607 3608 /** 3609 * Class definition 3610 */ 3611 3612 class Config { 3613 // Getters 3614 static get Default() { 3615 return {}; 3616 } 3617 static get DefaultType() { 3618 return {}; 3619 } 3620 static get NAME() { 3621 throw new Error('You have to implement the static method "NAME", for each component!'); 3622 } 3623 _getConfig(config) { 3624 config = this._mergeConfigObj(config); 3625 config = this._configAfterMerge(config); 3626 this._typeCheckConfig(config); 3627 return config; 3628 } 3629 _configAfterMerge(config) { 3630 return config; 3631 } 3632 _mergeConfigObj(config, element) { 3633 const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse 3634 3635 return { 3636 ...this.constructor.Default, 3637 ...(typeof jsonConfig === 'object' ? jsonConfig : {}), 3638 ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}), 3639 ...(typeof config === 'object' ? config : {}) 3640 }; 3641 } 3642 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 3643 for (const [property, expectedTypes] of Object.entries(configTypes)) { 3644 const value = config[property]; 3645 const valueType = isElement(value) ? 'element' : toType(value); 3646 if (!new RegExp(expectedTypes).test(valueType)) { 3647 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 3648 } 3649 } 3650 } 3651 } 3652 3653 /** 3654 * -------------------------------------------------------------------------- 3655 * Bootstrap base-component.js 3656 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3657 * -------------------------------------------------------------------------- 3658 */ 3659 3660 3661 /** 3662 * Constants 3663 */ 3664 3665 const VERSION = '5.3.3'; 3666 3667 /** 3668 * Class definition 3669 */ 3670 3671 class BaseComponent extends Config { 3672 constructor(element, config) { 3673 super(); 3674 element = getElement(element); 3675 if (!element) { 3676 return; 3677 } 3678 this._element = element; 3679 this._config = this._getConfig(config); 3680 Data.set(this._element, this.constructor.DATA_KEY, this); 3681 } 3682 3683 // Public 3684 dispose() { 3685 Data.remove(this._element, this.constructor.DATA_KEY); 3686 EventHandler.off(this._element, this.constructor.EVENT_KEY); 3687 for (const propertyName of Object.getOwnPropertyNames(this)) { 3688 this[propertyName] = null; 3689 } 3690 } 3691 _queueCallback(callback, element, isAnimated = true) { 3692 executeAfterTransition(callback, element, isAnimated); 3693 } 3694 _getConfig(config) { 3695 config = this._mergeConfigObj(config, this._element); 3696 config = this._configAfterMerge(config); 3697 this._typeCheckConfig(config); 3698 return config; 3699 } 3700 3701 // Static 3702 static getInstance(element) { 3703 return Data.get(getElement(element), this.DATA_KEY); 3704 } 3705 static getOrCreateInstance(element, config = {}) { 3706 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 3707 } 3708 static get VERSION() { 3709 return VERSION; 3710 } 3711 static get DATA_KEY() { 3712 return `bs.${this.NAME}`; 3713 } 3714 static get EVENT_KEY() { 3715 return `.${this.DATA_KEY}`; 3716 } 3717 static eventName(name) { 3718 return `${name}${this.EVENT_KEY}`; 3719 } 3720 } 3721 3722 /** 3723 * -------------------------------------------------------------------------- 3724 * Bootstrap dom/selector-engine.js 3725 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3726 * -------------------------------------------------------------------------- 3727 */ 3728 3729 const getSelector = element => { 3730 let selector = element.getAttribute('data-bs-target'); 3731 if (!selector || selector === '#') { 3732 let hrefAttribute = element.getAttribute('href'); 3733 3734 // The only valid content that could double as a selector are IDs or classes, 3735 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 3736 // `document.querySelector` will rightfully complain it is invalid. 3737 // See https://github.com/twbs/bootstrap/issues/32273 3738 if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { 3739 return null; 3740 } 3741 3742 // Just in case some CMS puts out a full URL with the anchor appended 3743 if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { 3744 hrefAttribute = `#${hrefAttribute.split('#')[1]}`; 3745 } 3746 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; 3747 } 3748 return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null; 3749 }; 3750 const SelectorEngine = { 3751 find(selector, element = document.documentElement) { 3752 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 3753 }, 3754 findOne(selector, element = document.documentElement) { 3755 return Element.prototype.querySelector.call(element, selector); 3756 }, 3757 children(element, selector) { 3758 return [].concat(...element.children).filter(child => child.matches(selector)); 3759 }, 3760 parents(element, selector) { 3761 const parents = []; 3762 let ancestor = element.parentNode.closest(selector); 3763 while (ancestor) { 3764 parents.push(ancestor); 3765 ancestor = ancestor.parentNode.closest(selector); 3766 } 3767 return parents; 3768 }, 3769 prev(element, selector) { 3770 let previous = element.previousElementSibling; 3771 while (previous) { 3772 if (previous.matches(selector)) { 3773 return [previous]; 3774 } 3775 previous = previous.previousElementSibling; 3776 } 3777 return []; 3778 }, 3779 // TODO: this is now unused; remove later along with prev() 3780 next(element, selector) { 3781 let next = element.nextElementSibling; 3782 while (next) { 3783 if (next.matches(selector)) { 3784 return [next]; 3785 } 3786 next = next.nextElementSibling; 3787 } 3788 return []; 3789 }, 3790 focusableChildren(element) { 3791 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); 3792 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 3793 }, 3794 getSelectorFromElement(element) { 3795 const selector = getSelector(element); 3796 if (selector) { 3797 return SelectorEngine.findOne(selector) ? selector : null; 3798 } 3799 return null; 3800 }, 3801 getElementFromSelector(element) { 3802 const selector = getSelector(element); 3803 return selector ? SelectorEngine.findOne(selector) : null; 3804 }, 3805 getMultipleElementsFromSelector(element) { 3806 const selector = getSelector(element); 3807 return selector ? SelectorEngine.find(selector) : []; 3808 } 3809 }; 3810 3811 /** 3812 * -------------------------------------------------------------------------- 3813 * Bootstrap util/component-functions.js 3814 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3815 * -------------------------------------------------------------------------- 3816 */ 3817 3818 const enableDismissTrigger = (component, method = 'hide') => { 3819 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 3820 const name = component.NAME; 3821 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 3822 if (['A', 'AREA'].includes(this.tagName)) { 3823 event.preventDefault(); 3824 } 3825 if (isDisabled(this)) { 3826 return; 3827 } 3828 const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`); 3829 const instance = component.getOrCreateInstance(target); 3830 3831 // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 3832 instance[method](); 3833 }); 3834 }; 3835 3836 /** 3837 * -------------------------------------------------------------------------- 3838 * Bootstrap alert.js 3839 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3840 * -------------------------------------------------------------------------- 3841 */ 3842 3843 3844 /** 3845 * Constants 3846 */ 3847 3848 const NAME$f = 'alert'; 3849 const DATA_KEY$a = 'bs.alert'; 3850 const EVENT_KEY$b = `.${DATA_KEY$a}`; 3851 const EVENT_CLOSE = `close${EVENT_KEY$b}`; 3852 const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 3853 const CLASS_NAME_FADE$5 = 'fade'; 3854 const CLASS_NAME_SHOW$8 = 'show'; 3855 3856 /** 3857 * Class definition 3858 */ 3859 3860 class Alert extends BaseComponent { 3861 // Getters 3862 static get NAME() { 3863 return NAME$f; 3864 } 3865 3866 // Public 3867 close() { 3868 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 3869 if (closeEvent.defaultPrevented) { 3870 return; 3871 } 3872 this._element.classList.remove(CLASS_NAME_SHOW$8); 3873 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 3874 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 3875 } 3876 3877 // Private 3878 _destroyElement() { 3879 this._element.remove(); 3880 EventHandler.trigger(this._element, EVENT_CLOSED); 3881 this.dispose(); 3882 } 3883 3884 // Static 3885 static jQueryInterface(config) { 3886 return this.each(function () { 3887 const data = Alert.getOrCreateInstance(this); 3888 if (typeof config !== 'string') { 3889 return; 3890 } 3891 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 3892 throw new TypeError(`No method named "${config}"`); 3893 } 3894 data[config](this); 3895 }); 3896 } 3897 } 3898 3899 /** 3900 * Data API implementation 3901 */ 3902 3903 enableDismissTrigger(Alert, 'close'); 3904 3905 /** 3906 * jQuery 3907 */ 3908 3909 defineJQueryPlugin(Alert); 3910 3911 /** 3912 * -------------------------------------------------------------------------- 3913 * Bootstrap button.js 3914 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3915 * -------------------------------------------------------------------------- 3916 */ 3917 3918 3919 /** 3920 * Constants 3921 */ 3922 3923 const NAME$e = 'button'; 3924 const DATA_KEY$9 = 'bs.button'; 3925 const EVENT_KEY$a = `.${DATA_KEY$9}`; 3926 const DATA_API_KEY$6 = '.data-api'; 3927 const CLASS_NAME_ACTIVE$3 = 'active'; 3928 const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 3929 const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 3930 3931 /** 3932 * Class definition 3933 */ 3934 3935 class Button extends BaseComponent { 3936 // Getters 3937 static get NAME() { 3938 return NAME$e; 3939 } 3940 3941 // Public 3942 toggle() { 3943 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 3944 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 3945 } 3946 3947 // Static 3948 static jQueryInterface(config) { 3949 return this.each(function () { 3950 const data = Button.getOrCreateInstance(this); 3951 if (config === 'toggle') { 3952 data[config](); 3953 } 3954 }); 3955 } 3956 } 3957 3958 /** 3959 * Data API implementation 3960 */ 3961 3962 EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 3963 event.preventDefault(); 3964 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 3965 const data = Button.getOrCreateInstance(button); 3966 data.toggle(); 3967 }); 3968 3969 /** 3970 * jQuery 3971 */ 3972 3973 defineJQueryPlugin(Button); 3974 3975 /** 3976 * -------------------------------------------------------------------------- 3977 * Bootstrap util/swipe.js 3978 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3979 * -------------------------------------------------------------------------- 3980 */ 3981 3982 3983 /** 3984 * Constants 3985 */ 3986 3987 const NAME$d = 'swipe'; 3988 const EVENT_KEY$9 = '.bs.swipe'; 3989 const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 3990 const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 3991 const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 3992 const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 3993 const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 3994 const POINTER_TYPE_TOUCH = 'touch'; 3995 const POINTER_TYPE_PEN = 'pen'; 3996 const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 3997 const SWIPE_THRESHOLD = 40; 3998 const Default$c = { 3999 endCallback: null, 4000 leftCallback: null, 4001 rightCallback: null 4002 }; 4003 const DefaultType$c = { 4004 endCallback: '(function|null)', 4005 leftCallback: '(function|null)', 4006 rightCallback: '(function|null)' 4007 }; 4008 4009 /** 4010 * Class definition 4011 */ 4012 4013 class Swipe extends Config { 4014 constructor(element, config) { 4015 super(); 4016 this._element = element; 4017 if (!element || !Swipe.isSupported()) { 4018 return; 4019 } 4020 this._config = this._getConfig(config); 4021 this._deltaX = 0; 4022 this._supportPointerEvents = Boolean(window.PointerEvent); 4023 this._initEvents(); 4024 } 4025 4026 // Getters 4027 static get Default() { 4028 return Default$c; 4029 } 4030 static get DefaultType() { 4031 return DefaultType$c; 4032 } 4033 static get NAME() { 4034 return NAME$d; 4035 } 4036 4037 // Public 4038 dispose() { 4039 EventHandler.off(this._element, EVENT_KEY$9); 4040 } 4041 4042 // Private 4043 _start(event) { 4044 if (!this._supportPointerEvents) { 4045 this._deltaX = event.touches[0].clientX; 4046 return; 4047 } 4048 if (this._eventIsPointerPenTouch(event)) { 4049 this._deltaX = event.clientX; 4050 } 4051 } 4052 _end(event) { 4053 if (this._eventIsPointerPenTouch(event)) { 4054 this._deltaX = event.clientX - this._deltaX; 4055 } 4056 this._handleSwipe(); 4057 execute(this._config.endCallback); 4058 } 4059 _move(event) { 4060 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 4061 } 4062 _handleSwipe() { 4063 const absDeltaX = Math.abs(this._deltaX); 4064 if (absDeltaX <= SWIPE_THRESHOLD) { 4065 return; 4066 } 4067 const direction = absDeltaX / this._deltaX; 4068 this._deltaX = 0; 4069 if (!direction) { 4070 return; 4071 } 4072 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 4073 } 4074 _initEvents() { 4075 if (this._supportPointerEvents) { 4076 EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); 4077 EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); 4078 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 4079 } else { 4080 EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); 4081 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); 4082 EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); 4083 } 4084 } 4085 _eventIsPointerPenTouch(event) { 4086 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 4087 } 4088 4089 // Static 4090 static isSupported() { 4091 return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 4092 } 4093 } 4094 4095 /** 4096 * -------------------------------------------------------------------------- 4097 * Bootstrap carousel.js 4098 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4099 * -------------------------------------------------------------------------- 4100 */ 4101 4102 4103 /** 4104 * Constants 4105 */ 4106 4107 const NAME$c = 'carousel'; 4108 const DATA_KEY$8 = 'bs.carousel'; 4109 const EVENT_KEY$8 = `.${DATA_KEY$8}`; 4110 const DATA_API_KEY$5 = '.data-api'; 4111 const ARROW_LEFT_KEY$1 = 'ArrowLeft'; 4112 const ARROW_RIGHT_KEY$1 = 'ArrowRight'; 4113 const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 4114 4115 const ORDER_NEXT = 'next'; 4116 const ORDER_PREV = 'prev'; 4117 const DIRECTION_LEFT = 'left'; 4118 const DIRECTION_RIGHT = 'right'; 4119 const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 4120 const EVENT_SLID = `slid${EVENT_KEY$8}`; 4121 const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 4122 const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 4123 const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 4124 const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 4125 const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 4126 const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 4127 const CLASS_NAME_CAROUSEL = 'carousel'; 4128 const CLASS_NAME_ACTIVE$2 = 'active'; 4129 const CLASS_NAME_SLIDE = 'slide'; 4130 const CLASS_NAME_END = 'carousel-item-end'; 4131 const CLASS_NAME_START = 'carousel-item-start'; 4132 const CLASS_NAME_NEXT = 'carousel-item-next'; 4133 const CLASS_NAME_PREV = 'carousel-item-prev'; 4134 const SELECTOR_ACTIVE = '.active'; 4135 const SELECTOR_ITEM = '.carousel-item'; 4136 const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 4137 const SELECTOR_ITEM_IMG = '.carousel-item img'; 4138 const SELECTOR_INDICATORS = '.carousel-indicators'; 4139 const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 4140 const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 4141 const KEY_TO_DIRECTION = { 4142 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 4143 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 4144 }; 4145 const Default$b = { 4146 interval: 5000, 4147 keyboard: true, 4148 pause: 'hover', 4149 ride: false, 4150 touch: true, 4151 wrap: true 4152 }; 4153 const DefaultType$b = { 4154 interval: '(number|boolean)', 4155 // TODO:v6 remove boolean support 4156 keyboard: 'boolean', 4157 pause: '(string|boolean)', 4158 ride: '(boolean|string)', 4159 touch: 'boolean', 4160 wrap: 'boolean' 4161 }; 4162 4163 /** 4164 * Class definition 4165 */ 4166 4167 class Carousel extends BaseComponent { 4168 constructor(element, config) { 4169 super(element, config); 4170 this._interval = null; 4171 this._activeElement = null; 4172 this._isSliding = false; 4173 this.touchTimeout = null; 4174 this._swipeHelper = null; 4175 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 4176 this._addEventListeners(); 4177 if (this._config.ride === CLASS_NAME_CAROUSEL) { 4178 this.cycle(); 4179 } 4180 } 4181 4182 // Getters 4183 static get Default() { 4184 return Default$b; 4185 } 4186 static get DefaultType() { 4187 return DefaultType$b; 4188 } 4189 static get NAME() { 4190 return NAME$c; 4191 } 4192 4193 // Public 4194 next() { 4195 this._slide(ORDER_NEXT); 4196 } 4197 nextWhenVisible() { 4198 // FIXME TODO use `document.visibilityState` 4199 // Don't call next when the page isn't visible 4200 // or the carousel or its parent isn't visible 4201 if (!document.hidden && isVisible(this._element)) { 4202 this.next(); 4203 } 4204 } 4205 prev() { 4206 this._slide(ORDER_PREV); 4207 } 4208 pause() { 4209 if (this._isSliding) { 4210 triggerTransitionEnd(this._element); 4211 } 4212 this._clearInterval(); 4213 } 4214 cycle() { 4215 this._clearInterval(); 4216 this._updateInterval(); 4217 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 4218 } 4219 _maybeEnableCycle() { 4220 if (!this._config.ride) { 4221 return; 4222 } 4223 if (this._isSliding) { 4224 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 4225 return; 4226 } 4227 this.cycle(); 4228 } 4229 to(index) { 4230 const items = this._getItems(); 4231 if (index > items.length - 1 || index < 0) { 4232 return; 4233 } 4234 if (this._isSliding) { 4235 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 4236 return; 4237 } 4238 const activeIndex = this._getItemIndex(this._getActive()); 4239 if (activeIndex === index) { 4240 return; 4241 } 4242 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 4243 this._slide(order, items[index]); 4244 } 4245 dispose() { 4246 if (this._swipeHelper) { 4247 this._swipeHelper.dispose(); 4248 } 4249 super.dispose(); 4250 } 4251 4252 // Private 4253 _configAfterMerge(config) { 4254 config.defaultInterval = config.interval; 4255 return config; 4256 } 4257 _addEventListeners() { 4258 if (this._config.keyboard) { 4259 EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); 4260 } 4261 if (this._config.pause === 'hover') { 4262 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 4263 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 4264 } 4265 if (this._config.touch && Swipe.isSupported()) { 4266 this._addTouchEventListeners(); 4267 } 4268 } 4269 _addTouchEventListeners() { 4270 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 4271 EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); 4272 } 4273 const endCallBack = () => { 4274 if (this._config.pause !== 'hover') { 4275 return; 4276 } 4277 4278 // If it's a touch-enabled device, mouseenter/leave are fired as 4279 // part of the mouse compatibility events on first tap - the carousel 4280 // would stop cycling until user tapped out of it; 4281 // here, we listen for touchend, explicitly pause the carousel 4282 // (as if it's the second time we tap on it, mouseenter compat event 4283 // is NOT fired) and after a timeout (to allow for mouse compatibility 4284 // events to fire) we explicitly restart cycling 4285 4286 this.pause(); 4287 if (this.touchTimeout) { 4288 clearTimeout(this.touchTimeout); 4289 } 4290 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 4291 }; 4292 const swipeConfig = { 4293 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 4294 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 4295 endCallback: endCallBack 4296 }; 4297 this._swipeHelper = new Swipe(this._element, swipeConfig); 4298 } 4299 _keydown(event) { 4300 if (/input|textarea/i.test(event.target.tagName)) { 4301 return; 4302 } 4303 const direction = KEY_TO_DIRECTION[event.key]; 4304 if (direction) { 4305 event.preventDefault(); 4306 this._slide(this._directionToOrder(direction)); 4307 } 4308 } 4309 _getItemIndex(element) { 4310 return this._getItems().indexOf(element); 4311 } 4312 _setActiveIndicatorElement(index) { 4313 if (!this._indicatorsElement) { 4314 return; 4315 } 4316 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 4317 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 4318 activeIndicator.removeAttribute('aria-current'); 4319 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 4320 if (newActiveIndicator) { 4321 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 4322 newActiveIndicator.setAttribute('aria-current', 'true'); 4323 } 4324 } 4325 _updateInterval() { 4326 const element = this._activeElement || this._getActive(); 4327 if (!element) { 4328 return; 4329 } 4330 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 4331 this._config.interval = elementInterval || this._config.defaultInterval; 4332 } 4333 _slide(order, element = null) { 4334 if (this._isSliding) { 4335 return; 4336 } 4337 const activeElement = this._getActive(); 4338 const isNext = order === ORDER_NEXT; 4339 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 4340 if (nextElement === activeElement) { 4341 return; 4342 } 4343 const nextElementIndex = this._getItemIndex(nextElement); 4344 const triggerEvent = eventName => { 4345 return EventHandler.trigger(this._element, eventName, { 4346 relatedTarget: nextElement, 4347 direction: this._orderToDirection(order), 4348 from: this._getItemIndex(activeElement), 4349 to: nextElementIndex 4350 }); 4351 }; 4352 const slideEvent = triggerEvent(EVENT_SLIDE); 4353 if (slideEvent.defaultPrevented) { 4354 return; 4355 } 4356 if (!activeElement || !nextElement) { 4357 // Some weirdness is happening, so we bail 4358 // TODO: change tests that use empty divs to avoid this check 4359 return; 4360 } 4361 const isCycling = Boolean(this._interval); 4362 this.pause(); 4363 this._isSliding = true; 4364 this._setActiveIndicatorElement(nextElementIndex); 4365 this._activeElement = nextElement; 4366 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 4367 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 4368 nextElement.classList.add(orderClassName); 4369 reflow(nextElement); 4370 activeElement.classList.add(directionalClassName); 4371 nextElement.classList.add(directionalClassName); 4372 const completeCallBack = () => { 4373 nextElement.classList.remove(directionalClassName, orderClassName); 4374 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 4375 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 4376 this._isSliding = false; 4377 triggerEvent(EVENT_SLID); 4378 }; 4379 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 4380 if (isCycling) { 4381 this.cycle(); 4382 } 4383 } 4384 _isAnimated() { 4385 return this._element.classList.contains(CLASS_NAME_SLIDE); 4386 } 4387 _getActive() { 4388 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 4389 } 4390 _getItems() { 4391 return SelectorEngine.find(SELECTOR_ITEM, this._element); 4392 } 4393 _clearInterval() { 4394 if (this._interval) { 4395 clearInterval(this._interval); 4396 this._interval = null; 4397 } 4398 } 4399 _directionToOrder(direction) { 4400 if (isRTL()) { 4401 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 4402 } 4403 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 4404 } 4405 _orderToDirection(order) { 4406 if (isRTL()) { 4407 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 4408 } 4409 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 4410 } 4411 4412 // Static 4413 static jQueryInterface(config) { 4414 return this.each(function () { 4415 const data = Carousel.getOrCreateInstance(this, config); 4416 if (typeof config === 'number') { 4417 data.to(config); 4418 return; 4419 } 4420 if (typeof config === 'string') { 4421 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 4422 throw new TypeError(`No method named "${config}"`); 4423 } 4424 data[config](); 4425 } 4426 }); 4427 } 4428 } 4429 4430 /** 4431 * Data API implementation 4432 */ 4433 4434 EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { 4435 const target = SelectorEngine.getElementFromSelector(this); 4436 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 4437 return; 4438 } 4439 event.preventDefault(); 4440 const carousel = Carousel.getOrCreateInstance(target); 4441 const slideIndex = this.getAttribute('data-bs-slide-to'); 4442 if (slideIndex) { 4443 carousel.to(slideIndex); 4444 carousel._maybeEnableCycle(); 4445 return; 4446 } 4447 if (Manipulator.getDataAttribute(this, 'slide') === 'next') { 4448 carousel.next(); 4449 carousel._maybeEnableCycle(); 4450 return; 4451 } 4452 carousel.prev(); 4453 carousel._maybeEnableCycle(); 4454 }); 4455 EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 4456 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 4457 for (const carousel of carousels) { 4458 Carousel.getOrCreateInstance(carousel); 4459 } 4460 }); 4461 4462 /** 4463 * jQuery 4464 */ 4465 4466 defineJQueryPlugin(Carousel); 4467 4468 /** 4469 * -------------------------------------------------------------------------- 4470 * Bootstrap collapse.js 4471 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4472 * -------------------------------------------------------------------------- 4473 */ 4474 4475 4476 /** 4477 * Constants 4478 */ 4479 4480 const NAME$b = 'collapse'; 4481 const DATA_KEY$7 = 'bs.collapse'; 4482 const EVENT_KEY$7 = `.${DATA_KEY$7}`; 4483 const DATA_API_KEY$4 = '.data-api'; 4484 const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 4485 const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 4486 const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 4487 const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 4488 const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 4489 const CLASS_NAME_SHOW$7 = 'show'; 4490 const CLASS_NAME_COLLAPSE = 'collapse'; 4491 const CLASS_NAME_COLLAPSING = 'collapsing'; 4492 const CLASS_NAME_COLLAPSED = 'collapsed'; 4493 const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 4494 const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 4495 const WIDTH = 'width'; 4496 const HEIGHT = 'height'; 4497 const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 4498 const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 4499 const Default$a = { 4500 parent: null, 4501 toggle: true 4502 }; 4503 const DefaultType$a = { 4504 parent: '(null|element)', 4505 toggle: 'boolean' 4506 }; 4507 4508 /** 4509 * Class definition 4510 */ 4511 4512 class Collapse extends BaseComponent { 4513 constructor(element, config) { 4514 super(element, config); 4515 this._isTransitioning = false; 4516 this._triggerArray = []; 4517 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 4518 for (const elem of toggleList) { 4519 const selector = SelectorEngine.getSelectorFromElement(elem); 4520 const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); 4521 if (selector !== null && filterElement.length) { 4522 this._triggerArray.push(elem); 4523 } 4524 } 4525 this._initializeChildren(); 4526 if (!this._config.parent) { 4527 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 4528 } 4529 if (this._config.toggle) { 4530 this.toggle(); 4531 } 4532 } 4533 4534 // Getters 4535 static get Default() { 4536 return Default$a; 4537 } 4538 static get DefaultType() { 4539 return DefaultType$a; 4540 } 4541 static get NAME() { 4542 return NAME$b; 4543 } 4544 4545 // Public 4546 toggle() { 4547 if (this._isShown()) { 4548 this.hide(); 4549 } else { 4550 this.show(); 4551 } 4552 } 4553 show() { 4554 if (this._isTransitioning || this._isShown()) { 4555 return; 4556 } 4557 let activeChildren = []; 4558 4559 // find active children 4560 if (this._config.parent) { 4561 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { 4562 toggle: false 4563 })); 4564 } 4565 if (activeChildren.length && activeChildren[0]._isTransitioning) { 4566 return; 4567 } 4568 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 4569 if (startEvent.defaultPrevented) { 4570 return; 4571 } 4572 for (const activeInstance of activeChildren) { 4573 activeInstance.hide(); 4574 } 4575 const dimension = this._getDimension(); 4576 this._element.classList.remove(CLASS_NAME_COLLAPSE); 4577 this._element.classList.add(CLASS_NAME_COLLAPSING); 4578 this._element.style[dimension] = 0; 4579 this._addAriaAndCollapsedClass(this._triggerArray, true); 4580 this._isTransitioning = true; 4581 const complete = () => { 4582 this._isTransitioning = false; 4583 this._element.classList.remove(CLASS_NAME_COLLAPSING); 4584 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 4585 this._element.style[dimension] = ''; 4586 EventHandler.trigger(this._element, EVENT_SHOWN$6); 4587 }; 4588 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 4589 const scrollSize = `scroll${capitalizedDimension}`; 4590 this._queueCallback(complete, this._element, true); 4591 this._element.style[dimension] = `${this._element[scrollSize]}px`; 4592 } 4593 hide() { 4594 if (this._isTransitioning || !this._isShown()) { 4595 return; 4596 } 4597 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 4598 if (startEvent.defaultPrevented) { 4599 return; 4600 } 4601 const dimension = this._getDimension(); 4602 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 4603 reflow(this._element); 4604 this._element.classList.add(CLASS_NAME_COLLAPSING); 4605 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 4606 for (const trigger of this._triggerArray) { 4607 const element = SelectorEngine.getElementFromSelector(trigger); 4608 if (element && !this._isShown(element)) { 4609 this._addAriaAndCollapsedClass([trigger], false); 4610 } 4611 } 4612 this._isTransitioning = true; 4613 const complete = () => { 4614 this._isTransitioning = false; 4615 this._element.classList.remove(CLASS_NAME_COLLAPSING); 4616 this._element.classList.add(CLASS_NAME_COLLAPSE); 4617 EventHandler.trigger(this._element, EVENT_HIDDEN$6); 4618 }; 4619 this._element.style[dimension] = ''; 4620 this._queueCallback(complete, this._element, true); 4621 } 4622 _isShown(element = this._element) { 4623 return element.classList.contains(CLASS_NAME_SHOW$7); 4624 } 4625 4626 // Private 4627 _configAfterMerge(config) { 4628 config.toggle = Boolean(config.toggle); // Coerce string values 4629 config.parent = getElement(config.parent); 4630 return config; 4631 } 4632 _getDimension() { 4633 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 4634 } 4635 _initializeChildren() { 4636 if (!this._config.parent) { 4637 return; 4638 } 4639 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 4640 for (const element of children) { 4641 const selected = SelectorEngine.getElementFromSelector(element); 4642 if (selected) { 4643 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 4644 } 4645 } 4646 } 4647 _getFirstLevelChildren(selector) { 4648 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 4649 // remove children if greater depth 4650 return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); 4651 } 4652 _addAriaAndCollapsedClass(triggerArray, isOpen) { 4653 if (!triggerArray.length) { 4654 return; 4655 } 4656 for (const element of triggerArray) { 4657 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 4658 element.setAttribute('aria-expanded', isOpen); 4659 } 4660 } 4661 4662 // Static 4663 static jQueryInterface(config) { 4664 const _config = {}; 4665 if (typeof config === 'string' && /show|hide/.test(config)) { 4666 _config.toggle = false; 4667 } 4668 return this.each(function () { 4669 const data = Collapse.getOrCreateInstance(this, _config); 4670 if (typeof config === 'string') { 4671 if (typeof data[config] === 'undefined') { 4672 throw new TypeError(`No method named "${config}"`); 4673 } 4674 data[config](); 4675 } 4676 }); 4677 } 4678 } 4679 4680 /** 4681 * Data API implementation 4682 */ 4683 4684 EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 4685 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 4686 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 4687 event.preventDefault(); 4688 } 4689 for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) { 4690 Collapse.getOrCreateInstance(element, { 4691 toggle: false 4692 }).toggle(); 4693 } 4694 }); 4695 4696 /** 4697 * jQuery 4698 */ 4699 4700 defineJQueryPlugin(Collapse); 4701 4702 /** 4703 * -------------------------------------------------------------------------- 4704 * Bootstrap dropdown.js 4705 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4706 * -------------------------------------------------------------------------- 4707 */ 4708 4709 4710 /** 4711 * Constants 4712 */ 4713 4714 const NAME$a = 'dropdown'; 4715 const DATA_KEY$6 = 'bs.dropdown'; 4716 const EVENT_KEY$6 = `.${DATA_KEY$6}`; 4717 const DATA_API_KEY$3 = '.data-api'; 4718 const ESCAPE_KEY$2 = 'Escape'; 4719 const TAB_KEY$1 = 'Tab'; 4720 const ARROW_UP_KEY$1 = 'ArrowUp'; 4721 const ARROW_DOWN_KEY$1 = 'ArrowDown'; 4722 const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 4723 4724 const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 4725 const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 4726 const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 4727 const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 4728 const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 4729 const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 4730 const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 4731 const CLASS_NAME_SHOW$6 = 'show'; 4732 const CLASS_NAME_DROPUP = 'dropup'; 4733 const CLASS_NAME_DROPEND = 'dropend'; 4734 const CLASS_NAME_DROPSTART = 'dropstart'; 4735 const CLASS_NAME_DROPUP_CENTER = 'dropup-center'; 4736 const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'; 4737 const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 4738 const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 4739 const SELECTOR_MENU = '.dropdown-menu'; 4740 const SELECTOR_NAVBAR = '.navbar'; 4741 const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 4742 const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 4743 const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 4744 const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 4745 const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 4746 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 4747 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 4748 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 4749 const PLACEMENT_TOPCENTER = 'top'; 4750 const PLACEMENT_BOTTOMCENTER = 'bottom'; 4751 const Default$9 = { 4752 autoClose: true, 4753 boundary: 'clippingParents', 4754 display: 'dynamic', 4755 offset: [0, 2], 4756 popperConfig: null, 4757 reference: 'toggle' 4758 }; 4759 const DefaultType$9 = { 4760 autoClose: '(boolean|string)', 4761 boundary: '(string|element)', 4762 display: 'string', 4763 offset: '(array|string|function)', 4764 popperConfig: '(null|object|function)', 4765 reference: '(string|element|object)' 4766 }; 4767 4768 /** 4769 * Class definition 4770 */ 4771 4772 class Dropdown extends BaseComponent { 4773 constructor(element, config) { 4774 super(element, config); 4775 this._popper = null; 4776 this._parent = this._element.parentNode; // dropdown wrapper 4777 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 4778 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 4779 this._inNavbar = this._detectNavbar(); 4780 } 4781 4782 // Getters 4783 static get Default() { 4784 return Default$9; 4785 } 4786 static get DefaultType() { 4787 return DefaultType$9; 4788 } 4789 static get NAME() { 4790 return NAME$a; 4791 } 4792 4793 // Public 4794 toggle() { 4795 return this._isShown() ? this.hide() : this.show(); 4796 } 4797 show() { 4798 if (isDisabled(this._element) || this._isShown()) { 4799 return; 4800 } 4801 const relatedTarget = { 4802 relatedTarget: this._element 4803 }; 4804 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 4805 if (showEvent.defaultPrevented) { 4806 return; 4807 } 4808 this._createPopper(); 4809 4810 // If this is a touch-enabled device we add extra 4811 // empty mouseover listeners to the body's immediate children; 4812 // only needed because of broken event delegation on iOS 4813 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 4814 if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 4815 for (const element of [].concat(...document.body.children)) { 4816 EventHandler.on(element, 'mouseover', noop); 4817 } 4818 } 4819 this._element.focus(); 4820 this._element.setAttribute('aria-expanded', true); 4821 this._menu.classList.add(CLASS_NAME_SHOW$6); 4822 this._element.classList.add(CLASS_NAME_SHOW$6); 4823 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 4824 } 4825 hide() { 4826 if (isDisabled(this._element) || !this._isShown()) { 4827 return; 4828 } 4829 const relatedTarget = { 4830 relatedTarget: this._element 4831 }; 4832 this._completeHide(relatedTarget); 4833 } 4834 dispose() { 4835 if (this._popper) { 4836 this._popper.destroy(); 4837 } 4838 super.dispose(); 4839 } 4840 update() { 4841 this._inNavbar = this._detectNavbar(); 4842 if (this._popper) { 4843 this._popper.update(); 4844 } 4845 } 4846 4847 // Private 4848 _completeHide(relatedTarget) { 4849 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 4850 if (hideEvent.defaultPrevented) { 4851 return; 4852 } 4853 4854 // If this is a touch-enabled device we remove the extra 4855 // empty mouseover listeners we added for iOS support 4856 if ('ontouchstart' in document.documentElement) { 4857 for (const element of [].concat(...document.body.children)) { 4858 EventHandler.off(element, 'mouseover', noop); 4859 } 4860 } 4861 if (this._popper) { 4862 this._popper.destroy(); 4863 } 4864 this._menu.classList.remove(CLASS_NAME_SHOW$6); 4865 this._element.classList.remove(CLASS_NAME_SHOW$6); 4866 this._element.setAttribute('aria-expanded', 'false'); 4867 Manipulator.removeDataAttribute(this._menu, 'popper'); 4868 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 4869 } 4870 _getConfig(config) { 4871 config = super._getConfig(config); 4872 if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 4873 // Popper virtual elements require a getBoundingClientRect method 4874 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 4875 } 4876 return config; 4877 } 4878 _createPopper() { 4879 if (typeof Popper__namespace === 'undefined') { 4880 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 4881 } 4882 let referenceElement = this._element; 4883 if (this._config.reference === 'parent') { 4884 referenceElement = this._parent; 4885 } else if (isElement(this._config.reference)) { 4886 referenceElement = getElement(this._config.reference); 4887 } else if (typeof this._config.reference === 'object') { 4888 referenceElement = this._config.reference; 4889 } 4890 const popperConfig = this._getPopperConfig(); 4891 this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig); 4892 } 4893 _isShown() { 4894 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 4895 } 4896 _getPlacement() { 4897 const parentDropdown = this._parent; 4898 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 4899 return PLACEMENT_RIGHT; 4900 } 4901 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 4902 return PLACEMENT_LEFT; 4903 } 4904 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 4905 return PLACEMENT_TOPCENTER; 4906 } 4907 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { 4908 return PLACEMENT_BOTTOMCENTER; 4909 } 4910 4911 // We need to trim the value because custom properties can also include spaces 4912 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 4913 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 4914 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 4915 } 4916 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 4917 } 4918 _detectNavbar() { 4919 return this._element.closest(SELECTOR_NAVBAR) !== null; 4920 } 4921 _getOffset() { 4922 const { 4923 offset 4924 } = this._config; 4925 if (typeof offset === 'string') { 4926 return offset.split(',').map(value => Number.parseInt(value, 10)); 4927 } 4928 if (typeof offset === 'function') { 4929 return popperData => offset(popperData, this._element); 4930 } 4931 return offset; 4932 } 4933 _getPopperConfig() { 4934 const defaultBsPopperConfig = { 4935 placement: this._getPlacement(), 4936 modifiers: [{ 4937 name: 'preventOverflow', 4938 options: { 4939 boundary: this._config.boundary 4940 } 4941 }, { 4942 name: 'offset', 4943 options: { 4944 offset: this._getOffset() 4945 } 4946 }] 4947 }; 4948 4949 // Disable Popper if we have a static display or Dropdown is in Navbar 4950 if (this._inNavbar || this._config.display === 'static') { 4951 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove 4952 defaultBsPopperConfig.modifiers = [{ 4953 name: 'applyStyles', 4954 enabled: false 4955 }]; 4956 } 4957 return { 4958 ...defaultBsPopperConfig, 4959 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 4960 }; 4961 } 4962 _selectMenuItem({ 4963 key, 4964 target 4965 }) { 4966 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); 4967 if (!items.length) { 4968 return; 4969 } 4970 4971 // if target isn't included in items (e.g. when expanding the dropdown) 4972 // allow cycling to get the last item in case key equals ARROW_UP_KEY 4973 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 4974 } 4975 4976 // Static 4977 static jQueryInterface(config) { 4978 return this.each(function () { 4979 const data = Dropdown.getOrCreateInstance(this, config); 4980 if (typeof config !== 'string') { 4981 return; 4982 } 4983 if (typeof data[config] === 'undefined') { 4984 throw new TypeError(`No method named "${config}"`); 4985 } 4986 data[config](); 4987 }); 4988 } 4989 static clearMenus(event) { 4990 if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { 4991 return; 4992 } 4993 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 4994 for (const toggle of openToggles) { 4995 const context = Dropdown.getInstance(toggle); 4996 if (!context || context._config.autoClose === false) { 4997 continue; 4998 } 4999 const composedPath = event.composedPath(); 5000 const isMenuTarget = composedPath.includes(context._menu); 5001 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 5002 continue; 5003 } 5004 5005 // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 5006 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 5007 continue; 5008 } 5009 const relatedTarget = { 5010 relatedTarget: context._element 5011 }; 5012 if (event.type === 'click') { 5013 relatedTarget.clickEvent = event; 5014 } 5015 context._completeHide(relatedTarget); 5016 } 5017 } 5018 static dataApiKeydownHandler(event) { 5019 // If not an UP | DOWN | ESCAPE key => not a dropdown command 5020 // If input/textarea && if key is other than ESCAPE => not a dropdown command 5021 5022 const isInput = /input|textarea/i.test(event.target.tagName); 5023 const isEscapeEvent = event.key === ESCAPE_KEY$2; 5024 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 5025 if (!isUpOrDownEvent && !isEscapeEvent) { 5026 return; 5027 } 5028 if (isInput && !isEscapeEvent) { 5029 return; 5030 } 5031 event.preventDefault(); 5032 5033 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 5034 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode); 5035 const instance = Dropdown.getOrCreateInstance(getToggleButton); 5036 if (isUpOrDownEvent) { 5037 event.stopPropagation(); 5038 instance.show(); 5039 instance._selectMenuItem(event); 5040 return; 5041 } 5042 if (instance._isShown()) { 5043 // else is escape and we check if it is shown 5044 event.stopPropagation(); 5045 instance.hide(); 5046 getToggleButton.focus(); 5047 } 5048 } 5049 } 5050 5051 /** 5052 * Data API implementation 5053 */ 5054 5055 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 5056 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 5057 EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 5058 EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 5059 EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 5060 event.preventDefault(); 5061 Dropdown.getOrCreateInstance(this).toggle(); 5062 }); 5063 5064 /** 5065 * jQuery 5066 */ 5067 5068 defineJQueryPlugin(Dropdown); 5069 5070 /** 5071 * -------------------------------------------------------------------------- 5072 * Bootstrap util/backdrop.js 5073 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5074 * -------------------------------------------------------------------------- 5075 */ 5076 5077 5078 /** 5079 * Constants 5080 */ 5081 5082 const NAME$9 = 'backdrop'; 5083 const CLASS_NAME_FADE$4 = 'fade'; 5084 const CLASS_NAME_SHOW$5 = 'show'; 5085 const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 5086 const Default$8 = { 5087 className: 'modal-backdrop', 5088 clickCallback: null, 5089 isAnimated: false, 5090 isVisible: true, 5091 // if false, we use the backdrop helper without adding any element to the dom 5092 rootElement: 'body' // give the choice to place backdrop under different elements 5093 }; 5094 const DefaultType$8 = { 5095 className: 'string', 5096 clickCallback: '(function|null)', 5097 isAnimated: 'boolean', 5098 isVisible: 'boolean', 5099 rootElement: '(element|string)' 5100 }; 5101 5102 /** 5103 * Class definition 5104 */ 5105 5106 class Backdrop extends Config { 5107 constructor(config) { 5108 super(); 5109 this._config = this._getConfig(config); 5110 this._isAppended = false; 5111 this._element = null; 5112 } 5113 5114 // Getters 5115 static get Default() { 5116 return Default$8; 5117 } 5118 static get DefaultType() { 5119 return DefaultType$8; 5120 } 5121 static get NAME() { 5122 return NAME$9; 5123 } 5124 5125 // Public 5126 show(callback) { 5127 if (!this._config.isVisible) { 5128 execute(callback); 5129 return; 5130 } 5131 this._append(); 5132 const element = this._getElement(); 5133 if (this._config.isAnimated) { 5134 reflow(element); 5135 } 5136 element.classList.add(CLASS_NAME_SHOW$5); 5137 this._emulateAnimation(() => { 5138 execute(callback); 5139 }); 5140 } 5141 hide(callback) { 5142 if (!this._config.isVisible) { 5143 execute(callback); 5144 return; 5145 } 5146 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 5147 this._emulateAnimation(() => { 5148 this.dispose(); 5149 execute(callback); 5150 }); 5151 } 5152 dispose() { 5153 if (!this._isAppended) { 5154 return; 5155 } 5156 EventHandler.off(this._element, EVENT_MOUSEDOWN); 5157 this._element.remove(); 5158 this._isAppended = false; 5159 } 5160 5161 // Private 5162 _getElement() { 5163 if (!this._element) { 5164 const backdrop = document.createElement('div'); 5165 backdrop.className = this._config.className; 5166 if (this._config.isAnimated) { 5167 backdrop.classList.add(CLASS_NAME_FADE$4); 5168 } 5169 this._element = backdrop; 5170 } 5171 return this._element; 5172 } 5173 _configAfterMerge(config) { 5174 // use getElement() with the default "body" to get a fresh Element on each instantiation 5175 config.rootElement = getElement(config.rootElement); 5176 return config; 5177 } 5178 _append() { 5179 if (this._isAppended) { 5180 return; 5181 } 5182 const element = this._getElement(); 5183 this._config.rootElement.append(element); 5184 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 5185 execute(this._config.clickCallback); 5186 }); 5187 this._isAppended = true; 5188 } 5189 _emulateAnimation(callback) { 5190 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 5191 } 5192 } 5193 5194 /** 5195 * -------------------------------------------------------------------------- 5196 * Bootstrap util/focustrap.js 5197 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5198 * -------------------------------------------------------------------------- 5199 */ 5200 5201 5202 /** 5203 * Constants 5204 */ 5205 5206 const NAME$8 = 'focustrap'; 5207 const DATA_KEY$5 = 'bs.focustrap'; 5208 const EVENT_KEY$5 = `.${DATA_KEY$5}`; 5209 const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 5210 const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 5211 const TAB_KEY = 'Tab'; 5212 const TAB_NAV_FORWARD = 'forward'; 5213 const TAB_NAV_BACKWARD = 'backward'; 5214 const Default$7 = { 5215 autofocus: true, 5216 trapElement: null // The element to trap focus inside of 5217 }; 5218 const DefaultType$7 = { 5219 autofocus: 'boolean', 5220 trapElement: 'element' 5221 }; 5222 5223 /** 5224 * Class definition 5225 */ 5226 5227 class FocusTrap extends Config { 5228 constructor(config) { 5229 super(); 5230 this._config = this._getConfig(config); 5231 this._isActive = false; 5232 this._lastTabNavDirection = null; 5233 } 5234 5235 // Getters 5236 static get Default() { 5237 return Default$7; 5238 } 5239 static get DefaultType() { 5240 return DefaultType$7; 5241 } 5242 static get NAME() { 5243 return NAME$8; 5244 } 5245 5246 // Public 5247 activate() { 5248 if (this._isActive) { 5249 return; 5250 } 5251 if (this._config.autofocus) { 5252 this._config.trapElement.focus(); 5253 } 5254 EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop 5255 EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); 5256 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 5257 this._isActive = true; 5258 } 5259 deactivate() { 5260 if (!this._isActive) { 5261 return; 5262 } 5263 this._isActive = false; 5264 EventHandler.off(document, EVENT_KEY$5); 5265 } 5266 5267 // Private 5268 _handleFocusin(event) { 5269 const { 5270 trapElement 5271 } = this._config; 5272 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 5273 return; 5274 } 5275 const elements = SelectorEngine.focusableChildren(trapElement); 5276 if (elements.length === 0) { 5277 trapElement.focus(); 5278 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 5279 elements[elements.length - 1].focus(); 5280 } else { 5281 elements[0].focus(); 5282 } 5283 } 5284 _handleKeydown(event) { 5285 if (event.key !== TAB_KEY) { 5286 return; 5287 } 5288 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 5289 } 5290 } 5291 5292 /** 5293 * -------------------------------------------------------------------------- 5294 * Bootstrap util/scrollBar.js 5295 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5296 * -------------------------------------------------------------------------- 5297 */ 5298 5299 5300 /** 5301 * Constants 5302 */ 5303 5304 const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 5305 const SELECTOR_STICKY_CONTENT = '.sticky-top'; 5306 const PROPERTY_PADDING = 'padding-right'; 5307 const PROPERTY_MARGIN = 'margin-right'; 5308 5309 /** 5310 * Class definition 5311 */ 5312 5313 class ScrollBarHelper { 5314 constructor() { 5315 this._element = document.body; 5316 } 5317 5318 // Public 5319 getWidth() { 5320 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 5321 const documentWidth = document.documentElement.clientWidth; 5322 return Math.abs(window.innerWidth - documentWidth); 5323 } 5324 hide() { 5325 const width = this.getWidth(); 5326 this._disableOverFlow(); 5327 // give padding to element to balance the hidden scrollbar width 5328 this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5329 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 5330 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5331 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); 5332 } 5333 reset() { 5334 this._resetElementAttributes(this._element, 'overflow'); 5335 this._resetElementAttributes(this._element, PROPERTY_PADDING); 5336 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 5337 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 5338 } 5339 isOverflowing() { 5340 return this.getWidth() > 0; 5341 } 5342 5343 // Private 5344 _disableOverFlow() { 5345 this._saveInitialAttribute(this._element, 'overflow'); 5346 this._element.style.overflow = 'hidden'; 5347 } 5348 _setElementAttributes(selector, styleProperty, callback) { 5349 const scrollbarWidth = this.getWidth(); 5350 const manipulationCallBack = element => { 5351 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 5352 return; 5353 } 5354 this._saveInitialAttribute(element, styleProperty); 5355 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 5356 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 5357 }; 5358 this._applyManipulationCallback(selector, manipulationCallBack); 5359 } 5360 _saveInitialAttribute(element, styleProperty) { 5361 const actualValue = element.style.getPropertyValue(styleProperty); 5362 if (actualValue) { 5363 Manipulator.setDataAttribute(element, styleProperty, actualValue); 5364 } 5365 } 5366 _resetElementAttributes(selector, styleProperty) { 5367 const manipulationCallBack = element => { 5368 const value = Manipulator.getDataAttribute(element, styleProperty); 5369 // We only want to remove the property if the value is `null`; the value can also be zero 5370 if (value === null) { 5371 element.style.removeProperty(styleProperty); 5372 return; 5373 } 5374 Manipulator.removeDataAttribute(element, styleProperty); 5375 element.style.setProperty(styleProperty, value); 5376 }; 5377 this._applyManipulationCallback(selector, manipulationCallBack); 5378 } 5379 _applyManipulationCallback(selector, callBack) { 5380 if (isElement(selector)) { 5381 callBack(selector); 5382 return; 5383 } 5384 for (const sel of SelectorEngine.find(selector, this._element)) { 5385 callBack(sel); 5386 } 5387 } 5388 } 5389 5390 /** 5391 * -------------------------------------------------------------------------- 5392 * Bootstrap modal.js 5393 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5394 * -------------------------------------------------------------------------- 5395 */ 5396 5397 5398 /** 5399 * Constants 5400 */ 5401 5402 const NAME$7 = 'modal'; 5403 const DATA_KEY$4 = 'bs.modal'; 5404 const EVENT_KEY$4 = `.${DATA_KEY$4}`; 5405 const DATA_API_KEY$2 = '.data-api'; 5406 const ESCAPE_KEY$1 = 'Escape'; 5407 const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 5408 const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 5409 const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 5410 const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 5411 const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 5412 const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 5413 const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 5414 const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 5415 const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 5416 const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 5417 const CLASS_NAME_OPEN = 'modal-open'; 5418 const CLASS_NAME_FADE$3 = 'fade'; 5419 const CLASS_NAME_SHOW$4 = 'show'; 5420 const CLASS_NAME_STATIC = 'modal-static'; 5421 const OPEN_SELECTOR$1 = '.modal.show'; 5422 const SELECTOR_DIALOG = '.modal-dialog'; 5423 const SELECTOR_MODAL_BODY = '.modal-body'; 5424 const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 5425 const Default$6 = { 5426 backdrop: true, 5427 focus: true, 5428 keyboard: true 5429 }; 5430 const DefaultType$6 = { 5431 backdrop: '(boolean|string)', 5432 focus: 'boolean', 5433 keyboard: 'boolean' 5434 }; 5435 5436 /** 5437 * Class definition 5438 */ 5439 5440 class Modal extends BaseComponent { 5441 constructor(element, config) { 5442 super(element, config); 5443 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 5444 this._backdrop = this._initializeBackDrop(); 5445 this._focustrap = this._initializeFocusTrap(); 5446 this._isShown = false; 5447 this._isTransitioning = false; 5448 this._scrollBar = new ScrollBarHelper(); 5449 this._addEventListeners(); 5450 } 5451 5452 // Getters 5453 static get Default() { 5454 return Default$6; 5455 } 5456 static get DefaultType() { 5457 return DefaultType$6; 5458 } 5459 static get NAME() { 5460 return NAME$7; 5461 } 5462 5463 // Public 5464 toggle(relatedTarget) { 5465 return this._isShown ? this.hide() : this.show(relatedTarget); 5466 } 5467 show(relatedTarget) { 5468 if (this._isShown || this._isTransitioning) { 5469 return; 5470 } 5471 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 5472 relatedTarget 5473 }); 5474 if (showEvent.defaultPrevented) { 5475 return; 5476 } 5477 this._isShown = true; 5478 this._isTransitioning = true; 5479 this._scrollBar.hide(); 5480 document.body.classList.add(CLASS_NAME_OPEN); 5481 this._adjustDialog(); 5482 this._backdrop.show(() => this._showElement(relatedTarget)); 5483 } 5484 hide() { 5485 if (!this._isShown || this._isTransitioning) { 5486 return; 5487 } 5488 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 5489 if (hideEvent.defaultPrevented) { 5490 return; 5491 } 5492 this._isShown = false; 5493 this._isTransitioning = true; 5494 this._focustrap.deactivate(); 5495 this._element.classList.remove(CLASS_NAME_SHOW$4); 5496 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 5497 } 5498 dispose() { 5499 EventHandler.off(window, EVENT_KEY$4); 5500 EventHandler.off(this._dialog, EVENT_KEY$4); 5501 this._backdrop.dispose(); 5502 this._focustrap.deactivate(); 5503 super.dispose(); 5504 } 5505 handleUpdate() { 5506 this._adjustDialog(); 5507 } 5508 5509 // Private 5510 _initializeBackDrop() { 5511 return new Backdrop({ 5512 isVisible: Boolean(this._config.backdrop), 5513 // 'static' option will be translated to true, and booleans will keep their value, 5514 isAnimated: this._isAnimated() 5515 }); 5516 } 5517 _initializeFocusTrap() { 5518 return new FocusTrap({ 5519 trapElement: this._element 5520 }); 5521 } 5522 _showElement(relatedTarget) { 5523 // try to append dynamic modal 5524 if (!document.body.contains(this._element)) { 5525 document.body.append(this._element); 5526 } 5527 this._element.style.display = 'block'; 5528 this._element.removeAttribute('aria-hidden'); 5529 this._element.setAttribute('aria-modal', true); 5530 this._element.setAttribute('role', 'dialog'); 5531 this._element.scrollTop = 0; 5532 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 5533 if (modalBody) { 5534 modalBody.scrollTop = 0; 5535 } 5536 reflow(this._element); 5537 this._element.classList.add(CLASS_NAME_SHOW$4); 5538 const transitionComplete = () => { 5539 if (this._config.focus) { 5540 this._focustrap.activate(); 5541 } 5542 this._isTransitioning = false; 5543 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 5544 relatedTarget 5545 }); 5546 }; 5547 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 5548 } 5549 _addEventListeners() { 5550 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 5551 if (event.key !== ESCAPE_KEY$1) { 5552 return; 5553 } 5554 if (this._config.keyboard) { 5555 this.hide(); 5556 return; 5557 } 5558 this._triggerBackdropTransition(); 5559 }); 5560 EventHandler.on(window, EVENT_RESIZE$1, () => { 5561 if (this._isShown && !this._isTransitioning) { 5562 this._adjustDialog(); 5563 } 5564 }); 5565 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { 5566 // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks 5567 EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => { 5568 if (this._element !== event.target || this._element !== event2.target) { 5569 return; 5570 } 5571 if (this._config.backdrop === 'static') { 5572 this._triggerBackdropTransition(); 5573 return; 5574 } 5575 if (this._config.backdrop) { 5576 this.hide(); 5577 } 5578 }); 5579 }); 5580 } 5581 _hideModal() { 5582 this._element.style.display = 'none'; 5583 this._element.setAttribute('aria-hidden', true); 5584 this._element.removeAttribute('aria-modal'); 5585 this._element.removeAttribute('role'); 5586 this._isTransitioning = false; 5587 this._backdrop.hide(() => { 5588 document.body.classList.remove(CLASS_NAME_OPEN); 5589 this._resetAdjustments(); 5590 this._scrollBar.reset(); 5591 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 5592 }); 5593 } 5594 _isAnimated() { 5595 return this._element.classList.contains(CLASS_NAME_FADE$3); 5596 } 5597 _triggerBackdropTransition() { 5598 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 5599 if (hideEvent.defaultPrevented) { 5600 return; 5601 } 5602 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5603 const initialOverflowY = this._element.style.overflowY; 5604 // return if the following background transition hasn't yet completed 5605 if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { 5606 return; 5607 } 5608 if (!isModalOverflowing) { 5609 this._element.style.overflowY = 'hidden'; 5610 } 5611 this._element.classList.add(CLASS_NAME_STATIC); 5612 this._queueCallback(() => { 5613 this._element.classList.remove(CLASS_NAME_STATIC); 5614 this._queueCallback(() => { 5615 this._element.style.overflowY = initialOverflowY; 5616 }, this._dialog); 5617 }, this._dialog); 5618 this._element.focus(); 5619 } 5620 5621 /** 5622 * The following methods are used to handle overflowing modals 5623 */ 5624 5625 _adjustDialog() { 5626 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5627 const scrollbarWidth = this._scrollBar.getWidth(); 5628 const isBodyOverflowing = scrollbarWidth > 0; 5629 if (isBodyOverflowing && !isModalOverflowing) { 5630 const property = isRTL() ? 'paddingLeft' : 'paddingRight'; 5631 this._element.style[property] = `${scrollbarWidth}px`; 5632 } 5633 if (!isBodyOverflowing && isModalOverflowing) { 5634 const property = isRTL() ? 'paddingRight' : 'paddingLeft'; 5635 this._element.style[property] = `${scrollbarWidth}px`; 5636 } 5637 } 5638 _resetAdjustments() { 5639 this._element.style.paddingLeft = ''; 5640 this._element.style.paddingRight = ''; 5641 } 5642 5643 // Static 5644 static jQueryInterface(config, relatedTarget) { 5645 return this.each(function () { 5646 const data = Modal.getOrCreateInstance(this, config); 5647 if (typeof config !== 'string') { 5648 return; 5649 } 5650 if (typeof data[config] === 'undefined') { 5651 throw new TypeError(`No method named "${config}"`); 5652 } 5653 data[config](relatedTarget); 5654 }); 5655 } 5656 } 5657 5658 /** 5659 * Data API implementation 5660 */ 5661 5662 EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 5663 const target = SelectorEngine.getElementFromSelector(this); 5664 if (['A', 'AREA'].includes(this.tagName)) { 5665 event.preventDefault(); 5666 } 5667 EventHandler.one(target, EVENT_SHOW$4, showEvent => { 5668 if (showEvent.defaultPrevented) { 5669 // only register focus restorer if modal will actually get shown 5670 return; 5671 } 5672 EventHandler.one(target, EVENT_HIDDEN$4, () => { 5673 if (isVisible(this)) { 5674 this.focus(); 5675 } 5676 }); 5677 }); 5678 5679 // avoid conflict when clicking modal toggler while another one is open 5680 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 5681 if (alreadyOpen) { 5682 Modal.getInstance(alreadyOpen).hide(); 5683 } 5684 const data = Modal.getOrCreateInstance(target); 5685 data.toggle(this); 5686 }); 5687 enableDismissTrigger(Modal); 5688 5689 /** 5690 * jQuery 5691 */ 5692 5693 defineJQueryPlugin(Modal); 5694 5695 /** 5696 * -------------------------------------------------------------------------- 5697 * Bootstrap offcanvas.js 5698 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5699 * -------------------------------------------------------------------------- 5700 */ 5701 5702 5703 /** 5704 * Constants 5705 */ 5706 5707 const NAME$6 = 'offcanvas'; 5708 const DATA_KEY$3 = 'bs.offcanvas'; 5709 const EVENT_KEY$3 = `.${DATA_KEY$3}`; 5710 const DATA_API_KEY$1 = '.data-api'; 5711 const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 5712 const ESCAPE_KEY = 'Escape'; 5713 const CLASS_NAME_SHOW$3 = 'show'; 5714 const CLASS_NAME_SHOWING$1 = 'showing'; 5715 const CLASS_NAME_HIDING = 'hiding'; 5716 const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 5717 const OPEN_SELECTOR = '.offcanvas.show'; 5718 const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 5719 const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 5720 const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 5721 const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 5722 const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 5723 const EVENT_RESIZE = `resize${EVENT_KEY$3}`; 5724 const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 5725 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 5726 const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 5727 const Default$5 = { 5728 backdrop: true, 5729 keyboard: true, 5730 scroll: false 5731 }; 5732 const DefaultType$5 = { 5733 backdrop: '(boolean|string)', 5734 keyboard: 'boolean', 5735 scroll: 'boolean' 5736 }; 5737 5738 /** 5739 * Class definition 5740 */ 5741 5742 class Offcanvas extends BaseComponent { 5743 constructor(element, config) { 5744 super(element, config); 5745 this._isShown = false; 5746 this._backdrop = this._initializeBackDrop(); 5747 this._focustrap = this._initializeFocusTrap(); 5748 this._addEventListeners(); 5749 } 5750 5751 // Getters 5752 static get Default() { 5753 return Default$5; 5754 } 5755 static get DefaultType() { 5756 return DefaultType$5; 5757 } 5758 static get NAME() { 5759 return NAME$6; 5760 } 5761 5762 // Public 5763 toggle(relatedTarget) { 5764 return this._isShown ? this.hide() : this.show(relatedTarget); 5765 } 5766 show(relatedTarget) { 5767 if (this._isShown) { 5768 return; 5769 } 5770 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 5771 relatedTarget 5772 }); 5773 if (showEvent.defaultPrevented) { 5774 return; 5775 } 5776 this._isShown = true; 5777 this._backdrop.show(); 5778 if (!this._config.scroll) { 5779 new ScrollBarHelper().hide(); 5780 } 5781 this._element.setAttribute('aria-modal', true); 5782 this._element.setAttribute('role', 'dialog'); 5783 this._element.classList.add(CLASS_NAME_SHOWING$1); 5784 const completeCallBack = () => { 5785 if (!this._config.scroll || this._config.backdrop) { 5786 this._focustrap.activate(); 5787 } 5788 this._element.classList.add(CLASS_NAME_SHOW$3); 5789 this._element.classList.remove(CLASS_NAME_SHOWING$1); 5790 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 5791 relatedTarget 5792 }); 5793 }; 5794 this._queueCallback(completeCallBack, this._element, true); 5795 } 5796 hide() { 5797 if (!this._isShown) { 5798 return; 5799 } 5800 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 5801 if (hideEvent.defaultPrevented) { 5802 return; 5803 } 5804 this._focustrap.deactivate(); 5805 this._element.blur(); 5806 this._isShown = false; 5807 this._element.classList.add(CLASS_NAME_HIDING); 5808 this._backdrop.hide(); 5809 const completeCallback = () => { 5810 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 5811 this._element.removeAttribute('aria-modal'); 5812 this._element.removeAttribute('role'); 5813 if (!this._config.scroll) { 5814 new ScrollBarHelper().reset(); 5815 } 5816 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 5817 }; 5818 this._queueCallback(completeCallback, this._element, true); 5819 } 5820 dispose() { 5821 this._backdrop.dispose(); 5822 this._focustrap.deactivate(); 5823 super.dispose(); 5824 } 5825 5826 // Private 5827 _initializeBackDrop() { 5828 const clickCallback = () => { 5829 if (this._config.backdrop === 'static') { 5830 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 5831 return; 5832 } 5833 this.hide(); 5834 }; 5835 5836 // 'static' option will be translated to true, and booleans will keep their value 5837 const isVisible = Boolean(this._config.backdrop); 5838 return new Backdrop({ 5839 className: CLASS_NAME_BACKDROP, 5840 isVisible, 5841 isAnimated: true, 5842 rootElement: this._element.parentNode, 5843 clickCallback: isVisible ? clickCallback : null 5844 }); 5845 } 5846 _initializeFocusTrap() { 5847 return new FocusTrap({ 5848 trapElement: this._element 5849 }); 5850 } 5851 _addEventListeners() { 5852 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 5853 if (event.key !== ESCAPE_KEY) { 5854 return; 5855 } 5856 if (this._config.keyboard) { 5857 this.hide(); 5858 return; 5859 } 5860 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 5861 }); 5862 } 5863 5864 // Static 5865 static jQueryInterface(config) { 5866 return this.each(function () { 5867 const data = Offcanvas.getOrCreateInstance(this, config); 5868 if (typeof config !== 'string') { 5869 return; 5870 } 5871 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 5872 throw new TypeError(`No method named "${config}"`); 5873 } 5874 data[config](this); 5875 }); 5876 } 5877 } 5878 5879 /** 5880 * Data API implementation 5881 */ 5882 5883 EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 5884 const target = SelectorEngine.getElementFromSelector(this); 5885 if (['A', 'AREA'].includes(this.tagName)) { 5886 event.preventDefault(); 5887 } 5888 if (isDisabled(this)) { 5889 return; 5890 } 5891 EventHandler.one(target, EVENT_HIDDEN$3, () => { 5892 // focus on trigger when it is closed 5893 if (isVisible(this)) { 5894 this.focus(); 5895 } 5896 }); 5897 5898 // avoid conflict when clicking a toggler of an offcanvas, while another is open 5899 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 5900 if (alreadyOpen && alreadyOpen !== target) { 5901 Offcanvas.getInstance(alreadyOpen).hide(); 5902 } 5903 const data = Offcanvas.getOrCreateInstance(target); 5904 data.toggle(this); 5905 }); 5906 EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 5907 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 5908 Offcanvas.getOrCreateInstance(selector).show(); 5909 } 5910 }); 5911 EventHandler.on(window, EVENT_RESIZE, () => { 5912 for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { 5913 if (getComputedStyle(element).position !== 'fixed') { 5914 Offcanvas.getOrCreateInstance(element).hide(); 5915 } 5916 } 5917 }); 5918 enableDismissTrigger(Offcanvas); 5919 5920 /** 5921 * jQuery 5922 */ 5923 5924 defineJQueryPlugin(Offcanvas); 5925 5926 /** 5927 * -------------------------------------------------------------------------- 5928 * Bootstrap util/sanitizer.js 5929 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5930 * -------------------------------------------------------------------------- 5931 */ 5932 5933 // js-docs-start allow-list 5934 const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 5935 const DefaultAllowlist = { 5936 // Global attributes allowed on any supplied element below. 5937 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 5938 a: ['target', 'href', 'title', 'rel'], 5939 area: [], 5940 b: [], 5941 br: [], 5942 col: [], 5943 code: [], 5944 dd: [], 5945 div: [], 5946 dl: [], 5947 dt: [], 5948 em: [], 5949 hr: [], 5950 h1: [], 5951 h2: [], 5952 h3: [], 5953 h4: [], 5954 h5: [], 5955 h6: [], 5956 i: [], 5957 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 5958 li: [], 5959 ol: [], 5960 p: [], 5961 pre: [], 5962 s: [], 5963 small: [], 5964 span: [], 5965 sub: [], 5966 sup: [], 5967 strong: [], 5968 u: [], 5969 ul: [] 5970 }; 5971 // js-docs-end allow-list 5972 5973 const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 5974 5975 /** 5976 * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation 5977 * contexts. 5978 * 5979 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 5980 */ 5981 // eslint-disable-next-line unicorn/better-regex 5982 const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; 5983 const allowedAttribute = (attribute, allowedAttributeList) => { 5984 const attributeName = attribute.nodeName.toLowerCase(); 5985 if (allowedAttributeList.includes(attributeName)) { 5986 if (uriAttributes.has(attributeName)) { 5987 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue)); 5988 } 5989 return true; 5990 } 5991 5992 // Check if a regular expression validates the attribute. 5993 return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); 5994 }; 5995 function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 5996 if (!unsafeHtml.length) { 5997 return unsafeHtml; 5998 } 5999 if (sanitizeFunction && typeof sanitizeFunction === 'function') { 6000 return sanitizeFunction(unsafeHtml); 6001 } 6002 const domParser = new window.DOMParser(); 6003 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 6004 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 6005 for (const element of elements) { 6006 const elementName = element.nodeName.toLowerCase(); 6007 if (!Object.keys(allowList).includes(elementName)) { 6008 element.remove(); 6009 continue; 6010 } 6011 const attributeList = [].concat(...element.attributes); 6012 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 6013 for (const attribute of attributeList) { 6014 if (!allowedAttribute(attribute, allowedAttributes)) { 6015 element.removeAttribute(attribute.nodeName); 6016 } 6017 } 6018 } 6019 return createdDocument.body.innerHTML; 6020 } 6021 6022 /** 6023 * -------------------------------------------------------------------------- 6024 * Bootstrap util/template-factory.js 6025 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6026 * -------------------------------------------------------------------------- 6027 */ 6028 6029 6030 /** 6031 * Constants 6032 */ 6033 6034 const NAME$5 = 'TemplateFactory'; 6035 const Default$4 = { 6036 allowList: DefaultAllowlist, 6037 content: {}, 6038 // { selector : text , selector2 : text2 , } 6039 extraClass: '', 6040 html: false, 6041 sanitize: true, 6042 sanitizeFn: null, 6043 template: '<div></div>' 6044 }; 6045 const DefaultType$4 = { 6046 allowList: 'object', 6047 content: 'object', 6048 extraClass: '(string|function)', 6049 html: 'boolean', 6050 sanitize: 'boolean', 6051 sanitizeFn: '(null|function)', 6052 template: 'string' 6053 }; 6054 const DefaultContentType = { 6055 entry: '(string|element|function|null)', 6056 selector: '(string|element)' 6057 }; 6058 6059 /** 6060 * Class definition 6061 */ 6062 6063 class TemplateFactory extends Config { 6064 constructor(config) { 6065 super(); 6066 this._config = this._getConfig(config); 6067 } 6068 6069 // Getters 6070 static get Default() { 6071 return Default$4; 6072 } 6073 static get DefaultType() { 6074 return DefaultType$4; 6075 } 6076 static get NAME() { 6077 return NAME$5; 6078 } 6079 6080 // Public 6081 getContent() { 6082 return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); 6083 } 6084 hasContent() { 6085 return this.getContent().length > 0; 6086 } 6087 changeContent(content) { 6088 this._checkContent(content); 6089 this._config.content = { 6090 ...this._config.content, 6091 ...content 6092 }; 6093 return this; 6094 } 6095 toHtml() { 6096 const templateWrapper = document.createElement('div'); 6097 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 6098 for (const [selector, text] of Object.entries(this._config.content)) { 6099 this._setContent(templateWrapper, text, selector); 6100 } 6101 const template = templateWrapper.children[0]; 6102 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 6103 if (extraClass) { 6104 template.classList.add(...extraClass.split(' ')); 6105 } 6106 return template; 6107 } 6108 6109 // Private 6110 _typeCheckConfig(config) { 6111 super._typeCheckConfig(config); 6112 this._checkContent(config.content); 6113 } 6114 _checkContent(arg) { 6115 for (const [selector, content] of Object.entries(arg)) { 6116 super._typeCheckConfig({ 6117 selector, 6118 entry: content 6119 }, DefaultContentType); 6120 } 6121 } 6122 _setContent(template, content, selector) { 6123 const templateElement = SelectorEngine.findOne(selector, template); 6124 if (!templateElement) { 6125 return; 6126 } 6127 content = this._resolvePossibleFunction(content); 6128 if (!content) { 6129 templateElement.remove(); 6130 return; 6131 } 6132 if (isElement(content)) { 6133 this._putElementInTemplate(getElement(content), templateElement); 6134 return; 6135 } 6136 if (this._config.html) { 6137 templateElement.innerHTML = this._maybeSanitize(content); 6138 return; 6139 } 6140 templateElement.textContent = content; 6141 } 6142 _maybeSanitize(arg) { 6143 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; 6144 } 6145 _resolvePossibleFunction(arg) { 6146 return execute(arg, [this]); 6147 } 6148 _putElementInTemplate(element, templateElement) { 6149 if (this._config.html) { 6150 templateElement.innerHTML = ''; 6151 templateElement.append(element); 6152 return; 6153 } 6154 templateElement.textContent = element.textContent; 6155 } 6156 } 6157 6158 /** 6159 * -------------------------------------------------------------------------- 6160 * Bootstrap tooltip.js 6161 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6162 * -------------------------------------------------------------------------- 6163 */ 6164 6165 6166 /** 6167 * Constants 6168 */ 6169 6170 const NAME$4 = 'tooltip'; 6171 const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 6172 const CLASS_NAME_FADE$2 = 'fade'; 6173 const CLASS_NAME_MODAL = 'modal'; 6174 const CLASS_NAME_SHOW$2 = 'show'; 6175 const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 6176 const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 6177 const EVENT_MODAL_HIDE = 'hide.bs.modal'; 6178 const TRIGGER_HOVER = 'hover'; 6179 const TRIGGER_FOCUS = 'focus'; 6180 const TRIGGER_CLICK = 'click'; 6181 const TRIGGER_MANUAL = 'manual'; 6182 const EVENT_HIDE$2 = 'hide'; 6183 const EVENT_HIDDEN$2 = 'hidden'; 6184 const EVENT_SHOW$2 = 'show'; 6185 const EVENT_SHOWN$2 = 'shown'; 6186 const EVENT_INSERTED = 'inserted'; 6187 const EVENT_CLICK$1 = 'click'; 6188 const EVENT_FOCUSIN$1 = 'focusin'; 6189 const EVENT_FOCUSOUT$1 = 'focusout'; 6190 const EVENT_MOUSEENTER = 'mouseenter'; 6191 const EVENT_MOUSELEAVE = 'mouseleave'; 6192 const AttachmentMap = { 6193 AUTO: 'auto', 6194 TOP: 'top', 6195 RIGHT: isRTL() ? 'left' : 'right', 6196 BOTTOM: 'bottom', 6197 LEFT: isRTL() ? 'right' : 'left' 6198 }; 6199 const Default$3 = { 6200 allowList: DefaultAllowlist, 6201 animation: true, 6202 boundary: 'clippingParents', 6203 container: false, 6204 customClass: '', 6205 delay: 0, 6206 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 6207 html: false, 6208 offset: [0, 6], 6209 placement: 'top', 6210 popperConfig: null, 6211 sanitize: true, 6212 sanitizeFn: null, 6213 selector: false, 6214 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 6215 title: '', 6216 trigger: 'hover focus' 6217 }; 6218 const DefaultType$3 = { 6219 allowList: 'object', 6220 animation: 'boolean', 6221 boundary: '(string|element)', 6222 container: '(string|element|boolean)', 6223 customClass: '(string|function)', 6224 delay: '(number|object)', 6225 fallbackPlacements: 'array', 6226 html: 'boolean', 6227 offset: '(array|string|function)', 6228 placement: '(string|function)', 6229 popperConfig: '(null|object|function)', 6230 sanitize: 'boolean', 6231 sanitizeFn: '(null|function)', 6232 selector: '(string|boolean)', 6233 template: 'string', 6234 title: '(string|element|function)', 6235 trigger: 'string' 6236 }; 6237 6238 /** 6239 * Class definition 6240 */ 6241 6242 class Tooltip extends BaseComponent { 6243 constructor(element, config) { 6244 if (typeof Popper__namespace === 'undefined') { 6245 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 6246 } 6247 super(element, config); 6248 6249 // Private 6250 this._isEnabled = true; 6251 this._timeout = 0; 6252 this._isHovered = null; 6253 this._activeTrigger = {}; 6254 this._popper = null; 6255 this._templateFactory = null; 6256 this._newContent = null; 6257 6258 // Protected 6259 this.tip = null; 6260 this._setListeners(); 6261 if (!this._config.selector) { 6262 this._fixTitle(); 6263 } 6264 } 6265 6266 // Getters 6267 static get Default() { 6268 return Default$3; 6269 } 6270 static get DefaultType() { 6271 return DefaultType$3; 6272 } 6273 static get NAME() { 6274 return NAME$4; 6275 } 6276 6277 // Public 6278 enable() { 6279 this._isEnabled = true; 6280 } 6281 disable() { 6282 this._isEnabled = false; 6283 } 6284 toggleEnabled() { 6285 this._isEnabled = !this._isEnabled; 6286 } 6287 toggle() { 6288 if (!this._isEnabled) { 6289 return; 6290 } 6291 this._activeTrigger.click = !this._activeTrigger.click; 6292 if (this._isShown()) { 6293 this._leave(); 6294 return; 6295 } 6296 this._enter(); 6297 } 6298 dispose() { 6299 clearTimeout(this._timeout); 6300 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6301 if (this._element.getAttribute('data-bs-original-title')) { 6302 this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); 6303 } 6304 this._disposePopper(); 6305 super.dispose(); 6306 } 6307 show() { 6308 if (this._element.style.display === 'none') { 6309 throw new Error('Please use show on visible elements'); 6310 } 6311 if (!(this._isWithContent() && this._isEnabled)) { 6312 return; 6313 } 6314 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 6315 const shadowRoot = findShadowRoot(this._element); 6316 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 6317 if (showEvent.defaultPrevented || !isInTheDom) { 6318 return; 6319 } 6320 6321 // TODO: v6 remove this or make it optional 6322 this._disposePopper(); 6323 const tip = this._getTipElement(); 6324 this._element.setAttribute('aria-describedby', tip.getAttribute('id')); 6325 const { 6326 container 6327 } = this._config; 6328 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 6329 container.append(tip); 6330 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 6331 } 6332 this._popper = this._createPopper(tip); 6333 tip.classList.add(CLASS_NAME_SHOW$2); 6334 6335 // If this is a touch-enabled device we add extra 6336 // empty mouseover listeners to the body's immediate children; 6337 // only needed because of broken event delegation on iOS 6338 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 6339 if ('ontouchstart' in document.documentElement) { 6340 for (const element of [].concat(...document.body.children)) { 6341 EventHandler.on(element, 'mouseover', noop); 6342 } 6343 } 6344 const complete = () => { 6345 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 6346 if (this._isHovered === false) { 6347 this._leave(); 6348 } 6349 this._isHovered = false; 6350 }; 6351 this._queueCallback(complete, this.tip, this._isAnimated()); 6352 } 6353 hide() { 6354 if (!this._isShown()) { 6355 return; 6356 } 6357 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 6358 if (hideEvent.defaultPrevented) { 6359 return; 6360 } 6361 const tip = this._getTipElement(); 6362 tip.classList.remove(CLASS_NAME_SHOW$2); 6363 6364 // If this is a touch-enabled device we remove the extra 6365 // empty mouseover listeners we added for iOS support 6366 if ('ontouchstart' in document.documentElement) { 6367 for (const element of [].concat(...document.body.children)) { 6368 EventHandler.off(element, 'mouseover', noop); 6369 } 6370 } 6371 this._activeTrigger[TRIGGER_CLICK] = false; 6372 this._activeTrigger[TRIGGER_FOCUS] = false; 6373 this._activeTrigger[TRIGGER_HOVER] = false; 6374 this._isHovered = null; // it is a trick to support manual triggering 6375 6376 const complete = () => { 6377 if (this._isWithActiveTrigger()) { 6378 return; 6379 } 6380 if (!this._isHovered) { 6381 this._disposePopper(); 6382 } 6383 this._element.removeAttribute('aria-describedby'); 6384 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 6385 }; 6386 this._queueCallback(complete, this.tip, this._isAnimated()); 6387 } 6388 update() { 6389 if (this._popper) { 6390 this._popper.update(); 6391 } 6392 } 6393 6394 // Protected 6395 _isWithContent() { 6396 return Boolean(this._getTitle()); 6397 } 6398 _getTipElement() { 6399 if (!this.tip) { 6400 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 6401 } 6402 return this.tip; 6403 } 6404 _createTipElement(content) { 6405 const tip = this._getTemplateFactory(content).toHtml(); 6406 6407 // TODO: remove this check in v6 6408 if (!tip) { 6409 return null; 6410 } 6411 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 6412 // TODO: v6 the following can be achieved with CSS only 6413 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 6414 const tipId = getUID(this.constructor.NAME).toString(); 6415 tip.setAttribute('id', tipId); 6416 if (this._isAnimated()) { 6417 tip.classList.add(CLASS_NAME_FADE$2); 6418 } 6419 return tip; 6420 } 6421 setContent(content) { 6422 this._newContent = content; 6423 if (this._isShown()) { 6424 this._disposePopper(); 6425 this.show(); 6426 } 6427 } 6428 _getTemplateFactory(content) { 6429 if (this._templateFactory) { 6430 this._templateFactory.changeContent(content); 6431 } else { 6432 this._templateFactory = new TemplateFactory({ 6433 ...this._config, 6434 // the `content` var has to be after `this._config` 6435 // to override config.content in case of popover 6436 content, 6437 extraClass: this._resolvePossibleFunction(this._config.customClass) 6438 }); 6439 } 6440 return this._templateFactory; 6441 } 6442 _getContentForTemplate() { 6443 return { 6444 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 6445 }; 6446 } 6447 _getTitle() { 6448 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); 6449 } 6450 6451 // Private 6452 _initializeOnDelegatedTarget(event) { 6453 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 6454 } 6455 _isAnimated() { 6456 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 6457 } 6458 _isShown() { 6459 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 6460 } 6461 _createPopper(tip) { 6462 const placement = execute(this._config.placement, [this, tip, this._element]); 6463 const attachment = AttachmentMap[placement.toUpperCase()]; 6464 return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment)); 6465 } 6466 _getOffset() { 6467 const { 6468 offset 6469 } = this._config; 6470 if (typeof offset === 'string') { 6471 return offset.split(',').map(value => Number.parseInt(value, 10)); 6472 } 6473 if (typeof offset === 'function') { 6474 return popperData => offset(popperData, this._element); 6475 } 6476 return offset; 6477 } 6478 _resolvePossibleFunction(arg) { 6479 return execute(arg, [this._element]); 6480 } 6481 _getPopperConfig(attachment) { 6482 const defaultBsPopperConfig = { 6483 placement: attachment, 6484 modifiers: [{ 6485 name: 'flip', 6486 options: { 6487 fallbackPlacements: this._config.fallbackPlacements 6488 } 6489 }, { 6490 name: 'offset', 6491 options: { 6492 offset: this._getOffset() 6493 } 6494 }, { 6495 name: 'preventOverflow', 6496 options: { 6497 boundary: this._config.boundary 6498 } 6499 }, { 6500 name: 'arrow', 6501 options: { 6502 element: `.${this.constructor.NAME}-arrow` 6503 } 6504 }, { 6505 name: 'preSetPlacement', 6506 enabled: true, 6507 phase: 'beforeMain', 6508 fn: data => { 6509 // Pre-set Popper's placement attribute in order to read the arrow sizes properly. 6510 // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement 6511 this._getTipElement().setAttribute('data-popper-placement', data.state.placement); 6512 } 6513 }] 6514 }; 6515 return { 6516 ...defaultBsPopperConfig, 6517 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 6518 }; 6519 } 6520 _setListeners() { 6521 const triggers = this._config.trigger.split(' '); 6522 for (const trigger of triggers) { 6523 if (trigger === 'click') { 6524 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { 6525 const context = this._initializeOnDelegatedTarget(event); 6526 context.toggle(); 6527 }); 6528 } else if (trigger !== TRIGGER_MANUAL) { 6529 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 6530 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 6531 EventHandler.on(this._element, eventIn, this._config.selector, event => { 6532 const context = this._initializeOnDelegatedTarget(event); 6533 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 6534 context._enter(); 6535 }); 6536 EventHandler.on(this._element, eventOut, this._config.selector, event => { 6537 const context = this._initializeOnDelegatedTarget(event); 6538 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 6539 context._leave(); 6540 }); 6541 } 6542 } 6543 this._hideModalHandler = () => { 6544 if (this._element) { 6545 this.hide(); 6546 } 6547 }; 6548 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6549 } 6550 _fixTitle() { 6551 const title = this._element.getAttribute('title'); 6552 if (!title) { 6553 return; 6554 } 6555 if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { 6556 this._element.setAttribute('aria-label', title); 6557 } 6558 this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility 6559 this._element.removeAttribute('title'); 6560 } 6561 _enter() { 6562 if (this._isShown() || this._isHovered) { 6563 this._isHovered = true; 6564 return; 6565 } 6566 this._isHovered = true; 6567 this._setTimeout(() => { 6568 if (this._isHovered) { 6569 this.show(); 6570 } 6571 }, this._config.delay.show); 6572 } 6573 _leave() { 6574 if (this._isWithActiveTrigger()) { 6575 return; 6576 } 6577 this._isHovered = false; 6578 this._setTimeout(() => { 6579 if (!this._isHovered) { 6580 this.hide(); 6581 } 6582 }, this._config.delay.hide); 6583 } 6584 _setTimeout(handler, timeout) { 6585 clearTimeout(this._timeout); 6586 this._timeout = setTimeout(handler, timeout); 6587 } 6588 _isWithActiveTrigger() { 6589 return Object.values(this._activeTrigger).includes(true); 6590 } 6591 _getConfig(config) { 6592 const dataAttributes = Manipulator.getDataAttributes(this._element); 6593 for (const dataAttribute of Object.keys(dataAttributes)) { 6594 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 6595 delete dataAttributes[dataAttribute]; 6596 } 6597 } 6598 config = { 6599 ...dataAttributes, 6600 ...(typeof config === 'object' && config ? config : {}) 6601 }; 6602 config = this._mergeConfigObj(config); 6603 config = this._configAfterMerge(config); 6604 this._typeCheckConfig(config); 6605 return config; 6606 } 6607 _configAfterMerge(config) { 6608 config.container = config.container === false ? document.body : getElement(config.container); 6609 if (typeof config.delay === 'number') { 6610 config.delay = { 6611 show: config.delay, 6612 hide: config.delay 6613 }; 6614 } 6615 if (typeof config.title === 'number') { 6616 config.title = config.title.toString(); 6617 } 6618 if (typeof config.content === 'number') { 6619 config.content = config.content.toString(); 6620 } 6621 return config; 6622 } 6623 _getDelegateConfig() { 6624 const config = {}; 6625 for (const [key, value] of Object.entries(this._config)) { 6626 if (this.constructor.Default[key] !== value) { 6627 config[key] = value; 6628 } 6629 } 6630 config.selector = false; 6631 config.trigger = 'manual'; 6632 6633 // In the future can be replaced with: 6634 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 6635 // `Object.fromEntries(keysWithDifferentValues)` 6636 return config; 6637 } 6638 _disposePopper() { 6639 if (this._popper) { 6640 this._popper.destroy(); 6641 this._popper = null; 6642 } 6643 if (this.tip) { 6644 this.tip.remove(); 6645 this.tip = null; 6646 } 6647 } 6648 6649 // Static 6650 static jQueryInterface(config) { 6651 return this.each(function () { 6652 const data = Tooltip.getOrCreateInstance(this, config); 6653 if (typeof config !== 'string') { 6654 return; 6655 } 6656 if (typeof data[config] === 'undefined') { 6657 throw new TypeError(`No method named "${config}"`); 6658 } 6659 data[config](); 6660 }); 6661 } 6662 } 6663 6664 /** 6665 * jQuery 6666 */ 6667 6668 defineJQueryPlugin(Tooltip); 6669 6670 /** 6671 * -------------------------------------------------------------------------- 6672 * Bootstrap popover.js 6673 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6674 * -------------------------------------------------------------------------- 6675 */ 6676 6677 6678 /** 6679 * Constants 6680 */ 6681 6682 const NAME$3 = 'popover'; 6683 const SELECTOR_TITLE = '.popover-header'; 6684 const SELECTOR_CONTENT = '.popover-body'; 6685 const Default$2 = { 6686 ...Tooltip.Default, 6687 content: '', 6688 offset: [0, 8], 6689 placement: 'right', 6690 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', 6691 trigger: 'click' 6692 }; 6693 const DefaultType$2 = { 6694 ...Tooltip.DefaultType, 6695 content: '(null|string|element|function)' 6696 }; 6697 6698 /** 6699 * Class definition 6700 */ 6701 6702 class Popover extends Tooltip { 6703 // Getters 6704 static get Default() { 6705 return Default$2; 6706 } 6707 static get DefaultType() { 6708 return DefaultType$2; 6709 } 6710 static get NAME() { 6711 return NAME$3; 6712 } 6713 6714 // Overrides 6715 _isWithContent() { 6716 return this._getTitle() || this._getContent(); 6717 } 6718 6719 // Private 6720 _getContentForTemplate() { 6721 return { 6722 [SELECTOR_TITLE]: this._getTitle(), 6723 [SELECTOR_CONTENT]: this._getContent() 6724 }; 6725 } 6726 _getContent() { 6727 return this._resolvePossibleFunction(this._config.content); 6728 } 6729 6730 // Static 6731 static jQueryInterface(config) { 6732 return this.each(function () { 6733 const data = Popover.getOrCreateInstance(this, config); 6734 if (typeof config !== 'string') { 6735 return; 6736 } 6737 if (typeof data[config] === 'undefined') { 6738 throw new TypeError(`No method named "${config}"`); 6739 } 6740 data[config](); 6741 }); 6742 } 6743 } 6744 6745 /** 6746 * jQuery 6747 */ 6748 6749 defineJQueryPlugin(Popover); 6750 6751 /** 6752 * -------------------------------------------------------------------------- 6753 * Bootstrap scrollspy.js 6754 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6755 * -------------------------------------------------------------------------- 6756 */ 6757 6758 6759 /** 6760 * Constants 6761 */ 6762 6763 const NAME$2 = 'scrollspy'; 6764 const DATA_KEY$2 = 'bs.scrollspy'; 6765 const EVENT_KEY$2 = `.${DATA_KEY$2}`; 6766 const DATA_API_KEY = '.data-api'; 6767 const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 6768 const EVENT_CLICK = `click${EVENT_KEY$2}`; 6769 const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`; 6770 const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 6771 const CLASS_NAME_ACTIVE$1 = 'active'; 6772 const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 6773 const SELECTOR_TARGET_LINKS = '[href]'; 6774 const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 6775 const SELECTOR_NAV_LINKS = '.nav-link'; 6776 const SELECTOR_NAV_ITEMS = '.nav-item'; 6777 const SELECTOR_LIST_ITEMS = '.list-group-item'; 6778 const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 6779 const SELECTOR_DROPDOWN = '.dropdown'; 6780 const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 6781 const Default$1 = { 6782 offset: null, 6783 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 6784 rootMargin: '0px 0px -25%', 6785 smoothScroll: false, 6786 target: null, 6787 threshold: [0.1, 0.5, 1] 6788 }; 6789 const DefaultType$1 = { 6790 offset: '(number|null)', 6791 // TODO v6 @deprecated, keep it for backwards compatibility reasons 6792 rootMargin: 'string', 6793 smoothScroll: 'boolean', 6794 target: 'element', 6795 threshold: 'array' 6796 }; 6797 6798 /** 6799 * Class definition 6800 */ 6801 6802 class ScrollSpy extends BaseComponent { 6803 constructor(element, config) { 6804 super(element, config); 6805 6806 // this._element is the observablesContainer and config.target the menu links wrapper 6807 this._targetLinks = new Map(); 6808 this._observableSections = new Map(); 6809 this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; 6810 this._activeTarget = null; 6811 this._observer = null; 6812 this._previousScrollData = { 6813 visibleEntryTop: 0, 6814 parentScrollTop: 0 6815 }; 6816 this.refresh(); // initialize 6817 } 6818 6819 // Getters 6820 static get Default() { 6821 return Default$1; 6822 } 6823 static get DefaultType() { 6824 return DefaultType$1; 6825 } 6826 static get NAME() { 6827 return NAME$2; 6828 } 6829 6830 // Public 6831 refresh() { 6832 this._initializeTargetsAndObservables(); 6833 this._maybeEnableSmoothScroll(); 6834 if (this._observer) { 6835 this._observer.disconnect(); 6836 } else { 6837 this._observer = this._getNewObserver(); 6838 } 6839 for (const section of this._observableSections.values()) { 6840 this._observer.observe(section); 6841 } 6842 } 6843 dispose() { 6844 this._observer.disconnect(); 6845 super.dispose(); 6846 } 6847 6848 // Private 6849 _configAfterMerge(config) { 6850 // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case 6851 config.target = getElement(config.target) || document.body; 6852 6853 // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only 6854 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 6855 if (typeof config.threshold === 'string') { 6856 config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); 6857 } 6858 return config; 6859 } 6860 _maybeEnableSmoothScroll() { 6861 if (!this._config.smoothScroll) { 6862 return; 6863 } 6864 6865 // unregister any previous listeners 6866 EventHandler.off(this._config.target, EVENT_CLICK); 6867 EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { 6868 const observableSection = this._observableSections.get(event.target.hash); 6869 if (observableSection) { 6870 event.preventDefault(); 6871 const root = this._rootElement || window; 6872 const height = observableSection.offsetTop - this._element.offsetTop; 6873 if (root.scrollTo) { 6874 root.scrollTo({ 6875 top: height, 6876 behavior: 'smooth' 6877 }); 6878 return; 6879 } 6880 6881 // Chrome 60 doesn't support `scrollTo` 6882 root.scrollTop = height; 6883 } 6884 }); 6885 } 6886 _getNewObserver() { 6887 const options = { 6888 root: this._rootElement, 6889 threshold: this._config.threshold, 6890 rootMargin: this._config.rootMargin 6891 }; 6892 return new IntersectionObserver(entries => this._observerCallback(entries), options); 6893 } 6894 6895 // The logic of selection 6896 _observerCallback(entries) { 6897 const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); 6898 const activate = entry => { 6899 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 6900 this._process(targetElement(entry)); 6901 }; 6902 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 6903 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 6904 this._previousScrollData.parentScrollTop = parentScrollTop; 6905 for (const entry of entries) { 6906 if (!entry.isIntersecting) { 6907 this._activeTarget = null; 6908 this._clearActiveClass(targetElement(entry)); 6909 continue; 6910 } 6911 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; 6912 // if we are scrolling down, pick the bigger offsetTop 6913 if (userScrollsDown && entryIsLowerThanPrevious) { 6914 activate(entry); 6915 // if parent isn't scrolled, let's keep the first visible item, breaking the iteration 6916 if (!parentScrollTop) { 6917 return; 6918 } 6919 continue; 6920 } 6921 6922 // if we are scrolling up, pick the smallest offsetTop 6923 if (!userScrollsDown && !entryIsLowerThanPrevious) { 6924 activate(entry); 6925 } 6926 } 6927 } 6928 _initializeTargetsAndObservables() { 6929 this._targetLinks = new Map(); 6930 this._observableSections = new Map(); 6931 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 6932 for (const anchor of targetLinks) { 6933 // ensure that the anchor has an id and is not disabled 6934 if (!anchor.hash || isDisabled(anchor)) { 6935 continue; 6936 } 6937 const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element); 6938 6939 // ensure that the observableSection exists & is visible 6940 if (isVisible(observableSection)) { 6941 this._targetLinks.set(decodeURI(anchor.hash), anchor); 6942 this._observableSections.set(anchor.hash, observableSection); 6943 } 6944 } 6945 } 6946 _process(target) { 6947 if (this._activeTarget === target) { 6948 return; 6949 } 6950 this._clearActiveClass(this._config.target); 6951 this._activeTarget = target; 6952 target.classList.add(CLASS_NAME_ACTIVE$1); 6953 this._activateParents(target); 6954 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 6955 relatedTarget: target 6956 }); 6957 } 6958 _activateParents(target) { 6959 // Activate dropdown parents 6960 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 6961 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 6962 return; 6963 } 6964 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 6965 // Set triggered links parents as active 6966 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 6967 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 6968 item.classList.add(CLASS_NAME_ACTIVE$1); 6969 } 6970 } 6971 } 6972 _clearActiveClass(parent) { 6973 parent.classList.remove(CLASS_NAME_ACTIVE$1); 6974 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 6975 for (const node of activeNodes) { 6976 node.classList.remove(CLASS_NAME_ACTIVE$1); 6977 } 6978 } 6979 6980 // Static 6981 static jQueryInterface(config) { 6982 return this.each(function () { 6983 const data = ScrollSpy.getOrCreateInstance(this, config); 6984 if (typeof config !== 'string') { 6985 return; 6986 } 6987 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6988 throw new TypeError(`No method named "${config}"`); 6989 } 6990 data[config](); 6991 }); 6992 } 6993 } 6994 6995 /** 6996 * Data API implementation 6997 */ 6998 6999 EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 7000 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 7001 ScrollSpy.getOrCreateInstance(spy); 7002 } 7003 }); 7004 7005 /** 7006 * jQuery 7007 */ 7008 7009 defineJQueryPlugin(ScrollSpy); 7010 7011 /** 7012 * -------------------------------------------------------------------------- 7013 * Bootstrap tab.js 7014 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7015 * -------------------------------------------------------------------------- 7016 */ 7017 7018 7019 /** 7020 * Constants 7021 */ 7022 7023 const NAME$1 = 'tab'; 7024 const DATA_KEY$1 = 'bs.tab'; 7025 const EVENT_KEY$1 = `.${DATA_KEY$1}`; 7026 const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 7027 const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 7028 const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 7029 const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 7030 const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 7031 const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 7032 const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 7033 const ARROW_LEFT_KEY = 'ArrowLeft'; 7034 const ARROW_RIGHT_KEY = 'ArrowRight'; 7035 const ARROW_UP_KEY = 'ArrowUp'; 7036 const ARROW_DOWN_KEY = 'ArrowDown'; 7037 const HOME_KEY = 'Home'; 7038 const END_KEY = 'End'; 7039 const CLASS_NAME_ACTIVE = 'active'; 7040 const CLASS_NAME_FADE$1 = 'fade'; 7041 const CLASS_NAME_SHOW$1 = 'show'; 7042 const CLASS_DROPDOWN = 'dropdown'; 7043 const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 7044 const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'; 7045 const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`; 7046 const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 7047 const SELECTOR_OUTER = '.nav-item, .list-group-item'; 7048 const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 7049 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6 7050 const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 7051 const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`; 7052 7053 /** 7054 * Class definition 7055 */ 7056 7057 class Tab extends BaseComponent { 7058 constructor(element) { 7059 super(element); 7060 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 7061 if (!this._parent) { 7062 return; 7063 // TODO: should throw exception in v6 7064 // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) 7065 } 7066 7067 // Set up initial aria attributes 7068 this._setInitialAttributes(this._parent, this._getChildren()); 7069 EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); 7070 } 7071 7072 // Getters 7073 static get NAME() { 7074 return NAME$1; 7075 } 7076 7077 // Public 7078 show() { 7079 // Shows this elem and deactivate the active sibling if exists 7080 const innerElem = this._element; 7081 if (this._elemIsActive(innerElem)) { 7082 return; 7083 } 7084 7085 // Search for active tab on same parent to deactivate it 7086 const active = this._getActiveElem(); 7087 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 7088 relatedTarget: innerElem 7089 }) : null; 7090 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 7091 relatedTarget: active 7092 }); 7093 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 7094 return; 7095 } 7096 this._deactivate(active, innerElem); 7097 this._activate(innerElem, active); 7098 } 7099 7100 // Private 7101 _activate(element, relatedElem) { 7102 if (!element) { 7103 return; 7104 } 7105 element.classList.add(CLASS_NAME_ACTIVE); 7106 this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section 7107 7108 const complete = () => { 7109 if (element.getAttribute('role') !== 'tab') { 7110 element.classList.add(CLASS_NAME_SHOW$1); 7111 return; 7112 } 7113 element.removeAttribute('tabindex'); 7114 element.setAttribute('aria-selected', true); 7115 this._toggleDropDown(element, true); 7116 EventHandler.trigger(element, EVENT_SHOWN$1, { 7117 relatedTarget: relatedElem 7118 }); 7119 }; 7120 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7121 } 7122 _deactivate(element, relatedElem) { 7123 if (!element) { 7124 return; 7125 } 7126 element.classList.remove(CLASS_NAME_ACTIVE); 7127 element.blur(); 7128 this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too 7129 7130 const complete = () => { 7131 if (element.getAttribute('role') !== 'tab') { 7132 element.classList.remove(CLASS_NAME_SHOW$1); 7133 return; 7134 } 7135 element.setAttribute('aria-selected', false); 7136 element.setAttribute('tabindex', '-1'); 7137 this._toggleDropDown(element, false); 7138 EventHandler.trigger(element, EVENT_HIDDEN$1, { 7139 relatedTarget: relatedElem 7140 }); 7141 }; 7142 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7143 } 7144 _keydown(event) { 7145 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) { 7146 return; 7147 } 7148 event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page 7149 event.preventDefault(); 7150 const children = this._getChildren().filter(element => !isDisabled(element)); 7151 let nextActiveElement; 7152 if ([HOME_KEY, END_KEY].includes(event.key)) { 7153 nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]; 7154 } else { 7155 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 7156 nextActiveElement = getNextActiveElement(children, event.target, isNext, true); 7157 } 7158 if (nextActiveElement) { 7159 nextActiveElement.focus({ 7160 preventScroll: true 7161 }); 7162 Tab.getOrCreateInstance(nextActiveElement).show(); 7163 } 7164 } 7165 _getChildren() { 7166 // collection of inner elements 7167 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 7168 } 7169 _getActiveElem() { 7170 return this._getChildren().find(child => this._elemIsActive(child)) || null; 7171 } 7172 _setInitialAttributes(parent, children) { 7173 this._setAttributeIfNotExists(parent, 'role', 'tablist'); 7174 for (const child of children) { 7175 this._setInitialAttributesOnChild(child); 7176 } 7177 } 7178 _setInitialAttributesOnChild(child) { 7179 child = this._getInnerElement(child); 7180 const isActive = this._elemIsActive(child); 7181 const outerElem = this._getOuterElement(child); 7182 child.setAttribute('aria-selected', isActive); 7183 if (outerElem !== child) { 7184 this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); 7185 } 7186 if (!isActive) { 7187 child.setAttribute('tabindex', '-1'); 7188 } 7189 this._setAttributeIfNotExists(child, 'role', 'tab'); 7190 7191 // set attributes to the related panel too 7192 this._setInitialAttributesOnTargetPanel(child); 7193 } 7194 _setInitialAttributesOnTargetPanel(child) { 7195 const target = SelectorEngine.getElementFromSelector(child); 7196 if (!target) { 7197 return; 7198 } 7199 this._setAttributeIfNotExists(target, 'role', 'tabpanel'); 7200 if (child.id) { 7201 this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`); 7202 } 7203 } 7204 _toggleDropDown(element, open) { 7205 const outerElem = this._getOuterElement(element); 7206 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 7207 return; 7208 } 7209 const toggle = (selector, className) => { 7210 const element = SelectorEngine.findOne(selector, outerElem); 7211 if (element) { 7212 element.classList.toggle(className, open); 7213 } 7214 }; 7215 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 7216 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 7217 outerElem.setAttribute('aria-expanded', open); 7218 } 7219 _setAttributeIfNotExists(element, attribute, value) { 7220 if (!element.hasAttribute(attribute)) { 7221 element.setAttribute(attribute, value); 7222 } 7223 } 7224 _elemIsActive(elem) { 7225 return elem.classList.contains(CLASS_NAME_ACTIVE); 7226 } 7227 7228 // Try to get the inner element (usually the .nav-link) 7229 _getInnerElement(elem) { 7230 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 7231 } 7232 7233 // Try to get the outer element (usually the .nav-item) 7234 _getOuterElement(elem) { 7235 return elem.closest(SELECTOR_OUTER) || elem; 7236 } 7237 7238 // Static 7239 static jQueryInterface(config) { 7240 return this.each(function () { 7241 const data = Tab.getOrCreateInstance(this); 7242 if (typeof config !== 'string') { 7243 return; 7244 } 7245 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7246 throw new TypeError(`No method named "${config}"`); 7247 } 7248 data[config](); 7249 }); 7250 } 7251 } 7252 7253 /** 7254 * Data API implementation 7255 */ 7256 7257 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 7258 if (['A', 'AREA'].includes(this.tagName)) { 7259 event.preventDefault(); 7260 } 7261 if (isDisabled(this)) { 7262 return; 7263 } 7264 Tab.getOrCreateInstance(this).show(); 7265 }); 7266 7267 /** 7268 * Initialize on focus 7269 */ 7270 EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 7271 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 7272 Tab.getOrCreateInstance(element); 7273 } 7274 }); 7275 /** 7276 * jQuery 7277 */ 7278 7279 defineJQueryPlugin(Tab); 7280 7281 /** 7282 * -------------------------------------------------------------------------- 7283 * Bootstrap toast.js 7284 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7285 * -------------------------------------------------------------------------- 7286 */ 7287 7288 7289 /** 7290 * Constants 7291 */ 7292 7293 const NAME = 'toast'; 7294 const DATA_KEY = 'bs.toast'; 7295 const EVENT_KEY = `.${DATA_KEY}`; 7296 const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 7297 const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 7298 const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 7299 const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 7300 const EVENT_HIDE = `hide${EVENT_KEY}`; 7301 const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 7302 const EVENT_SHOW = `show${EVENT_KEY}`; 7303 const EVENT_SHOWN = `shown${EVENT_KEY}`; 7304 const CLASS_NAME_FADE = 'fade'; 7305 const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 7306 const CLASS_NAME_SHOW = 'show'; 7307 const CLASS_NAME_SHOWING = 'showing'; 7308 const DefaultType = { 7309 animation: 'boolean', 7310 autohide: 'boolean', 7311 delay: 'number' 7312 }; 7313 const Default = { 7314 animation: true, 7315 autohide: true, 7316 delay: 5000 7317 }; 7318 7319 /** 7320 * Class definition 7321 */ 7322 7323 class Toast extends BaseComponent { 7324 constructor(element, config) { 7325 super(element, config); 7326 this._timeout = null; 7327 this._hasMouseInteraction = false; 7328 this._hasKeyboardInteraction = false; 7329 this._setListeners(); 7330 } 7331 7332 // Getters 7333 static get Default() { 7334 return Default; 7335 } 7336 static get DefaultType() { 7337 return DefaultType; 7338 } 7339 static get NAME() { 7340 return NAME; 7341 } 7342 7343 // Public 7344 show() { 7345 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 7346 if (showEvent.defaultPrevented) { 7347 return; 7348 } 7349 this._clearTimeout(); 7350 if (this._config.animation) { 7351 this._element.classList.add(CLASS_NAME_FADE); 7352 } 7353 const complete = () => { 7354 this._element.classList.remove(CLASS_NAME_SHOWING); 7355 EventHandler.trigger(this._element, EVENT_SHOWN); 7356 this._maybeScheduleHide(); 7357 }; 7358 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 7359 reflow(this._element); 7360 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 7361 this._queueCallback(complete, this._element, this._config.animation); 7362 } 7363 hide() { 7364 if (!this.isShown()) { 7365 return; 7366 } 7367 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 7368 if (hideEvent.defaultPrevented) { 7369 return; 7370 } 7371 const complete = () => { 7372 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 7373 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 7374 EventHandler.trigger(this._element, EVENT_HIDDEN); 7375 }; 7376 this._element.classList.add(CLASS_NAME_SHOWING); 7377 this._queueCallback(complete, this._element, this._config.animation); 7378 } 7379 dispose() { 7380 this._clearTimeout(); 7381 if (this.isShown()) { 7382 this._element.classList.remove(CLASS_NAME_SHOW); 7383 } 7384 super.dispose(); 7385 } 7386 isShown() { 7387 return this._element.classList.contains(CLASS_NAME_SHOW); 7388 } 7389 7390 // Private 7391 7392 _maybeScheduleHide() { 7393 if (!this._config.autohide) { 7394 return; 7395 } 7396 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 7397 return; 7398 } 7399 this._timeout = setTimeout(() => { 7400 this.hide(); 7401 }, this._config.delay); 7402 } 7403 _onInteraction(event, isInteracting) { 7404 switch (event.type) { 7405 case 'mouseover': 7406 case 'mouseout': 7407 { 7408 this._hasMouseInteraction = isInteracting; 7409 break; 7410 } 7411 case 'focusin': 7412 case 'focusout': 7413 { 7414 this._hasKeyboardInteraction = isInteracting; 7415 break; 7416 } 7417 } 7418 if (isInteracting) { 7419 this._clearTimeout(); 7420 return; 7421 } 7422 const nextElement = event.relatedTarget; 7423 if (this._element === nextElement || this._element.contains(nextElement)) { 7424 return; 7425 } 7426 this._maybeScheduleHide(); 7427 } 7428 _setListeners() { 7429 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 7430 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 7431 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 7432 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 7433 } 7434 _clearTimeout() { 7435 clearTimeout(this._timeout); 7436 this._timeout = null; 7437 } 7438 7439 // Static 7440 static jQueryInterface(config) { 7441 return this.each(function () { 7442 const data = Toast.getOrCreateInstance(this, config); 7443 if (typeof config === 'string') { 7444 if (typeof data[config] === 'undefined') { 7445 throw new TypeError(`No method named "${config}"`); 7446 } 7447 data[config](this); 7448 } 7449 }); 7450 } 7451 } 7452 7453 /** 7454 * Data API implementation 7455 */ 7456 7457 enableDismissTrigger(Toast); 7458 7459 /** 7460 * jQuery 7461 */ 7462 7463 defineJQueryPlugin(Toast); 7464 7465 /** 7466 * -------------------------------------------------------------------------- 7467 * Bootstrap index.umd.js 7468 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7469 * -------------------------------------------------------------------------- 7470 */ 7471 7472 const index_umd = { 7473 Alert, 7474 Button, 7475 Carousel, 7476 Collapse, 7477 Dropdown, 7478 Modal, 7479 Offcanvas, 7480 Popover, 7481 ScrollSpy, 7482 Tab, 7483 Toast, 7484 Tooltip 7485 }; 7486 7487 return index_umd; 7488 7489})); 7490//# sourceMappingURL=bootstrap.js.map 7491 7492 7493/***/ }), 7494
vendor: 2,046 bytes, lines 7495-7524
7495/***/ "./node_modules/jquery/dist/jquery-exposed-exposed.js": 7496/*!************************************************************!*\ 7497 !*** ./node_modules/jquery/dist/jquery-exposed-exposed.js ***! 7498 \************************************************************/ 7499/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 7500 7501var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(/*! -!../../expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./jquery.js */ "./node_modules/expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/jquery/dist/jquery-exposed.js"); 7502var ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(/*! ../../expose-loader/dist/runtime/getGlobalThis.js */ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js"); 7503var ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___; 7504___EXPOSE_LOADER_GLOBAL_THIS___["$"] = ___EXPOSE_LOADER_IMPORT___; 7505module.exports = ___EXPOSE_LOADER_IMPORT___; 7506 7507 7508/***/ }), 7509 7510/***/ "./node_modules/expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/jquery/dist/jquery-exposed.js": 7511/*!*************************************************************************************************************************!*\ 7512 !*** ./node_modules/expose-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/jquery/dist/jquery-exposed.js ***! 7513 \*************************************************************************************************************************/ 7514/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 7515 7516var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(/*! -!./jquery.js */ "./node_modules/jquery/dist/jquery.js"); 7517var ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(/*! ../../expose-loader/dist/runtime/getGlobalThis.js */ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js"); 7518var ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___; 7519___EXPOSE_LOADER_GLOBAL_THIS___["jQuery"] = ___EXPOSE_LOADER_IMPORT___; 7520module.exports = ___EXPOSE_LOADER_IMPORT___; 7521 7522 7523/***/ }), 7524
vendor: 1,103 bytes, lines 7525-7564
7525/***/ "./node_modules/expose-loader/dist/runtime/getGlobalThis.js": 7526/*!******************************************************************!*\ 7527 !*** ./node_modules/expose-loader/dist/runtime/getGlobalThis.js ***! 7528 \******************************************************************/ 7529/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 7530 7531"use strict"; 7532 7533 7534// eslint-disable-next-line func-names 7535module.exports = function () { 7536 if (typeof globalThis === "object") { 7537 return globalThis; 7538 } 7539 var g; 7540 try { 7541 // This works if eval is allowed (see CSP) 7542 // eslint-disable-next-line no-new-func 7543 g = this || new Function("return this")(); 7544 } catch (e) { 7545 // This works if the window reference is available 7546 if (typeof window === "object") { 7547 return window; 7548 } 7549 7550 // This works if the self reference is available 7551 if (typeof self === "object") { 7552 return self; 7553 } 7554 7555 // This works if the global reference is available 7556 if (typeof __webpack_require__.g !== "undefined") { 7557 return __webpack_require__.g; 7558 } 7559 } 7560 return g; 7561}(); 7562 7563/***/ }), 7564
vendor: 285,755 bytes, lines 7565-18291
7565/***/ "./node_modules/jquery/dist/jquery.js": 7566/*!********************************************!*\ 7567 !*** ./node_modules/jquery/dist/jquery.js ***! 7568 \********************************************/ 7569/***/ (function(module, exports) { 7570 7571var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 7572 * jQuery JavaScript Library v3.7.1 7573 * https://jquery.com/ 7574 * 7575 * Copyright OpenJS Foundation and other contributors 7576 * Released under the MIT license 7577 * https://jquery.org/license 7578 * 7579 * Date: 2023-08-28T13:37Z 7580 */ 7581( function( global, factory ) { 7582 7583 "use strict"; 7584 7585 if ( true && typeof module.exports === "object" ) { 7586 7587 // For CommonJS and CommonJS-like environments where a proper `window` 7588 // is present, execute the factory and get jQuery. 7589 // For environments that do not have a `window` with a `document` 7590 // (such as Node.js), expose a factory as module.exports. 7591 // This accentuates the need for the creation of a real `window`. 7592 // e.g. var jQuery = require("jquery")(window); 7593 // See ticket trac-14549 for more info. 7594 module.exports = global.document ? 7595 factory( global, true ) : 7596 function( w ) { 7597 if ( !w.document ) { 7598 throw new Error( "jQuery requires a window with a document" ); 7599 } 7600 return factory( w ); 7601 }; 7602 } else { 7603 factory( global ); 7604 } 7605 7606// Pass this if window is not defined yet 7607} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 7608 7609// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 7610// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 7611// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 7612// enough that all such attempts are guarded in a try block. 7613"use strict"; 7614 7615var arr = []; 7616 7617var getProto = Object.getPrototypeOf; 7618 7619var slice = arr.slice; 7620 7621var flat = arr.flat ? function( array ) { 7622 return arr.flat.call( array ); 7623} : function( array ) { 7624 return arr.concat.apply( [], array ); 7625}; 7626 7627 7628var push = arr.push; 7629 7630var indexOf = arr.indexOf; 7631 7632var class2type = {}; 7633 7634var toString = class2type.toString; 7635 7636var hasOwn = class2type.hasOwnProperty; 7637 7638var fnToString = hasOwn.toString; 7639 7640var ObjectFunctionString = fnToString.call( Object ); 7641 7642var support = {}; 7643 7644var isFunction = function isFunction( obj ) { 7645 7646 // Support: Chrome <=57, Firefox <=52 7647 // In some browsers, typeof returns "function" for HTML <object> elements 7648 // (i.e., `typeof document.createElement( "object" ) === "function"`). 7649 // We don't want to classify *any* DOM node as a function. 7650 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 7651 // Plus for old WebKit, typeof returns "function" for HTML collections 7652 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 7653 return typeof obj === "function" && typeof obj.nodeType !== "number" && 7654 typeof obj.item !== "function"; 7655 }; 7656 7657 7658var isWindow = function isWindow( obj ) { 7659 return obj != null && obj === obj.window; 7660 }; 7661 7662 7663var document = window.document; 7664 7665 7666 7667 var preservedScriptAttributes = { 7668 type: true, 7669 src: true, 7670 nonce: true, 7671 noModule: true 7672 }; 7673 7674 function DOMEval( code, node, doc ) { 7675 doc = doc || document; 7676 7677 var i, val, 7678 script = doc.createElement( "script" ); 7679 7680 script.text = code; 7681 if ( node ) { 7682 for ( i in preservedScriptAttributes ) { 7683 7684 // Support: Firefox 64+, Edge 18+ 7685 // Some browsers don't support the "nonce" property on scripts. 7686 // On the other hand, just using `getAttribute` is not enough as 7687 // the `nonce` attribute is reset to an empty string whenever it 7688 // becomes browsing-context connected. 7689 // See https://github.com/whatwg/html/issues/2369 7690 // See https://html.spec.whatwg.org/#nonce-attributes 7691 // The `node.getAttribute` check was added for the sake of 7692 // `jQuery.globalEval` so that it can fake a nonce-containing node 7693 // via an object. 7694 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 7695 if ( val ) { 7696 script.setAttribute( i, val ); 7697 } 7698 } 7699 } 7700 doc.head.appendChild( script ).parentNode.removeChild( script ); 7701 } 7702 7703 7704function toType( obj ) { 7705 if ( obj == null ) { 7706 return obj + ""; 7707 } 7708 7709 // Support: Android <=2.3 only (functionish RegExp) 7710 return typeof obj === "object" || typeof obj === "function" ? 7711 class2type[ toString.call( obj ) ] || "object" : 7712 typeof obj; 7713} 7714/* global Symbol */ 7715// Defining this global in .eslintrc.json would create a danger of using the global 7716// unguarded in another place, it seems safer to define global only for this module 7717 7718 7719 7720var version = "3.7.1", 7721 7722 rhtmlSuffix = /HTML$/i, 7723 7724 // Define a local copy of jQuery 7725 jQuery = function( selector, context ) { 7726 7727 // The jQuery object is actually just the init constructor 'enhanced' 7728 // Need init if jQuery is called (just allow error to be thrown if not included) 7729 return new jQuery.fn.init( selector, context ); 7730 }; 7731 7732jQuery.fn = jQuery.prototype = { 7733 7734 // The current version of jQuery being used 7735 jquery: version, 7736 7737 constructor: jQuery, 7738 7739 // The default length of a jQuery object is 0 7740 length: 0, 7741 7742 toArray: function() { 7743 return slice.call( this ); 7744 }, 7745 7746 // Get the Nth element in the matched element set OR 7747 // Get the whole matched element set as a clean array 7748 get: function( num ) { 7749 7750 // Return all the elements in a clean array 7751 if ( num == null ) { 7752 return slice.call( this ); 7753 } 7754 7755 // Return just the one element from the set 7756 return num < 0 ? this[ num + this.length ] : this[ num ]; 7757 }, 7758 7759 // Take an array of elements and push it onto the stack 7760 // (returning the new matched element set) 7761 pushStack: function( elems ) { 7762 7763 // Build a new jQuery matched element set 7764 var ret = jQuery.merge( this.constructor(), elems ); 7765 7766 // Add the old object onto the stack (as a reference) 7767 ret.prevObject = this; 7768 7769 // Return the newly-formed element set 7770 return ret; 7771 }, 7772 7773 // Execute a callback for every element in the matched set. 7774 each: function( callback ) { 7775 return jQuery.each( this, callback ); 7776 }, 7777 7778 map: function( callback ) { 7779 return this.pushStack( jQuery.map( this, function( elem, i ) { 7780 return callback.call( elem, i, elem ); 7781 } ) ); 7782 }, 7783 7784 slice: function() { 7785 return this.pushStack( slice.apply( this, arguments ) ); 7786 }, 7787 7788 first: function() { 7789 return this.eq( 0 ); 7790 }, 7791 7792 last: function() { 7793 return this.eq( -1 ); 7794 }, 7795 7796 even: function() { 7797 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 7798 return ( i + 1 ) % 2; 7799 } ) ); 7800 }, 7801 7802 odd: function() { 7803 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 7804 return i % 2; 7805 } ) ); 7806 }, 7807 7808 eq: function( i ) { 7809 var len = this.length, 7810 j = +i + ( i < 0 ? len : 0 ); 7811 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 7812 }, 7813 7814 end: function() { 7815 return this.prevObject || this.constructor(); 7816 }, 7817 7818 // For internal use only. 7819 // Behaves like an Array's method, not like a jQuery method. 7820 push: push, 7821 sort: arr.sort, 7822 splice: arr.splice 7823}; 7824 7825jQuery.extend = jQuery.fn.extend = function() { 7826 var options, name, src, copy, copyIsArray, clone, 7827 target = arguments[ 0 ] || {}, 7828 i = 1, 7829 length = arguments.length, 7830 deep = false; 7831 7832 // Handle a deep copy situation 7833 if ( typeof target === "boolean" ) { 7834 deep = target; 7835 7836 // Skip the boolean and the target 7837 target = arguments[ i ] || {}; 7838 i++; 7839 } 7840 7841 // Handle case when target is a string or something (possible in deep copy) 7842 if ( typeof target !== "object" && !isFunction( target ) ) { 7843 target = {}; 7844 } 7845 7846 // Extend jQuery itself if only one argument is passed 7847 if ( i === length ) { 7848 target = this; 7849 i--; 7850 } 7851 7852 for ( ; i < length; i++ ) { 7853 7854 // Only deal with non-null/undefined values 7855 if ( ( options = arguments[ i ] ) != null ) { 7856 7857 // Extend the base object 7858 for ( name in options ) { 7859 copy = options[ name ]; 7860 7861 // Prevent Object.prototype pollution 7862 // Prevent never-ending loop 7863 if ( name === "__proto__" || target === copy ) { 7864 continue; 7865 } 7866 7867 // Recurse if we're merging plain objects or arrays 7868 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 7869 ( copyIsArray = Array.isArray( copy ) ) ) ) { 7870 src = target[ name ]; 7871 7872 // Ensure proper type for the source value 7873 if ( copyIsArray && !Array.isArray( src ) ) { 7874 clone = []; 7875 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 7876 clone = {}; 7877 } else { 7878 clone = src; 7879 } 7880 copyIsArray = false; 7881 7882 // Never move original objects, clone them 7883 target[ name ] = jQuery.extend( deep, clone, copy ); 7884 7885 // Don't bring in undefined values 7886 } else if ( copy !== undefined ) { 7887 target[ name ] = copy; 7888 } 7889 } 7890 } 7891 } 7892 7893 // Return the modified object 7894 return target; 7895}; 7896 7897jQuery.extend( { 7898 7899 // Unique for each copy of jQuery on the page 7900 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 7901 7902 // Assume jQuery is ready without the ready module 7903 isReady: true, 7904 7905 error: function( msg ) { 7906 throw new Error( msg ); 7907 }, 7908 7909 noop: function() {}, 7910 7911 isPlainObject: function( obj ) { 7912 var proto, Ctor; 7913 7914 // Detect obvious negatives 7915 // Use toString instead of jQuery.type to catch host objects 7916 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 7917 return false; 7918 } 7919 7920 proto = getProto( obj ); 7921 7922 // Objects with no prototype (e.g., `Object.create( null )`) are plain 7923 if ( !proto ) { 7924 return true; 7925 } 7926 7927 // Objects with prototype are plain iff they were constructed by a global Object function 7928 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 7929 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 7930 }, 7931 7932 isEmptyObject: function( obj ) { 7933 var name; 7934 7935 for ( name in obj ) { 7936 return false; 7937 } 7938 return true; 7939 }, 7940 7941 // Evaluates a script in a provided context; falls back to the global one 7942 // if not specified. 7943 globalEval: function( code, options, doc ) { 7944 DOMEval( code, { nonce: options && options.nonce }, doc ); 7945 }, 7946 7947 each: function( obj, callback ) { 7948 var length, i = 0; 7949 7950 if ( isArrayLike( obj ) ) { 7951 length = obj.length; 7952 for ( ; i < length; i++ ) { 7953 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 7954 break; 7955 } 7956 } 7957 } else { 7958 for ( i in obj ) { 7959 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 7960 break; 7961 } 7962 } 7963 } 7964 7965 return obj; 7966 }, 7967 7968 7969 // Retrieve the text value of an array of DOM nodes 7970 text: function( elem ) { 7971 var node, 7972 ret = "", 7973 i = 0, 7974 nodeType = elem.nodeType; 7975 7976 if ( !nodeType ) { 7977 7978 // If no nodeType, this is expected to be an array 7979 while ( ( node = elem[ i++ ] ) ) { 7980 7981 // Do not traverse comment nodes 7982 ret += jQuery.text( node ); 7983 } 7984 } 7985 if ( nodeType === 1 || nodeType === 11 ) { 7986 return elem.textContent; 7987 } 7988 if ( nodeType === 9 ) { 7989 return elem.documentElement.textContent; 7990 } 7991 if ( nodeType === 3 || nodeType === 4 ) { 7992 return elem.nodeValue; 7993 } 7994 7995 // Do not include comment or processing instruction nodes 7996 7997 return ret; 7998 }, 7999 8000 // results is for internal usage only 8001 makeArray: function( arr, results ) { 8002 var ret = results || []; 8003 8004 if ( arr != null ) { 8005 if ( isArrayLike( Object( arr ) ) ) { 8006 jQuery.merge( ret, 8007 typeof arr === "string" ? 8008 [ arr ] : arr 8009 ); 8010 } else { 8011 push.call( ret, arr ); 8012 } 8013 } 8014 8015 return ret; 8016 }, 8017 8018 inArray: function( elem, arr, i ) { 8019 return arr == null ? -1 : indexOf.call( arr, elem, i ); 8020 }, 8021 8022 isXMLDoc: function( elem ) { 8023 var namespace = elem && elem.namespaceURI, 8024 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 8025 8026 // Assume HTML when documentElement doesn't yet exist, such as inside 8027 // document fragments. 8028 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 8029 }, 8030 8031 // Support: Android <=4.0 only, PhantomJS 1 only 8032 // push.apply(_, arraylike) throws on ancient WebKit 8033 merge: function( first, second ) { 8034 var len = +second.length, 8035 j = 0, 8036 i = first.length; 8037 8038 for ( ; j < len; j++ ) { 8039 first[ i++ ] = second[ j ]; 8040 } 8041 8042 first.length = i; 8043 8044 return first; 8045 }, 8046 8047 grep: function( elems, callback, invert ) { 8048 var callbackInverse, 8049 matches = [], 8050 i = 0, 8051 length = elems.length, 8052 callbackExpect = !invert; 8053 8054 // Go through the array, only saving the items 8055 // that pass the validator function 8056 for ( ; i < length; i++ ) { 8057 callbackInverse = !callback( elems[ i ], i ); 8058 if ( callbackInverse !== callbackExpect ) { 8059 matches.push( elems[ i ] ); 8060 } 8061 } 8062 8063 return matches; 8064 }, 8065 8066 // arg is for internal usage only 8067 map: function( elems, callback, arg ) { 8068 var length, value, 8069 i = 0, 8070 ret = []; 8071 8072 // Go through the array, translating each of the items to their new values 8073 if ( isArrayLike( elems ) ) { 8074 length = elems.length; 8075 for ( ; i < length; i++ ) { 8076 value = callback( elems[ i ], i, arg ); 8077 8078 if ( value != null ) { 8079 ret.push( value ); 8080 } 8081 } 8082 8083 // Go through every key on the object, 8084 } else { 8085 for ( i in elems ) { 8086 value = callback( elems[ i ], i, arg ); 8087 8088 if ( value != null ) { 8089 ret.push( value ); 8090 } 8091 } 8092 } 8093 8094 // Flatten any nested arrays 8095 return flat( ret ); 8096 }, 8097 8098 // A global GUID counter for objects 8099 guid: 1, 8100 8101 // jQuery.support is not used in Core but other projects attach their 8102 // properties to it so it needs to exist. 8103 support: support 8104} ); 8105 8106if ( typeof Symbol === "function" ) { 8107 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 8108} 8109 8110// Populate the class2type map 8111jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 8112 function( _i, name ) { 8113 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 8114 } ); 8115 8116function isArrayLike( obj ) { 8117 8118 // Support: real iOS 8.2 only (not reproducible in simulator) 8119 // `in` check used to prevent JIT error (gh-2145) 8120 // hasOwn isn't used here due to false negatives 8121 // regarding Nodelist length in IE 8122 var length = !!obj && "length" in obj && obj.length, 8123 type = toType( obj ); 8124 8125 if ( isFunction( obj ) || isWindow( obj ) ) { 8126 return false; 8127 } 8128 8129 return type === "array" || length === 0 || 8130 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 8131} 8132 8133 8134function nodeName( elem, name ) { 8135 8136 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 8137 8138} 8139var pop = arr.pop; 8140 8141 8142var sort = arr.sort; 8143 8144 8145var splice = arr.splice; 8146 8147 8148var whitespace = "[\\x20\\t\\r\\n\\f]"; 8149 8150 8151var rtrimCSS = new RegExp( 8152 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 8153 "g" 8154); 8155 8156 8157 8158 8159// Note: an element does not contain itself 8160jQuery.contains = function( a, b ) { 8161 var bup = b && b.parentNode; 8162 8163 return a === bup || !!( bup && bup.nodeType === 1 && ( 8164 8165 // Support: IE 9 - 11+ 8166 // IE doesn't have `contains` on SVG. 8167 a.contains ? 8168 a.contains( bup ) : 8169 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 8170 ) ); 8171}; 8172 8173 8174 8175 8176// CSS string/identifier serialization 8177// https://drafts.csswg.org/cssom/#common-serializing-idioms 8178var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 8179 8180function fcssescape( ch, asCodePoint ) { 8181 if ( asCodePoint ) { 8182 8183 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 8184 if ( ch === "\0" ) { 8185 return "\uFFFD"; 8186 } 8187 8188 // Control characters and (dependent upon position) numbers get escaped as code points 8189 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 8190 } 8191 8192 // Other potentially-special ASCII characters get backslash-escaped 8193 return "\\" + ch; 8194} 8195 8196jQuery.escapeSelector = function( sel ) { 8197 return ( sel + "" ).replace( rcssescape, fcssescape ); 8198}; 8199 8200 8201 8202 8203var preferredDoc = document, 8204 pushNative = push; 8205 8206( function() { 8207 8208var i, 8209 Expr, 8210 outermostContext, 8211 sortInput, 8212 hasDuplicate, 8213 push = pushNative, 8214 8215 // Local document vars 8216 document, 8217 documentElement, 8218 documentIsHTML, 8219 rbuggyQSA, 8220 matches, 8221 8222 // Instance-specific data 8223 expando = jQuery.expando, 8224 dirruns = 0, 8225 done = 0, 8226 classCache = createCache(), 8227 tokenCache = createCache(), 8228 compilerCache = createCache(), 8229 nonnativeSelectorCache = createCache(), 8230 sortOrder = function( a, b ) { 8231 if ( a === b ) { 8232 hasDuplicate = true; 8233 } 8234 return 0; 8235 }, 8236 8237 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 8238 "loop|multiple|open|readonly|required|scoped", 8239 8240 // Regular expressions 8241 8242 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 8243 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 8244 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 8245 8246 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 8247 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 8248 8249 // Operator (capture 2) 8250 "*([*^$|!~]?=)" + whitespace + 8251 8252 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 8253 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 8254 whitespace + "*\\]", 8255 8256 pseudos = ":(" + identifier + ")(?:\\((" + 8257 8258 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 8259 // 1. quoted (capture 3; capture 4 or capture 5) 8260 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 8261 8262 // 2. simple (capture 6) 8263 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 8264 8265 // 3. anything else (capture 2) 8266 ".*" + 8267 ")\\)|)", 8268 8269 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 8270 rwhitespace = new RegExp( whitespace + "+", "g" ), 8271 8272 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 8273 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 8274 whitespace + "*" ), 8275 rdescend = new RegExp( whitespace + "|>" ), 8276 8277 rpseudo = new RegExp( pseudos ), 8278 ridentifier = new RegExp( "^" + identifier + "$" ), 8279 8280 matchExpr = { 8281 ID: new RegExp( "^#(" + identifier + ")" ), 8282 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 8283 TAG: new RegExp( "^(" + identifier + "|[*])" ), 8284 ATTR: new RegExp( "^" + attributes ), 8285 PSEUDO: new RegExp( "^" + pseudos ), 8286 CHILD: new RegExp( 8287 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 8288 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 8289 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 8290 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 8291 8292 // For use in libraries implementing .is() 8293 // We use this for POS matching in `select` 8294 needsContext: new RegExp( "^" + whitespace + 8295 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 8296 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 8297 }, 8298 8299 rinputs = /^(?:input|select|textarea|button)$/i, 8300 rheader = /^h\d$/i, 8301 8302 // Easily-parseable/retrievable ID or TAG or CLASS selectors 8303 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 8304 8305 rsibling = /[+~]/, 8306 8307 // CSS escapes 8308 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 8309 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 8310 "?|\\\\([^\\r\\n\\f])", "g" ), 8311 funescape = function( escape, nonHex ) { 8312 var high = "0x" + escape.slice( 1 ) - 0x10000; 8313 8314 if ( nonHex ) { 8315 8316 // Strip the backslash prefix from a non-hex escape sequence 8317 return nonHex; 8318 } 8319 8320 // Replace a hexadecimal escape sequence with the encoded Unicode code point 8321 // Support: IE <=11+ 8322 // For values outside the Basic Multilingual Plane (BMP), manually construct a 8323 // surrogate pair 8324 return high < 0 ? 8325 String.fromCharCode( high + 0x10000 ) : 8326 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 8327 }, 8328 8329 // Used for iframes; see `setDocument`. 8330 // Support: IE 9 - 11+, Edge 12 - 18+ 8331 // Removing the function wrapper causes a "Permission Denied" 8332 // error in IE/Edge. 8333 unloadHandler = function() { 8334 setDocument(); 8335 }, 8336 8337 inDisabledFieldset = addCombinator( 8338 function( elem ) { 8339 return elem.disabled === true && nodeName( elem, "fieldset" ); 8340 }, 8341 { dir: "parentNode", next: "legend" } 8342 ); 8343 8344// Support: IE <=9 only 8345// Accessing document.activeElement can throw unexpectedly 8346// https://bugs.jquery.com/ticket/13393 8347function safeActiveElement() { 8348 try { 8349 return document.activeElement; 8350 } catch ( err ) { } 8351} 8352 8353// Optimize for push.apply( _, NodeList ) 8354try { 8355 push.apply( 8356 ( arr = slice.call( preferredDoc.childNodes ) ), 8357 preferredDoc.childNodes 8358 ); 8359 8360 // Support: Android <=4.0 8361 // Detect silently failing push.apply 8362 // eslint-disable-next-line no-unused-expressions 8363 arr[ preferredDoc.childNodes.length ].nodeType; 8364} catch ( e ) { 8365 push = { 8366 apply: function( target, els ) { 8367 pushNative.apply( target, slice.call( els ) ); 8368 }, 8369 call: function( target ) { 8370 pushNative.apply( target, slice.call( arguments, 1 ) ); 8371 } 8372 }; 8373} 8374 8375function find( selector, context, results, seed ) { 8376 var m, i, elem, nid, match, groups, newSelector, 8377 newContext = context && context.ownerDocument, 8378 8379 // nodeType defaults to 9, since context defaults to document 8380 nodeType = context ? context.nodeType : 9; 8381 8382 results = results || []; 8383 8384 // Return early from calls with invalid selector or context 8385 if ( typeof selector !== "string" || !selector || 8386 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 8387 8388 return results; 8389 } 8390 8391 // Try to shortcut find operations (as opposed to filters) in HTML documents 8392 if ( !seed ) { 8393 setDocument( context ); 8394 context = context || document; 8395 8396 if ( documentIsHTML ) { 8397 8398 // If the selector is sufficiently simple, try using a "get*By*" DOM method 8399 // (excepting DocumentFragment context, where the methods don't exist) 8400 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 8401 8402 // ID selector 8403 if ( ( m = match[ 1 ] ) ) { 8404 8405 // Document context 8406 if ( nodeType === 9 ) { 8407 if ( ( elem = context.getElementById( m ) ) ) { 8408 8409 // Support: IE 9 only 8410 // getElementById can match elements by name instead of ID 8411 if ( elem.id === m ) { 8412 push.call( results, elem ); 8413 return results; 8414 } 8415 } else { 8416 return results; 8417 } 8418 8419 // Element context 8420 } else { 8421 8422 // Support: IE 9 only 8423 // getElementById can match elements by name instead of ID 8424 if ( newContext && ( elem = newContext.getElementById( m ) ) && 8425 find.contains( context, elem ) && 8426 elem.id === m ) { 8427 8428 push.call( results, elem ); 8429 return results; 8430 } 8431 } 8432 8433 // Type selector 8434 } else if ( match[ 2 ] ) { 8435 push.apply( results, context.getElementsByTagName( selector ) ); 8436 return results; 8437 8438 // Class selector 8439 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 8440 push.apply( results, context.getElementsByClassName( m ) ); 8441 return results; 8442 } 8443 } 8444 8445 // Take advantage of querySelectorAll 8446 if ( !nonnativeSelectorCache[ selector + " " ] && 8447 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 8448 8449 newSelector = selector; 8450 newContext = context; 8451 8452 // qSA considers elements outside a scoping root when evaluating child or 8453 // descendant combinators, which is not what we want. 8454 // In such cases, we work around the behavior by prefixing every selector in the 8455 // list with an ID selector referencing the scope context. 8456 // The technique has to be used as well when a leading combinator is used 8457 // as such selectors are not recognized by querySelectorAll. 8458 // Thanks to Andrew Dupont for this technique. 8459 if ( nodeType === 1 && 8460 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 8461 8462 // Expand context for sibling selectors 8463 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 8464 context; 8465 8466 // We can use :scope instead of the ID hack if the browser 8467 // supports it & if we're not changing the context. 8468 // Support: IE 11+, Edge 17 - 18+ 8469 // IE/Edge sometimes throw a "Permission denied" error when 8470 // strict-comparing two documents; shallow comparisons work. 8471 // eslint-disable-next-line eqeqeq 8472 if ( newContext != context || !support.scope ) { 8473 8474 // Capture the context ID, setting it first if necessary 8475 if ( ( nid = context.getAttribute( "id" ) ) ) { 8476 nid = jQuery.escapeSelector( nid ); 8477 } else { 8478 context.setAttribute( "id", ( nid = expando ) ); 8479 } 8480 } 8481 8482 // Prefix every selector in the list 8483 groups = tokenize( selector ); 8484 i = groups.length; 8485 while ( i-- ) { 8486 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 8487 toSelector( groups[ i ] ); 8488 } 8489 newSelector = groups.join( "," ); 8490 } 8491 8492 try { 8493 push.apply( results, 8494 newContext.querySelectorAll( newSelector ) 8495 ); 8496 return results; 8497 } catch ( qsaError ) { 8498 nonnativeSelectorCache( selector, true ); 8499 } finally { 8500 if ( nid === expando ) { 8501 context.removeAttribute( "id" ); 8502 } 8503 } 8504 } 8505 } 8506 } 8507 8508 // All others 8509 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 8510} 8511 8512/** 8513 * Create key-value caches of limited size 8514 * @returns {function(string, object)} Returns the Object data after storing it on itself with 8515 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 8516 * deleting the oldest entry 8517 */ 8518function createCache() { 8519 var keys = []; 8520 8521 function cache( key, value ) { 8522 8523 // Use (key + " ") to avoid collision with native prototype properties 8524 // (see https://github.com/jquery/sizzle/issues/157) 8525 if ( keys.push( key + " " ) > Expr.cacheLength ) { 8526 8527 // Only keep the most recent entries 8528 delete cache[ keys.shift() ]; 8529 } 8530 return ( cache[ key + " " ] = value ); 8531 } 8532 return cache; 8533} 8534 8535/** 8536 * Mark a function for special use by jQuery selector module 8537 * @param {Function} fn The function to mark 8538 */ 8539function markFunction( fn ) { 8540 fn[ expando ] = true; 8541 return fn; 8542} 8543 8544/** 8545 * Support testing using an element 8546 * @param {Function} fn Passed the created element and returns a boolean result 8547 */ 8548function assert( fn ) { 8549 var el = document.createElement( "fieldset" ); 8550 8551 try { 8552 return !!fn( el ); 8553 } catch ( e ) { 8554 return false; 8555 } finally { 8556 8557 // Remove from its parent by default 8558 if ( el.parentNode ) { 8559 el.parentNode.removeChild( el ); 8560 } 8561 8562 // release memory in IE 8563 el = null; 8564 } 8565} 8566 8567/** 8568 * Returns a function to use in pseudos for input types 8569 * @param {String} type 8570 */ 8571function createInputPseudo( type ) { 8572 return function( elem ) { 8573 return nodeName( elem, "input" ) && elem.type === type; 8574 }; 8575} 8576 8577/** 8578 * Returns a function to use in pseudos for buttons 8579 * @param {String} type 8580 */ 8581function createButtonPseudo( type ) { 8582 return function( elem ) { 8583 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 8584 elem.type === type; 8585 }; 8586} 8587 8588/** 8589 * Returns a function to use in pseudos for :enabled/:disabled 8590 * @param {Boolean} disabled true for :disabled; false for :enabled 8591 */ 8592function createDisabledPseudo( disabled ) { 8593 8594 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 8595 return function( elem ) { 8596 8597 // Only certain elements can match :enabled or :disabled 8598 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 8599 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 8600 if ( "form" in elem ) { 8601 8602 // Check for inherited disabledness on relevant non-disabled elements: 8603 // * listed form-associated elements in a disabled fieldset 8604 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 8605 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 8606 // * option elements in a disabled optgroup 8607 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 8608 // All such elements have a "form" property. 8609 if ( elem.parentNode && elem.disabled === false ) { 8610 8611 // Option elements defer to a parent optgroup if present 8612 if ( "label" in elem ) { 8613 if ( "label" in elem.parentNode ) { 8614 return elem.parentNode.disabled === disabled; 8615 } else { 8616 return elem.disabled === disabled; 8617 } 8618 } 8619 8620 // Support: IE 6 - 11+ 8621 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 8622 return elem.isDisabled === disabled || 8623 8624 // Where there is no isDisabled, check manually 8625 elem.isDisabled !== !disabled && 8626 inDisabledFieldset( elem ) === disabled; 8627 } 8628 8629 return elem.disabled === disabled; 8630 8631 // Try to winnow out elements that can't be disabled before trusting the disabled property. 8632 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 8633 // even exist on them, let alone have a boolean value. 8634 } else if ( "label" in elem ) { 8635 return elem.disabled === disabled; 8636 } 8637 8638 // Remaining elements are neither :enabled nor :disabled 8639 return false; 8640 }; 8641} 8642 8643/** 8644 * Returns a function to use in pseudos for positionals 8645 * @param {Function} fn 8646 */ 8647function createPositionalPseudo( fn ) { 8648 return markFunction( function( argument ) { 8649 argument = +argument; 8650 return markFunction( function( seed, matches ) { 8651 var j, 8652 matchIndexes = fn( [], seed.length, argument ), 8653 i = matchIndexes.length; 8654 8655 // Match elements found at the specified indexes 8656 while ( i-- ) { 8657 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 8658 seed[ j ] = !( matches[ j ] = seed[ j ] ); 8659 } 8660 } 8661 } ); 8662 } ); 8663} 8664 8665/** 8666 * Checks a node for validity as a jQuery selector context 8667 * @param {Element|Object=} context 8668 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 8669 */ 8670function testContext( context ) { 8671 return context && typeof context.getElementsByTagName !== "undefined" && context; 8672} 8673 8674/** 8675 * Sets document-related variables once based on the current document 8676 * @param {Element|Object} [node] An element or document object to use to set the document 8677 * @returns {Object} Returns the current document 8678 */ 8679function setDocument( node ) { 8680 var subWindow, 8681 doc = node ? node.ownerDocument || node : preferredDoc; 8682 8683 // Return early if doc is invalid or already selected 8684 // Support: IE 11+, Edge 17 - 18+ 8685 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8686 // two documents; shallow comparisons work. 8687 // eslint-disable-next-line eqeqeq 8688 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 8689 return document; 8690 } 8691 8692 // Update global variables 8693 document = doc; 8694 documentElement = document.documentElement; 8695 documentIsHTML = !jQuery.isXMLDoc( document ); 8696 8697 // Support: iOS 7 only, IE 9 - 11+ 8698 // Older browsers didn't support unprefixed `matches`. 8699 matches = documentElement.matches || 8700 documentElement.webkitMatchesSelector || 8701 documentElement.msMatchesSelector; 8702 8703 // Support: IE 9 - 11+, Edge 12 - 18+ 8704 // Accessing iframe documents after unload throws "permission denied" errors 8705 // (see trac-13936). 8706 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 8707 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 8708 if ( documentElement.msMatchesSelector && 8709 8710 // Support: IE 11+, Edge 17 - 18+ 8711 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8712 // two documents; shallow comparisons work. 8713 // eslint-disable-next-line eqeqeq 8714 preferredDoc != document && 8715 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 8716 8717 // Support: IE 9 - 11+, Edge 12 - 18+ 8718 subWindow.addEventListener( "unload", unloadHandler ); 8719 } 8720 8721 // Support: IE <10 8722 // Check if getElementById returns elements by name 8723 // The broken getElementById methods don't pick up programmatically-set names, 8724 // so use a roundabout getElementsByName test 8725 support.getById = assert( function( el ) { 8726 documentElement.appendChild( el ).id = jQuery.expando; 8727 return !document.getElementsByName || 8728 !document.getElementsByName( jQuery.expando ).length; 8729 } ); 8730 8731 // Support: IE 9 only 8732 // Check to see if it's possible to do matchesSelector 8733 // on a disconnected node. 8734 support.disconnectedMatch = assert( function( el ) { 8735 return matches.call( el, "*" ); 8736 } ); 8737 8738 // Support: IE 9 - 11+, Edge 12 - 18+ 8739 // IE/Edge don't support the :scope pseudo-class. 8740 support.scope = assert( function() { 8741 return document.querySelectorAll( ":scope" ); 8742 } ); 8743 8744 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 8745 // Make sure the `:has()` argument is parsed unforgivingly. 8746 // We include `*` in the test to detect buggy implementations that are 8747 // _selectively_ forgiving (specifically when the list includes at least 8748 // one valid selector). 8749 // Note that we treat complete lack of support for `:has()` as if it were 8750 // spec-compliant support, which is fine because use of `:has()` in such 8751 // environments will fail in the qSA path and fall back to jQuery traversal 8752 // anyway. 8753 support.cssHas = assert( function() { 8754 try { 8755 document.querySelector( ":has(*,:jqfake)" ); 8756 return false; 8757 } catch ( e ) { 8758 return true; 8759 } 8760 } ); 8761 8762 // ID filter and find 8763 if ( support.getById ) { 8764 Expr.filter.ID = function( id ) { 8765 var attrId = id.replace( runescape, funescape ); 8766 return function( elem ) { 8767 return elem.getAttribute( "id" ) === attrId; 8768 }; 8769 }; 8770 Expr.find.ID = function( id, context ) { 8771 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 8772 var elem = context.getElementById( id ); 8773 return elem ? [ elem ] : []; 8774 } 8775 }; 8776 } else { 8777 Expr.filter.ID = function( id ) { 8778 var attrId = id.replace( runescape, funescape ); 8779 return function( elem ) { 8780 var node = typeof elem.getAttributeNode !== "undefined" && 8781 elem.getAttributeNode( "id" ); 8782 return node && node.value === attrId; 8783 }; 8784 }; 8785 8786 // Support: IE 6 - 7 only 8787 // getElementById is not reliable as a find shortcut 8788 Expr.find.ID = function( id, context ) { 8789 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 8790 var node, i, elems, 8791 elem = context.getElementById( id ); 8792 8793 if ( elem ) { 8794 8795 // Verify the id attribute 8796 node = elem.getAttributeNode( "id" ); 8797 if ( node && node.value === id ) { 8798 return [ elem ]; 8799 } 8800 8801 // Fall back on getElementsByName 8802 elems = context.getElementsByName( id ); 8803 i = 0; 8804 while ( ( elem = elems[ i++ ] ) ) { 8805 node = elem.getAttributeNode( "id" ); 8806 if ( node && node.value === id ) { 8807 return [ elem ]; 8808 } 8809 } 8810 } 8811 8812 return []; 8813 } 8814 }; 8815 } 8816 8817 // Tag 8818 Expr.find.TAG = function( tag, context ) { 8819 if ( typeof context.getElementsByTagName !== "undefined" ) { 8820 return context.getElementsByTagName( tag ); 8821 8822 // DocumentFragment nodes don't have gEBTN 8823 } else { 8824 return context.querySelectorAll( tag ); 8825 } 8826 }; 8827 8828 // Class 8829 Expr.find.CLASS = function( className, context ) { 8830 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 8831 return context.getElementsByClassName( className ); 8832 } 8833 }; 8834 8835 /* QSA/matchesSelector 8836 ---------------------------------------------------------------------- */ 8837 8838 // QSA and matchesSelector support 8839 8840 rbuggyQSA = []; 8841 8842 // Build QSA regex 8843 // Regex strategy adopted from Diego Perini 8844 assert( function( el ) { 8845 8846 var input; 8847 8848 documentElement.appendChild( el ).innerHTML = 8849 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 8850 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 8851 "<option selected=''></option></select>"; 8852 8853 // Support: iOS <=7 - 8 only 8854 // Boolean attributes and "value" are not treated correctly in some XML documents 8855 if ( !el.querySelectorAll( "[selected]" ).length ) { 8856 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 8857 } 8858 8859 // Support: iOS <=7 - 8 only 8860 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 8861 rbuggyQSA.push( "~=" ); 8862 } 8863 8864 // Support: iOS 8 only 8865 // https://bugs.webkit.org/show_bug.cgi?id=136851 8866 // In-page `selector#id sibling-combinator selector` fails 8867 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 8868 rbuggyQSA.push( ".#.+[+~]" ); 8869 } 8870 8871 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 8872 // In some of the document kinds, these selectors wouldn't work natively. 8873 // This is probably OK but for backwards compatibility we want to maintain 8874 // handling them through jQuery traversal in jQuery 3.x. 8875 if ( !el.querySelectorAll( ":checked" ).length ) { 8876 rbuggyQSA.push( ":checked" ); 8877 } 8878 8879 // Support: Windows 8 Native Apps 8880 // The type and name attributes are restricted during .innerHTML assignment 8881 input = document.createElement( "input" ); 8882 input.setAttribute( "type", "hidden" ); 8883 el.appendChild( input ).setAttribute( "name", "D" ); 8884 8885 // Support: IE 9 - 11+ 8886 // IE's :disabled selector does not pick up the children of disabled fieldsets 8887 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 8888 // In some of the document kinds, these selectors wouldn't work natively. 8889 // This is probably OK but for backwards compatibility we want to maintain 8890 // handling them through jQuery traversal in jQuery 3.x. 8891 documentElement.appendChild( el ).disabled = true; 8892 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 8893 rbuggyQSA.push( ":enabled", ":disabled" ); 8894 } 8895 8896 // Support: IE 11+, Edge 15 - 18+ 8897 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 8898 // Adding a temporary attribute to the document before the selection works 8899 // around the issue. 8900 // Interestingly, IE 10 & older don't seem to have the issue. 8901 input = document.createElement( "input" ); 8902 input.setAttribute( "name", "" ); 8903 el.appendChild( input ); 8904 if ( !el.querySelectorAll( "[name='']" ).length ) { 8905 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 8906 whitespace + "*(?:''|\"\")" ); 8907 } 8908 } ); 8909 8910 if ( !support.cssHas ) { 8911 8912 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 8913 // Our regular `try-catch` mechanism fails to detect natively-unsupported 8914 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 8915 // in browsers that parse the `:has()` argument as a forgiving selector list. 8916 // https://drafts.csswg.org/selectors/#relational now requires the argument 8917 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 8918 rbuggyQSA.push( ":has" ); 8919 } 8920 8921 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 8922 8923 /* Sorting 8924 ---------------------------------------------------------------------- */ 8925 8926 // Document order sorting 8927 sortOrder = function( a, b ) { 8928 8929 // Flag for duplicate removal 8930 if ( a === b ) { 8931 hasDuplicate = true; 8932 return 0; 8933 } 8934 8935 // Sort on method existence if only one input has compareDocumentPosition 8936 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 8937 if ( compare ) { 8938 return compare; 8939 } 8940 8941 // Calculate position if both inputs belong to the same document 8942 // Support: IE 11+, Edge 17 - 18+ 8943 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8944 // two documents; shallow comparisons work. 8945 // eslint-disable-next-line eqeqeq 8946 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 8947 a.compareDocumentPosition( b ) : 8948 8949 // Otherwise we know they are disconnected 8950 1; 8951 8952 // Disconnected nodes 8953 if ( compare & 1 || 8954 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 8955 8956 // Choose the first element that is related to our preferred document 8957 // Support: IE 11+, Edge 17 - 18+ 8958 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8959 // two documents; shallow comparisons work. 8960 // eslint-disable-next-line eqeqeq 8961 if ( a === document || a.ownerDocument == preferredDoc && 8962 find.contains( preferredDoc, a ) ) { 8963 return -1; 8964 } 8965 8966 // Support: IE 11+, Edge 17 - 18+ 8967 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8968 // two documents; shallow comparisons work. 8969 // eslint-disable-next-line eqeqeq 8970 if ( b === document || b.ownerDocument == preferredDoc && 8971 find.contains( preferredDoc, b ) ) { 8972 return 1; 8973 } 8974 8975 // Maintain original order 8976 return sortInput ? 8977 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 8978 0; 8979 } 8980 8981 return compare & 4 ? -1 : 1; 8982 }; 8983 8984 return document; 8985} 8986 8987find.matches = function( expr, elements ) { 8988 return find( expr, null, null, elements ); 8989}; 8990 8991find.matchesSelector = function( elem, expr ) { 8992 setDocument( elem ); 8993 8994 if ( documentIsHTML && 8995 !nonnativeSelectorCache[ expr + " " ] && 8996 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 8997 8998 try { 8999 var ret = matches.call( elem, expr ); 9000 9001 // IE 9's matchesSelector returns false on disconnected nodes 9002 if ( ret || support.disconnectedMatch || 9003 9004 // As well, disconnected nodes are said to be in a document 9005 // fragment in IE 9 9006 elem.document && elem.document.nodeType !== 11 ) { 9007 return ret; 9008 } 9009 } catch ( e ) { 9010 nonnativeSelectorCache( expr, true ); 9011 } 9012 } 9013 9014 return find( expr, document, null, [ elem ] ).length > 0; 9015}; 9016 9017find.contains = function( context, elem ) { 9018 9019 // Set document vars if needed 9020 // Support: IE 11+, Edge 17 - 18+ 9021 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9022 // two documents; shallow comparisons work. 9023 // eslint-disable-next-line eqeqeq 9024 if ( ( context.ownerDocument || context ) != document ) { 9025 setDocument( context ); 9026 } 9027 return jQuery.contains( context, elem ); 9028}; 9029 9030 9031find.attr = function( elem, name ) { 9032 9033 // Set document vars if needed 9034 // Support: IE 11+, Edge 17 - 18+ 9035 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9036 // two documents; shallow comparisons work. 9037 // eslint-disable-next-line eqeqeq 9038 if ( ( elem.ownerDocument || elem ) != document ) { 9039 setDocument( elem ); 9040 } 9041 9042 var fn = Expr.attrHandle[ name.toLowerCase() ], 9043 9044 // Don't get fooled by Object.prototype properties (see trac-13807) 9045 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 9046 fn( elem, name, !documentIsHTML ) : 9047 undefined; 9048 9049 if ( val !== undefined ) { 9050 return val; 9051 } 9052 9053 return elem.getAttribute( name ); 9054}; 9055 9056find.error = function( msg ) { 9057 throw new Error( "Syntax error, unrecognized expression: " + msg ); 9058}; 9059 9060/** 9061 * Document sorting and removing duplicates 9062 * @param {ArrayLike} results 9063 */ 9064jQuery.uniqueSort = function( results ) { 9065 var elem, 9066 duplicates = [], 9067 j = 0, 9068 i = 0; 9069 9070 // Unless we *know* we can detect duplicates, assume their presence 9071 // 9072 // Support: Android <=4.0+ 9073 // Testing for detecting duplicates is unpredictable so instead assume we can't 9074 // depend on duplicate detection in all browsers without a stable sort. 9075 hasDuplicate = !support.sortStable; 9076 sortInput = !support.sortStable && slice.call( results, 0 ); 9077 sort.call( results, sortOrder ); 9078 9079 if ( hasDuplicate ) { 9080 while ( ( elem = results[ i++ ] ) ) { 9081 if ( elem === results[ i ] ) { 9082 j = duplicates.push( i ); 9083 } 9084 } 9085 while ( j-- ) { 9086 splice.call( results, duplicates[ j ], 1 ); 9087 } 9088 } 9089 9090 // Clear input after sorting to release objects 9091 // See https://github.com/jquery/sizzle/pull/225 9092 sortInput = null; 9093 9094 return results; 9095}; 9096 9097jQuery.fn.uniqueSort = function() { 9098 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 9099}; 9100 9101Expr = jQuery.expr = { 9102 9103 // Can be adjusted by the user 9104 cacheLength: 50, 9105 9106 createPseudo: markFunction, 9107 9108 match: matchExpr, 9109 9110 attrHandle: {}, 9111 9112 find: {}, 9113 9114 relative: { 9115 ">": { dir: "parentNode", first: true }, 9116 " ": { dir: "parentNode" }, 9117 "+": { dir: "previousSibling", first: true }, 9118 "~": { dir: "previousSibling" } 9119 }, 9120 9121 preFilter: { 9122 ATTR: function( match ) { 9123 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 9124 9125 // Move the given value to match[3] whether quoted or unquoted 9126 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 9127 .replace( runescape, funescape ); 9128 9129 if ( match[ 2 ] === "~=" ) { 9130 match[ 3 ] = " " + match[ 3 ] + " "; 9131 } 9132 9133 return match.slice( 0, 4 ); 9134 }, 9135 9136 CHILD: function( match ) { 9137 9138 /* matches from matchExpr["CHILD"] 9139 1 type (only|nth|...) 9140 2 what (child|of-type) 9141 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 9142 4 xn-component of xn+y argument ([+-]?\d*n|) 9143 5 sign of xn-component 9144 6 x of xn-component 9145 7 sign of y-component 9146 8 y of y-component 9147 */ 9148 match[ 1 ] = match[ 1 ].toLowerCase(); 9149 9150 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 9151 9152 // nth-* requires argument 9153 if ( !match[ 3 ] ) { 9154 find.error( match[ 0 ] ); 9155 } 9156 9157 // numeric x and y parameters for Expr.filter.CHILD 9158 // remember that false/true cast respectively to 0/1 9159 match[ 4 ] = +( match[ 4 ] ? 9160 match[ 5 ] + ( match[ 6 ] || 1 ) : 9161 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 9162 ); 9163 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 9164 9165 // other types prohibit arguments 9166 } else if ( match[ 3 ] ) { 9167 find.error( match[ 0 ] ); 9168 } 9169 9170 return match; 9171 }, 9172 9173 PSEUDO: function( match ) { 9174 var excess, 9175 unquoted = !match[ 6 ] && match[ 2 ]; 9176 9177 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 9178 return null; 9179 } 9180 9181 // Accept quoted arguments as-is 9182 if ( match[ 3 ] ) { 9183 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 9184 9185 // Strip excess characters from unquoted arguments 9186 } else if ( unquoted && rpseudo.test( unquoted ) && 9187 9188 // Get excess from tokenize (recursively) 9189 ( excess = tokenize( unquoted, true ) ) && 9190 9191 // advance to the next closing parenthesis 9192 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 9193 9194 // excess is a negative index 9195 match[ 0 ] = match[ 0 ].slice( 0, excess ); 9196 match[ 2 ] = unquoted.slice( 0, excess ); 9197 } 9198 9199 // Return only captures needed by the pseudo filter method (type and argument) 9200 return match.slice( 0, 3 ); 9201 } 9202 }, 9203 9204 filter: { 9205 9206 TAG: function( nodeNameSelector ) { 9207 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 9208 return nodeNameSelector === "*" ? 9209 function() { 9210 return true; 9211 } : 9212 function( elem ) { 9213 return nodeName( elem, expectedNodeName ); 9214 }; 9215 }, 9216 9217 CLASS: function( className ) { 9218 var pattern = classCache[ className + " " ]; 9219 9220 return pattern || 9221 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 9222 "(" + whitespace + "|$)" ) ) && 9223 classCache( className, function( elem ) { 9224 return pattern.test( 9225 typeof elem.className === "string" && elem.className || 9226 typeof elem.getAttribute !== "undefined" && 9227 elem.getAttribute( "class" ) || 9228 "" 9229 ); 9230 } ); 9231 }, 9232 9233 ATTR: function( name, operator, check ) { 9234 return function( elem ) { 9235 var result = find.attr( elem, name ); 9236 9237 if ( result == null ) { 9238 return operator === "!="; 9239 } 9240 if ( !operator ) { 9241 return true; 9242 } 9243 9244 result += ""; 9245 9246 if ( operator === "=" ) { 9247 return result === check; 9248 } 9249 if ( operator === "!=" ) { 9250 return result !== check; 9251 } 9252 if ( operator === "^=" ) { 9253 return check && result.indexOf( check ) === 0; 9254 } 9255 if ( operator === "*=" ) { 9256 return check && result.indexOf( check ) > -1; 9257 } 9258 if ( operator === "$=" ) { 9259 return check && result.slice( -check.length ) === check; 9260 } 9261 if ( operator === "~=" ) { 9262 return ( " " + result.replace( rwhitespace, " " ) + " " ) 9263 .indexOf( check ) > -1; 9264 } 9265 if ( operator === "|=" ) { 9266 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 9267 } 9268 9269 return false; 9270 }; 9271 }, 9272 9273 CHILD: function( type, what, _argument, first, last ) { 9274 var simple = type.slice( 0, 3 ) !== "nth", 9275 forward = type.slice( -4 ) !== "last", 9276 ofType = what === "of-type"; 9277 9278 return first === 1 && last === 0 ? 9279 9280 // Shortcut for :nth-*(n) 9281 function( elem ) { 9282 return !!elem.parentNode; 9283 } : 9284 9285 function( elem, _context, xml ) { 9286 var cache, outerCache, node, nodeIndex, start, 9287 dir = simple !== forward ? "nextSibling" : "previousSibling", 9288 parent = elem.parentNode, 9289 name = ofType && elem.nodeName.toLowerCase(), 9290 useCache = !xml && !ofType, 9291 diff = false; 9292 9293 if ( parent ) { 9294 9295 // :(first|last|only)-(child|of-type) 9296 if ( simple ) { 9297 while ( dir ) { 9298 node = elem; 9299 while ( ( node = node[ dir ] ) ) { 9300 if ( ofType ? 9301 nodeName( node, name ) : 9302 node.nodeType === 1 ) { 9303 9304 return false; 9305 } 9306 } 9307 9308 // Reverse direction for :only-* (if we haven't yet done so) 9309 start = dir = type === "only" && !start && "nextSibling"; 9310 } 9311 return true; 9312 } 9313 9314 start = [ forward ? parent.firstChild : parent.lastChild ]; 9315 9316 // non-xml :nth-child(...) stores cache data on `parent` 9317 if ( forward && useCache ) { 9318 9319 // Seek `elem` from a previously-cached index 9320 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 9321 cache = outerCache[ type ] || []; 9322 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9323 diff = nodeIndex && cache[ 2 ]; 9324 node = nodeIndex && parent.childNodes[ nodeIndex ]; 9325 9326 while ( ( node = ++nodeIndex && node && node[ dir ] || 9327 9328 // Fallback to seeking `elem` from the start 9329 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9330 9331 // When found, cache indexes on `parent` and break 9332 if ( node.nodeType === 1 && ++diff && node === elem ) { 9333 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 9334 break; 9335 } 9336 } 9337 9338 } else { 9339 9340 // Use previously-cached element index if available 9341 if ( useCache ) { 9342 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 9343 cache = outerCache[ type ] || []; 9344 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9345 diff = nodeIndex; 9346 } 9347 9348 // xml :nth-child(...) 9349 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 9350 if ( diff === false ) { 9351 9352 // Use the same loop as above to seek `elem` from the start 9353 while ( ( node = ++nodeIndex && node && node[ dir ] || 9354 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9355 9356 if ( ( ofType ? 9357 nodeName( node, name ) : 9358 node.nodeType === 1 ) && 9359 ++diff ) { 9360 9361 // Cache the index of each encountered element 9362 if ( useCache ) { 9363 outerCache = node[ expando ] || 9364 ( node[ expando ] = {} ); 9365 outerCache[ type ] = [ dirruns, diff ]; 9366 } 9367 9368 if ( node === elem ) { 9369 break; 9370 } 9371 } 9372 } 9373 } 9374 } 9375 9376 // Incorporate the offset, then check against cycle size 9377 diff -= last; 9378 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 9379 } 9380 }; 9381 }, 9382 9383 PSEUDO: function( pseudo, argument ) { 9384 9385 // pseudo-class names are case-insensitive 9386 // https://www.w3.org/TR/selectors/#pseudo-classes 9387 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 9388 // Remember that setFilters inherits from pseudos 9389 var args, 9390 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 9391 find.error( "unsupported pseudo: " + pseudo ); 9392 9393 // The user may use createPseudo to indicate that 9394 // arguments are needed to create the filter function 9395 // just as jQuery does 9396 if ( fn[ expando ] ) { 9397 return fn( argument ); 9398 } 9399 9400 // But maintain support for old signatures 9401 if ( fn.length > 1 ) { 9402 args = [ pseudo, pseudo, "", argument ]; 9403 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 9404 markFunction( function( seed, matches ) { 9405 var idx, 9406 matched = fn( seed, argument ), 9407 i = matched.length; 9408 while ( i-- ) { 9409 idx = indexOf.call( seed, matched[ i ] ); 9410 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 9411 } 9412 } ) : 9413 function( elem ) { 9414 return fn( elem, 0, args ); 9415 }; 9416 } 9417 9418 return fn; 9419 } 9420 }, 9421 9422 pseudos: { 9423 9424 // Potentially complex pseudos 9425 not: markFunction( function( selector ) { 9426 9427 // Trim the selector passed to compile 9428 // to avoid treating leading and trailing 9429 // spaces as combinators 9430 var input = [], 9431 results = [], 9432 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 9433 9434 return matcher[ expando ] ? 9435 markFunction( function( seed, matches, _context, xml ) { 9436 var elem, 9437 unmatched = matcher( seed, null, xml, [] ), 9438 i = seed.length; 9439 9440 // Match elements unmatched by `matcher` 9441 while ( i-- ) { 9442 if ( ( elem = unmatched[ i ] ) ) { 9443 seed[ i ] = !( matches[ i ] = elem ); 9444 } 9445 } 9446 } ) : 9447 function( elem, _context, xml ) { 9448 input[ 0 ] = elem; 9449 matcher( input, null, xml, results ); 9450 9451 // Don't keep the element 9452 // (see https://github.com/jquery/sizzle/issues/299) 9453 input[ 0 ] = null; 9454 return !results.pop(); 9455 }; 9456 } ), 9457 9458 has: markFunction( function( selector ) { 9459 return function( elem ) { 9460 return find( selector, elem ).length > 0; 9461 }; 9462 } ), 9463 9464 contains: markFunction( function( text ) { 9465 text = text.replace( runescape, funescape ); 9466 return function( elem ) { 9467 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 9468 }; 9469 } ), 9470 9471 // "Whether an element is represented by a :lang() selector 9472 // is based solely on the element's language value 9473 // being equal to the identifier C, 9474 // or beginning with the identifier C immediately followed by "-". 9475 // The matching of C against the element's language value is performed case-insensitively. 9476 // The identifier C does not have to be a valid language name." 9477 // https://www.w3.org/TR/selectors/#lang-pseudo 9478 lang: markFunction( function( lang ) { 9479 9480 // lang value must be a valid identifier 9481 if ( !ridentifier.test( lang || "" ) ) { 9482 find.error( "unsupported lang: " + lang ); 9483 } 9484 lang = lang.replace( runescape, funescape ).toLowerCase(); 9485 return function( elem ) { 9486 var elemLang; 9487 do { 9488 if ( ( elemLang = documentIsHTML ? 9489 elem.lang : 9490 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 9491 9492 elemLang = elemLang.toLowerCase(); 9493 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 9494 } 9495 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 9496 return false; 9497 }; 9498 } ), 9499 9500 // Miscellaneous 9501 target: function( elem ) { 9502 var hash = window.location && window.location.hash; 9503 return hash && hash.slice( 1 ) === elem.id; 9504 }, 9505 9506 root: function( elem ) { 9507 return elem === documentElement; 9508 }, 9509 9510 focus: function( elem ) { 9511 return elem === safeActiveElement() && 9512 document.hasFocus() && 9513 !!( elem.type || elem.href || ~elem.tabIndex ); 9514 }, 9515 9516 // Boolean properties 9517 enabled: createDisabledPseudo( false ), 9518 disabled: createDisabledPseudo( true ), 9519 9520 checked: function( elem ) { 9521 9522 // In CSS3, :checked should return both checked and selected elements 9523 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 9524 return ( nodeName( elem, "input" ) && !!elem.checked ) || 9525 ( nodeName( elem, "option" ) && !!elem.selected ); 9526 }, 9527 9528 selected: function( elem ) { 9529 9530 // Support: IE <=11+ 9531 // Accessing the selectedIndex property 9532 // forces the browser to treat the default option as 9533 // selected when in an optgroup. 9534 if ( elem.parentNode ) { 9535 // eslint-disable-next-line no-unused-expressions 9536 elem.parentNode.selectedIndex; 9537 } 9538 9539 return elem.selected === true; 9540 }, 9541 9542 // Contents 9543 empty: function( elem ) { 9544 9545 // https://www.w3.org/TR/selectors/#empty-pseudo 9546 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 9547 // but not by others (comment: 8; processing instruction: 7; etc.) 9548 // nodeType < 6 works because attributes (2) do not appear as children 9549 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 9550 if ( elem.nodeType < 6 ) { 9551 return false; 9552 } 9553 } 9554 return true; 9555 }, 9556 9557 parent: function( elem ) { 9558 return !Expr.pseudos.empty( elem ); 9559 }, 9560 9561 // Element/input types 9562 header: function( elem ) { 9563 return rheader.test( elem.nodeName ); 9564 }, 9565 9566 input: function( elem ) { 9567 return rinputs.test( elem.nodeName ); 9568 }, 9569 9570 button: function( elem ) { 9571 return nodeName( elem, "input" ) && elem.type === "button" || 9572 nodeName( elem, "button" ); 9573 }, 9574 9575 text: function( elem ) { 9576 var attr; 9577 return nodeName( elem, "input" ) && elem.type === "text" && 9578 9579 // Support: IE <10 only 9580 // New HTML5 attribute values (e.g., "search") appear 9581 // with elem.type === "text" 9582 ( ( attr = elem.getAttribute( "type" ) ) == null || 9583 attr.toLowerCase() === "text" ); 9584 }, 9585 9586 // Position-in-collection 9587 first: createPositionalPseudo( function() { 9588 return [ 0 ]; 9589 } ), 9590 9591 last: createPositionalPseudo( function( _matchIndexes, length ) { 9592 return [ length - 1 ]; 9593 } ), 9594 9595 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 9596 return [ argument < 0 ? argument + length : argument ]; 9597 } ), 9598 9599 even: createPositionalPseudo( function( matchIndexes, length ) { 9600 var i = 0; 9601 for ( ; i < length; i += 2 ) { 9602 matchIndexes.push( i ); 9603 } 9604 return matchIndexes; 9605 } ), 9606 9607 odd: createPositionalPseudo( function( matchIndexes, length ) { 9608 var i = 1; 9609 for ( ; i < length; i += 2 ) { 9610 matchIndexes.push( i ); 9611 } 9612 return matchIndexes; 9613 } ), 9614 9615 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 9616 var i; 9617 9618 if ( argument < 0 ) { 9619 i = argument + length; 9620 } else if ( argument > length ) { 9621 i = length; 9622 } else { 9623 i = argument; 9624 } 9625 9626 for ( ; --i >= 0; ) { 9627 matchIndexes.push( i ); 9628 } 9629 return matchIndexes; 9630 } ), 9631 9632 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 9633 var i = argument < 0 ? argument + length : argument; 9634 for ( ; ++i < length; ) { 9635 matchIndexes.push( i ); 9636 } 9637 return matchIndexes; 9638 } ) 9639 } 9640}; 9641 9642Expr.pseudos.nth = Expr.pseudos.eq; 9643 9644// Add button/input type pseudos 9645for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 9646 Expr.pseudos[ i ] = createInputPseudo( i ); 9647} 9648for ( i in { submit: true, reset: true } ) { 9649 Expr.pseudos[ i ] = createButtonPseudo( i ); 9650} 9651 9652// Easy API for creating new setFilters 9653function setFilters() {} 9654setFilters.prototype = Expr.filters = Expr.pseudos; 9655Expr.setFilters = new setFilters(); 9656 9657function tokenize( selector, parseOnly ) { 9658 var matched, match, tokens, type, 9659 soFar, groups, preFilters, 9660 cached = tokenCache[ selector + " " ]; 9661 9662 if ( cached ) { 9663 return parseOnly ? 0 : cached.slice( 0 ); 9664 } 9665 9666 soFar = selector; 9667 groups = []; 9668 preFilters = Expr.preFilter; 9669 9670 while ( soFar ) { 9671 9672 // Comma and first run 9673 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 9674 if ( match ) { 9675 9676 // Don't consume trailing commas as valid 9677 soFar = soFar.slice( match[ 0 ].length ) || soFar; 9678 } 9679 groups.push( ( tokens = [] ) ); 9680 } 9681 9682 matched = false; 9683 9684 // Combinators 9685 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 9686 matched = match.shift(); 9687 tokens.push( { 9688 value: matched, 9689 9690 // Cast descendant combinators to space 9691 type: match[ 0 ].replace( rtrimCSS, " " ) 9692 } ); 9693 soFar = soFar.slice( matched.length ); 9694 } 9695 9696 // Filters 9697 for ( type in Expr.filter ) { 9698 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 9699 ( match = preFilters[ type ]( match ) ) ) ) { 9700 matched = match.shift(); 9701 tokens.push( { 9702 value: matched, 9703 type: type, 9704 matches: match 9705 } ); 9706 soFar = soFar.slice( matched.length ); 9707 } 9708 } 9709 9710 if ( !matched ) { 9711 break; 9712 } 9713 } 9714 9715 // Return the length of the invalid excess 9716 // if we're just parsing 9717 // Otherwise, throw an error or return tokens 9718 if ( parseOnly ) { 9719 return soFar.length; 9720 } 9721 9722 return soFar ? 9723 find.error( selector ) : 9724 9725 // Cache the tokens 9726 tokenCache( selector, groups ).slice( 0 ); 9727} 9728 9729function toSelector( tokens ) { 9730 var i = 0, 9731 len = tokens.length, 9732 selector = ""; 9733 for ( ; i < len; i++ ) { 9734 selector += tokens[ i ].value; 9735 } 9736 return selector; 9737} 9738 9739function addCombinator( matcher, combinator, base ) { 9740 var dir = combinator.dir, 9741 skip = combinator.next, 9742 key = skip || dir, 9743 checkNonElements = base && key === "parentNode", 9744 doneName = done++; 9745 9746 return combinator.first ? 9747 9748 // Check against closest ancestor/preceding element 9749 function( elem, context, xml ) { 9750 while ( ( elem = elem[ dir ] ) ) { 9751 if ( elem.nodeType === 1 || checkNonElements ) { 9752 return matcher( elem, context, xml ); 9753 } 9754 } 9755 return false; 9756 } : 9757 9758 // Check against all ancestor/preceding elements 9759 function( elem, context, xml ) { 9760 var oldCache, outerCache, 9761 newCache = [ dirruns, doneName ]; 9762 9763 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 9764 if ( xml ) { 9765 while ( ( elem = elem[ dir ] ) ) { 9766 if ( elem.nodeType === 1 || checkNonElements ) { 9767 if ( matcher( elem, context, xml ) ) { 9768 return true; 9769 } 9770 } 9771 } 9772 } else { 9773 while ( ( elem = elem[ dir ] ) ) { 9774 if ( elem.nodeType === 1 || checkNonElements ) { 9775 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 9776 9777 if ( skip && nodeName( elem, skip ) ) { 9778 elem = elem[ dir ] || elem; 9779 } else if ( ( oldCache = outerCache[ key ] ) && 9780 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 9781 9782 // Assign to newCache so results back-propagate to previous elements 9783 return ( newCache[ 2 ] = oldCache[ 2 ] ); 9784 } else { 9785 9786 // Reuse newcache so results back-propagate to previous elements 9787 outerCache[ key ] = newCache; 9788 9789 // A match means we're done; a fail means we have to keep checking 9790 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 9791 return true; 9792 } 9793 } 9794 } 9795 } 9796 } 9797 return false; 9798 }; 9799} 9800 9801function elementMatcher( matchers ) { 9802 return matchers.length > 1 ? 9803 function( elem, context, xml ) { 9804 var i = matchers.length; 9805 while ( i-- ) { 9806 if ( !matchers[ i ]( elem, context, xml ) ) { 9807 return false; 9808 } 9809 } 9810 return true; 9811 } : 9812 matchers[ 0 ]; 9813} 9814 9815function multipleContexts( selector, contexts, results ) { 9816 var i = 0, 9817 len = contexts.length; 9818 for ( ; i < len; i++ ) { 9819 find( selector, contexts[ i ], results ); 9820 } 9821 return results; 9822} 9823 9824function condense( unmatched, map, filter, context, xml ) { 9825 var elem, 9826 newUnmatched = [], 9827 i = 0, 9828 len = unmatched.length, 9829 mapped = map != null; 9830 9831 for ( ; i < len; i++ ) { 9832 if ( ( elem = unmatched[ i ] ) ) { 9833 if ( !filter || filter( elem, context, xml ) ) { 9834 newUnmatched.push( elem ); 9835 if ( mapped ) { 9836 map.push( i ); 9837 } 9838 } 9839 } 9840 } 9841 9842 return newUnmatched; 9843} 9844 9845function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 9846 if ( postFilter && !postFilter[ expando ] ) { 9847 postFilter = setMatcher( postFilter ); 9848 } 9849 if ( postFinder && !postFinder[ expando ] ) { 9850 postFinder = setMatcher( postFinder, postSelector ); 9851 } 9852 return markFunction( function( seed, results, context, xml ) { 9853 var temp, i, elem, matcherOut, 9854 preMap = [], 9855 postMap = [], 9856 preexisting = results.length, 9857 9858 // Get initial elements from seed or context 9859 elems = seed || 9860 multipleContexts( selector || "*", 9861 context.nodeType ? [ context ] : context, [] ), 9862 9863 // Prefilter to get matcher input, preserving a map for seed-results synchronization 9864 matcherIn = preFilter && ( seed || !selector ) ? 9865 condense( elems, preMap, preFilter, context, xml ) : 9866 elems; 9867 9868 if ( matcher ) { 9869 9870 // If we have a postFinder, or filtered seed, or non-seed postFilter 9871 // or preexisting results, 9872 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 9873 9874 // ...intermediate processing is necessary 9875 [] : 9876 9877 // ...otherwise use results directly 9878 results; 9879 9880 // Find primary matches 9881 matcher( matcherIn, matcherOut, context, xml ); 9882 } else { 9883 matcherOut = matcherIn; 9884 } 9885 9886 // Apply postFilter 9887 if ( postFilter ) { 9888 temp = condense( matcherOut, postMap ); 9889 postFilter( temp, [], context, xml ); 9890 9891 // Un-match failing elements by moving them back to matcherIn 9892 i = temp.length; 9893 while ( i-- ) { 9894 if ( ( elem = temp[ i ] ) ) { 9895 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 9896 } 9897 } 9898 } 9899 9900 if ( seed ) { 9901 if ( postFinder || preFilter ) { 9902 if ( postFinder ) { 9903 9904 // Get the final matcherOut by condensing this intermediate into postFinder contexts 9905 temp = []; 9906 i = matcherOut.length; 9907 while ( i-- ) { 9908 if ( ( elem = matcherOut[ i ] ) ) { 9909 9910 // Restore matcherIn since elem is not yet a final match 9911 temp.push( ( matcherIn[ i ] = elem ) ); 9912 } 9913 } 9914 postFinder( null, ( matcherOut = [] ), temp, xml ); 9915 } 9916 9917 // Move matched elements from seed to results to keep them synchronized 9918 i = matcherOut.length; 9919 while ( i-- ) { 9920 if ( ( elem = matcherOut[ i ] ) && 9921 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 9922 9923 seed[ temp ] = !( results[ temp ] = elem ); 9924 } 9925 } 9926 } 9927 9928 // Add elements to results, through postFinder if defined 9929 } else { 9930 matcherOut = condense( 9931 matcherOut === results ? 9932 matcherOut.splice( preexisting, matcherOut.length ) : 9933 matcherOut 9934 ); 9935 if ( postFinder ) { 9936 postFinder( null, results, matcherOut, xml ); 9937 } else { 9938 push.apply( results, matcherOut ); 9939 } 9940 } 9941 } ); 9942} 9943 9944function matcherFromTokens( tokens ) { 9945 var checkContext, matcher, j, 9946 len = tokens.length, 9947 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 9948 implicitRelative = leadingRelative || Expr.relative[ " " ], 9949 i = leadingRelative ? 1 : 0, 9950 9951 // The foundational matcher ensures that elements are reachable from top-level context(s) 9952 matchContext = addCombinator( function( elem ) { 9953 return elem === checkContext; 9954 }, implicitRelative, true ), 9955 matchAnyContext = addCombinator( function( elem ) { 9956 return indexOf.call( checkContext, elem ) > -1; 9957 }, implicitRelative, true ), 9958 matchers = [ function( elem, context, xml ) { 9959 9960 // Support: IE 11+, Edge 17 - 18+ 9961 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9962 // two documents; shallow comparisons work. 9963 // eslint-disable-next-line eqeqeq 9964 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 9965 ( checkContext = context ).nodeType ? 9966 matchContext( elem, context, xml ) : 9967 matchAnyContext( elem, context, xml ) ); 9968 9969 // Avoid hanging onto element 9970 // (see https://github.com/jquery/sizzle/issues/299) 9971 checkContext = null; 9972 return ret; 9973 } ]; 9974 9975 for ( ; i < len; i++ ) { 9976 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 9977 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 9978 } else { 9979 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 9980 9981 // Return special upon seeing a positional matcher 9982 if ( matcher[ expando ] ) { 9983 9984 // Find the next relative operator (if any) for proper handling 9985 j = ++i; 9986 for ( ; j < len; j++ ) { 9987 if ( Expr.relative[ tokens[ j ].type ] ) { 9988 break; 9989 } 9990 } 9991 return setMatcher( 9992 i > 1 && elementMatcher( matchers ), 9993 i > 1 && toSelector( 9994 9995 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 9996 tokens.slice( 0, i - 1 ) 9997 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 9998 ).replace( rtrimCSS, "$1" ), 9999 matcher, 10000 i < j && matcherFromTokens( tokens.slice( i, j ) ), 10001 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 10002 j < len && toSelector( tokens ) 10003 ); 10004 } 10005 matchers.push( matcher ); 10006 } 10007 } 10008 10009 return elementMatcher( matchers ); 10010} 10011 10012function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 10013 var bySet = setMatchers.length > 0, 10014 byElement = elementMatchers.length > 0, 10015 superMatcher = function( seed, context, xml, results, outermost ) { 10016 var elem, j, matcher, 10017 matchedCount = 0, 10018 i = "0", 10019 unmatched = seed && [], 10020 setMatched = [], 10021 contextBackup = outermostContext, 10022 10023 // We must always have either seed elements or outermost context 10024 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 10025 10026 // Use integer dirruns iff this is the outermost matcher 10027 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 10028 len = elems.length; 10029 10030 if ( outermost ) { 10031 10032 // Support: IE 11+, Edge 17 - 18+ 10033 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10034 // two documents; shallow comparisons work. 10035 // eslint-disable-next-line eqeqeq 10036 outermostContext = context == document || context || outermost; 10037 } 10038 10039 // Add elements passing elementMatchers directly to results 10040 // Support: iOS <=7 - 9 only 10041 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 10042 // elements by id. (see trac-14142) 10043 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 10044 if ( byElement && elem ) { 10045 j = 0; 10046 10047 // Support: IE 11+, Edge 17 - 18+ 10048 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 10049 // two documents; shallow comparisons work. 10050 // eslint-disable-next-line eqeqeq 10051 if ( !context && elem.ownerDocument != document ) { 10052 setDocument( elem ); 10053 xml = !documentIsHTML; 10054 } 10055 while ( ( matcher = elementMatchers[ j++ ] ) ) { 10056 if ( matcher( elem, context || document, xml ) ) { 10057 push.call( results, elem ); 10058 break; 10059 } 10060 } 10061 if ( outermost ) { 10062 dirruns = dirrunsUnique; 10063 } 10064 } 10065 10066 // Track unmatched elements for set filters 10067 if ( bySet ) { 10068 10069 // They will have gone through all possible matchers 10070 if ( ( elem = !matcher && elem ) ) { 10071 matchedCount--; 10072 } 10073 10074 // Lengthen the array for every element, matched or not 10075 if ( seed ) { 10076 unmatched.push( elem ); 10077 } 10078 } 10079 } 10080 10081 // `i` is now the count of elements visited above, and adding it to `matchedCount` 10082 // makes the latter nonnegative. 10083 matchedCount += i; 10084 10085 // Apply set filters to unmatched elements 10086 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 10087 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 10088 // no element matchers and no seed. 10089 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 10090 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 10091 // numerically zero. 10092 if ( bySet && i !== matchedCount ) { 10093 j = 0; 10094 while ( ( matcher = setMatchers[ j++ ] ) ) { 10095 matcher( unmatched, setMatched, context, xml ); 10096 } 10097 10098 if ( seed ) { 10099 10100 // Reintegrate element matches to eliminate the need for sorting 10101 if ( matchedCount > 0 ) { 10102 while ( i-- ) { 10103 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 10104 setMatched[ i ] = pop.call( results ); 10105 } 10106 } 10107 } 10108 10109 // Discard index placeholder values to get only actual matches 10110 setMatched = condense( setMatched ); 10111 } 10112 10113 // Add matches to results 10114 push.apply( results, setMatched ); 10115 10116 // Seedless set matches succeeding multiple successful matchers stipulate sorting 10117 if ( outermost && !seed && setMatched.length > 0 && 10118 ( matchedCount + setMatchers.length ) > 1 ) { 10119 10120 jQuery.uniqueSort( results ); 10121 } 10122 } 10123 10124 // Override manipulation of globals by nested matchers 10125 if ( outermost ) { 10126 dirruns = dirrunsUnique; 10127 outermostContext = contextBackup; 10128 } 10129 10130 return unmatched; 10131 }; 10132 10133 return bySet ? 10134 markFunction( superMatcher ) : 10135 superMatcher; 10136} 10137 10138function compile( selector, match /* Internal Use Only */ ) { 10139 var i, 10140 setMatchers = [], 10141 elementMatchers = [], 10142 cached = compilerCache[ selector + " " ]; 10143 10144 if ( !cached ) { 10145 10146 // Generate a function of recursive functions that can be used to check each element 10147 if ( !match ) { 10148 match = tokenize( selector ); 10149 } 10150 i = match.length; 10151 while ( i-- ) { 10152 cached = matcherFromTokens( match[ i ] ); 10153 if ( cached[ expando ] ) { 10154 setMatchers.push( cached ); 10155 } else { 10156 elementMatchers.push( cached ); 10157 } 10158 } 10159 10160 // Cache the compiled function 10161 cached = compilerCache( selector, 10162 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 10163 10164 // Save selector and tokenization 10165 cached.selector = selector; 10166 } 10167 return cached; 10168} 10169 10170/** 10171 * A low-level selection function that works with jQuery's compiled 10172 * selector functions 10173 * @param {String|Function} selector A selector or a pre-compiled 10174 * selector function built with jQuery selector compile 10175 * @param {Element} context 10176 * @param {Array} [results] 10177 * @param {Array} [seed] A set of elements to match against 10178 */ 10179function select( selector, context, results, seed ) { 10180 var i, tokens, token, type, find, 10181 compiled = typeof selector === "function" && selector, 10182 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 10183 10184 results = results || []; 10185 10186 // Try to minimize operations if there is only one selector in the list and no seed 10187 // (the latter of which guarantees us context) 10188 if ( match.length === 1 ) { 10189 10190 // Reduce context if the leading compound selector is an ID 10191 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 10192 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 10193 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 10194 10195 context = ( Expr.find.ID( 10196 token.matches[ 0 ].replace( runescape, funescape ), 10197 context 10198 ) || [] )[ 0 ]; 10199 if ( !context ) { 10200 return results; 10201 10202 // Precompiled matchers will still verify ancestry, so step up a level 10203 } else if ( compiled ) { 10204 context = context.parentNode; 10205 } 10206 10207 selector = selector.slice( tokens.shift().value.length ); 10208 } 10209 10210 // Fetch a seed set for right-to-left matching 10211 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 10212 while ( i-- ) { 10213 token = tokens[ i ]; 10214 10215 // Abort if we hit a combinator 10216 if ( Expr.relative[ ( type = token.type ) ] ) { 10217 break; 10218 } 10219 if ( ( find = Expr.find[ type ] ) ) { 10220 10221 // Search, expanding context for leading sibling combinators 10222 if ( ( seed = find( 10223 token.matches[ 0 ].replace( runescape, funescape ), 10224 rsibling.test( tokens[ 0 ].type ) && 10225 testContext( context.parentNode ) || context 10226 ) ) ) { 10227 10228 // If seed is empty or no tokens remain, we can return early 10229 tokens.splice( i, 1 ); 10230 selector = seed.length && toSelector( tokens ); 10231 if ( !selector ) { 10232 push.apply( results, seed ); 10233 return results; 10234 } 10235 10236 break; 10237 } 10238 } 10239 } 10240 } 10241 10242 // Compile and execute a filtering function if one is not provided 10243 // Provide `match` to avoid retokenization if we modified the selector above 10244 ( compiled || compile( selector, match ) )( 10245 seed, 10246 context, 10247 !documentIsHTML, 10248 results, 10249 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 10250 ); 10251 return results; 10252} 10253 10254// One-time assignments 10255 10256// Support: Android <=4.0 - 4.1+ 10257// Sort stability 10258support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 10259 10260// Initialize against the default document 10261setDocument(); 10262 10263// Support: Android <=4.0 - 4.1+ 10264// Detached nodes confoundingly follow *each other* 10265support.sortDetached = assert( function( el ) { 10266 10267 // Should return 1, but returns 4 (following) 10268 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 10269} ); 10270 10271jQuery.find = find; 10272 10273// Deprecated 10274jQuery.expr[ ":" ] = jQuery.expr.pseudos; 10275jQuery.unique = jQuery.uniqueSort; 10276 10277// These have always been private, but they used to be documented as part of 10278// Sizzle so let's maintain them for now for backwards compatibility purposes. 10279find.compile = compile; 10280find.select = select; 10281find.setDocument = setDocument; 10282find.tokenize = tokenize; 10283 10284find.escape = jQuery.escapeSelector; 10285find.getText = jQuery.text; 10286find.isXML = jQuery.isXMLDoc; 10287find.selectors = jQuery.expr; 10288find.support = jQuery.support; 10289find.uniqueSort = jQuery.uniqueSort; 10290 10291 /* eslint-enable */ 10292 10293} )(); 10294 10295 10296var dir = function( elem, dir, until ) { 10297 var matched = [], 10298 truncate = until !== undefined; 10299 10300 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 10301 if ( elem.nodeType === 1 ) { 10302 if ( truncate && jQuery( elem ).is( until ) ) { 10303 break; 10304 } 10305 matched.push( elem ); 10306 } 10307 } 10308 return matched; 10309}; 10310 10311 10312var siblings = function( n, elem ) { 10313 var matched = []; 10314 10315 for ( ; n; n = n.nextSibling ) { 10316 if ( n.nodeType === 1 && n !== elem ) { 10317 matched.push( n ); 10318 } 10319 } 10320 10321 return matched; 10322}; 10323 10324 10325var rneedsContext = jQuery.expr.match.needsContext; 10326 10327var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 10328 10329 10330 10331// Implement the identical functionality for filter and not 10332function winnow( elements, qualifier, not ) { 10333 if ( isFunction( qualifier ) ) { 10334 return jQuery.grep( elements, function( elem, i ) { 10335 return !!qualifier.call( elem, i, elem ) !== not; 10336 } ); 10337 } 10338 10339 // Single element 10340 if ( qualifier.nodeType ) { 10341 return jQuery.grep( elements, function( elem ) { 10342 return ( elem === qualifier ) !== not; 10343 } ); 10344 } 10345 10346 // Arraylike of elements (jQuery, arguments, Array) 10347 if ( typeof qualifier !== "string" ) { 10348 return jQuery.grep( elements, function( elem ) { 10349 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 10350 } ); 10351 } 10352 10353 // Filtered directly for both simple and complex selectors 10354 return jQuery.filter( qualifier, elements, not ); 10355} 10356 10357jQuery.filter = function( expr, elems, not ) { 10358 var elem = elems[ 0 ]; 10359 10360 if ( not ) { 10361 expr = ":not(" + expr + ")"; 10362 } 10363 10364 if ( elems.length === 1 && elem.nodeType === 1 ) { 10365 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 10366 } 10367 10368 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 10369 return elem.nodeType === 1; 10370 } ) ); 10371}; 10372 10373jQuery.fn.extend( { 10374 find: function( selector ) { 10375 var i, ret, 10376 len = this.length, 10377 self = this; 10378 10379 if ( typeof selector !== "string" ) { 10380 return this.pushStack( jQuery( selector ).filter( function() { 10381 for ( i = 0; i < len; i++ ) { 10382 if ( jQuery.contains( self[ i ], this ) ) { 10383 return true; 10384 } 10385 } 10386 } ) ); 10387 } 10388 10389 ret = this.pushStack( [] ); 10390 10391 for ( i = 0; i < len; i++ ) { 10392 jQuery.find( selector, self[ i ], ret ); 10393 } 10394 10395 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 10396 }, 10397 filter: function( selector ) { 10398 return this.pushStack( winnow( this, selector || [], false ) ); 10399 }, 10400 not: function( selector ) { 10401 return this.pushStack( winnow( this, selector || [], true ) ); 10402 }, 10403 is: function( selector ) { 10404 return !!winnow( 10405 this, 10406 10407 // If this is a positional/relative selector, check membership in the returned set 10408 // so $("p:first").is("p:last") won't return true for a doc with two "p". 10409 typeof selector === "string" && rneedsContext.test( selector ) ? 10410 jQuery( selector ) : 10411 selector || [], 10412 false 10413 ).length; 10414 } 10415} ); 10416 10417 10418// Initialize a jQuery object 10419 10420 10421// A central reference to the root jQuery(document) 10422var rootjQuery, 10423 10424 // A simple way to check for HTML strings 10425 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 10426 // Strict HTML recognition (trac-11290: must start with <) 10427 // Shortcut simple #id case for speed 10428 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 10429 10430 init = jQuery.fn.init = function( selector, context, root ) { 10431 var match, elem; 10432 10433 // HANDLE: $(""), $(null), $(undefined), $(false) 10434 if ( !selector ) { 10435 return this; 10436 } 10437 10438 // Method init() accepts an alternate rootjQuery 10439 // so migrate can support jQuery.sub (gh-2101) 10440 root = root || rootjQuery; 10441 10442 // Handle HTML strings 10443 if ( typeof selector === "string" ) { 10444 if ( selector[ 0 ] === "<" && 10445 selector[ selector.length - 1 ] === ">" && 10446 selector.length >= 3 ) { 10447 10448 // Assume that strings that start and end with <> are HTML and skip the regex check 10449 match = [ null, selector, null ]; 10450 10451 } else { 10452 match = rquickExpr.exec( selector ); 10453 } 10454 10455 // Match html or make sure no context is specified for #id 10456 if ( match && ( match[ 1 ] || !context ) ) { 10457 10458 // HANDLE: $(html) -> $(array) 10459 if ( match[ 1 ] ) { 10460 context = context instanceof jQuery ? context[ 0 ] : context; 10461 10462 // Option to run scripts is true for back-compat 10463 // Intentionally let the error be thrown if parseHTML is not present 10464 jQuery.merge( this, jQuery.parseHTML( 10465 match[ 1 ], 10466 context && context.nodeType ? context.ownerDocument || context : document, 10467 true 10468 ) ); 10469 10470 // HANDLE: $(html, props) 10471 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 10472 for ( match in context ) { 10473 10474 // Properties of context are called as methods if possible 10475 if ( isFunction( this[ match ] ) ) { 10476 this[ match ]( context[ match ] ); 10477 10478 // ...and otherwise set as attributes 10479 } else { 10480 this.attr( match, context[ match ] ); 10481 } 10482 } 10483 } 10484 10485 return this; 10486 10487 // HANDLE: $(#id) 10488 } else { 10489 elem = document.getElementById( match[ 2 ] ); 10490 10491 if ( elem ) { 10492 10493 // Inject the element directly into the jQuery object 10494 this[ 0 ] = elem; 10495 this.length = 1; 10496 } 10497 return this; 10498 } 10499 10500 // HANDLE: $(expr, $(...)) 10501 } else if ( !context || context.jquery ) { 10502 return ( context || root ).find( selector ); 10503 10504 // HANDLE: $(expr, context) 10505 // (which is just equivalent to: $(context).find(expr) 10506 } else { 10507 return this.constructor( context ).find( selector ); 10508 } 10509 10510 // HANDLE: $(DOMElement) 10511 } else if ( selector.nodeType ) { 10512 this[ 0 ] = selector; 10513 this.length = 1; 10514 return this; 10515 10516 // HANDLE: $(function) 10517 // Shortcut for document ready 10518 } else if ( isFunction( selector ) ) { 10519 return root.ready !== undefined ? 10520 root.ready( selector ) : 10521 10522 // Execute immediately if ready is not present 10523 selector( jQuery ); 10524 } 10525 10526 return jQuery.makeArray( selector, this ); 10527 }; 10528 10529// Give the init function the jQuery prototype for later instantiation 10530init.prototype = jQuery.fn; 10531 10532// Initialize central reference 10533rootjQuery = jQuery( document ); 10534 10535 10536var rparentsprev = /^(?:parents|prev(?:Until|All))/, 10537 10538 // Methods guaranteed to produce a unique set when starting from a unique set 10539 guaranteedUnique = { 10540 children: true, 10541 contents: true, 10542 next: true, 10543 prev: true 10544 }; 10545 10546jQuery.fn.extend( { 10547 has: function( target ) { 10548 var targets = jQuery( target, this ), 10549 l = targets.length; 10550 10551 return this.filter( function() { 10552 var i = 0; 10553 for ( ; i < l; i++ ) { 10554 if ( jQuery.contains( this, targets[ i ] ) ) { 10555 return true; 10556 } 10557 } 10558 } ); 10559 }, 10560 10561 closest: function( selectors, context ) { 10562 var cur, 10563 i = 0, 10564 l = this.length, 10565 matched = [], 10566 targets = typeof selectors !== "string" && jQuery( selectors ); 10567 10568 // Positional selectors never match, since there's no _selection_ context 10569 if ( !rneedsContext.test( selectors ) ) { 10570 for ( ; i < l; i++ ) { 10571 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 10572 10573 // Always skip document fragments 10574 if ( cur.nodeType < 11 && ( targets ? 10575 targets.index( cur ) > -1 : 10576 10577 // Don't pass non-elements to jQuery#find 10578 cur.nodeType === 1 && 10579 jQuery.find.matchesSelector( cur, selectors ) ) ) { 10580 10581 matched.push( cur ); 10582 break; 10583 } 10584 } 10585 } 10586 } 10587 10588 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 10589 }, 10590 10591 // Determine the position of an element within the set 10592 index: function( elem ) { 10593 10594 // No argument, return index in parent 10595 if ( !elem ) { 10596 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 10597 } 10598 10599 // Index in selector 10600 if ( typeof elem === "string" ) { 10601 return indexOf.call( jQuery( elem ), this[ 0 ] ); 10602 } 10603 10604 // Locate the position of the desired element 10605 return indexOf.call( this, 10606 10607 // If it receives a jQuery object, the first element is used 10608 elem.jquery ? elem[ 0 ] : elem 10609 ); 10610 }, 10611 10612 add: function( selector, context ) { 10613 return this.pushStack( 10614 jQuery.uniqueSort( 10615 jQuery.merge( this.get(), jQuery( selector, context ) ) 10616 ) 10617 ); 10618 }, 10619 10620 addBack: function( selector ) { 10621 return this.add( selector == null ? 10622 this.prevObject : this.prevObject.filter( selector ) 10623 ); 10624 } 10625} ); 10626 10627function sibling( cur, dir ) { 10628 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 10629 return cur; 10630} 10631 10632jQuery.each( { 10633 parent: function( elem ) { 10634 var parent = elem.parentNode; 10635 return parent && parent.nodeType !== 11 ? parent : null; 10636 }, 10637 parents: function( elem ) { 10638 return dir( elem, "parentNode" ); 10639 }, 10640 parentsUntil: function( elem, _i, until ) { 10641 return dir( elem, "parentNode", until ); 10642 }, 10643 next: function( elem ) { 10644 return sibling( elem, "nextSibling" ); 10645 }, 10646 prev: function( elem ) { 10647 return sibling( elem, "previousSibling" ); 10648 }, 10649 nextAll: function( elem ) { 10650 return dir( elem, "nextSibling" ); 10651 }, 10652 prevAll: function( elem ) { 10653 return dir( elem, "previousSibling" ); 10654 }, 10655 nextUntil: function( elem, _i, until ) { 10656 return dir( elem, "nextSibling", until ); 10657 }, 10658 prevUntil: function( elem, _i, until ) { 10659 return dir( elem, "previousSibling", until ); 10660 }, 10661 siblings: function( elem ) { 10662 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 10663 }, 10664 children: function( elem ) { 10665 return siblings( elem.firstChild ); 10666 }, 10667 contents: function( elem ) { 10668 if ( elem.contentDocument != null && 10669 10670 // Support: IE 11+ 10671 // <object> elements with no `data` attribute has an object 10672 // `contentDocument` with a `null` prototype. 10673 getProto( elem.contentDocument ) ) { 10674 10675 return elem.contentDocument; 10676 } 10677 10678 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 10679 // Treat the template element as a regular one in browsers that 10680 // don't support it. 10681 if ( nodeName( elem, "template" ) ) { 10682 elem = elem.content || elem; 10683 } 10684 10685 return jQuery.merge( [], elem.childNodes ); 10686 } 10687}, function( name, fn ) { 10688 jQuery.fn[ name ] = function( until, selector ) { 10689 var matched = jQuery.map( this, fn, until ); 10690 10691 if ( name.slice( -5 ) !== "Until" ) { 10692 selector = until; 10693 } 10694 10695 if ( selector && typeof selector === "string" ) { 10696 matched = jQuery.filter( selector, matched ); 10697 } 10698 10699 if ( this.length > 1 ) { 10700 10701 // Remove duplicates 10702 if ( !guaranteedUnique[ name ] ) { 10703 jQuery.uniqueSort( matched ); 10704 } 10705 10706 // Reverse order for parents* and prev-derivatives 10707 if ( rparentsprev.test( name ) ) { 10708 matched.reverse(); 10709 } 10710 } 10711 10712 return this.pushStack( matched ); 10713 }; 10714} ); 10715var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 10716 10717 10718 10719// Convert String-formatted options into Object-formatted ones 10720function createOptions( options ) { 10721 var object = {}; 10722 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 10723 object[ flag ] = true; 10724 } ); 10725 return object; 10726} 10727 10728/* 10729 * Create a callback list using the following parameters: 10730 * 10731 * options: an optional list of space-separated options that will change how 10732 * the callback list behaves or a more traditional option object 10733 * 10734 * By default a callback list will act like an event callback list and can be 10735 * "fired" multiple times. 10736 * 10737 * Possible options: 10738 * 10739 * once: will ensure the callback list can only be fired once (like a Deferred) 10740 * 10741 * memory: will keep track of previous values and will call any callback added 10742 * after the list has been fired right away with the latest "memorized" 10743 * values (like a Deferred) 10744 * 10745 * unique: will ensure a callback can only be added once (no duplicate in the list) 10746 * 10747 * stopOnFalse: interrupt callings when a callback returns false 10748 * 10749 */ 10750jQuery.Callbacks = function( options ) { 10751 10752 // Convert options from String-formatted to Object-formatted if needed 10753 // (we check in cache first) 10754 options = typeof options === "string" ? 10755 createOptions( options ) : 10756 jQuery.extend( {}, options ); 10757 10758 var // Flag to know if list is currently firing 10759 firing, 10760 10761 // Last fire value for non-forgettable lists 10762 memory, 10763 10764 // Flag to know if list was already fired 10765 fired, 10766 10767 // Flag to prevent firing 10768 locked, 10769 10770 // Actual callback list 10771 list = [], 10772 10773 // Queue of execution data for repeatable lists 10774 queue = [], 10775 10776 // Index of currently firing callback (modified by add/remove as needed) 10777 firingIndex = -1, 10778 10779 // Fire callbacks 10780 fire = function() { 10781 10782 // Enforce single-firing 10783 locked = locked || options.once; 10784 10785 // Execute callbacks for all pending executions, 10786 // respecting firingIndex overrides and runtime changes 10787 fired = firing = true; 10788 for ( ; queue.length; firingIndex = -1 ) { 10789 memory = queue.shift(); 10790 while ( ++firingIndex < list.length ) { 10791 10792 // Run callback and check for early termination 10793 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 10794 options.stopOnFalse ) { 10795 10796 // Jump to end and forget the data so .add doesn't re-fire 10797 firingIndex = list.length; 10798 memory = false; 10799 } 10800 } 10801 } 10802 10803 // Forget the data if we're done with it 10804 if ( !options.memory ) { 10805 memory = false; 10806 } 10807 10808 firing = false; 10809 10810 // Clean up if we're done firing for good 10811 if ( locked ) { 10812 10813 // Keep an empty list if we have data for future add calls 10814 if ( memory ) { 10815 list = []; 10816 10817 // Otherwise, this object is spent 10818 } else { 10819 list = ""; 10820 } 10821 } 10822 }, 10823 10824 // Actual Callbacks object 10825 self = { 10826 10827 // Add a callback or a collection of callbacks to the list 10828 add: function() { 10829 if ( list ) { 10830 10831 // If we have memory from a past run, we should fire after adding 10832 if ( memory && !firing ) { 10833 firingIndex = list.length - 1; 10834 queue.push( memory ); 10835 } 10836 10837 ( function add( args ) { 10838 jQuery.each( args, function( _, arg ) { 10839 if ( isFunction( arg ) ) { 10840 if ( !options.unique || !self.has( arg ) ) { 10841 list.push( arg ); 10842 } 10843 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 10844 10845 // Inspect recursively 10846 add( arg ); 10847 } 10848 } ); 10849 } )( arguments ); 10850 10851 if ( memory && !firing ) { 10852 fire(); 10853 } 10854 } 10855 return this; 10856 }, 10857 10858 // Remove a callback from the list 10859 remove: function() { 10860 jQuery.each( arguments, function( _, arg ) { 10861 var index; 10862 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 10863 list.splice( index, 1 ); 10864 10865 // Handle firing indexes 10866 if ( index <= firingIndex ) { 10867 firingIndex--; 10868 } 10869 } 10870 } ); 10871 return this; 10872 }, 10873 10874 // Check if a given callback is in the list. 10875 // If no argument is given, return whether or not list has callbacks attached. 10876 has: function( fn ) { 10877 return fn ? 10878 jQuery.inArray( fn, list ) > -1 : 10879 list.length > 0; 10880 }, 10881 10882 // Remove all callbacks from the list 10883 empty: function() { 10884 if ( list ) { 10885 list = []; 10886 } 10887 return this; 10888 }, 10889 10890 // Disable .fire and .add 10891 // Abort any current/pending executions 10892 // Clear all callbacks and values 10893 disable: function() { 10894 locked = queue = []; 10895 list = memory = ""; 10896 return this; 10897 }, 10898 disabled: function() { 10899 return !list; 10900 }, 10901 10902 // Disable .fire 10903 // Also disable .add unless we have memory (since it would have no effect) 10904 // Abort any pending executions 10905 lock: function() { 10906 locked = queue = []; 10907 if ( !memory && !firing ) { 10908 list = memory = ""; 10909 } 10910 return this; 10911 }, 10912 locked: function() { 10913 return !!locked; 10914 }, 10915 10916 // Call all callbacks with the given context and arguments 10917 fireWith: function( context, args ) { 10918 if ( !locked ) { 10919 args = args || []; 10920 args = [ context, args.slice ? args.slice() : args ]; 10921 queue.push( args ); 10922 if ( !firing ) { 10923 fire(); 10924 } 10925 } 10926 return this; 10927 }, 10928 10929 // Call all the callbacks with the given arguments 10930 fire: function() { 10931 self.fireWith( this, arguments ); 10932 return this; 10933 }, 10934 10935 // To know if the callbacks have already been called at least once 10936 fired: function() { 10937 return !!fired; 10938 } 10939 }; 10940 10941 return self; 10942}; 10943 10944 10945function Identity( v ) { 10946 return v; 10947} 10948function Thrower( ex ) { 10949 throw ex; 10950} 10951 10952function adoptValue( value, resolve, reject, noValue ) { 10953 var method; 10954 10955 try { 10956 10957 // Check for promise aspect first to privilege synchronous behavior 10958 if ( value && isFunction( ( method = value.promise ) ) ) { 10959 method.call( value ).done( resolve ).fail( reject ); 10960 10961 // Other thenables 10962 } else if ( value && isFunction( ( method = value.then ) ) ) { 10963 method.call( value, resolve, reject ); 10964 10965 // Other non-thenables 10966 } else { 10967 10968 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 10969 // * false: [ value ].slice( 0 ) => resolve( value ) 10970 // * true: [ value ].slice( 1 ) => resolve() 10971 resolve.apply( undefined, [ value ].slice( noValue ) ); 10972 } 10973 10974 // For Promises/A+, convert exceptions into rejections 10975 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 10976 // Deferred#then to conditionally suppress rejection. 10977 } catch ( value ) { 10978 10979 // Support: Android 4.0 only 10980 // Strict mode functions invoked without .call/.apply get global-object context 10981 reject.apply( undefined, [ value ] ); 10982 } 10983} 10984 10985jQuery.extend( { 10986 10987 Deferred: function( func ) { 10988 var tuples = [ 10989 10990 // action, add listener, callbacks, 10991 // ... .then handlers, argument index, [final state] 10992 [ "notify", "progress", jQuery.Callbacks( "memory" ), 10993 jQuery.Callbacks( "memory" ), 2 ], 10994 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 10995 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 10996 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 10997 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 10998 ], 10999 state = "pending", 11000 promise = { 11001 state: function() { 11002 return state; 11003 }, 11004 always: function() { 11005 deferred.done( arguments ).fail( arguments ); 11006 return this; 11007 }, 11008 "catch": function( fn ) { 11009 return promise.then( null, fn ); 11010 }, 11011 11012 // Keep pipe for back-compat 11013 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 11014 var fns = arguments; 11015 11016 return jQuery.Deferred( function( newDefer ) { 11017 jQuery.each( tuples, function( _i, tuple ) { 11018 11019 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 11020 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 11021 11022 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 11023 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 11024 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 11025 deferred[ tuple[ 1 ] ]( function() { 11026 var returned = fn && fn.apply( this, arguments ); 11027 if ( returned && isFunction( returned.promise ) ) { 11028 returned.promise() 11029 .progress( newDefer.notify ) 11030 .done( newDefer.resolve ) 11031 .fail( newDefer.reject ); 11032 } else { 11033 newDefer[ tuple[ 0 ] + "With" ]( 11034 this, 11035 fn ? [ returned ] : arguments 11036 ); 11037 } 11038 } ); 11039 } ); 11040 fns = null; 11041 } ).promise(); 11042 }, 11043 then: function( onFulfilled, onRejected, onProgress ) { 11044 var maxDepth = 0; 11045 function resolve( depth, deferred, handler, special ) { 11046 return function() { 11047 var that = this, 11048 args = arguments, 11049 mightThrow = function() { 11050 var returned, then; 11051 11052 // Support: Promises/A+ section 2.3.3.3.3 11053 // https://promisesaplus.com/#point-59 11054 // Ignore double-resolution attempts 11055 if ( depth < maxDepth ) { 11056 return; 11057 } 11058 11059 returned = handler.apply( that, args ); 11060 11061 // Support: Promises/A+ section 2.3.1 11062 // https://promisesaplus.com/#point-48 11063 if ( returned === deferred.promise() ) { 11064 throw new TypeError( "Thenable self-resolution" ); 11065 } 11066 11067 // Support: Promises/A+ sections 2.3.3.1, 3.5 11068 // https://promisesaplus.com/#point-54 11069 // https://promisesaplus.com/#point-75 11070 // Retrieve `then` only once 11071 then = returned && 11072 11073 // Support: Promises/A+ section 2.3.4 11074 // https://promisesaplus.com/#point-64 11075 // Only check objects and functions for thenability 11076 ( typeof returned === "object" || 11077 typeof returned === "function" ) && 11078 returned.then; 11079 11080 // Handle a returned thenable 11081 if ( isFunction( then ) ) { 11082 11083 // Special processors (notify) just wait for resolution 11084 if ( special ) { 11085 then.call( 11086 returned, 11087 resolve( maxDepth, deferred, Identity, special ), 11088 resolve( maxDepth, deferred, Thrower, special ) 11089 ); 11090 11091 // Normal processors (resolve) also hook into progress 11092 } else { 11093 11094 // ...and disregard older resolution values 11095 maxDepth++; 11096 11097 then.call( 11098 returned, 11099 resolve( maxDepth, deferred, Identity, special ), 11100 resolve( maxDepth, deferred, Thrower, special ), 11101 resolve( maxDepth, deferred, Identity, 11102 deferred.notifyWith ) 11103 ); 11104 } 11105 11106 // Handle all other returned values 11107 } else { 11108 11109 // Only substitute handlers pass on context 11110 // and multiple values (non-spec behavior) 11111 if ( handler !== Identity ) { 11112 that = undefined; 11113 args = [ returned ]; 11114 } 11115 11116 // Process the value(s) 11117 // Default process is resolve 11118 ( special || deferred.resolveWith )( that, args ); 11119 } 11120 }, 11121 11122 // Only normal processors (resolve) catch and reject exceptions 11123 process = special ? 11124 mightThrow : 11125 function() { 11126 try { 11127 mightThrow(); 11128 } catch ( e ) { 11129 11130 if ( jQuery.Deferred.exceptionHook ) { 11131 jQuery.Deferred.exceptionHook( e, 11132 process.error ); 11133 } 11134 11135 // Support: Promises/A+ section 2.3.3.3.4.1 11136 // https://promisesaplus.com/#point-61 11137 // Ignore post-resolution exceptions 11138 if ( depth + 1 >= maxDepth ) { 11139 11140 // Only substitute handlers pass on context 11141 // and multiple values (non-spec behavior) 11142 if ( handler !== Thrower ) { 11143 that = undefined; 11144 args = [ e ]; 11145 } 11146 11147 deferred.rejectWith( that, args ); 11148 } 11149 } 11150 }; 11151 11152 // Support: Promises/A+ section 2.3.3.3.1 11153 // https://promisesaplus.com/#point-57 11154 // Re-resolve promises immediately to dodge false rejection from 11155 // subsequent errors 11156 if ( depth ) { 11157 process(); 11158 } else { 11159 11160 // Call an optional hook to record the error, in case of exception 11161 // since it's otherwise lost when execution goes async 11162 if ( jQuery.Deferred.getErrorHook ) { 11163 process.error = jQuery.Deferred.getErrorHook(); 11164 11165 // The deprecated alias of the above. While the name suggests 11166 // returning the stack, not an error instance, jQuery just passes 11167 // it directly to `console.warn` so both will work; an instance 11168 // just better cooperates with source maps. 11169 } else if ( jQuery.Deferred.getStackHook ) { 11170 process.error = jQuery.Deferred.getStackHook(); 11171 } 11172 window.setTimeout( process ); 11173 } 11174 }; 11175 } 11176 11177 return jQuery.Deferred( function( newDefer ) { 11178 11179 // progress_handlers.add( ... ) 11180 tuples[ 0 ][ 3 ].add( 11181 resolve( 11182 0, 11183 newDefer, 11184 isFunction( onProgress ) ? 11185 onProgress : 11186 Identity, 11187 newDefer.notifyWith 11188 ) 11189 ); 11190 11191 // fulfilled_handlers.add( ... ) 11192 tuples[ 1 ][ 3 ].add( 11193 resolve( 11194 0, 11195 newDefer, 11196 isFunction( onFulfilled ) ? 11197 onFulfilled : 11198 Identity 11199 ) 11200 ); 11201 11202 // rejected_handlers.add( ... ) 11203 tuples[ 2 ][ 3 ].add( 11204 resolve( 11205 0, 11206 newDefer, 11207 isFunction( onRejected ) ? 11208 onRejected : 11209 Thrower 11210 ) 11211 ); 11212 } ).promise(); 11213 }, 11214 11215 // Get a promise for this deferred 11216 // If obj is provided, the promise aspect is added to the object 11217 promise: function( obj ) { 11218 return obj != null ? jQuery.extend( obj, promise ) : promise; 11219 } 11220 }, 11221 deferred = {}; 11222 11223 // Add list-specific methods 11224 jQuery.each( tuples, function( i, tuple ) { 11225 var list = tuple[ 2 ], 11226 stateString = tuple[ 5 ]; 11227 11228 // promise.progress = list.add 11229 // promise.done = list.add 11230 // promise.fail = list.add 11231 promise[ tuple[ 1 ] ] = list.add; 11232 11233 // Handle state 11234 if ( stateString ) { 11235 list.add( 11236 function() { 11237 11238 // state = "resolved" (i.e., fulfilled) 11239 // state = "rejected" 11240 state = stateString; 11241 }, 11242 11243 // rejected_callbacks.disable 11244 // fulfilled_callbacks.disable 11245 tuples[ 3 - i ][ 2 ].disable, 11246 11247 // rejected_handlers.disable 11248 // fulfilled_handlers.disable 11249 tuples[ 3 - i ][ 3 ].disable, 11250 11251 // progress_callbacks.lock 11252 tuples[ 0 ][ 2 ].lock, 11253 11254 // progress_handlers.lock 11255 tuples[ 0 ][ 3 ].lock 11256 ); 11257 } 11258 11259 // progress_handlers.fire 11260 // fulfilled_handlers.fire 11261 // rejected_handlers.fire 11262 list.add( tuple[ 3 ].fire ); 11263 11264 // deferred.notify = function() { deferred.notifyWith(...) } 11265 // deferred.resolve = function() { deferred.resolveWith(...) } 11266 // deferred.reject = function() { deferred.rejectWith(...) } 11267 deferred[ tuple[ 0 ] ] = function() { 11268 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 11269 return this; 11270 }; 11271 11272 // deferred.notifyWith = list.fireWith 11273 // deferred.resolveWith = list.fireWith 11274 // deferred.rejectWith = list.fireWith 11275 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 11276 } ); 11277 11278 // Make the deferred a promise 11279 promise.promise( deferred ); 11280 11281 // Call given func if any 11282 if ( func ) { 11283 func.call( deferred, deferred ); 11284 } 11285 11286 // All done! 11287 return deferred; 11288 }, 11289 11290 // Deferred helper 11291 when: function( singleValue ) { 11292 var 11293 11294 // count of uncompleted subordinates 11295 remaining = arguments.length, 11296 11297 // count of unprocessed arguments 11298 i = remaining, 11299 11300 // subordinate fulfillment data 11301 resolveContexts = Array( i ), 11302 resolveValues = slice.call( arguments ), 11303 11304 // the primary Deferred 11305 primary = jQuery.Deferred(), 11306 11307 // subordinate callback factory 11308 updateFunc = function( i ) { 11309 return function( value ) { 11310 resolveContexts[ i ] = this; 11311 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 11312 if ( !( --remaining ) ) { 11313 primary.resolveWith( resolveContexts, resolveValues ); 11314 } 11315 }; 11316 }; 11317 11318 // Single- and empty arguments are adopted like Promise.resolve 11319 if ( remaining <= 1 ) { 11320 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 11321 !remaining ); 11322 11323 // Use .then() to unwrap secondary thenables (cf. gh-3000) 11324 if ( primary.state() === "pending" || 11325 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 11326 11327 return primary.then(); 11328 } 11329 } 11330 11331 // Multiple arguments are aggregated like Promise.all array elements 11332 while ( i-- ) { 11333 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 11334 } 11335 11336 return primary.promise(); 11337 } 11338} ); 11339 11340 11341// These usually indicate a programmer mistake during development, 11342// warn about them ASAP rather than swallowing them by default. 11343var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 11344 11345// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 11346// captured before the async barrier to get the original error cause 11347// which may otherwise be hidden. 11348jQuery.Deferred.exceptionHook = function( error, asyncError ) { 11349 11350 // Support: IE 8 - 9 only 11351 // Console exists when dev tools are open, which can happen at any time 11352 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 11353 window.console.warn( "jQuery.Deferred exception: " + error.message, 11354 error.stack, asyncError ); 11355 } 11356}; 11357 11358 11359 11360 11361jQuery.readyException = function( error ) { 11362 window.setTimeout( function() { 11363 throw error; 11364 } ); 11365}; 11366 11367 11368 11369 11370// The deferred used on DOM ready 11371var readyList = jQuery.Deferred(); 11372 11373jQuery.fn.ready = function( fn ) { 11374 11375 readyList 11376 .then( fn ) 11377 11378 // Wrap jQuery.readyException in a function so that the lookup 11379 // happens at the time of error handling instead of callback 11380 // registration. 11381 .catch( function( error ) { 11382 jQuery.readyException( error ); 11383 } ); 11384 11385 return this; 11386}; 11387 11388jQuery.extend( { 11389 11390 // Is the DOM ready to be used? Set to true once it occurs. 11391 isReady: false, 11392 11393 // A counter to track how many items to wait for before 11394 // the ready event fires. See trac-6781 11395 readyWait: 1, 11396 11397 // Handle when the DOM is ready 11398 ready: function( wait ) { 11399 11400 // Abort if there are pending holds or we're already ready 11401 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 11402 return; 11403 } 11404 11405 // Remember that the DOM is ready 11406 jQuery.isReady = true; 11407 11408 // If a normal DOM Ready event fired, decrement, and wait if need be 11409 if ( wait !== true && --jQuery.readyWait > 0 ) { 11410 return; 11411 } 11412 11413 // If there are functions bound, to execute 11414 readyList.resolveWith( document, [ jQuery ] ); 11415 } 11416} ); 11417 11418jQuery.ready.then = readyList.then; 11419 11420// The ready event handler and self cleanup method 11421function completed() { 11422 document.removeEventListener( "DOMContentLoaded", completed ); 11423 window.removeEventListener( "load", completed ); 11424 jQuery.ready(); 11425} 11426 11427// Catch cases where $(document).ready() is called 11428// after the browser event has already occurred. 11429// Support: IE <=9 - 10 only 11430// Older IE sometimes signals "interactive" too soon 11431if ( document.readyState === "complete" || 11432 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 11433 11434 // Handle it asynchronously to allow scripts the opportunity to delay ready 11435 window.setTimeout( jQuery.ready ); 11436 11437} else { 11438 11439 // Use the handy event callback 11440 document.addEventListener( "DOMContentLoaded", completed ); 11441 11442 // A fallback to window.onload, that will always work 11443 window.addEventListener( "load", completed ); 11444} 11445 11446 11447 11448 11449// Multifunctional method to get and set values of a collection 11450// The value/s can optionally be executed if it's a function 11451var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 11452 var i = 0, 11453 len = elems.length, 11454 bulk = key == null; 11455 11456 // Sets many values 11457 if ( toType( key ) === "object" ) { 11458 chainable = true; 11459 for ( i in key ) { 11460 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 11461 } 11462 11463 // Sets one value 11464 } else if ( value !== undefined ) { 11465 chainable = true; 11466 11467 if ( !isFunction( value ) ) { 11468 raw = true; 11469 } 11470 11471 if ( bulk ) { 11472 11473 // Bulk operations run against the entire set 11474 if ( raw ) { 11475 fn.call( elems, value ); 11476 fn = null; 11477 11478 // ...except when executing function values 11479 } else { 11480 bulk = fn; 11481 fn = function( elem, _key, value ) { 11482 return bulk.call( jQuery( elem ), value ); 11483 }; 11484 } 11485 } 11486 11487 if ( fn ) { 11488 for ( ; i < len; i++ ) { 11489 fn( 11490 elems[ i ], key, raw ? 11491 value : 11492 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 11493 ); 11494 } 11495 } 11496 } 11497 11498 if ( chainable ) { 11499 return elems; 11500 } 11501 11502 // Gets 11503 if ( bulk ) { 11504 return fn.call( elems ); 11505 } 11506 11507 return len ? fn( elems[ 0 ], key ) : emptyGet; 11508}; 11509 11510 11511// Matches dashed string for camelizing 11512var rmsPrefix = /^-ms-/, 11513 rdashAlpha = /-([a-z])/g; 11514 11515// Used by camelCase as callback to replace() 11516function fcamelCase( _all, letter ) { 11517 return letter.toUpperCase(); 11518} 11519 11520// Convert dashed to camelCase; used by the css and data modules 11521// Support: IE <=9 - 11, Edge 12 - 15 11522// Microsoft forgot to hump their vendor prefix (trac-9572) 11523function camelCase( string ) { 11524 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 11525} 11526var acceptData = function( owner ) { 11527 11528 // Accepts only: 11529 // - Node 11530 // - Node.ELEMENT_NODE 11531 // - Node.DOCUMENT_NODE 11532 // - Object 11533 // - Any 11534 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 11535}; 11536 11537 11538 11539 11540function Data() { 11541 this.expando = jQuery.expando + Data.uid++; 11542} 11543 11544Data.uid = 1; 11545 11546Data.prototype = { 11547 11548 cache: function( owner ) { 11549 11550 // Check if the owner object already has a cache 11551 var value = owner[ this.expando ]; 11552 11553 // If not, create one 11554 if ( !value ) { 11555 value = {}; 11556 11557 // We can accept data for non-element nodes in modern browsers, 11558 // but we should not, see trac-8335. 11559 // Always return an empty object. 11560 if ( acceptData( owner ) ) { 11561 11562 // If it is a node unlikely to be stringify-ed or looped over 11563 // use plain assignment 11564 if ( owner.nodeType ) { 11565 owner[ this.expando ] = value; 11566 11567 // Otherwise secure it in a non-enumerable property 11568 // configurable must be true to allow the property to be 11569 // deleted when data is removed 11570 } else { 11571 Object.defineProperty( owner, this.expando, { 11572 value: value, 11573 configurable: true 11574 } ); 11575 } 11576 } 11577 } 11578 11579 return value; 11580 }, 11581 set: function( owner, data, value ) { 11582 var prop, 11583 cache = this.cache( owner ); 11584 11585 // Handle: [ owner, key, value ] args 11586 // Always use camelCase key (gh-2257) 11587 if ( typeof data === "string" ) { 11588 cache[ camelCase( data ) ] = value; 11589 11590 // Handle: [ owner, { properties } ] args 11591 } else { 11592 11593 // Copy the properties one-by-one to the cache object 11594 for ( prop in data ) { 11595 cache[ camelCase( prop ) ] = data[ prop ]; 11596 } 11597 } 11598 return cache; 11599 }, 11600 get: function( owner, key ) { 11601 return key === undefined ? 11602 this.cache( owner ) : 11603 11604 // Always use camelCase key (gh-2257) 11605 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 11606 }, 11607 access: function( owner, key, value ) { 11608 11609 // In cases where either: 11610 // 11611 // 1. No key was specified 11612 // 2. A string key was specified, but no value provided 11613 // 11614 // Take the "read" path and allow the get method to determine 11615 // which value to return, respectively either: 11616 // 11617 // 1. The entire cache object 11618 // 2. The data stored at the key 11619 // 11620 if ( key === undefined || 11621 ( ( key && typeof key === "string" ) && value === undefined ) ) { 11622 11623 return this.get( owner, key ); 11624 } 11625 11626 // When the key is not a string, or both a key and value 11627 // are specified, set or extend (existing objects) with either: 11628 // 11629 // 1. An object of properties 11630 // 2. A key and value 11631 // 11632 this.set( owner, key, value ); 11633 11634 // Since the "set" path can have two possible entry points 11635 // return the expected data based on which path was taken[*] 11636 return value !== undefined ? value : key; 11637 }, 11638 remove: function( owner, key ) { 11639 var i, 11640 cache = owner[ this.expando ]; 11641 11642 if ( cache === undefined ) { 11643 return; 11644 } 11645 11646 if ( key !== undefined ) { 11647 11648 // Support array or space separated string of keys 11649 if ( Array.isArray( key ) ) { 11650 11651 // If key is an array of keys... 11652 // We always set camelCase keys, so remove that. 11653 key = key.map( camelCase ); 11654 } else { 11655 key = camelCase( key ); 11656 11657 // If a key with the spaces exists, use it. 11658 // Otherwise, create an array by matching non-whitespace 11659 key = key in cache ? 11660 [ key ] : 11661 ( key.match( rnothtmlwhite ) || [] ); 11662 } 11663 11664 i = key.length; 11665 11666 while ( i-- ) { 11667 delete cache[ key[ i ] ]; 11668 } 11669 } 11670 11671 // Remove the expando if there's no more data 11672 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 11673 11674 // Support: Chrome <=35 - 45 11675 // Webkit & Blink performance suffers when deleting properties 11676 // from DOM nodes, so set to undefined instead 11677 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 11678 if ( owner.nodeType ) { 11679 owner[ this.expando ] = undefined; 11680 } else { 11681 delete owner[ this.expando ]; 11682 } 11683 } 11684 }, 11685 hasData: function( owner ) { 11686 var cache = owner[ this.expando ]; 11687 return cache !== undefined && !jQuery.isEmptyObject( cache ); 11688 } 11689}; 11690var dataPriv = new Data(); 11691 11692var dataUser = new Data(); 11693 11694 11695 11696// Implementation Summary 11697// 11698// 1. Enforce API surface and semantic compatibility with 1.9.x branch 11699// 2. Improve the module's maintainability by reducing the storage 11700// paths to a single mechanism. 11701// 3. Use the same single mechanism to support "private" and "user" data. 11702// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 11703// 5. Avoid exposing implementation details on user objects (eg. expando properties) 11704// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 11705 11706var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 11707 rmultiDash = /[A-Z]/g; 11708 11709function getData( data ) { 11710 if ( data === "true" ) { 11711 return true; 11712 } 11713 11714 if ( data === "false" ) { 11715 return false; 11716 } 11717 11718 if ( data === "null" ) { 11719 return null; 11720 } 11721 11722 // Only convert to a number if it doesn't change the string 11723 if ( data === +data + "" ) { 11724 return +data; 11725 } 11726 11727 if ( rbrace.test( data ) ) { 11728 return JSON.parse( data ); 11729 } 11730 11731 return data; 11732} 11733 11734function dataAttr( elem, key, data ) { 11735 var name; 11736 11737 // If nothing was found internally, try to fetch any 11738 // data from the HTML5 data-* attribute 11739 if ( data === undefined && elem.nodeType === 1 ) { 11740 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 11741 data = elem.getAttribute( name ); 11742 11743 if ( typeof data === "string" ) { 11744 try { 11745 data = getData( data ); 11746 } catch ( e ) {} 11747 11748 // Make sure we set the data so it isn't changed later 11749 dataUser.set( elem, key, data ); 11750 } else { 11751 data = undefined; 11752 } 11753 } 11754 return data; 11755} 11756 11757jQuery.extend( { 11758 hasData: function( elem ) { 11759 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 11760 }, 11761 11762 data: function( elem, name, data ) { 11763 return dataUser.access( elem, name, data ); 11764 }, 11765 11766 removeData: function( elem, name ) { 11767 dataUser.remove( elem, name ); 11768 }, 11769 11770 // TODO: Now that all calls to _data and _removeData have been replaced 11771 // with direct calls to dataPriv methods, these can be deprecated. 11772 _data: function( elem, name, data ) { 11773 return dataPriv.access( elem, name, data ); 11774 }, 11775 11776 _removeData: function( elem, name ) { 11777 dataPriv.remove( elem, name ); 11778 } 11779} ); 11780 11781jQuery.fn.extend( { 11782 data: function( key, value ) { 11783 var i, name, data, 11784 elem = this[ 0 ], 11785 attrs = elem && elem.attributes; 11786 11787 // Gets all values 11788 if ( key === undefined ) { 11789 if ( this.length ) { 11790 data = dataUser.get( elem ); 11791 11792 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 11793 i = attrs.length; 11794 while ( i-- ) { 11795 11796 // Support: IE 11 only 11797 // The attrs elements can be null (trac-14894) 11798 if ( attrs[ i ] ) { 11799 name = attrs[ i ].name; 11800 if ( name.indexOf( "data-" ) === 0 ) { 11801 name = camelCase( name.slice( 5 ) ); 11802 dataAttr( elem, name, data[ name ] ); 11803 } 11804 } 11805 } 11806 dataPriv.set( elem, "hasDataAttrs", true ); 11807 } 11808 } 11809 11810 return data; 11811 } 11812 11813 // Sets multiple values 11814 if ( typeof key === "object" ) { 11815 return this.each( function() { 11816 dataUser.set( this, key ); 11817 } ); 11818 } 11819 11820 return access( this, function( value ) { 11821 var data; 11822 11823 // The calling jQuery object (element matches) is not empty 11824 // (and therefore has an element appears at this[ 0 ]) and the 11825 // `value` parameter was not undefined. An empty jQuery object 11826 // will result in `undefined` for elem = this[ 0 ] which will 11827 // throw an exception if an attempt to read a data cache is made. 11828 if ( elem && value === undefined ) { 11829 11830 // Attempt to get data from the cache 11831 // The key will always be camelCased in Data 11832 data = dataUser.get( elem, key ); 11833 if ( data !== undefined ) { 11834 return data; 11835 } 11836 11837 // Attempt to "discover" the data in 11838 // HTML5 custom data-* attrs 11839 data = dataAttr( elem, key ); 11840 if ( data !== undefined ) { 11841 return data; 11842 } 11843 11844 // We tried really hard, but the data doesn't exist. 11845 return; 11846 } 11847 11848 // Set the data... 11849 this.each( function() { 11850 11851 // We always store the camelCased key 11852 dataUser.set( this, key, value ); 11853 } ); 11854 }, null, value, arguments.length > 1, null, true ); 11855 }, 11856 11857 removeData: function( key ) { 11858 return this.each( function() { 11859 dataUser.remove( this, key ); 11860 } ); 11861 } 11862} ); 11863 11864 11865jQuery.extend( { 11866 queue: function( elem, type, data ) { 11867 var queue; 11868 11869 if ( elem ) { 11870 type = ( type || "fx" ) + "queue"; 11871 queue = dataPriv.get( elem, type ); 11872 11873 // Speed up dequeue by getting out quickly if this is just a lookup 11874 if ( data ) { 11875 if ( !queue || Array.isArray( data ) ) { 11876 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 11877 } else { 11878 queue.push( data ); 11879 } 11880 } 11881 return queue || []; 11882 } 11883 }, 11884 11885 dequeue: function( elem, type ) { 11886 type = type || "fx"; 11887 11888 var queue = jQuery.queue( elem, type ), 11889 startLength = queue.length, 11890 fn = queue.shift(), 11891 hooks = jQuery._queueHooks( elem, type ), 11892 next = function() { 11893 jQuery.dequeue( elem, type ); 11894 }; 11895 11896 // If the fx queue is dequeued, always remove the progress sentinel 11897 if ( fn === "inprogress" ) { 11898 fn = queue.shift(); 11899 startLength--; 11900 } 11901 11902 if ( fn ) { 11903 11904 // Add a progress sentinel to prevent the fx queue from being 11905 // automatically dequeued 11906 if ( type === "fx" ) { 11907 queue.unshift( "inprogress" ); 11908 } 11909 11910 // Clear up the last queue stop function 11911 delete hooks.stop; 11912 fn.call( elem, next, hooks ); 11913 } 11914 11915 if ( !startLength && hooks ) { 11916 hooks.empty.fire(); 11917 } 11918 }, 11919 11920 // Not public - generate a queueHooks object, or return the current one 11921 _queueHooks: function( elem, type ) { 11922 var key = type + "queueHooks"; 11923 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 11924 empty: jQuery.Callbacks( "once memory" ).add( function() { 11925 dataPriv.remove( elem, [ type + "queue", key ] ); 11926 } ) 11927 } ); 11928 } 11929} ); 11930 11931jQuery.fn.extend( { 11932 queue: function( type, data ) { 11933 var setter = 2; 11934 11935 if ( typeof type !== "string" ) { 11936 data = type; 11937 type = "fx"; 11938 setter--; 11939 } 11940 11941 if ( arguments.length < setter ) { 11942 return jQuery.queue( this[ 0 ], type ); 11943 } 11944 11945 return data === undefined ? 11946 this : 11947 this.each( function() { 11948 var queue = jQuery.queue( this, type, data ); 11949 11950 // Ensure a hooks for this queue 11951 jQuery._queueHooks( this, type ); 11952 11953 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 11954 jQuery.dequeue( this, type ); 11955 } 11956 } ); 11957 }, 11958 dequeue: function( type ) { 11959 return this.each( function() { 11960 jQuery.dequeue( this, type ); 11961 } ); 11962 }, 11963 clearQueue: function( type ) { 11964 return this.queue( type || "fx", [] ); 11965 }, 11966 11967 // Get a promise resolved when queues of a certain type 11968 // are emptied (fx is the type by default) 11969 promise: function( type, obj ) { 11970 var tmp, 11971 count = 1, 11972 defer = jQuery.Deferred(), 11973 elements = this, 11974 i = this.length, 11975 resolve = function() { 11976 if ( !( --count ) ) { 11977 defer.resolveWith( elements, [ elements ] ); 11978 } 11979 }; 11980 11981 if ( typeof type !== "string" ) { 11982 obj = type; 11983 type = undefined; 11984 } 11985 type = type || "fx"; 11986 11987 while ( i-- ) { 11988 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 11989 if ( tmp && tmp.empty ) { 11990 count++; 11991 tmp.empty.add( resolve ); 11992 } 11993 } 11994 resolve(); 11995 return defer.promise( obj ); 11996 } 11997} ); 11998var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 11999 12000var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 12001 12002 12003var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 12004 12005var documentElement = document.documentElement; 12006 12007 12008 12009 var isAttached = function( elem ) { 12010 return jQuery.contains( elem.ownerDocument, elem ); 12011 }, 12012 composed = { composed: true }; 12013 12014 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 12015 // Check attachment across shadow DOM boundaries when possible (gh-3504) 12016 // Support: iOS 10.0-10.2 only 12017 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 12018 // leading to errors. We need to check for `getRootNode`. 12019 if ( documentElement.getRootNode ) { 12020 isAttached = function( elem ) { 12021 return jQuery.contains( elem.ownerDocument, elem ) || 12022 elem.getRootNode( composed ) === elem.ownerDocument; 12023 }; 12024 } 12025var isHiddenWithinTree = function( elem, el ) { 12026 12027 // isHiddenWithinTree might be called from jQuery#filter function; 12028 // in that case, element will be second argument 12029 elem = el || elem; 12030 12031 // Inline style trumps all 12032 return elem.style.display === "none" || 12033 elem.style.display === "" && 12034 12035 // Otherwise, check computed style 12036 // Support: Firefox <=43 - 45 12037 // Disconnected elements can have computed display: none, so first confirm that elem is 12038 // in the document. 12039 isAttached( elem ) && 12040 12041 jQuery.css( elem, "display" ) === "none"; 12042 }; 12043 12044 12045 12046function adjustCSS( elem, prop, valueParts, tween ) { 12047 var adjusted, scale, 12048 maxIterations = 20, 12049 currentValue = tween ? 12050 function() { 12051 return tween.cur(); 12052 } : 12053 function() { 12054 return jQuery.css( elem, prop, "" ); 12055 }, 12056 initial = currentValue(), 12057 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 12058 12059 // Starting value computation is required for potential unit mismatches 12060 initialInUnit = elem.nodeType && 12061 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 12062 rcssNum.exec( jQuery.css( elem, prop ) ); 12063 12064 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 12065 12066 // Support: Firefox <=54 12067 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 12068 initial = initial / 2; 12069 12070 // Trust units reported by jQuery.css 12071 unit = unit || initialInUnit[ 3 ]; 12072 12073 // Iteratively approximate from a nonzero starting point 12074 initialInUnit = +initial || 1; 12075 12076 while ( maxIterations-- ) { 12077 12078 // Evaluate and update our best guess (doubling guesses that zero out). 12079 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 12080 jQuery.style( elem, prop, initialInUnit + unit ); 12081 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 12082 maxIterations = 0; 12083 } 12084 initialInUnit = initialInUnit / scale; 12085 12086 } 12087 12088 initialInUnit = initialInUnit * 2; 12089 jQuery.style( elem, prop, initialInUnit + unit ); 12090 12091 // Make sure we update the tween properties later on 12092 valueParts = valueParts || []; 12093 } 12094 12095 if ( valueParts ) { 12096 initialInUnit = +initialInUnit || +initial || 0; 12097 12098 // Apply relative offset (+=/-=) if specified 12099 adjusted = valueParts[ 1 ] ? 12100 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 12101 +valueParts[ 2 ]; 12102 if ( tween ) { 12103 tween.unit = unit; 12104 tween.start = initialInUnit; 12105 tween.end = adjusted; 12106 } 12107 } 12108 return adjusted; 12109} 12110 12111 12112var defaultDisplayMap = {}; 12113 12114function getDefaultDisplay( elem ) { 12115 var temp, 12116 doc = elem.ownerDocument, 12117 nodeName = elem.nodeName, 12118 display = defaultDisplayMap[ nodeName ]; 12119 12120 if ( display ) { 12121 return display; 12122 } 12123 12124 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 12125 display = jQuery.css( temp, "display" ); 12126 12127 temp.parentNode.removeChild( temp ); 12128 12129 if ( display === "none" ) { 12130 display = "block"; 12131 } 12132 defaultDisplayMap[ nodeName ] = display; 12133 12134 return display; 12135} 12136 12137function showHide( elements, show ) { 12138 var display, elem, 12139 values = [], 12140 index = 0, 12141 length = elements.length; 12142 12143 // Determine new display value for elements that need to change 12144 for ( ; index < length; index++ ) { 12145 elem = elements[ index ]; 12146 if ( !elem.style ) { 12147 continue; 12148 } 12149 12150 display = elem.style.display; 12151 if ( show ) { 12152 12153 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 12154 // check is required in this first loop unless we have a nonempty display value (either 12155 // inline or about-to-be-restored) 12156 if ( display === "none" ) { 12157 values[ index ] = dataPriv.get( elem, "display" ) || null; 12158 if ( !values[ index ] ) { 12159 elem.style.display = ""; 12160 } 12161 } 12162 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 12163 values[ index ] = getDefaultDisplay( elem ); 12164 } 12165 } else { 12166 if ( display !== "none" ) { 12167 values[ index ] = "none"; 12168 12169 // Remember what we're overwriting 12170 dataPriv.set( elem, "display", display ); 12171 } 12172 } 12173 } 12174 12175 // Set the display of the elements in a second loop to avoid constant reflow 12176 for ( index = 0; index < length; index++ ) { 12177 if ( values[ index ] != null ) { 12178 elements[ index ].style.display = values[ index ]; 12179 } 12180 } 12181 12182 return elements; 12183} 12184 12185jQuery.fn.extend( { 12186 show: function() { 12187 return showHide( this, true ); 12188 }, 12189 hide: function() { 12190 return showHide( this ); 12191 }, 12192 toggle: function( state ) { 12193 if ( typeof state === "boolean" ) { 12194 return state ? this.show() : this.hide(); 12195 } 12196 12197 return this.each( function() { 12198 if ( isHiddenWithinTree( this ) ) { 12199 jQuery( this ).show(); 12200 } else { 12201 jQuery( this ).hide(); 12202 } 12203 } ); 12204 } 12205} ); 12206var rcheckableType = ( /^(?:checkbox|radio)$/i ); 12207 12208var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 12209 12210var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 12211 12212 12213 12214( function() { 12215 var fragment = document.createDocumentFragment(), 12216 div = fragment.appendChild( document.createElement( "div" ) ), 12217 input = document.createElement( "input" ); 12218 12219 // Support: Android 4.0 - 4.3 only 12220 // Check state lost if the name is set (trac-11217) 12221 // Support: Windows Web Apps (WWA) 12222 // `name` and `type` must use .setAttribute for WWA (trac-14901) 12223 input.setAttribute( "type", "radio" ); 12224 input.setAttribute( "checked", "checked" ); 12225 input.setAttribute( "name", "t" ); 12226 12227 div.appendChild( input ); 12228 12229 // Support: Android <=4.1 only 12230 // Older WebKit doesn't clone checked state correctly in fragments 12231 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 12232 12233 // Support: IE <=11 only 12234 // Make sure textarea (and checkbox) defaultValue is properly cloned 12235 div.innerHTML = "<textarea>x</textarea>"; 12236 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 12237 12238 // Support: IE <=9 only 12239 // IE <=9 replaces <option> tags with their contents when inserted outside of 12240 // the select element. 12241 div.innerHTML = "<option></option>"; 12242 support.option = !!div.lastChild; 12243} )(); 12244 12245 12246// We have to close these tags to support XHTML (trac-13200) 12247var wrapMap = { 12248 12249 // XHTML parsers do not magically insert elements in the 12250 // same way that tag soup parsers do. So we cannot shorten 12251 // this by omitting <tbody> or other required elements. 12252 thead: [ 1, "<table>", "</table>" ], 12253 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 12254 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 12255 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 12256 12257 _default: [ 0, "", "" ] 12258}; 12259 12260wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 12261wrapMap.th = wrapMap.td; 12262 12263// Support: IE <=9 only 12264if ( !support.option ) { 12265 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 12266} 12267 12268 12269function getAll( context, tag ) { 12270 12271 // Support: IE <=9 - 11 only 12272 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 12273 var ret; 12274 12275 if ( typeof context.getElementsByTagName !== "undefined" ) { 12276 ret = context.getElementsByTagName( tag || "*" ); 12277 12278 } else if ( typeof context.querySelectorAll !== "undefined" ) { 12279 ret = context.querySelectorAll( tag || "*" ); 12280 12281 } else { 12282 ret = []; 12283 } 12284 12285 if ( tag === undefined || tag && nodeName( context, tag ) ) { 12286 return jQuery.merge( [ context ], ret ); 12287 } 12288 12289 return ret; 12290} 12291 12292 12293// Mark scripts as having already been evaluated 12294function setGlobalEval( elems, refElements ) { 12295 var i = 0, 12296 l = elems.length; 12297 12298 for ( ; i < l; i++ ) { 12299 dataPriv.set( 12300 elems[ i ], 12301 "globalEval", 12302 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 12303 ); 12304 } 12305} 12306 12307 12308var rhtml = /<|&#?\w+;/; 12309 12310function buildFragment( elems, context, scripts, selection, ignored ) { 12311 var elem, tmp, tag, wrap, attached, j, 12312 fragment = context.createDocumentFragment(), 12313 nodes = [], 12314 i = 0, 12315 l = elems.length; 12316 12317 for ( ; i < l; i++ ) { 12318 elem = elems[ i ]; 12319 12320 if ( elem || elem === 0 ) { 12321 12322 // Add nodes directly 12323 if ( toType( elem ) === "object" ) { 12324 12325 // Support: Android <=4.0 only, PhantomJS 1 only 12326 // push.apply(_, arraylike) throws on ancient WebKit 12327 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 12328 12329 // Convert non-html into a text node 12330 } else if ( !rhtml.test( elem ) ) { 12331 nodes.push( context.createTextNode( elem ) ); 12332 12333 // Convert html into DOM nodes 12334 } else { 12335 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 12336 12337 // Deserialize a standard representation 12338 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 12339 wrap = wrapMap[ tag ] || wrapMap._default; 12340 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 12341 12342 // Descend through wrappers to the right content 12343 j = wrap[ 0 ]; 12344 while ( j-- ) { 12345 tmp = tmp.lastChild; 12346 } 12347 12348 // Support: Android <=4.0 only, PhantomJS 1 only 12349 // push.apply(_, arraylike) throws on ancient WebKit 12350 jQuery.merge( nodes, tmp.childNodes ); 12351 12352 // Remember the top-level container 12353 tmp = fragment.firstChild; 12354 12355 // Ensure the created nodes are orphaned (trac-12392) 12356 tmp.textContent = ""; 12357 } 12358 } 12359 } 12360 12361 // Remove wrapper from fragment 12362 fragment.textContent = ""; 12363 12364 i = 0; 12365 while ( ( elem = nodes[ i++ ] ) ) { 12366 12367 // Skip elements already in the context collection (trac-4087) 12368 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 12369 if ( ignored ) { 12370 ignored.push( elem ); 12371 } 12372 continue; 12373 } 12374 12375 attached = isAttached( elem ); 12376 12377 // Append to fragment 12378 tmp = getAll( fragment.appendChild( elem ), "script" ); 12379 12380 // Preserve script evaluation history 12381 if ( attached ) { 12382 setGlobalEval( tmp ); 12383 } 12384 12385 // Capture executables 12386 if ( scripts ) { 12387 j = 0; 12388 while ( ( elem = tmp[ j++ ] ) ) { 12389 if ( rscriptType.test( elem.type || "" ) ) { 12390 scripts.push( elem ); 12391 } 12392 } 12393 } 12394 } 12395 12396 return fragment; 12397} 12398 12399 12400var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 12401 12402function returnTrue() { 12403 return true; 12404} 12405 12406function returnFalse() { 12407 return false; 12408} 12409 12410function on( elem, types, selector, data, fn, one ) { 12411 var origFn, type; 12412 12413 // Types can be a map of types/handlers 12414 if ( typeof types === "object" ) { 12415 12416 // ( types-Object, selector, data ) 12417 if ( typeof selector !== "string" ) { 12418 12419 // ( types-Object, data ) 12420 data = data || selector; 12421 selector = undefined; 12422 } 12423 for ( type in types ) { 12424 on( elem, type, selector, data, types[ type ], one ); 12425 } 12426 return elem; 12427 } 12428 12429 if ( data == null && fn == null ) { 12430 12431 // ( types, fn ) 12432 fn = selector; 12433 data = selector = undefined; 12434 } else if ( fn == null ) { 12435 if ( typeof selector === "string" ) { 12436 12437 // ( types, selector, fn ) 12438 fn = data; 12439 data = undefined; 12440 } else { 12441 12442 // ( types, data, fn ) 12443 fn = data; 12444 data = selector; 12445 selector = undefined; 12446 } 12447 } 12448 if ( fn === false ) { 12449 fn = returnFalse; 12450 } else if ( !fn ) { 12451 return elem; 12452 } 12453 12454 if ( one === 1 ) { 12455 origFn = fn; 12456 fn = function( event ) { 12457 12458 // Can use an empty set, since event contains the info 12459 jQuery().off( event ); 12460 return origFn.apply( this, arguments ); 12461 }; 12462 12463 // Use same guid so caller can remove using origFn 12464 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 12465 } 12466 return elem.each( function() { 12467 jQuery.event.add( this, types, fn, data, selector ); 12468 } ); 12469} 12470 12471/* 12472 * Helper functions for managing events -- not part of the public interface. 12473 * Props to Dean Edwards' addEvent library for many of the ideas. 12474 */ 12475jQuery.event = { 12476 12477 global: {}, 12478 12479 add: function( elem, types, handler, data, selector ) { 12480 12481 var handleObjIn, eventHandle, tmp, 12482 events, t, handleObj, 12483 special, handlers, type, namespaces, origType, 12484 elemData = dataPriv.get( elem ); 12485 12486 // Only attach events to objects that accept data 12487 if ( !acceptData( elem ) ) { 12488 return; 12489 } 12490 12491 // Caller can pass in an object of custom data in lieu of the handler 12492 if ( handler.handler ) { 12493 handleObjIn = handler; 12494 handler = handleObjIn.handler; 12495 selector = handleObjIn.selector; 12496 } 12497 12498 // Ensure that invalid selectors throw exceptions at attach time 12499 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 12500 if ( selector ) { 12501 jQuery.find.matchesSelector( documentElement, selector ); 12502 } 12503 12504 // Make sure that the handler has a unique ID, used to find/remove it later 12505 if ( !handler.guid ) { 12506 handler.guid = jQuery.guid++; 12507 } 12508 12509 // Init the element's event structure and main handler, if this is the first 12510 if ( !( events = elemData.events ) ) { 12511 events = elemData.events = Object.create( null ); 12512 } 12513 if ( !( eventHandle = elemData.handle ) ) { 12514 eventHandle = elemData.handle = function( e ) { 12515 12516 // Discard the second event of a jQuery.event.trigger() and 12517 // when an event is called after a page has unloaded 12518 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 12519 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 12520 }; 12521 } 12522 12523 // Handle multiple events separated by a space 12524 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12525 t = types.length; 12526 while ( t-- ) { 12527 tmp = rtypenamespace.exec( types[ t ] ) || []; 12528 type = origType = tmp[ 1 ]; 12529 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12530 12531 // There *must* be a type, no attaching namespace-only handlers 12532 if ( !type ) { 12533 continue; 12534 } 12535 12536 // If event changes its type, use the special event handlers for the changed type 12537 special = jQuery.event.special[ type ] || {}; 12538 12539 // If selector defined, determine special event api type, otherwise given type 12540 type = ( selector ? special.delegateType : special.bindType ) || type; 12541 12542 // Update special based on newly reset type 12543 special = jQuery.event.special[ type ] || {}; 12544 12545 // handleObj is passed to all event handlers 12546 handleObj = jQuery.extend( { 12547 type: type, 12548 origType: origType, 12549 data: data, 12550 handler: handler, 12551 guid: handler.guid, 12552 selector: selector, 12553 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 12554 namespace: namespaces.join( "." ) 12555 }, handleObjIn ); 12556 12557 // Init the event handler queue if we're the first 12558 if ( !( handlers = events[ type ] ) ) { 12559 handlers = events[ type ] = []; 12560 handlers.delegateCount = 0; 12561 12562 // Only use addEventListener if the special events handler returns false 12563 if ( !special.setup || 12564 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 12565 12566 if ( elem.addEventListener ) { 12567 elem.addEventListener( type, eventHandle ); 12568 } 12569 } 12570 } 12571 12572 if ( special.add ) { 12573 special.add.call( elem, handleObj ); 12574 12575 if ( !handleObj.handler.guid ) { 12576 handleObj.handler.guid = handler.guid; 12577 } 12578 } 12579 12580 // Add to the element's handler list, delegates in front 12581 if ( selector ) { 12582 handlers.splice( handlers.delegateCount++, 0, handleObj ); 12583 } else { 12584 handlers.push( handleObj ); 12585 } 12586 12587 // Keep track of which events have ever been used, for event optimization 12588 jQuery.event.global[ type ] = true; 12589 } 12590 12591 }, 12592 12593 // Detach an event or set of events from an element 12594 remove: function( elem, types, handler, selector, mappedTypes ) { 12595 12596 var j, origCount, tmp, 12597 events, t, handleObj, 12598 special, handlers, type, namespaces, origType, 12599 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 12600 12601 if ( !elemData || !( events = elemData.events ) ) { 12602 return; 12603 } 12604 12605 // Once for each type.namespace in types; type may be omitted 12606 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12607 t = types.length; 12608 while ( t-- ) { 12609 tmp = rtypenamespace.exec( types[ t ] ) || []; 12610 type = origType = tmp[ 1 ]; 12611 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12612 12613 // Unbind all events (on this namespace, if provided) for the element 12614 if ( !type ) { 12615 for ( type in events ) { 12616 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 12617 } 12618 continue; 12619 } 12620 12621 special = jQuery.event.special[ type ] || {}; 12622 type = ( selector ? special.delegateType : special.bindType ) || type; 12623 handlers = events[ type ] || []; 12624 tmp = tmp[ 2 ] && 12625 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 12626 12627 // Remove matching events 12628 origCount = j = handlers.length; 12629 while ( j-- ) { 12630 handleObj = handlers[ j ]; 12631 12632 if ( ( mappedTypes || origType === handleObj.origType ) && 12633 ( !handler || handler.guid === handleObj.guid ) && 12634 ( !tmp || tmp.test( handleObj.namespace ) ) && 12635 ( !selector || selector === handleObj.selector || 12636 selector === "**" && handleObj.selector ) ) { 12637 handlers.splice( j, 1 ); 12638 12639 if ( handleObj.selector ) { 12640 handlers.delegateCount--; 12641 } 12642 if ( special.remove ) { 12643 special.remove.call( elem, handleObj ); 12644 } 12645 } 12646 } 12647 12648 // Remove generic event handler if we removed something and no more handlers exist 12649 // (avoids potential for endless recursion during removal of special event handlers) 12650 if ( origCount && !handlers.length ) { 12651 if ( !special.teardown || 12652 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 12653 12654 jQuery.removeEvent( elem, type, elemData.handle ); 12655 } 12656 12657 delete events[ type ]; 12658 } 12659 } 12660 12661 // Remove data and the expando if it's no longer used 12662 if ( jQuery.isEmptyObject( events ) ) { 12663 dataPriv.remove( elem, "handle events" ); 12664 } 12665 }, 12666 12667 dispatch: function( nativeEvent ) { 12668 12669 var i, j, ret, matched, handleObj, handlerQueue, 12670 args = new Array( arguments.length ), 12671 12672 // Make a writable jQuery.Event from the native event object 12673 event = jQuery.event.fix( nativeEvent ), 12674 12675 handlers = ( 12676 dataPriv.get( this, "events" ) || Object.create( null ) 12677 )[ event.type ] || [], 12678 special = jQuery.event.special[ event.type ] || {}; 12679 12680 // Use the fix-ed jQuery.Event rather than the (read-only) native event 12681 args[ 0 ] = event; 12682 12683 for ( i = 1; i < arguments.length; i++ ) { 12684 args[ i ] = arguments[ i ]; 12685 } 12686 12687 event.delegateTarget = this; 12688 12689 // Call the preDispatch hook for the mapped type, and let it bail if desired 12690 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 12691 return; 12692 } 12693 12694 // Determine handlers 12695 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 12696 12697 // Run delegates first; they may want to stop propagation beneath us 12698 i = 0; 12699 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 12700 event.currentTarget = matched.elem; 12701 12702 j = 0; 12703 while ( ( handleObj = matched.handlers[ j++ ] ) && 12704 !event.isImmediatePropagationStopped() ) { 12705 12706 // If the event is namespaced, then each handler is only invoked if it is 12707 // specially universal or its namespaces are a superset of the event's. 12708 if ( !event.rnamespace || handleObj.namespace === false || 12709 event.rnamespace.test( handleObj.namespace ) ) { 12710 12711 event.handleObj = handleObj; 12712 event.data = handleObj.data; 12713 12714 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 12715 handleObj.handler ).apply( matched.elem, args ); 12716 12717 if ( ret !== undefined ) { 12718 if ( ( event.result = ret ) === false ) { 12719 event.preventDefault(); 12720 event.stopPropagation(); 12721 } 12722 } 12723 } 12724 } 12725 } 12726 12727 // Call the postDispatch hook for the mapped type 12728 if ( special.postDispatch ) { 12729 special.postDispatch.call( this, event ); 12730 } 12731 12732 return event.result; 12733 }, 12734 12735 handlers: function( event, handlers ) { 12736 var i, handleObj, sel, matchedHandlers, matchedSelectors, 12737 handlerQueue = [], 12738 delegateCount = handlers.delegateCount, 12739 cur = event.target; 12740 12741 // Find delegate handlers 12742 if ( delegateCount && 12743 12744 // Support: IE <=9 12745 // Black-hole SVG <use> instance trees (trac-13180) 12746 cur.nodeType && 12747 12748 // Support: Firefox <=42 12749 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 12750 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 12751 // Support: IE 11 only 12752 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 12753 !( event.type === "click" && event.button >= 1 ) ) { 12754 12755 for ( ; cur !== this; cur = cur.parentNode || this ) { 12756 12757 // Don't check non-elements (trac-13208) 12758 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 12759 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 12760 matchedHandlers = []; 12761 matchedSelectors = {}; 12762 for ( i = 0; i < delegateCount; i++ ) { 12763 handleObj = handlers[ i ]; 12764 12765 // Don't conflict with Object.prototype properties (trac-13203) 12766 sel = handleObj.selector + " "; 12767 12768 if ( matchedSelectors[ sel ] === undefined ) { 12769 matchedSelectors[ sel ] = handleObj.needsContext ? 12770 jQuery( sel, this ).index( cur ) > -1 : 12771 jQuery.find( sel, this, null, [ cur ] ).length; 12772 } 12773 if ( matchedSelectors[ sel ] ) { 12774 matchedHandlers.push( handleObj ); 12775 } 12776 } 12777 if ( matchedHandlers.length ) { 12778 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 12779 } 12780 } 12781 } 12782 } 12783 12784 // Add the remaining (directly-bound) handlers 12785 cur = this; 12786 if ( delegateCount < handlers.length ) { 12787 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 12788 } 12789 12790 return handlerQueue; 12791 }, 12792 12793 addProp: function( name, hook ) { 12794 Object.defineProperty( jQuery.Event.prototype, name, { 12795 enumerable: true, 12796 configurable: true, 12797 12798 get: isFunction( hook ) ? 12799 function() { 12800 if ( this.originalEvent ) { 12801 return hook( this.originalEvent ); 12802 } 12803 } : 12804 function() { 12805 if ( this.originalEvent ) { 12806 return this.originalEvent[ name ]; 12807 } 12808 }, 12809 12810 set: function( value ) { 12811 Object.defineProperty( this, name, { 12812 enumerable: true, 12813 configurable: true, 12814 writable: true, 12815 value: value 12816 } ); 12817 } 12818 } ); 12819 }, 12820 12821 fix: function( originalEvent ) { 12822 return originalEvent[ jQuery.expando ] ? 12823 originalEvent : 12824 new jQuery.Event( originalEvent ); 12825 }, 12826 12827 special: { 12828 load: { 12829 12830 // Prevent triggered image.load events from bubbling to window.load 12831 noBubble: true 12832 }, 12833 click: { 12834 12835 // Utilize native event to ensure correct state for checkable inputs 12836 setup: function( data ) { 12837 12838 // For mutual compressibility with _default, replace `this` access with a local var. 12839 // `|| data` is dead code meant only to preserve the variable through minification. 12840 var el = this || data; 12841 12842 // Claim the first handler 12843 if ( rcheckableType.test( el.type ) && 12844 el.click && nodeName( el, "input" ) ) { 12845 12846 // dataPriv.set( el, "click", ... ) 12847 leverageNative( el, "click", true ); 12848 } 12849 12850 // Return false to allow normal processing in the caller 12851 return false; 12852 }, 12853 trigger: function( data ) { 12854 12855 // For mutual compressibility with _default, replace `this` access with a local var. 12856 // `|| data` is dead code meant only to preserve the variable through minification. 12857 var el = this || data; 12858 12859 // Force setup before triggering a click 12860 if ( rcheckableType.test( el.type ) && 12861 el.click && nodeName( el, "input" ) ) { 12862 12863 leverageNative( el, "click" ); 12864 } 12865 12866 // Return non-false to allow normal event-path propagation 12867 return true; 12868 }, 12869 12870 // For cross-browser consistency, suppress native .click() on links 12871 // Also prevent it if we're currently inside a leveraged native-event stack 12872 _default: function( event ) { 12873 var target = event.target; 12874 return rcheckableType.test( target.type ) && 12875 target.click && nodeName( target, "input" ) && 12876 dataPriv.get( target, "click" ) || 12877 nodeName( target, "a" ); 12878 } 12879 }, 12880 12881 beforeunload: { 12882 postDispatch: function( event ) { 12883 12884 // Support: Firefox 20+ 12885 // Firefox doesn't alert if the returnValue field is not set. 12886 if ( event.result !== undefined && event.originalEvent ) { 12887 event.originalEvent.returnValue = event.result; 12888 } 12889 } 12890 } 12891 } 12892}; 12893 12894// Ensure the presence of an event listener that handles manually-triggered 12895// synthetic events by interrupting progress until reinvoked in response to 12896// *native* events that it fires directly, ensuring that state changes have 12897// already occurred before other listeners are invoked. 12898function leverageNative( el, type, isSetup ) { 12899 12900 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 12901 if ( !isSetup ) { 12902 if ( dataPriv.get( el, type ) === undefined ) { 12903 jQuery.event.add( el, type, returnTrue ); 12904 } 12905 return; 12906 } 12907 12908 // Register the controller as a special universal handler for all event namespaces 12909 dataPriv.set( el, type, false ); 12910 jQuery.event.add( el, type, { 12911 namespace: false, 12912 handler: function( event ) { 12913 var result, 12914 saved = dataPriv.get( this, type ); 12915 12916 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 12917 12918 // Interrupt processing of the outer synthetic .trigger()ed event 12919 if ( !saved ) { 12920 12921 // Store arguments for use when handling the inner native event 12922 // There will always be at least one argument (an event object), so this array 12923 // will not be confused with a leftover capture object. 12924 saved = slice.call( arguments ); 12925 dataPriv.set( this, type, saved ); 12926 12927 // Trigger the native event and capture its result 12928 this[ type ](); 12929 result = dataPriv.get( this, type ); 12930 dataPriv.set( this, type, false ); 12931 12932 if ( saved !== result ) { 12933 12934 // Cancel the outer synthetic event 12935 event.stopImmediatePropagation(); 12936 event.preventDefault(); 12937 12938 return result; 12939 } 12940 12941 // If this is an inner synthetic event for an event with a bubbling surrogate 12942 // (focus or blur), assume that the surrogate already propagated from triggering 12943 // the native event and prevent that from happening again here. 12944 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 12945 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 12946 // less bad than duplication. 12947 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 12948 event.stopPropagation(); 12949 } 12950 12951 // If this is a native event triggered above, everything is now in order 12952 // Fire an inner synthetic event with the original arguments 12953 } else if ( saved ) { 12954 12955 // ...and capture the result 12956 dataPriv.set( this, type, jQuery.event.trigger( 12957 saved[ 0 ], 12958 saved.slice( 1 ), 12959 this 12960 ) ); 12961 12962 // Abort handling of the native event by all jQuery handlers while allowing 12963 // native handlers on the same element to run. On target, this is achieved 12964 // by stopping immediate propagation just on the jQuery event. However, 12965 // the native event is re-wrapped by a jQuery one on each level of the 12966 // propagation so the only way to stop it for jQuery is to stop it for 12967 // everyone via native `stopPropagation()`. This is not a problem for 12968 // focus/blur which don't bubble, but it does also stop click on checkboxes 12969 // and radios. We accept this limitation. 12970 event.stopPropagation(); 12971 event.isImmediatePropagationStopped = returnTrue; 12972 } 12973 } 12974 } ); 12975} 12976 12977jQuery.removeEvent = function( elem, type, handle ) { 12978 12979 // This "if" is needed for plain objects 12980 if ( elem.removeEventListener ) { 12981 elem.removeEventListener( type, handle ); 12982 } 12983}; 12984 12985jQuery.Event = function( src, props ) { 12986 12987 // Allow instantiation without the 'new' keyword 12988 if ( !( this instanceof jQuery.Event ) ) { 12989 return new jQuery.Event( src, props ); 12990 } 12991 12992 // Event object 12993 if ( src && src.type ) { 12994 this.originalEvent = src; 12995 this.type = src.type; 12996 12997 // Events bubbling up the document may have been marked as prevented 12998 // by a handler lower down the tree; reflect the correct value. 12999 this.isDefaultPrevented = src.defaultPrevented || 13000 src.defaultPrevented === undefined && 13001 13002 // Support: Android <=2.3 only 13003 src.returnValue === false ? 13004 returnTrue : 13005 returnFalse; 13006 13007 // Create target properties 13008 // Support: Safari <=6 - 7 only 13009 // Target should not be a text node (trac-504, trac-13143) 13010 this.target = ( src.target && src.target.nodeType === 3 ) ? 13011 src.target.parentNode : 13012 src.target; 13013 13014 this.currentTarget = src.currentTarget; 13015 this.relatedTarget = src.relatedTarget; 13016 13017 // Event type 13018 } else { 13019 this.type = src; 13020 } 13021 13022 // Put explicitly provided properties onto the event object 13023 if ( props ) { 13024 jQuery.extend( this, props ); 13025 } 13026 13027 // Create a timestamp if incoming event doesn't have one 13028 this.timeStamp = src && src.timeStamp || Date.now(); 13029 13030 // Mark it as fixed 13031 this[ jQuery.expando ] = true; 13032}; 13033 13034// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 13035// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 13036jQuery.Event.prototype = { 13037 constructor: jQuery.Event, 13038 isDefaultPrevented: returnFalse, 13039 isPropagationStopped: returnFalse, 13040 isImmediatePropagationStopped: returnFalse, 13041 isSimulated: false, 13042 13043 preventDefault: function() { 13044 var e = this.originalEvent; 13045 13046 this.isDefaultPrevented = returnTrue; 13047 13048 if ( e && !this.isSimulated ) { 13049 e.preventDefault(); 13050 } 13051 }, 13052 stopPropagation: function() { 13053 var e = this.originalEvent; 13054 13055 this.isPropagationStopped = returnTrue; 13056 13057 if ( e && !this.isSimulated ) { 13058 e.stopPropagation(); 13059 } 13060 }, 13061 stopImmediatePropagation: function() { 13062 var e = this.originalEvent; 13063 13064 this.isImmediatePropagationStopped = returnTrue; 13065 13066 if ( e && !this.isSimulated ) { 13067 e.stopImmediatePropagation(); 13068 } 13069 13070 this.stopPropagation(); 13071 } 13072}; 13073 13074// Includes all common event props including KeyEvent and MouseEvent specific props 13075jQuery.each( { 13076 altKey: true, 13077 bubbles: true, 13078 cancelable: true, 13079 changedTouches: true, 13080 ctrlKey: true, 13081 detail: true, 13082 eventPhase: true, 13083 metaKey: true, 13084 pageX: true, 13085 pageY: true, 13086 shiftKey: true, 13087 view: true, 13088 "char": true, 13089 code: true, 13090 charCode: true, 13091 key: true, 13092 keyCode: true, 13093 button: true, 13094 buttons: true, 13095 clientX: true, 13096 clientY: true, 13097 offsetX: true, 13098 offsetY: true, 13099 pointerId: true, 13100 pointerType: true, 13101 screenX: true, 13102 screenY: true, 13103 targetTouches: true, 13104 toElement: true, 13105 touches: true, 13106 which: true 13107}, jQuery.event.addProp ); 13108 13109jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 13110 13111 function focusMappedHandler( nativeEvent ) { 13112 if ( document.documentMode ) { 13113 13114 // Support: IE 11+ 13115 // Attach a single focusin/focusout handler on the document while someone wants 13116 // focus/blur. This is because the former are synchronous in IE while the latter 13117 // are async. In other browsers, all those handlers are invoked synchronously. 13118 13119 // `handle` from private data would already wrap the event, but we need 13120 // to change the `type` here. 13121 var handle = dataPriv.get( this, "handle" ), 13122 event = jQuery.event.fix( nativeEvent ); 13123 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 13124 event.isSimulated = true; 13125 13126 // First, handle focusin/focusout 13127 handle( nativeEvent ); 13128 13129 // ...then, handle focus/blur 13130 // 13131 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 13132 // invoking the handler at the lower level. 13133 if ( event.target === event.currentTarget ) { 13134 13135 // The setup part calls `leverageNative`, which, in turn, calls 13136 // `jQuery.event.add`, so event handle will already have been set 13137 // by this point. 13138 handle( event ); 13139 } 13140 } else { 13141 13142 // For non-IE browsers, attach a single capturing handler on the document 13143 // while someone wants focusin/focusout. 13144 jQuery.event.simulate( delegateType, nativeEvent.target, 13145 jQuery.event.fix( nativeEvent ) ); 13146 } 13147 } 13148 13149 jQuery.event.special[ type ] = { 13150 13151 // Utilize native event if possible so blur/focus sequence is correct 13152 setup: function() { 13153 13154 var attaches; 13155 13156 // Claim the first handler 13157 // dataPriv.set( this, "focus", ... ) 13158 // dataPriv.set( this, "blur", ... ) 13159 leverageNative( this, type, true ); 13160 13161 if ( document.documentMode ) { 13162 13163 // Support: IE 9 - 11+ 13164 // We use the same native handler for focusin & focus (and focusout & blur) 13165 // so we need to coordinate setup & teardown parts between those events. 13166 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 13167 attaches = dataPriv.get( this, delegateType ); 13168 if ( !attaches ) { 13169 this.addEventListener( delegateType, focusMappedHandler ); 13170 } 13171 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 13172 } else { 13173 13174 // Return false to allow normal processing in the caller 13175 return false; 13176 } 13177 }, 13178 trigger: function() { 13179 13180 // Force setup before trigger 13181 leverageNative( this, type ); 13182 13183 // Return non-false to allow normal event-path propagation 13184 return true; 13185 }, 13186 13187 teardown: function() { 13188 var attaches; 13189 13190 if ( document.documentMode ) { 13191 attaches = dataPriv.get( this, delegateType ) - 1; 13192 if ( !attaches ) { 13193 this.removeEventListener( delegateType, focusMappedHandler ); 13194 dataPriv.remove( this, delegateType ); 13195 } else { 13196 dataPriv.set( this, delegateType, attaches ); 13197 } 13198 } else { 13199 13200 // Return false to indicate standard teardown should be applied 13201 return false; 13202 } 13203 }, 13204 13205 // Suppress native focus or blur if we're currently inside 13206 // a leveraged native-event stack 13207 _default: function( event ) { 13208 return dataPriv.get( event.target, type ); 13209 }, 13210 13211 delegateType: delegateType 13212 }; 13213 13214 // Support: Firefox <=44 13215 // Firefox doesn't have focus(in | out) events 13216 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 13217 // 13218 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 13219 // focus(in | out) events fire after focus & blur events, 13220 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 13221 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 13222 // 13223 // Support: IE 9 - 11+ 13224 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 13225 // attach a single handler for both events in IE. 13226 jQuery.event.special[ delegateType ] = { 13227 setup: function() { 13228 13229 // Handle: regular nodes (via `this.ownerDocument`), window 13230 // (via `this.document`) & document (via `this`). 13231 var doc = this.ownerDocument || this.document || this, 13232 dataHolder = document.documentMode ? this : doc, 13233 attaches = dataPriv.get( dataHolder, delegateType ); 13234 13235 // Support: IE 9 - 11+ 13236 // We use the same native handler for focusin & focus (and focusout & blur) 13237 // so we need to coordinate setup & teardown parts between those events. 13238 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 13239 if ( !attaches ) { 13240 if ( document.documentMode ) { 13241 this.addEventListener( delegateType, focusMappedHandler ); 13242 } else { 13243 doc.addEventListener( type, focusMappedHandler, true ); 13244 } 13245 } 13246 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 13247 }, 13248 teardown: function() { 13249 var doc = this.ownerDocument || this.document || this, 13250 dataHolder = document.documentMode ? this : doc, 13251 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 13252 13253 if ( !attaches ) { 13254 if ( document.documentMode ) { 13255 this.removeEventListener( delegateType, focusMappedHandler ); 13256 } else { 13257 doc.removeEventListener( type, focusMappedHandler, true ); 13258 } 13259 dataPriv.remove( dataHolder, delegateType ); 13260 } else { 13261 dataPriv.set( dataHolder, delegateType, attaches ); 13262 } 13263 } 13264 }; 13265} ); 13266 13267// Create mouseenter/leave events using mouseover/out and event-time checks 13268// so that event delegation works in jQuery. 13269// Do the same for pointerenter/pointerleave and pointerover/pointerout 13270// 13271// Support: Safari 7 only 13272// Safari sends mouseenter too often; see: 13273// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 13274// for the description of the bug (it existed in older Chrome versions as well). 13275jQuery.each( { 13276 mouseenter: "mouseover", 13277 mouseleave: "mouseout", 13278 pointerenter: "pointerover", 13279 pointerleave: "pointerout" 13280}, function( orig, fix ) { 13281 jQuery.event.special[ orig ] = { 13282 delegateType: fix, 13283 bindType: fix, 13284 13285 handle: function( event ) { 13286 var ret, 13287 target = this, 13288 related = event.relatedTarget, 13289 handleObj = event.handleObj; 13290 13291 // For mouseenter/leave call the handler if related is outside the target. 13292 // NB: No relatedTarget if the mouse left/entered the browser window 13293 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 13294 event.type = handleObj.origType; 13295 ret = handleObj.handler.apply( this, arguments ); 13296 event.type = fix; 13297 } 13298 return ret; 13299 } 13300 }; 13301} ); 13302 13303jQuery.fn.extend( { 13304 13305 on: function( types, selector, data, fn ) { 13306 return on( this, types, selector, data, fn ); 13307 }, 13308 one: function( types, selector, data, fn ) { 13309 return on( this, types, selector, data, fn, 1 ); 13310 }, 13311 off: function( types, selector, fn ) { 13312 var handleObj, type; 13313 if ( types && types.preventDefault && types.handleObj ) { 13314 13315 // ( event ) dispatched jQuery.Event 13316 handleObj = types.handleObj; 13317 jQuery( types.delegateTarget ).off( 13318 handleObj.namespace ? 13319 handleObj.origType + "." + handleObj.namespace : 13320 handleObj.origType, 13321 handleObj.selector, 13322 handleObj.handler 13323 ); 13324 return this; 13325 } 13326 if ( typeof types === "object" ) { 13327 13328 // ( types-object [, selector] ) 13329 for ( type in types ) { 13330 this.off( type, selector, types[ type ] ); 13331 } 13332 return this; 13333 } 13334 if ( selector === false || typeof selector === "function" ) { 13335 13336 // ( types [, fn] ) 13337 fn = selector; 13338 selector = undefined; 13339 } 13340 if ( fn === false ) { 13341 fn = returnFalse; 13342 } 13343 return this.each( function() { 13344 jQuery.event.remove( this, types, fn, selector ); 13345 } ); 13346 } 13347} ); 13348 13349 13350var 13351 13352 // Support: IE <=10 - 11, Edge 12 - 13 only 13353 // In IE/Edge using regex groups here causes severe slowdowns. 13354 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 13355 rnoInnerhtml = /<script|<style|<link/i, 13356 13357 // checked="checked" or checked 13358 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 13359 13360 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 13361 13362// Prefer a tbody over its parent table for containing new rows 13363function manipulationTarget( elem, content ) { 13364 if ( nodeName( elem, "table" ) && 13365 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 13366 13367 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 13368 } 13369 13370 return elem; 13371} 13372 13373// Replace/restore the type attribute of script elements for safe DOM manipulation 13374function disableScript( elem ) { 13375 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 13376 return elem; 13377} 13378function restoreScript( elem ) { 13379 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 13380 elem.type = elem.type.slice( 5 ); 13381 } else { 13382 elem.removeAttribute( "type" ); 13383 } 13384 13385 return elem; 13386} 13387 13388function cloneCopyEvent( src, dest ) { 13389 var i, l, type, pdataOld, udataOld, udataCur, events; 13390 13391 if ( dest.nodeType !== 1 ) { 13392 return; 13393 } 13394 13395 // 1. Copy private data: events, handlers, etc. 13396 if ( dataPriv.hasData( src ) ) { 13397 pdataOld = dataPriv.get( src ); 13398 events = pdataOld.events; 13399 13400 if ( events ) { 13401 dataPriv.remove( dest, "handle events" ); 13402 13403 for ( type in events ) { 13404 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 13405 jQuery.event.add( dest, type, events[ type ][ i ] ); 13406 } 13407 } 13408 } 13409 } 13410 13411 // 2. Copy user data 13412 if ( dataUser.hasData( src ) ) { 13413 udataOld = dataUser.access( src ); 13414 udataCur = jQuery.extend( {}, udataOld ); 13415 13416 dataUser.set( dest, udataCur ); 13417 } 13418} 13419 13420// Fix IE bugs, see support tests 13421function fixInput( src, dest ) { 13422 var nodeName = dest.nodeName.toLowerCase(); 13423 13424 // Fails to persist the checked state of a cloned checkbox or radio button. 13425 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 13426 dest.checked = src.checked; 13427 13428 // Fails to return the selected option to the default selected state when cloning options 13429 } else if ( nodeName === "input" || nodeName === "textarea" ) { 13430 dest.defaultValue = src.defaultValue; 13431 } 13432} 13433 13434function domManip( collection, args, callback, ignored ) { 13435 13436 // Flatten any nested arrays 13437 args = flat( args ); 13438 13439 var fragment, first, scripts, hasScripts, node, doc, 13440 i = 0, 13441 l = collection.length, 13442 iNoClone = l - 1, 13443 value = args[ 0 ], 13444 valueIsFunction = isFunction( value ); 13445 13446 // We can't cloneNode fragments that contain checked, in WebKit 13447 if ( valueIsFunction || 13448 ( l > 1 && typeof value === "string" && 13449 !support.checkClone && rchecked.test( value ) ) ) { 13450 return collection.each( function( index ) { 13451 var self = collection.eq( index ); 13452 if ( valueIsFunction ) { 13453 args[ 0 ] = value.call( this, index, self.html() ); 13454 } 13455 domManip( self, args, callback, ignored ); 13456 } ); 13457 } 13458 13459 if ( l ) { 13460 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 13461 first = fragment.firstChild; 13462 13463 if ( fragment.childNodes.length === 1 ) { 13464 fragment = first; 13465 } 13466 13467 // Require either new content or an interest in ignored elements to invoke the callback 13468 if ( first || ignored ) { 13469 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 13470 hasScripts = scripts.length; 13471 13472 // Use the original fragment for the last item 13473 // instead of the first because it can end up 13474 // being emptied incorrectly in certain situations (trac-8070). 13475 for ( ; i < l; i++ ) { 13476 node = fragment; 13477 13478 if ( i !== iNoClone ) { 13479 node = jQuery.clone( node, true, true ); 13480 13481 // Keep references to cloned scripts for later restoration 13482 if ( hasScripts ) { 13483 13484 // Support: Android <=4.0 only, PhantomJS 1 only 13485 // push.apply(_, arraylike) throws on ancient WebKit 13486 jQuery.merge( scripts, getAll( node, "script" ) ); 13487 } 13488 } 13489 13490 callback.call( collection[ i ], node, i ); 13491 } 13492 13493 if ( hasScripts ) { 13494 doc = scripts[ scripts.length - 1 ].ownerDocument; 13495 13496 // Re-enable scripts 13497 jQuery.map( scripts, restoreScript ); 13498 13499 // Evaluate executable scripts on first document insertion 13500 for ( i = 0; i < hasScripts; i++ ) { 13501 node = scripts[ i ]; 13502 if ( rscriptType.test( node.type || "" ) && 13503 !dataPriv.access( node, "globalEval" ) && 13504 jQuery.contains( doc, node ) ) { 13505 13506 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 13507 13508 // Optional AJAX dependency, but won't run scripts if not present 13509 if ( jQuery._evalUrl && !node.noModule ) { 13510 jQuery._evalUrl( node.src, { 13511 nonce: node.nonce || node.getAttribute( "nonce" ) 13512 }, doc ); 13513 } 13514 } else { 13515 13516 // Unwrap a CDATA section containing script contents. This shouldn't be 13517 // needed as in XML documents they're already not visible when 13518 // inspecting element contents and in HTML documents they have no 13519 // meaning but we're preserving that logic for backwards compatibility. 13520 // This will be removed completely in 4.0. See gh-4904. 13521 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 13522 } 13523 } 13524 } 13525 } 13526 } 13527 } 13528 13529 return collection; 13530} 13531 13532function remove( elem, selector, keepData ) { 13533 var node, 13534 nodes = selector ? jQuery.filter( selector, elem ) : elem, 13535 i = 0; 13536 13537 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 13538 if ( !keepData && node.nodeType === 1 ) { 13539 jQuery.cleanData( getAll( node ) ); 13540 } 13541 13542 if ( node.parentNode ) { 13543 if ( keepData && isAttached( node ) ) { 13544 setGlobalEval( getAll( node, "script" ) ); 13545 } 13546 node.parentNode.removeChild( node ); 13547 } 13548 } 13549 13550 return elem; 13551} 13552 13553jQuery.extend( { 13554 htmlPrefilter: function( html ) { 13555 return html; 13556 }, 13557 13558 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 13559 var i, l, srcElements, destElements, 13560 clone = elem.cloneNode( true ), 13561 inPage = isAttached( elem ); 13562 13563 // Fix IE cloning issues 13564 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 13565 !jQuery.isXMLDoc( elem ) ) { 13566 13567 // We eschew jQuery#find here for performance reasons: 13568 // https://jsperf.com/getall-vs-sizzle/2 13569 destElements = getAll( clone ); 13570 srcElements = getAll( elem ); 13571 13572 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13573 fixInput( srcElements[ i ], destElements[ i ] ); 13574 } 13575 } 13576 13577 // Copy the events from the original to the clone 13578 if ( dataAndEvents ) { 13579 if ( deepDataAndEvents ) { 13580 srcElements = srcElements || getAll( elem ); 13581 destElements = destElements || getAll( clone ); 13582 13583 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13584 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 13585 } 13586 } else { 13587 cloneCopyEvent( elem, clone ); 13588 } 13589 } 13590 13591 // Preserve script evaluation history 13592 destElements = getAll( clone, "script" ); 13593 if ( destElements.length > 0 ) { 13594 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 13595 } 13596 13597 // Return the cloned set 13598 return clone; 13599 }, 13600 13601 cleanData: function( elems ) { 13602 var data, elem, type, 13603 special = jQuery.event.special, 13604 i = 0; 13605 13606 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 13607 if ( acceptData( elem ) ) { 13608 if ( ( data = elem[ dataPriv.expando ] ) ) { 13609 if ( data.events ) { 13610 for ( type in data.events ) { 13611 if ( special[ type ] ) { 13612 jQuery.event.remove( elem, type ); 13613 13614 // This is a shortcut to avoid jQuery.event.remove's overhead 13615 } else { 13616 jQuery.removeEvent( elem, type, data.handle ); 13617 } 13618 } 13619 } 13620 13621 // Support: Chrome <=35 - 45+ 13622 // Assign undefined instead of using delete, see Data#remove 13623 elem[ dataPriv.expando ] = undefined; 13624 } 13625 if ( elem[ dataUser.expando ] ) { 13626 13627 // Support: Chrome <=35 - 45+ 13628 // Assign undefined instead of using delete, see Data#remove 13629 elem[ dataUser.expando ] = undefined; 13630 } 13631 } 13632 } 13633 } 13634} ); 13635 13636jQuery.fn.extend( { 13637 detach: function( selector ) { 13638 return remove( this, selector, true ); 13639 }, 13640 13641 remove: function( selector ) { 13642 return remove( this, selector ); 13643 }, 13644 13645 text: function( value ) { 13646 return access( this, function( value ) { 13647 return value === undefined ? 13648 jQuery.text( this ) : 13649 this.empty().each( function() { 13650 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13651 this.textContent = value; 13652 } 13653 } ); 13654 }, null, value, arguments.length ); 13655 }, 13656 13657 append: function() { 13658 return domManip( this, arguments, function( elem ) { 13659 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13660 var target = manipulationTarget( this, elem ); 13661 target.appendChild( elem ); 13662 } 13663 } ); 13664 }, 13665 13666 prepend: function() { 13667 return domManip( this, arguments, function( elem ) { 13668 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13669 var target = manipulationTarget( this, elem ); 13670 target.insertBefore( elem, target.firstChild ); 13671 } 13672 } ); 13673 }, 13674 13675 before: function() { 13676 return domManip( this, arguments, function( elem ) { 13677 if ( this.parentNode ) { 13678 this.parentNode.insertBefore( elem, this ); 13679 } 13680 } ); 13681 }, 13682 13683 after: function() { 13684 return domManip( this, arguments, function( elem ) { 13685 if ( this.parentNode ) { 13686 this.parentNode.insertBefore( elem, this.nextSibling ); 13687 } 13688 } ); 13689 }, 13690 13691 empty: function() { 13692 var elem, 13693 i = 0; 13694 13695 for ( ; ( elem = this[ i ] ) != null; i++ ) { 13696 if ( elem.nodeType === 1 ) { 13697 13698 // Prevent memory leaks 13699 jQuery.cleanData( getAll( elem, false ) ); 13700 13701 // Remove any remaining nodes 13702 elem.textContent = ""; 13703 } 13704 } 13705 13706 return this; 13707 }, 13708 13709 clone: function( dataAndEvents, deepDataAndEvents ) { 13710 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 13711 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 13712 13713 return this.map( function() { 13714 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 13715 } ); 13716 }, 13717 13718 html: function( value ) { 13719 return access( this, function( value ) { 13720 var elem = this[ 0 ] || {}, 13721 i = 0, 13722 l = this.length; 13723 13724 if ( value === undefined && elem.nodeType === 1 ) { 13725 return elem.innerHTML; 13726 } 13727 13728 // See if we can take a shortcut and just use innerHTML 13729 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 13730 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 13731 13732 value = jQuery.htmlPrefilter( value ); 13733 13734 try { 13735 for ( ; i < l; i++ ) { 13736 elem = this[ i ] || {}; 13737 13738 // Remove element nodes and prevent memory leaks 13739 if ( elem.nodeType === 1 ) { 13740 jQuery.cleanData( getAll( elem, false ) ); 13741 elem.innerHTML = value; 13742 } 13743 } 13744 13745 elem = 0; 13746 13747 // If using innerHTML throws an exception, use the fallback method 13748 } catch ( e ) {} 13749 } 13750 13751 if ( elem ) { 13752 this.empty().append( value ); 13753 } 13754 }, null, value, arguments.length ); 13755 }, 13756 13757 replaceWith: function() { 13758 var ignored = []; 13759 13760 // Make the changes, replacing each non-ignored context element with the new content 13761 return domManip( this, arguments, function( elem ) { 13762 var parent = this.parentNode; 13763 13764 if ( jQuery.inArray( this, ignored ) < 0 ) { 13765 jQuery.cleanData( getAll( this ) ); 13766 if ( parent ) { 13767 parent.replaceChild( elem, this ); 13768 } 13769 } 13770 13771 // Force callback invocation 13772 }, ignored ); 13773 } 13774} ); 13775 13776jQuery.each( { 13777 appendTo: "append", 13778 prependTo: "prepend", 13779 insertBefore: "before", 13780 insertAfter: "after", 13781 replaceAll: "replaceWith" 13782}, function( name, original ) { 13783 jQuery.fn[ name ] = function( selector ) { 13784 var elems, 13785 ret = [], 13786 insert = jQuery( selector ), 13787 last = insert.length - 1, 13788 i = 0; 13789 13790 for ( ; i <= last; i++ ) { 13791 elems = i === last ? this : this.clone( true ); 13792 jQuery( insert[ i ] )[ original ]( elems ); 13793 13794 // Support: Android <=4.0 only, PhantomJS 1 only 13795 // .get() because push.apply(_, arraylike) throws on ancient WebKit 13796 push.apply( ret, elems.get() ); 13797 } 13798 13799 return this.pushStack( ret ); 13800 }; 13801} ); 13802var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 13803 13804var rcustomProp = /^--/; 13805 13806 13807var getStyles = function( elem ) { 13808 13809 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 13810 // IE throws on elements created in popups 13811 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 13812 var view = elem.ownerDocument.defaultView; 13813 13814 if ( !view || !view.opener ) { 13815 view = window; 13816 } 13817 13818 return view.getComputedStyle( elem ); 13819 }; 13820 13821var swap = function( elem, options, callback ) { 13822 var ret, name, 13823 old = {}; 13824 13825 // Remember the old values, and insert the new ones 13826 for ( name in options ) { 13827 old[ name ] = elem.style[ name ]; 13828 elem.style[ name ] = options[ name ]; 13829 } 13830 13831 ret = callback.call( elem ); 13832 13833 // Revert the old values 13834 for ( name in options ) { 13835 elem.style[ name ] = old[ name ]; 13836 } 13837 13838 return ret; 13839}; 13840 13841 13842var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 13843 13844 13845 13846( function() { 13847 13848 // Executing both pixelPosition & boxSizingReliable tests require only one layout 13849 // so they're executed at the same time to save the second computation. 13850 function computeStyleTests() { 13851 13852 // This is a singleton, we need to execute it only once 13853 if ( !div ) { 13854 return; 13855 } 13856 13857 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 13858 "margin-top:1px;padding:0;border:0"; 13859 div.style.cssText = 13860 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 13861 "margin:auto;border:1px;padding:1px;" + 13862 "width:60%;top:1%"; 13863 documentElement.appendChild( container ).appendChild( div ); 13864 13865 var divStyle = window.getComputedStyle( div ); 13866 pixelPositionVal = divStyle.top !== "1%"; 13867 13868 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 13869 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 13870 13871 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 13872 // Some styles come back with percentage values, even though they shouldn't 13873 div.style.right = "60%"; 13874 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 13875 13876 // Support: IE 9 - 11 only 13877 // Detect misreporting of content dimensions for box-sizing:border-box elements 13878 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 13879 13880 // Support: IE 9 only 13881 // Detect overflow:scroll screwiness (gh-3699) 13882 // Support: Chrome <=64 13883 // Don't get tricked when zoom affects offsetWidth (gh-4029) 13884 div.style.position = "absolute"; 13885 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 13886 13887 documentElement.removeChild( container ); 13888 13889 // Nullify the div so it wouldn't be stored in the memory and 13890 // it will also be a sign that checks already performed 13891 div = null; 13892 } 13893 13894 function roundPixelMeasures( measure ) { 13895 return Math.round( parseFloat( measure ) ); 13896 } 13897 13898 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 13899 reliableTrDimensionsVal, reliableMarginLeftVal, 13900 container = document.createElement( "div" ), 13901 div = document.createElement( "div" ); 13902 13903 // Finish early in limited (non-browser) environments 13904 if ( !div.style ) { 13905 return; 13906 } 13907 13908 // Support: IE <=9 - 11 only 13909 // Style of cloned element affects source element cloned (trac-8908) 13910 div.style.backgroundClip = "content-box"; 13911 div.cloneNode( true ).style.backgroundClip = ""; 13912 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 13913 13914 jQuery.extend( support, { 13915 boxSizingReliable: function() { 13916 computeStyleTests(); 13917 return boxSizingReliableVal; 13918 }, 13919 pixelBoxStyles: function() { 13920 computeStyleTests(); 13921 return pixelBoxStylesVal; 13922 }, 13923 pixelPosition: function() { 13924 computeStyleTests(); 13925 return pixelPositionVal; 13926 }, 13927 reliableMarginLeft: function() { 13928 computeStyleTests(); 13929 return reliableMarginLeftVal; 13930 }, 13931 scrollboxSize: function() { 13932 computeStyleTests(); 13933 return scrollboxSizeVal; 13934 }, 13935 13936 // Support: IE 9 - 11+, Edge 15 - 18+ 13937 // IE/Edge misreport `getComputedStyle` of table rows with width/height 13938 // set in CSS while `offset*` properties report correct values. 13939 // Behavior in IE 9 is more subtle than in newer versions & it passes 13940 // some versions of this test; make sure not to make it pass there! 13941 // 13942 // Support: Firefox 70+ 13943 // Only Firefox includes border widths 13944 // in computed dimensions. (gh-4529) 13945 reliableTrDimensions: function() { 13946 var table, tr, trChild, trStyle; 13947 if ( reliableTrDimensionsVal == null ) { 13948 table = document.createElement( "table" ); 13949 tr = document.createElement( "tr" ); 13950 trChild = document.createElement( "div" ); 13951 13952 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 13953 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 13954 13955 // Support: Chrome 86+ 13956 // Height set through cssText does not get applied. 13957 // Computed height then comes back as 0. 13958 tr.style.height = "1px"; 13959 trChild.style.height = "9px"; 13960 13961 // Support: Android 8 Chrome 86+ 13962 // In our bodyBackground.html iframe, 13963 // display for all div elements is set to "inline", 13964 // which causes a problem only in Android 8 Chrome 86. 13965 // Ensuring the div is `display: block` 13966 // gets around this issue. 13967 trChild.style.display = "block"; 13968 13969 documentElement 13970 .appendChild( table ) 13971 .appendChild( tr ) 13972 .appendChild( trChild ); 13973 13974 trStyle = window.getComputedStyle( tr ); 13975 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 13976 parseInt( trStyle.borderTopWidth, 10 ) + 13977 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 13978 13979 documentElement.removeChild( table ); 13980 } 13981 return reliableTrDimensionsVal; 13982 } 13983 } ); 13984} )(); 13985 13986 13987function curCSS( elem, name, computed ) { 13988 var width, minWidth, maxWidth, ret, 13989 isCustomProp = rcustomProp.test( name ), 13990 13991 // Support: Firefox 51+ 13992 // Retrieving style before computed somehow 13993 // fixes an issue with getting wrong values 13994 // on detached elements 13995 style = elem.style; 13996 13997 computed = computed || getStyles( elem ); 13998 13999 // getPropertyValue is needed for: 14000 // .css('filter') (IE 9 only, trac-12537) 14001 // .css('--customProperty) (gh-3144) 14002 if ( computed ) { 14003 14004 // Support: IE <=9 - 11+ 14005 // IE only supports `"float"` in `getPropertyValue`; in computed styles 14006 // it's only available as `"cssFloat"`. We no longer modify properties 14007 // sent to `.css()` apart from camelCasing, so we need to check both. 14008 // Normally, this would create difference in behavior: if 14009 // `getPropertyValue` returns an empty string, the value returned 14010 // by `.css()` would be `undefined`. This is usually the case for 14011 // disconnected elements. However, in IE even disconnected elements 14012 // with no styles return `"none"` for `getPropertyValue( "float" )` 14013 ret = computed.getPropertyValue( name ) || computed[ name ]; 14014 14015 if ( isCustomProp && ret ) { 14016 14017 // Support: Firefox 105+, Chrome <=105+ 14018 // Spec requires trimming whitespace for custom properties (gh-4926). 14019 // Firefox only trims leading whitespace. Chrome just collapses 14020 // both leading & trailing whitespace to a single space. 14021 // 14022 // Fall back to `undefined` if empty string returned. 14023 // This collapses a missing definition with property defined 14024 // and set to an empty string but there's no standard API 14025 // allowing us to differentiate them without a performance penalty 14026 // and returning `undefined` aligns with older jQuery. 14027 // 14028 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 14029 // as whitespace while CSS does not, but this is not a problem 14030 // because CSS preprocessing replaces them with U+000A LINE FEED 14031 // (which *is* CSS whitespace) 14032 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 14033 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 14034 } 14035 14036 if ( ret === "" && !isAttached( elem ) ) { 14037 ret = jQuery.style( elem, name ); 14038 } 14039 14040 // A tribute to the "awesome hack by Dean Edwards" 14041 // Android Browser returns percentage for some values, 14042 // but width seems to be reliably pixels. 14043 // This is against the CSSOM draft spec: 14044 // https://drafts.csswg.org/cssom/#resolved-values 14045 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 14046 14047 // Remember the original values 14048 width = style.width; 14049 minWidth = style.minWidth; 14050 maxWidth = style.maxWidth; 14051 14052 // Put in the new values to get a computed value out 14053 style.minWidth = style.maxWidth = style.width = ret; 14054 ret = computed.width; 14055 14056 // Revert the changed values 14057 style.width = width; 14058 style.minWidth = minWidth; 14059 style.maxWidth = maxWidth; 14060 } 14061 } 14062 14063 return ret !== undefined ? 14064 14065 // Support: IE <=9 - 11 only 14066 // IE returns zIndex value as an integer. 14067 ret + "" : 14068 ret; 14069} 14070 14071 14072function addGetHookIf( conditionFn, hookFn ) { 14073 14074 // Define the hook, we'll check on the first run if it's really needed. 14075 return { 14076 get: function() { 14077 if ( conditionFn() ) { 14078 14079 // Hook not needed (or it's not possible to use it due 14080 // to missing dependency), remove it. 14081 delete this.get; 14082 return; 14083 } 14084 14085 // Hook needed; redefine it so that the support test is not executed again. 14086 return ( this.get = hookFn ).apply( this, arguments ); 14087 } 14088 }; 14089} 14090 14091 14092var cssPrefixes = [ "Webkit", "Moz", "ms" ], 14093 emptyStyle = document.createElement( "div" ).style, 14094 vendorProps = {}; 14095 14096// Return a vendor-prefixed property or undefined 14097function vendorPropName( name ) { 14098 14099 // Check for vendor prefixed names 14100 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 14101 i = cssPrefixes.length; 14102 14103 while ( i-- ) { 14104 name = cssPrefixes[ i ] + capName; 14105 if ( name in emptyStyle ) { 14106 return name; 14107 } 14108 } 14109} 14110 14111// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 14112function finalPropName( name ) { 14113 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 14114 14115 if ( final ) { 14116 return final; 14117 } 14118 if ( name in emptyStyle ) { 14119 return name; 14120 } 14121 return vendorProps[ name ] = vendorPropName( name ) || name; 14122} 14123 14124 14125var 14126 14127 // Swappable if display is none or starts with table 14128 // except "table", "table-cell", or "table-caption" 14129 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 14130 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 14131 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 14132 cssNormalTransform = { 14133 letterSpacing: "0", 14134 fontWeight: "400" 14135 }; 14136 14137function setPositiveNumber( _elem, value, subtract ) { 14138 14139 // Any relative (+/-) values have already been 14140 // normalized at this point 14141 var matches = rcssNum.exec( value ); 14142 return matches ? 14143 14144 // Guard against undefined "subtract", e.g., when used as in cssHooks 14145 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 14146 value; 14147} 14148 14149function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 14150 var i = dimension === "width" ? 1 : 0, 14151 extra = 0, 14152 delta = 0, 14153 marginDelta = 0; 14154 14155 // Adjustment may not be necessary 14156 if ( box === ( isBorderBox ? "border" : "content" ) ) { 14157 return 0; 14158 } 14159 14160 for ( ; i < 4; i += 2 ) { 14161 14162 // Both box models exclude margin 14163 // Count margin delta separately to only add it after scroll gutter adjustment. 14164 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 14165 if ( box === "margin" ) { 14166 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 14167 } 14168 14169 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 14170 if ( !isBorderBox ) { 14171 14172 // Add padding 14173 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 14174 14175 // For "border" or "margin", add border 14176 if ( box !== "padding" ) { 14177 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14178 14179 // But still keep track of it otherwise 14180 } else { 14181 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14182 } 14183 14184 // If we get here with a border-box (content + padding + border), we're seeking "content" or 14185 // "padding" or "margin" 14186 } else { 14187 14188 // For "content", subtract padding 14189 if ( box === "content" ) { 14190 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 14191 } 14192 14193 // For "content" or "padding", subtract border 14194 if ( box !== "margin" ) { 14195 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 14196 } 14197 } 14198 } 14199 14200 // Account for positive content-box scroll gutter when requested by providing computedVal 14201 if ( !isBorderBox && computedVal >= 0 ) { 14202 14203 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 14204 // Assuming integer scroll gutter, subtract the rest and round down 14205 delta += Math.max( 0, Math.ceil( 14206 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 14207 computedVal - 14208 delta - 14209 extra - 14210 0.5 14211 14212 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 14213 // Use an explicit zero to avoid NaN (gh-3964) 14214 ) ) || 0; 14215 } 14216 14217 return delta + marginDelta; 14218} 14219 14220function getWidthOrHeight( elem, dimension, extra ) { 14221 14222 // Start with computed style 14223 var styles = getStyles( elem ), 14224 14225 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 14226 // Fake content-box until we know it's needed to know the true value. 14227 boxSizingNeeded = !support.boxSizingReliable() || extra, 14228 isBorderBox = boxSizingNeeded && 14229 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 14230 valueIsBorderBox = isBorderBox, 14231 14232 val = curCSS( elem, dimension, styles ), 14233 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 14234 14235 // Support: Firefox <=54 14236 // Return a confounding non-pixel value or feign ignorance, as appropriate. 14237 if ( rnumnonpx.test( val ) ) { 14238 if ( !extra ) { 14239 return val; 14240 } 14241 val = "auto"; 14242 } 14243 14244 14245 // Support: IE 9 - 11 only 14246 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 14247 // In those cases, the computed value can be trusted to be border-box. 14248 if ( ( !support.boxSizingReliable() && isBorderBox || 14249 14250 // Support: IE 10 - 11+, Edge 15 - 18+ 14251 // IE/Edge misreport `getComputedStyle` of table rows with width/height 14252 // set in CSS while `offset*` properties report correct values. 14253 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 14254 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 14255 14256 // Fall back to offsetWidth/offsetHeight when value is "auto" 14257 // This happens for inline elements with no explicit setting (gh-3571) 14258 val === "auto" || 14259 14260 // Support: Android <=4.1 - 4.3 only 14261 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 14262 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 14263 14264 // Make sure the element is visible & connected 14265 elem.getClientRects().length ) { 14266 14267 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 14268 14269 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 14270 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 14271 // retrieved value as a content box dimension. 14272 valueIsBorderBox = offsetProp in elem; 14273 if ( valueIsBorderBox ) { 14274 val = elem[ offsetProp ]; 14275 } 14276 } 14277 14278 // Normalize "" and auto 14279 val = parseFloat( val ) || 0; 14280 14281 // Adjust for the element's box model 14282 return ( val + 14283 boxModelAdjustment( 14284 elem, 14285 dimension, 14286 extra || ( isBorderBox ? "border" : "content" ), 14287 valueIsBorderBox, 14288 styles, 14289 14290 // Provide the current computed size to request scroll gutter calculation (gh-3589) 14291 val 14292 ) 14293 ) + "px"; 14294} 14295 14296jQuery.extend( { 14297 14298 // Add in style property hooks for overriding the default 14299 // behavior of getting and setting a style property 14300 cssHooks: { 14301 opacity: { 14302 get: function( elem, computed ) { 14303 if ( computed ) { 14304 14305 // We should always get a number back from opacity 14306 var ret = curCSS( elem, "opacity" ); 14307 return ret === "" ? "1" : ret; 14308 } 14309 } 14310 } 14311 }, 14312 14313 // Don't automatically add "px" to these possibly-unitless properties 14314 cssNumber: { 14315 animationIterationCount: true, 14316 aspectRatio: true, 14317 borderImageSlice: true, 14318 columnCount: true, 14319 flexGrow: true, 14320 flexShrink: true, 14321 fontWeight: true, 14322 gridArea: true, 14323 gridColumn: true, 14324 gridColumnEnd: true, 14325 gridColumnStart: true, 14326 gridRow: true, 14327 gridRowEnd: true, 14328 gridRowStart: true, 14329 lineHeight: true, 14330 opacity: true, 14331 order: true, 14332 orphans: true, 14333 scale: true, 14334 widows: true, 14335 zIndex: true, 14336 zoom: true, 14337 14338 // SVG-related 14339 fillOpacity: true, 14340 floodOpacity: true, 14341 stopOpacity: true, 14342 strokeMiterlimit: true, 14343 strokeOpacity: true 14344 }, 14345 14346 // Add in properties whose names you wish to fix before 14347 // setting or getting the value 14348 cssProps: {}, 14349 14350 // Get and set the style property on a DOM Node 14351 style: function( elem, name, value, extra ) { 14352 14353 // Don't set styles on text and comment nodes 14354 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 14355 return; 14356 } 14357 14358 // Make sure that we're working with the right name 14359 var ret, type, hooks, 14360 origName = camelCase( name ), 14361 isCustomProp = rcustomProp.test( name ), 14362 style = elem.style; 14363 14364 // Make sure that we're working with the right name. We don't 14365 // want to query the value if it is a CSS custom property 14366 // since they are user-defined. 14367 if ( !isCustomProp ) { 14368 name = finalPropName( origName ); 14369 } 14370 14371 // Gets hook for the prefixed version, then unprefixed version 14372 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14373 14374 // Check if we're setting a value 14375 if ( value !== undefined ) { 14376 type = typeof value; 14377 14378 // Convert "+=" or "-=" to relative numbers (trac-7345) 14379 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 14380 value = adjustCSS( elem, name, ret ); 14381 14382 // Fixes bug trac-9237 14383 type = "number"; 14384 } 14385 14386 // Make sure that null and NaN values aren't set (trac-7116) 14387 if ( value == null || value !== value ) { 14388 return; 14389 } 14390 14391 // If a number was passed in, add the unit (except for certain CSS properties) 14392 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 14393 // "px" to a few hardcoded values. 14394 if ( type === "number" && !isCustomProp ) { 14395 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 14396 } 14397 14398 // background-* props affect original clone's values 14399 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 14400 style[ name ] = "inherit"; 14401 } 14402 14403 // If a hook was provided, use that value, otherwise just set the specified value 14404 if ( !hooks || !( "set" in hooks ) || 14405 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 14406 14407 if ( isCustomProp ) { 14408 style.setProperty( name, value ); 14409 } else { 14410 style[ name ] = value; 14411 } 14412 } 14413 14414 } else { 14415 14416 // If a hook was provided get the non-computed value from there 14417 if ( hooks && "get" in hooks && 14418 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 14419 14420 return ret; 14421 } 14422 14423 // Otherwise just get the value from the style object 14424 return style[ name ]; 14425 } 14426 }, 14427 14428 css: function( elem, name, extra, styles ) { 14429 var val, num, hooks, 14430 origName = camelCase( name ), 14431 isCustomProp = rcustomProp.test( name ); 14432 14433 // Make sure that we're working with the right name. We don't 14434 // want to modify the value if it is a CSS custom property 14435 // since they are user-defined. 14436 if ( !isCustomProp ) { 14437 name = finalPropName( origName ); 14438 } 14439 14440 // Try prefixed name followed by the unprefixed name 14441 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14442 14443 // If a hook was provided get the computed value from there 14444 if ( hooks && "get" in hooks ) { 14445 val = hooks.get( elem, true, extra ); 14446 } 14447 14448 // Otherwise, if a way to get the computed value exists, use that 14449 if ( val === undefined ) { 14450 val = curCSS( elem, name, styles ); 14451 } 14452 14453 // Convert "normal" to computed value 14454 if ( val === "normal" && name in cssNormalTransform ) { 14455 val = cssNormalTransform[ name ]; 14456 } 14457 14458 // Make numeric if forced or a qualifier was provided and val looks numeric 14459 if ( extra === "" || extra ) { 14460 num = parseFloat( val ); 14461 return extra === true || isFinite( num ) ? num || 0 : val; 14462 } 14463 14464 return val; 14465 } 14466} ); 14467 14468jQuery.each( [ "height", "width" ], function( _i, dimension ) { 14469 jQuery.cssHooks[ dimension ] = { 14470 get: function( elem, computed, extra ) { 14471 if ( computed ) { 14472 14473 // Certain elements can have dimension info if we invisibly show them 14474 // but it must have a current display style that would benefit 14475 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 14476 14477 // Support: Safari 8+ 14478 // Table columns in Safari have non-zero offsetWidth & zero 14479 // getBoundingClientRect().width unless display is changed. 14480 // Support: IE <=11 only 14481 // Running getBoundingClientRect on a disconnected node 14482 // in IE throws an error. 14483 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 14484 swap( elem, cssShow, function() { 14485 return getWidthOrHeight( elem, dimension, extra ); 14486 } ) : 14487 getWidthOrHeight( elem, dimension, extra ); 14488 } 14489 }, 14490 14491 set: function( elem, value, extra ) { 14492 var matches, 14493 styles = getStyles( elem ), 14494 14495 // Only read styles.position if the test has a chance to fail 14496 // to avoid forcing a reflow. 14497 scrollboxSizeBuggy = !support.scrollboxSize() && 14498 styles.position === "absolute", 14499 14500 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 14501 boxSizingNeeded = scrollboxSizeBuggy || extra, 14502 isBorderBox = boxSizingNeeded && 14503 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 14504 subtract = extra ? 14505 boxModelAdjustment( 14506 elem, 14507 dimension, 14508 extra, 14509 isBorderBox, 14510 styles 14511 ) : 14512 0; 14513 14514 // Account for unreliable border-box dimensions by comparing offset* to computed and 14515 // faking a content-box to get border and padding (gh-3699) 14516 if ( isBorderBox && scrollboxSizeBuggy ) { 14517 subtract -= Math.ceil( 14518 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 14519 parseFloat( styles[ dimension ] ) - 14520 boxModelAdjustment( elem, dimension, "border", false, styles ) - 14521 0.5 14522 ); 14523 } 14524 14525 // Convert to pixels if value adjustment is needed 14526 if ( subtract && ( matches = rcssNum.exec( value ) ) && 14527 ( matches[ 3 ] || "px" ) !== "px" ) { 14528 14529 elem.style[ dimension ] = value; 14530 value = jQuery.css( elem, dimension ); 14531 } 14532 14533 return setPositiveNumber( elem, value, subtract ); 14534 } 14535 }; 14536} ); 14537 14538jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 14539 function( elem, computed ) { 14540 if ( computed ) { 14541 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 14542 elem.getBoundingClientRect().left - 14543 swap( elem, { marginLeft: 0 }, function() { 14544 return elem.getBoundingClientRect().left; 14545 } ) 14546 ) + "px"; 14547 } 14548 } 14549); 14550 14551// These hooks are used by animate to expand properties 14552jQuery.each( { 14553 margin: "", 14554 padding: "", 14555 border: "Width" 14556}, function( prefix, suffix ) { 14557 jQuery.cssHooks[ prefix + suffix ] = { 14558 expand: function( value ) { 14559 var i = 0, 14560 expanded = {}, 14561 14562 // Assumes a single number if not a string 14563 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 14564 14565 for ( ; i < 4; i++ ) { 14566 expanded[ prefix + cssExpand[ i ] + suffix ] = 14567 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 14568 } 14569 14570 return expanded; 14571 } 14572 }; 14573 14574 if ( prefix !== "margin" ) { 14575 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 14576 } 14577} ); 14578 14579jQuery.fn.extend( { 14580 css: function( name, value ) { 14581 return access( this, function( elem, name, value ) { 14582 var styles, len, 14583 map = {}, 14584 i = 0; 14585 14586 if ( Array.isArray( name ) ) { 14587 styles = getStyles( elem ); 14588 len = name.length; 14589 14590 for ( ; i < len; i++ ) { 14591 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 14592 } 14593 14594 return map; 14595 } 14596 14597 return value !== undefined ? 14598 jQuery.style( elem, name, value ) : 14599 jQuery.css( elem, name ); 14600 }, name, value, arguments.length > 1 ); 14601 } 14602} ); 14603 14604 14605function Tween( elem, options, prop, end, easing ) { 14606 return new Tween.prototype.init( elem, options, prop, end, easing ); 14607} 14608jQuery.Tween = Tween; 14609 14610Tween.prototype = { 14611 constructor: Tween, 14612 init: function( elem, options, prop, end, easing, unit ) { 14613 this.elem = elem; 14614 this.prop = prop; 14615 this.easing = easing || jQuery.easing._default; 14616 this.options = options; 14617 this.start = this.now = this.cur(); 14618 this.end = end; 14619 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 14620 }, 14621 cur: function() { 14622 var hooks = Tween.propHooks[ this.prop ]; 14623 14624 return hooks && hooks.get ? 14625 hooks.get( this ) : 14626 Tween.propHooks._default.get( this ); 14627 }, 14628 run: function( percent ) { 14629 var eased, 14630 hooks = Tween.propHooks[ this.prop ]; 14631 14632 if ( this.options.duration ) { 14633 this.pos = eased = jQuery.easing[ this.easing ]( 14634 percent, this.options.duration * percent, 0, 1, this.options.duration 14635 ); 14636 } else { 14637 this.pos = eased = percent; 14638 } 14639 this.now = ( this.end - this.start ) * eased + this.start; 14640 14641 if ( this.options.step ) { 14642 this.options.step.call( this.elem, this.now, this ); 14643 } 14644 14645 if ( hooks && hooks.set ) { 14646 hooks.set( this ); 14647 } else { 14648 Tween.propHooks._default.set( this ); 14649 } 14650 return this; 14651 } 14652}; 14653 14654Tween.prototype.init.prototype = Tween.prototype; 14655 14656Tween.propHooks = { 14657 _default: { 14658 get: function( tween ) { 14659 var result; 14660 14661 // Use a property on the element directly when it is not a DOM element, 14662 // or when there is no matching style property that exists. 14663 if ( tween.elem.nodeType !== 1 || 14664 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 14665 return tween.elem[ tween.prop ]; 14666 } 14667 14668 // Passing an empty string as a 3rd parameter to .css will automatically 14669 // attempt a parseFloat and fallback to a string if the parse fails. 14670 // Simple values such as "10px" are parsed to Float; 14671 // complex values such as "rotate(1rad)" are returned as-is. 14672 result = jQuery.css( tween.elem, tween.prop, "" ); 14673 14674 // Empty strings, null, undefined and "auto" are converted to 0. 14675 return !result || result === "auto" ? 0 : result; 14676 }, 14677 set: function( tween ) { 14678 14679 // Use step hook for back compat. 14680 // Use cssHook if its there. 14681 // Use .style if available and use plain properties where available. 14682 if ( jQuery.fx.step[ tween.prop ] ) { 14683 jQuery.fx.step[ tween.prop ]( tween ); 14684 } else if ( tween.elem.nodeType === 1 && ( 14685 jQuery.cssHooks[ tween.prop ] || 14686 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 14687 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 14688 } else { 14689 tween.elem[ tween.prop ] = tween.now; 14690 } 14691 } 14692 } 14693}; 14694 14695// Support: IE <=9 only 14696// Panic based approach to setting things on disconnected nodes 14697Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 14698 set: function( tween ) { 14699 if ( tween.elem.nodeType && tween.elem.parentNode ) { 14700 tween.elem[ tween.prop ] = tween.now; 14701 } 14702 } 14703}; 14704 14705jQuery.easing = { 14706 linear: function( p ) { 14707 return p; 14708 }, 14709 swing: function( p ) { 14710 return 0.5 - Math.cos( p * Math.PI ) / 2; 14711 }, 14712 _default: "swing" 14713}; 14714 14715jQuery.fx = Tween.prototype.init; 14716 14717// Back compat <1.8 extension point 14718jQuery.fx.step = {}; 14719 14720 14721 14722 14723var 14724 fxNow, inProgress, 14725 rfxtypes = /^(?:toggle|show|hide)$/, 14726 rrun = /queueHooks$/; 14727 14728function schedule() { 14729 if ( inProgress ) { 14730 if ( document.hidden === false && window.requestAnimationFrame ) { 14731 window.requestAnimationFrame( schedule ); 14732 } else { 14733 window.setTimeout( schedule, jQuery.fx.interval ); 14734 } 14735 14736 jQuery.fx.tick(); 14737 } 14738} 14739 14740// Animations created synchronously will run synchronously 14741function createFxNow() { 14742 window.setTimeout( function() { 14743 fxNow = undefined; 14744 } ); 14745 return ( fxNow = Date.now() ); 14746} 14747 14748// Generate parameters to create a standard animation 14749function genFx( type, includeWidth ) { 14750 var which, 14751 i = 0, 14752 attrs = { height: type }; 14753 14754 // If we include width, step value is 1 to do all cssExpand values, 14755 // otherwise step value is 2 to skip over Left and Right 14756 includeWidth = includeWidth ? 1 : 0; 14757 for ( ; i < 4; i += 2 - includeWidth ) { 14758 which = cssExpand[ i ]; 14759 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 14760 } 14761 14762 if ( includeWidth ) { 14763 attrs.opacity = attrs.width = type; 14764 } 14765 14766 return attrs; 14767} 14768 14769function createTween( value, prop, animation ) { 14770 var tween, 14771 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 14772 index = 0, 14773 length = collection.length; 14774 for ( ; index < length; index++ ) { 14775 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 14776 14777 // We're done with this property 14778 return tween; 14779 } 14780 } 14781} 14782 14783function defaultPrefilter( elem, props, opts ) { 14784 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 14785 isBox = "width" in props || "height" in props, 14786 anim = this, 14787 orig = {}, 14788 style = elem.style, 14789 hidden = elem.nodeType && isHiddenWithinTree( elem ), 14790 dataShow = dataPriv.get( elem, "fxshow" ); 14791 14792 // Queue-skipping animations hijack the fx hooks 14793 if ( !opts.queue ) { 14794 hooks = jQuery._queueHooks( elem, "fx" ); 14795 if ( hooks.unqueued == null ) { 14796 hooks.unqueued = 0; 14797 oldfire = hooks.empty.fire; 14798 hooks.empty.fire = function() { 14799 if ( !hooks.unqueued ) { 14800 oldfire(); 14801 } 14802 }; 14803 } 14804 hooks.unqueued++; 14805 14806 anim.always( function() { 14807 14808 // Ensure the complete handler is called before this completes 14809 anim.always( function() { 14810 hooks.unqueued--; 14811 if ( !jQuery.queue( elem, "fx" ).length ) { 14812 hooks.empty.fire(); 14813 } 14814 } ); 14815 } ); 14816 } 14817 14818 // Detect show/hide animations 14819 for ( prop in props ) { 14820 value = props[ prop ]; 14821 if ( rfxtypes.test( value ) ) { 14822 delete props[ prop ]; 14823 toggle = toggle || value === "toggle"; 14824 if ( value === ( hidden ? "hide" : "show" ) ) { 14825 14826 // Pretend to be hidden if this is a "show" and 14827 // there is still data from a stopped show/hide 14828 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 14829 hidden = true; 14830 14831 // Ignore all other no-op show/hide data 14832 } else { 14833 continue; 14834 } 14835 } 14836 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 14837 } 14838 } 14839 14840 // Bail out if this is a no-op like .hide().hide() 14841 propTween = !jQuery.isEmptyObject( props ); 14842 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 14843 return; 14844 } 14845 14846 // Restrict "overflow" and "display" styles during box animations 14847 if ( isBox && elem.nodeType === 1 ) { 14848 14849 // Support: IE <=9 - 11, Edge 12 - 15 14850 // Record all 3 overflow attributes because IE does not infer the shorthand 14851 // from identically-valued overflowX and overflowY and Edge just mirrors 14852 // the overflowX value there. 14853 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 14854 14855 // Identify a display type, preferring old show/hide data over the CSS cascade 14856 restoreDisplay = dataShow && dataShow.display; 14857 if ( restoreDisplay == null ) { 14858 restoreDisplay = dataPriv.get( elem, "display" ); 14859 } 14860 display = jQuery.css( elem, "display" ); 14861 if ( display === "none" ) { 14862 if ( restoreDisplay ) { 14863 display = restoreDisplay; 14864 } else { 14865 14866 // Get nonempty value(s) by temporarily forcing visibility 14867 showHide( [ elem ], true ); 14868 restoreDisplay = elem.style.display || restoreDisplay; 14869 display = jQuery.css( elem, "display" ); 14870 showHide( [ elem ] ); 14871 } 14872 } 14873 14874 // Animate inline elements as inline-block 14875 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 14876 if ( jQuery.css( elem, "float" ) === "none" ) { 14877 14878 // Restore the original display value at the end of pure show/hide animations 14879 if ( !propTween ) { 14880 anim.done( function() { 14881 style.display = restoreDisplay; 14882 } ); 14883 if ( restoreDisplay == null ) { 14884 display = style.display; 14885 restoreDisplay = display === "none" ? "" : display; 14886 } 14887 } 14888 style.display = "inline-block"; 14889 } 14890 } 14891 } 14892 14893 if ( opts.overflow ) { 14894 style.overflow = "hidden"; 14895 anim.always( function() { 14896 style.overflow = opts.overflow[ 0 ]; 14897 style.overflowX = opts.overflow[ 1 ]; 14898 style.overflowY = opts.overflow[ 2 ]; 14899 } ); 14900 } 14901 14902 // Implement show/hide animations 14903 propTween = false; 14904 for ( prop in orig ) { 14905 14906 // General show/hide setup for this element animation 14907 if ( !propTween ) { 14908 if ( dataShow ) { 14909 if ( "hidden" in dataShow ) { 14910 hidden = dataShow.hidden; 14911 } 14912 } else { 14913 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 14914 } 14915 14916 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 14917 if ( toggle ) { 14918 dataShow.hidden = !hidden; 14919 } 14920 14921 // Show elements before animating them 14922 if ( hidden ) { 14923 showHide( [ elem ], true ); 14924 } 14925 14926 /* eslint-disable no-loop-func */ 14927 14928 anim.done( function() { 14929 14930 /* eslint-enable no-loop-func */ 14931 14932 // The final step of a "hide" animation is actually hiding the element 14933 if ( !hidden ) { 14934 showHide( [ elem ] ); 14935 } 14936 dataPriv.remove( elem, "fxshow" ); 14937 for ( prop in orig ) { 14938 jQuery.style( elem, prop, orig[ prop ] ); 14939 } 14940 } ); 14941 } 14942 14943 // Per-property setup 14944 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 14945 if ( !( prop in dataShow ) ) { 14946 dataShow[ prop ] = propTween.start; 14947 if ( hidden ) { 14948 propTween.end = propTween.start; 14949 propTween.start = 0; 14950 } 14951 } 14952 } 14953} 14954 14955function propFilter( props, specialEasing ) { 14956 var index, name, easing, value, hooks; 14957 14958 // camelCase, specialEasing and expand cssHook pass 14959 for ( index in props ) { 14960 name = camelCase( index ); 14961 easing = specialEasing[ name ]; 14962 value = props[ index ]; 14963 if ( Array.isArray( value ) ) { 14964 easing = value[ 1 ]; 14965 value = props[ index ] = value[ 0 ]; 14966 } 14967 14968 if ( index !== name ) { 14969 props[ name ] = value; 14970 delete props[ index ]; 14971 } 14972 14973 hooks = jQuery.cssHooks[ name ]; 14974 if ( hooks && "expand" in hooks ) { 14975 value = hooks.expand( value ); 14976 delete props[ name ]; 14977 14978 // Not quite $.extend, this won't overwrite existing keys. 14979 // Reusing 'index' because we have the correct "name" 14980 for ( index in value ) { 14981 if ( !( index in props ) ) { 14982 props[ index ] = value[ index ]; 14983 specialEasing[ index ] = easing; 14984 } 14985 } 14986 } else { 14987 specialEasing[ name ] = easing; 14988 } 14989 } 14990} 14991 14992function Animation( elem, properties, options ) { 14993 var result, 14994 stopped, 14995 index = 0, 14996 length = Animation.prefilters.length, 14997 deferred = jQuery.Deferred().always( function() { 14998 14999 // Don't match elem in the :animated selector 15000 delete tick.elem; 15001 } ), 15002 tick = function() { 15003 if ( stopped ) { 15004 return false; 15005 } 15006 var currentTime = fxNow || createFxNow(), 15007 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 15008 15009 // Support: Android 2.3 only 15010 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 15011 temp = remaining / animation.duration || 0, 15012 percent = 1 - temp, 15013 index = 0, 15014 length = animation.tweens.length; 15015 15016 for ( ; index < length; index++ ) { 15017 animation.tweens[ index ].run( percent ); 15018 } 15019 15020 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 15021 15022 // If there's more to do, yield 15023 if ( percent < 1 && length ) { 15024 return remaining; 15025 } 15026 15027 // If this was an empty animation, synthesize a final progress notification 15028 if ( !length ) { 15029 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 15030 } 15031 15032 // Resolve the animation and report its conclusion 15033 deferred.resolveWith( elem, [ animation ] ); 15034 return false; 15035 }, 15036 animation = deferred.promise( { 15037 elem: elem, 15038 props: jQuery.extend( {}, properties ), 15039 opts: jQuery.extend( true, { 15040 specialEasing: {}, 15041 easing: jQuery.easing._default 15042 }, options ), 15043 originalProperties: properties, 15044 originalOptions: options, 15045 startTime: fxNow || createFxNow(), 15046 duration: options.duration, 15047 tweens: [], 15048 createTween: function( prop, end ) { 15049 var tween = jQuery.Tween( elem, animation.opts, prop, end, 15050 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 15051 animation.tweens.push( tween ); 15052 return tween; 15053 }, 15054 stop: function( gotoEnd ) { 15055 var index = 0, 15056 15057 // If we are going to the end, we want to run all the tweens 15058 // otherwise we skip this part 15059 length = gotoEnd ? animation.tweens.length : 0; 15060 if ( stopped ) { 15061 return this; 15062 } 15063 stopped = true; 15064 for ( ; index < length; index++ ) { 15065 animation.tweens[ index ].run( 1 ); 15066 } 15067 15068 // Resolve when we played the last frame; otherwise, reject 15069 if ( gotoEnd ) { 15070 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 15071 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 15072 } else { 15073 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 15074 } 15075 return this; 15076 } 15077 } ), 15078 props = animation.props; 15079 15080 propFilter( props, animation.opts.specialEasing ); 15081 15082 for ( ; index < length; index++ ) { 15083 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 15084 if ( result ) { 15085 if ( isFunction( result.stop ) ) { 15086 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 15087 result.stop.bind( result ); 15088 } 15089 return result; 15090 } 15091 } 15092 15093 jQuery.map( props, createTween, animation ); 15094 15095 if ( isFunction( animation.opts.start ) ) { 15096 animation.opts.start.call( elem, animation ); 15097 } 15098 15099 // Attach callbacks from options 15100 animation 15101 .progress( animation.opts.progress ) 15102 .done( animation.opts.done, animation.opts.complete ) 15103 .fail( animation.opts.fail ) 15104 .always( animation.opts.always ); 15105 15106 jQuery.fx.timer( 15107 jQuery.extend( tick, { 15108 elem: elem, 15109 anim: animation, 15110 queue: animation.opts.queue 15111 } ) 15112 ); 15113 15114 return animation; 15115} 15116 15117jQuery.Animation = jQuery.extend( Animation, { 15118 15119 tweeners: { 15120 "*": [ function( prop, value ) { 15121 var tween = this.createTween( prop, value ); 15122 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 15123 return tween; 15124 } ] 15125 }, 15126 15127 tweener: function( props, callback ) { 15128 if ( isFunction( props ) ) { 15129 callback = props; 15130 props = [ "*" ]; 15131 } else { 15132 props = props.match( rnothtmlwhite ); 15133 } 15134 15135 var prop, 15136 index = 0, 15137 length = props.length; 15138 15139 for ( ; index < length; index++ ) { 15140 prop = props[ index ]; 15141 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 15142 Animation.tweeners[ prop ].unshift( callback ); 15143 } 15144 }, 15145 15146 prefilters: [ defaultPrefilter ], 15147 15148 prefilter: function( callback, prepend ) { 15149 if ( prepend ) { 15150 Animation.prefilters.unshift( callback ); 15151 } else { 15152 Animation.prefilters.push( callback ); 15153 } 15154 } 15155} ); 15156 15157jQuery.speed = function( speed, easing, fn ) { 15158 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 15159 complete: fn || !fn && easing || 15160 isFunction( speed ) && speed, 15161 duration: speed, 15162 easing: fn && easing || easing && !isFunction( easing ) && easing 15163 }; 15164 15165 // Go to the end state if fx are off 15166 if ( jQuery.fx.off ) { 15167 opt.duration = 0; 15168 15169 } else { 15170 if ( typeof opt.duration !== "number" ) { 15171 if ( opt.duration in jQuery.fx.speeds ) { 15172 opt.duration = jQuery.fx.speeds[ opt.duration ]; 15173 15174 } else { 15175 opt.duration = jQuery.fx.speeds._default; 15176 } 15177 } 15178 } 15179 15180 // Normalize opt.queue - true/undefined/null -> "fx" 15181 if ( opt.queue == null || opt.queue === true ) { 15182 opt.queue = "fx"; 15183 } 15184 15185 // Queueing 15186 opt.old = opt.complete; 15187 15188 opt.complete = function() { 15189 if ( isFunction( opt.old ) ) { 15190 opt.old.call( this ); 15191 } 15192 15193 if ( opt.queue ) { 15194 jQuery.dequeue( this, opt.queue ); 15195 } 15196 }; 15197 15198 return opt; 15199}; 15200 15201jQuery.fn.extend( { 15202 fadeTo: function( speed, to, easing, callback ) { 15203 15204 // Show any hidden elements after setting opacity to 0 15205 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 15206 15207 // Animate to the value specified 15208 .end().animate( { opacity: to }, speed, easing, callback ); 15209 }, 15210 animate: function( prop, speed, easing, callback ) { 15211 var empty = jQuery.isEmptyObject( prop ), 15212 optall = jQuery.speed( speed, easing, callback ), 15213 doAnimation = function() { 15214 15215 // Operate on a copy of prop so per-property easing won't be lost 15216 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 15217 15218 // Empty animations, or finishing resolves immediately 15219 if ( empty || dataPriv.get( this, "finish" ) ) { 15220 anim.stop( true ); 15221 } 15222 }; 15223 15224 doAnimation.finish = doAnimation; 15225 15226 return empty || optall.queue === false ? 15227 this.each( doAnimation ) : 15228 this.queue( optall.queue, doAnimation ); 15229 }, 15230 stop: function( type, clearQueue, gotoEnd ) { 15231 var stopQueue = function( hooks ) { 15232 var stop = hooks.stop; 15233 delete hooks.stop; 15234 stop( gotoEnd ); 15235 }; 15236 15237 if ( typeof type !== "string" ) { 15238 gotoEnd = clearQueue; 15239 clearQueue = type; 15240 type = undefined; 15241 } 15242 if ( clearQueue ) { 15243 this.queue( type || "fx", [] ); 15244 } 15245 15246 return this.each( function() { 15247 var dequeue = true, 15248 index = type != null && type + "queueHooks", 15249 timers = jQuery.timers, 15250 data = dataPriv.get( this ); 15251 15252 if ( index ) { 15253 if ( data[ index ] && data[ index ].stop ) { 15254 stopQueue( data[ index ] ); 15255 } 15256 } else { 15257 for ( index in data ) { 15258 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 15259 stopQueue( data[ index ] ); 15260 } 15261 } 15262 } 15263 15264 for ( index = timers.length; index--; ) { 15265 if ( timers[ index ].elem === this && 15266 ( type == null || timers[ index ].queue === type ) ) { 15267 15268 timers[ index ].anim.stop( gotoEnd ); 15269 dequeue = false; 15270 timers.splice( index, 1 ); 15271 } 15272 } 15273 15274 // Start the next in the queue if the last step wasn't forced. 15275 // Timers currently will call their complete callbacks, which 15276 // will dequeue but only if they were gotoEnd. 15277 if ( dequeue || !gotoEnd ) { 15278 jQuery.dequeue( this, type ); 15279 } 15280 } ); 15281 }, 15282 finish: function( type ) { 15283 if ( type !== false ) { 15284 type = type || "fx"; 15285 } 15286 return this.each( function() { 15287 var index, 15288 data = dataPriv.get( this ), 15289 queue = data[ type + "queue" ], 15290 hooks = data[ type + "queueHooks" ], 15291 timers = jQuery.timers, 15292 length = queue ? queue.length : 0; 15293 15294 // Enable finishing flag on private data 15295 data.finish = true; 15296 15297 // Empty the queue first 15298 jQuery.queue( this, type, [] ); 15299 15300 if ( hooks && hooks.stop ) { 15301 hooks.stop.call( this, true ); 15302 } 15303 15304 // Look for any active animations, and finish them 15305 for ( index = timers.length; index--; ) { 15306 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 15307 timers[ index ].anim.stop( true ); 15308 timers.splice( index, 1 ); 15309 } 15310 } 15311 15312 // Look for any animations in the old queue and finish them 15313 for ( index = 0; index < length; index++ ) { 15314 if ( queue[ index ] && queue[ index ].finish ) { 15315 queue[ index ].finish.call( this ); 15316 } 15317 } 15318 15319 // Turn off finishing flag 15320 delete data.finish; 15321 } ); 15322 } 15323} ); 15324 15325jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 15326 var cssFn = jQuery.fn[ name ]; 15327 jQuery.fn[ name ] = function( speed, easing, callback ) { 15328 return speed == null || typeof speed === "boolean" ? 15329 cssFn.apply( this, arguments ) : 15330 this.animate( genFx( name, true ), speed, easing, callback ); 15331 }; 15332} ); 15333 15334// Generate shortcuts for custom animations 15335jQuery.each( { 15336 slideDown: genFx( "show" ), 15337 slideUp: genFx( "hide" ), 15338 slideToggle: genFx( "toggle" ), 15339 fadeIn: { opacity: "show" }, 15340 fadeOut: { opacity: "hide" }, 15341 fadeToggle: { opacity: "toggle" } 15342}, function( name, props ) { 15343 jQuery.fn[ name ] = function( speed, easing, callback ) { 15344 return this.animate( props, speed, easing, callback ); 15345 }; 15346} ); 15347 15348jQuery.timers = []; 15349jQuery.fx.tick = function() { 15350 var timer, 15351 i = 0, 15352 timers = jQuery.timers; 15353 15354 fxNow = Date.now(); 15355 15356 for ( ; i < timers.length; i++ ) { 15357 timer = timers[ i ]; 15358 15359 // Run the timer and safely remove it when done (allowing for external removal) 15360 if ( !timer() && timers[ i ] === timer ) { 15361 timers.splice( i--, 1 ); 15362 } 15363 } 15364 15365 if ( !timers.length ) { 15366 jQuery.fx.stop(); 15367 } 15368 fxNow = undefined; 15369}; 15370 15371jQuery.fx.timer = function( timer ) { 15372 jQuery.timers.push( timer ); 15373 jQuery.fx.start(); 15374}; 15375 15376jQuery.fx.interval = 13; 15377jQuery.fx.start = function() { 15378 if ( inProgress ) { 15379 return; 15380 } 15381 15382 inProgress = true; 15383 schedule(); 15384}; 15385 15386jQuery.fx.stop = function() { 15387 inProgress = null; 15388}; 15389 15390jQuery.fx.speeds = { 15391 slow: 600, 15392 fast: 200, 15393 15394 // Default speed 15395 _default: 400 15396}; 15397 15398 15399// Based off of the plugin by Clint Helfers, with permission. 15400jQuery.fn.delay = function( time, type ) { 15401 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 15402 type = type || "fx"; 15403 15404 return this.queue( type, function( next, hooks ) { 15405 var timeout = window.setTimeout( next, time ); 15406 hooks.stop = function() { 15407 window.clearTimeout( timeout ); 15408 }; 15409 } ); 15410}; 15411 15412 15413( function() { 15414 var input = document.createElement( "input" ), 15415 select = document.createElement( "select" ), 15416 opt = select.appendChild( document.createElement( "option" ) ); 15417 15418 input.type = "checkbox"; 15419 15420 // Support: Android <=4.3 only 15421 // Default value for a checkbox should be "on" 15422 support.checkOn = input.value !== ""; 15423 15424 // Support: IE <=11 only 15425 // Must access selectedIndex to make default options select 15426 support.optSelected = opt.selected; 15427 15428 // Support: IE <=11 only 15429 // An input loses its value after becoming a radio 15430 input = document.createElement( "input" ); 15431 input.value = "t"; 15432 input.type = "radio"; 15433 support.radioValue = input.value === "t"; 15434} )(); 15435 15436 15437var boolHook, 15438 attrHandle = jQuery.expr.attrHandle; 15439 15440jQuery.fn.extend( { 15441 attr: function( name, value ) { 15442 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 15443 }, 15444 15445 removeAttr: function( name ) { 15446 return this.each( function() { 15447 jQuery.removeAttr( this, name ); 15448 } ); 15449 } 15450} ); 15451 15452jQuery.extend( { 15453 attr: function( elem, name, value ) { 15454 var ret, hooks, 15455 nType = elem.nodeType; 15456 15457 // Don't get/set attributes on text, comment and attribute nodes 15458 if ( nType === 3 || nType === 8 || nType === 2 ) { 15459 return; 15460 } 15461 15462 // Fallback to prop when attributes are not supported 15463 if ( typeof elem.getAttribute === "undefined" ) { 15464 return jQuery.prop( elem, name, value ); 15465 } 15466 15467 // Attribute hooks are determined by the lowercase version 15468 // Grab necessary hook if one is defined 15469 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15470 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 15471 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 15472 } 15473 15474 if ( value !== undefined ) { 15475 if ( value === null ) { 15476 jQuery.removeAttr( elem, name ); 15477 return; 15478 } 15479 15480 if ( hooks && "set" in hooks && 15481 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15482 return ret; 15483 } 15484 15485 elem.setAttribute( name, value + "" ); 15486 return value; 15487 } 15488 15489 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15490 return ret; 15491 } 15492 15493 ret = jQuery.find.attr( elem, name ); 15494 15495 // Non-existent attributes return null, we normalize to undefined 15496 return ret == null ? undefined : ret; 15497 }, 15498 15499 attrHooks: { 15500 type: { 15501 set: function( elem, value ) { 15502 if ( !support.radioValue && value === "radio" && 15503 nodeName( elem, "input" ) ) { 15504 var val = elem.value; 15505 elem.setAttribute( "type", value ); 15506 if ( val ) { 15507 elem.value = val; 15508 } 15509 return value; 15510 } 15511 } 15512 } 15513 }, 15514 15515 removeAttr: function( elem, value ) { 15516 var name, 15517 i = 0, 15518 15519 // Attribute names can contain non-HTML whitespace characters 15520 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 15521 attrNames = value && value.match( rnothtmlwhite ); 15522 15523 if ( attrNames && elem.nodeType === 1 ) { 15524 while ( ( name = attrNames[ i++ ] ) ) { 15525 elem.removeAttribute( name ); 15526 } 15527 } 15528 } 15529} ); 15530 15531// Hooks for boolean attributes 15532boolHook = { 15533 set: function( elem, value, name ) { 15534 if ( value === false ) { 15535 15536 // Remove boolean attributes when set to false 15537 jQuery.removeAttr( elem, name ); 15538 } else { 15539 elem.setAttribute( name, name ); 15540 } 15541 return name; 15542 } 15543}; 15544 15545jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 15546 var getter = attrHandle[ name ] || jQuery.find.attr; 15547 15548 attrHandle[ name ] = function( elem, name, isXML ) { 15549 var ret, handle, 15550 lowercaseName = name.toLowerCase(); 15551 15552 if ( !isXML ) { 15553 15554 // Avoid an infinite loop by temporarily removing this function from the getter 15555 handle = attrHandle[ lowercaseName ]; 15556 attrHandle[ lowercaseName ] = ret; 15557 ret = getter( elem, name, isXML ) != null ? 15558 lowercaseName : 15559 null; 15560 attrHandle[ lowercaseName ] = handle; 15561 } 15562 return ret; 15563 }; 15564} ); 15565 15566 15567 15568 15569var rfocusable = /^(?:input|select|textarea|button)$/i, 15570 rclickable = /^(?:a|area)$/i; 15571 15572jQuery.fn.extend( { 15573 prop: function( name, value ) { 15574 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 15575 }, 15576 15577 removeProp: function( name ) { 15578 return this.each( function() { 15579 delete this[ jQuery.propFix[ name ] || name ]; 15580 } ); 15581 } 15582} ); 15583 15584jQuery.extend( { 15585 prop: function( elem, name, value ) { 15586 var ret, hooks, 15587 nType = elem.nodeType; 15588 15589 // Don't get/set properties on text, comment and attribute nodes 15590 if ( nType === 3 || nType === 8 || nType === 2 ) { 15591 return; 15592 } 15593 15594 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15595 15596 // Fix name and attach hooks 15597 name = jQuery.propFix[ name ] || name; 15598 hooks = jQuery.propHooks[ name ]; 15599 } 15600 15601 if ( value !== undefined ) { 15602 if ( hooks && "set" in hooks && 15603 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15604 return ret; 15605 } 15606 15607 return ( elem[ name ] = value ); 15608 } 15609 15610 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15611 return ret; 15612 } 15613 15614 return elem[ name ]; 15615 }, 15616 15617 propHooks: { 15618 tabIndex: { 15619 get: function( elem ) { 15620 15621 // Support: IE <=9 - 11 only 15622 // elem.tabIndex doesn't always return the 15623 // correct value when it hasn't been explicitly set 15624 // Use proper attribute retrieval (trac-12072) 15625 var tabindex = jQuery.find.attr( elem, "tabindex" ); 15626 15627 if ( tabindex ) { 15628 return parseInt( tabindex, 10 ); 15629 } 15630 15631 if ( 15632 rfocusable.test( elem.nodeName ) || 15633 rclickable.test( elem.nodeName ) && 15634 elem.href 15635 ) { 15636 return 0; 15637 } 15638 15639 return -1; 15640 } 15641 } 15642 }, 15643 15644 propFix: { 15645 "for": "htmlFor", 15646 "class": "className" 15647 } 15648} ); 15649 15650// Support: IE <=11 only 15651// Accessing the selectedIndex property 15652// forces the browser to respect setting selected 15653// on the option 15654// The getter ensures a default option is selected 15655// when in an optgroup 15656// eslint rule "no-unused-expressions" is disabled for this code 15657// since it considers such accessions noop 15658if ( !support.optSelected ) { 15659 jQuery.propHooks.selected = { 15660 get: function( elem ) { 15661 15662 /* eslint no-unused-expressions: "off" */ 15663 15664 var parent = elem.parentNode; 15665 if ( parent && parent.parentNode ) { 15666 parent.parentNode.selectedIndex; 15667 } 15668 return null; 15669 }, 15670 set: function( elem ) { 15671 15672 /* eslint no-unused-expressions: "off" */ 15673 15674 var parent = elem.parentNode; 15675 if ( parent ) { 15676 parent.selectedIndex; 15677 15678 if ( parent.parentNode ) { 15679 parent.parentNode.selectedIndex; 15680 } 15681 } 15682 } 15683 }; 15684} 15685 15686jQuery.each( [ 15687 "tabIndex", 15688 "readOnly", 15689 "maxLength", 15690 "cellSpacing", 15691 "cellPadding", 15692 "rowSpan", 15693 "colSpan", 15694 "useMap", 15695 "frameBorder", 15696 "contentEditable" 15697], function() { 15698 jQuery.propFix[ this.toLowerCase() ] = this; 15699} ); 15700 15701 15702 15703 15704 // Strip and collapse whitespace according to HTML spec 15705 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 15706 function stripAndCollapse( value ) { 15707 var tokens = value.match( rnothtmlwhite ) || []; 15708 return tokens.join( " " ); 15709 } 15710 15711 15712function getClass( elem ) { 15713 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 15714} 15715 15716function classesToArray( value ) { 15717 if ( Array.isArray( value ) ) { 15718 return value; 15719 } 15720 if ( typeof value === "string" ) { 15721 return value.match( rnothtmlwhite ) || []; 15722 } 15723 return []; 15724} 15725 15726jQuery.fn.extend( { 15727 addClass: function( value ) { 15728 var classNames, cur, curValue, className, i, finalValue; 15729 15730 if ( isFunction( value ) ) { 15731 return this.each( function( j ) { 15732 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 15733 } ); 15734 } 15735 15736 classNames = classesToArray( value ); 15737 15738 if ( classNames.length ) { 15739 return this.each( function() { 15740 curValue = getClass( this ); 15741 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 15742 15743 if ( cur ) { 15744 for ( i = 0; i < classNames.length; i++ ) { 15745 className = classNames[ i ]; 15746 if ( cur.indexOf( " " + className + " " ) < 0 ) { 15747 cur += className + " "; 15748 } 15749 } 15750 15751 // Only assign if different to avoid unneeded rendering. 15752 finalValue = stripAndCollapse( cur ); 15753 if ( curValue !== finalValue ) { 15754 this.setAttribute( "class", finalValue ); 15755 } 15756 } 15757 } ); 15758 } 15759 15760 return this; 15761 }, 15762 15763 removeClass: function( value ) { 15764 var classNames, cur, curValue, className, i, finalValue; 15765 15766 if ( isFunction( value ) ) { 15767 return this.each( function( j ) { 15768 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 15769 } ); 15770 } 15771 15772 if ( !arguments.length ) { 15773 return this.attr( "class", "" ); 15774 } 15775 15776 classNames = classesToArray( value ); 15777 15778 if ( classNames.length ) { 15779 return this.each( function() { 15780 curValue = getClass( this ); 15781 15782 // This expression is here for better compressibility (see addClass) 15783 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 15784 15785 if ( cur ) { 15786 for ( i = 0; i < classNames.length; i++ ) { 15787 className = classNames[ i ]; 15788 15789 // Remove *all* instances 15790 while ( cur.indexOf( " " + className + " " ) > -1 ) { 15791 cur = cur.replace( " " + className + " ", " " ); 15792 } 15793 } 15794 15795 // Only assign if different to avoid unneeded rendering. 15796 finalValue = stripAndCollapse( cur ); 15797 if ( curValue !== finalValue ) { 15798 this.setAttribute( "class", finalValue ); 15799 } 15800 } 15801 } ); 15802 } 15803 15804 return this; 15805 }, 15806 15807 toggleClass: function( value, stateVal ) { 15808 var classNames, className, i, self, 15809 type = typeof value, 15810 isValidValue = type === "string" || Array.isArray( value ); 15811 15812 if ( isFunction( value ) ) { 15813 return this.each( function( i ) { 15814 jQuery( this ).toggleClass( 15815 value.call( this, i, getClass( this ), stateVal ), 15816 stateVal 15817 ); 15818 } ); 15819 } 15820 15821 if ( typeof stateVal === "boolean" && isValidValue ) { 15822 return stateVal ? this.addClass( value ) : this.removeClass( value ); 15823 } 15824 15825 classNames = classesToArray( value ); 15826 15827 return this.each( function() { 15828 if ( isValidValue ) { 15829 15830 // Toggle individual class names 15831 self = jQuery( this ); 15832 15833 for ( i = 0; i < classNames.length; i++ ) { 15834 className = classNames[ i ]; 15835 15836 // Check each className given, space separated list 15837 if ( self.hasClass( className ) ) { 15838 self.removeClass( className ); 15839 } else { 15840 self.addClass( className ); 15841 } 15842 } 15843 15844 // Toggle whole class name 15845 } else if ( value === undefined || type === "boolean" ) { 15846 className = getClass( this ); 15847 if ( className ) { 15848 15849 // Store className if set 15850 dataPriv.set( this, "__className__", className ); 15851 } 15852 15853 // If the element has a class name or if we're passed `false`, 15854 // then remove the whole classname (if there was one, the above saved it). 15855 // Otherwise bring back whatever was previously saved (if anything), 15856 // falling back to the empty string if nothing was stored. 15857 if ( this.setAttribute ) { 15858 this.setAttribute( "class", 15859 className || value === false ? 15860 "" : 15861 dataPriv.get( this, "__className__" ) || "" 15862 ); 15863 } 15864 } 15865 } ); 15866 }, 15867 15868 hasClass: function( selector ) { 15869 var className, elem, 15870 i = 0; 15871 15872 className = " " + selector + " "; 15873 while ( ( elem = this[ i++ ] ) ) { 15874 if ( elem.nodeType === 1 && 15875 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 15876 return true; 15877 } 15878 } 15879 15880 return false; 15881 } 15882} ); 15883 15884 15885 15886 15887var rreturn = /\r/g; 15888 15889jQuery.fn.extend( { 15890 val: function( value ) { 15891 var hooks, ret, valueIsFunction, 15892 elem = this[ 0 ]; 15893 15894 if ( !arguments.length ) { 15895 if ( elem ) { 15896 hooks = jQuery.valHooks[ elem.type ] || 15897 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 15898 15899 if ( hooks && 15900 "get" in hooks && 15901 ( ret = hooks.get( elem, "value" ) ) !== undefined 15902 ) { 15903 return ret; 15904 } 15905 15906 ret = elem.value; 15907 15908 // Handle most common string cases 15909 if ( typeof ret === "string" ) { 15910 return ret.replace( rreturn, "" ); 15911 } 15912 15913 // Handle cases where value is null/undef or number 15914 return ret == null ? "" : ret; 15915 } 15916 15917 return; 15918 } 15919 15920 valueIsFunction = isFunction( value ); 15921 15922 return this.each( function( i ) { 15923 var val; 15924 15925 if ( this.nodeType !== 1 ) { 15926 return; 15927 } 15928 15929 if ( valueIsFunction ) { 15930 val = value.call( this, i, jQuery( this ).val() ); 15931 } else { 15932 val = value; 15933 } 15934 15935 // Treat null/undefined as ""; convert numbers to string 15936 if ( val == null ) { 15937 val = ""; 15938 15939 } else if ( typeof val === "number" ) { 15940 val += ""; 15941 15942 } else if ( Array.isArray( val ) ) { 15943 val = jQuery.map( val, function( value ) { 15944 return value == null ? "" : value + ""; 15945 } ); 15946 } 15947 15948 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 15949 15950 // If set returns undefined, fall back to normal setting 15951 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 15952 this.value = val; 15953 } 15954 } ); 15955 } 15956} ); 15957 15958jQuery.extend( { 15959 valHooks: { 15960 option: { 15961 get: function( elem ) { 15962 15963 var val = jQuery.find.attr( elem, "value" ); 15964 return val != null ? 15965 val : 15966 15967 // Support: IE <=10 - 11 only 15968 // option.text throws exceptions (trac-14686, trac-14858) 15969 // Strip and collapse whitespace 15970 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 15971 stripAndCollapse( jQuery.text( elem ) ); 15972 } 15973 }, 15974 select: { 15975 get: function( elem ) { 15976 var value, option, i, 15977 options = elem.options, 15978 index = elem.selectedIndex, 15979 one = elem.type === "select-one", 15980 values = one ? null : [], 15981 max = one ? index + 1 : options.length; 15982 15983 if ( index < 0 ) { 15984 i = max; 15985 15986 } else { 15987 i = one ? index : 0; 15988 } 15989 15990 // Loop through all the selected options 15991 for ( ; i < max; i++ ) { 15992 option = options[ i ]; 15993 15994 // Support: IE <=9 only 15995 // IE8-9 doesn't update selected after form reset (trac-2551) 15996 if ( ( option.selected || i === index ) && 15997 15998 // Don't return options that are disabled or in a disabled optgroup 15999 !option.disabled && 16000 ( !option.parentNode.disabled || 16001 !nodeName( option.parentNode, "optgroup" ) ) ) { 16002 16003 // Get the specific value for the option 16004 value = jQuery( option ).val(); 16005 16006 // We don't need an array for one selects 16007 if ( one ) { 16008 return value; 16009 } 16010 16011 // Multi-Selects return an array 16012 values.push( value ); 16013 } 16014 } 16015 16016 return values; 16017 }, 16018 16019 set: function( elem, value ) { 16020 var optionSet, option, 16021 options = elem.options, 16022 values = jQuery.makeArray( value ), 16023 i = options.length; 16024 16025 while ( i-- ) { 16026 option = options[ i ]; 16027 16028 /* eslint-disable no-cond-assign */ 16029 16030 if ( option.selected = 16031 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 16032 ) { 16033 optionSet = true; 16034 } 16035 16036 /* eslint-enable no-cond-assign */ 16037 } 16038 16039 // Force browsers to behave consistently when non-matching value is set 16040 if ( !optionSet ) { 16041 elem.selectedIndex = -1; 16042 } 16043 return values; 16044 } 16045 } 16046 } 16047} ); 16048 16049// Radios and checkboxes getter/setter 16050jQuery.each( [ "radio", "checkbox" ], function() { 16051 jQuery.valHooks[ this ] = { 16052 set: function( elem, value ) { 16053 if ( Array.isArray( value ) ) { 16054 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 16055 } 16056 } 16057 }; 16058 if ( !support.checkOn ) { 16059 jQuery.valHooks[ this ].get = function( elem ) { 16060 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 16061 }; 16062 } 16063} ); 16064 16065 16066 16067 16068// Return jQuery for attributes-only inclusion 16069var location = window.location; 16070 16071var nonce = { guid: Date.now() }; 16072 16073var rquery = ( /\?/ ); 16074 16075 16076 16077// Cross-browser xml parsing 16078jQuery.parseXML = function( data ) { 16079 var xml, parserErrorElem; 16080 if ( !data || typeof data !== "string" ) { 16081 return null; 16082 } 16083 16084 // Support: IE 9 - 11 only 16085 // IE throws on parseFromString with invalid input. 16086 try { 16087 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 16088 } catch ( e ) {} 16089 16090 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 16091 if ( !xml || parserErrorElem ) { 16092 jQuery.error( "Invalid XML: " + ( 16093 parserErrorElem ? 16094 jQuery.map( parserErrorElem.childNodes, function( el ) { 16095 return el.textContent; 16096 } ).join( "\n" ) : 16097 data 16098 ) ); 16099 } 16100 return xml; 16101}; 16102 16103 16104var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 16105 stopPropagationCallback = function( e ) { 16106 e.stopPropagation(); 16107 }; 16108 16109jQuery.extend( jQuery.event, { 16110 16111 trigger: function( event, data, elem, onlyHandlers ) { 16112 16113 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 16114 eventPath = [ elem || document ], 16115 type = hasOwn.call( event, "type" ) ? event.type : event, 16116 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 16117 16118 cur = lastElement = tmp = elem = elem || document; 16119 16120 // Don't do events on text and comment nodes 16121 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 16122 return; 16123 } 16124 16125 // focus/blur morphs to focusin/out; ensure we're not firing them right now 16126 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 16127 return; 16128 } 16129 16130 if ( type.indexOf( "." ) > -1 ) { 16131 16132 // Namespaced trigger; create a regexp to match event type in handle() 16133 namespaces = type.split( "." ); 16134 type = namespaces.shift(); 16135 namespaces.sort(); 16136 } 16137 ontype = type.indexOf( ":" ) < 0 && "on" + type; 16138 16139 // Caller can pass in a jQuery.Event object, Object, or just an event type string 16140 event = event[ jQuery.expando ] ? 16141 event : 16142 new jQuery.Event( type, typeof event === "object" && event ); 16143 16144 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 16145 event.isTrigger = onlyHandlers ? 2 : 3; 16146 event.namespace = namespaces.join( "." ); 16147 event.rnamespace = event.namespace ? 16148 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 16149 null; 16150 16151 // Clean up the event in case it is being reused 16152 event.result = undefined; 16153 if ( !event.target ) { 16154 event.target = elem; 16155 } 16156 16157 // Clone any incoming data and prepend the event, creating the handler arg list 16158 data = data == null ? 16159 [ event ] : 16160 jQuery.makeArray( data, [ event ] ); 16161 16162 // Allow special events to draw outside the lines 16163 special = jQuery.event.special[ type ] || {}; 16164 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 16165 return; 16166 } 16167 16168 // Determine event propagation path in advance, per W3C events spec (trac-9951) 16169 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 16170 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 16171 16172 bubbleType = special.delegateType || type; 16173 if ( !rfocusMorph.test( bubbleType + type ) ) { 16174 cur = cur.parentNode; 16175 } 16176 for ( ; cur; cur = cur.parentNode ) { 16177 eventPath.push( cur ); 16178 tmp = cur; 16179 } 16180 16181 // Only add window if we got to document (e.g., not plain obj or detached DOM) 16182 if ( tmp === ( elem.ownerDocument || document ) ) { 16183 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 16184 } 16185 } 16186 16187 // Fire handlers on the event path 16188 i = 0; 16189 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 16190 lastElement = cur; 16191 event.type = i > 1 ? 16192 bubbleType : 16193 special.bindType || type; 16194 16195 // jQuery handler 16196 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 16197 dataPriv.get( cur, "handle" ); 16198 if ( handle ) { 16199 handle.apply( cur, data ); 16200 } 16201 16202 // Native handler 16203 handle = ontype && cur[ ontype ]; 16204 if ( handle && handle.apply && acceptData( cur ) ) { 16205 event.result = handle.apply( cur, data ); 16206 if ( event.result === false ) { 16207 event.preventDefault(); 16208 } 16209 } 16210 } 16211 event.type = type; 16212 16213 // If nobody prevented the default action, do it now 16214 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 16215 16216 if ( ( !special._default || 16217 special._default.apply( eventPath.pop(), data ) === false ) && 16218 acceptData( elem ) ) { 16219 16220 // Call a native DOM method on the target with the same name as the event. 16221 // Don't do default actions on window, that's where global variables be (trac-6170) 16222 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 16223 16224 // Don't re-trigger an onFOO event when we call its FOO() method 16225 tmp = elem[ ontype ]; 16226 16227 if ( tmp ) { 16228 elem[ ontype ] = null; 16229 } 16230 16231 // Prevent re-triggering of the same event, since we already bubbled it above 16232 jQuery.event.triggered = type; 16233 16234 if ( event.isPropagationStopped() ) { 16235 lastElement.addEventListener( type, stopPropagationCallback ); 16236 } 16237 16238 elem[ type ](); 16239 16240 if ( event.isPropagationStopped() ) { 16241 lastElement.removeEventListener( type, stopPropagationCallback ); 16242 } 16243 16244 jQuery.event.triggered = undefined; 16245 16246 if ( tmp ) { 16247 elem[ ontype ] = tmp; 16248 } 16249 } 16250 } 16251 } 16252 16253 return event.result; 16254 }, 16255 16256 // Piggyback on a donor event to simulate a different one 16257 // Used only for `focus(in | out)` events 16258 simulate: function( type, elem, event ) { 16259 var e = jQuery.extend( 16260 new jQuery.Event(), 16261 event, 16262 { 16263 type: type, 16264 isSimulated: true 16265 } 16266 ); 16267 16268 jQuery.event.trigger( e, null, elem ); 16269 } 16270 16271} ); 16272 16273jQuery.fn.extend( { 16274 16275 trigger: function( type, data ) { 16276 return this.each( function() { 16277 jQuery.event.trigger( type, data, this ); 16278 } ); 16279 }, 16280 triggerHandler: function( type, data ) { 16281 var elem = this[ 0 ]; 16282 if ( elem ) { 16283 return jQuery.event.trigger( type, data, elem, true ); 16284 } 16285 } 16286} ); 16287 16288 16289var 16290 rbracket = /\[\]$/, 16291 rCRLF = /\r?\n/g, 16292 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 16293 rsubmittable = /^(?:input|select|textarea|keygen)/i; 16294 16295function buildParams( prefix, obj, traditional, add ) { 16296 var name; 16297 16298 if ( Array.isArray( obj ) ) { 16299 16300 // Serialize array item. 16301 jQuery.each( obj, function( i, v ) { 16302 if ( traditional || rbracket.test( prefix ) ) { 16303 16304 // Treat each array item as a scalar. 16305 add( prefix, v ); 16306 16307 } else { 16308 16309 // Item is non-scalar (array or object), encode its numeric index. 16310 buildParams( 16311 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 16312 v, 16313 traditional, 16314 add 16315 ); 16316 } 16317 } ); 16318 16319 } else if ( !traditional && toType( obj ) === "object" ) { 16320 16321 // Serialize object item. 16322 for ( name in obj ) { 16323 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 16324 } 16325 16326 } else { 16327 16328 // Serialize scalar item. 16329 add( prefix, obj ); 16330 } 16331} 16332 16333// Serialize an array of form elements or a set of 16334// key/values into a query string 16335jQuery.param = function( a, traditional ) { 16336 var prefix, 16337 s = [], 16338 add = function( key, valueOrFunction ) { 16339 16340 // If value is a function, invoke it and use its return value 16341 var value = isFunction( valueOrFunction ) ? 16342 valueOrFunction() : 16343 valueOrFunction; 16344 16345 s[ s.length ] = encodeURIComponent( key ) + "=" + 16346 encodeURIComponent( value == null ? "" : value ); 16347 }; 16348 16349 if ( a == null ) { 16350 return ""; 16351 } 16352 16353 // If an array was passed in, assume that it is an array of form elements. 16354 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 16355 16356 // Serialize the form elements 16357 jQuery.each( a, function() { 16358 add( this.name, this.value ); 16359 } ); 16360 16361 } else { 16362 16363 // If traditional, encode the "old" way (the way 1.3.2 or older 16364 // did it), otherwise encode params recursively. 16365 for ( prefix in a ) { 16366 buildParams( prefix, a[ prefix ], traditional, add ); 16367 } 16368 } 16369 16370 // Return the resulting serialization 16371 return s.join( "&" ); 16372}; 16373 16374jQuery.fn.extend( { 16375 serialize: function() { 16376 return jQuery.param( this.serializeArray() ); 16377 }, 16378 serializeArray: function() { 16379 return this.map( function() { 16380 16381 // Can add propHook for "elements" to filter or add form elements 16382 var elements = jQuery.prop( this, "elements" ); 16383 return elements ? jQuery.makeArray( elements ) : this; 16384 } ).filter( function() { 16385 var type = this.type; 16386 16387 // Use .is( ":disabled" ) so that fieldset[disabled] works 16388 return this.name && !jQuery( this ).is( ":disabled" ) && 16389 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 16390 ( this.checked || !rcheckableType.test( type ) ); 16391 } ).map( function( _i, elem ) { 16392 var val = jQuery( this ).val(); 16393 16394 if ( val == null ) { 16395 return null; 16396 } 16397 16398 if ( Array.isArray( val ) ) { 16399 return jQuery.map( val, function( val ) { 16400 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16401 } ); 16402 } 16403 16404 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16405 } ).get(); 16406 } 16407} ); 16408 16409 16410var 16411 r20 = /%20/g, 16412 rhash = /#.*$/, 16413 rantiCache = /([?&])_=[^&]*/, 16414 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 16415 16416 // trac-7653, trac-8125, trac-8152: local protocol detection 16417 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 16418 rnoContent = /^(?:GET|HEAD)$/, 16419 rprotocol = /^\/\//, 16420 16421 /* Prefilters 16422 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 16423 * 2) These are called: 16424 * - BEFORE asking for a transport 16425 * - AFTER param serialization (s.data is a string if s.processData is true) 16426 * 3) key is the dataType 16427 * 4) the catchall symbol "*" can be used 16428 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 16429 */ 16430 prefilters = {}, 16431 16432 /* Transports bindings 16433 * 1) key is the dataType 16434 * 2) the catchall symbol "*" can be used 16435 * 3) selection will start with transport dataType and THEN go to "*" if needed 16436 */ 16437 transports = {}, 16438 16439 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 16440 allTypes = "*/".concat( "*" ), 16441 16442 // Anchor tag for parsing the document origin 16443 originAnchor = document.createElement( "a" ); 16444 16445originAnchor.href = location.href; 16446 16447// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 16448function addToPrefiltersOrTransports( structure ) { 16449 16450 // dataTypeExpression is optional and defaults to "*" 16451 return function( dataTypeExpression, func ) { 16452 16453 if ( typeof dataTypeExpression !== "string" ) { 16454 func = dataTypeExpression; 16455 dataTypeExpression = "*"; 16456 } 16457 16458 var dataType, 16459 i = 0, 16460 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 16461 16462 if ( isFunction( func ) ) { 16463 16464 // For each dataType in the dataTypeExpression 16465 while ( ( dataType = dataTypes[ i++ ] ) ) { 16466 16467 // Prepend if requested 16468 if ( dataType[ 0 ] === "+" ) { 16469 dataType = dataType.slice( 1 ) || "*"; 16470 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 16471 16472 // Otherwise append 16473 } else { 16474 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 16475 } 16476 } 16477 } 16478 }; 16479} 16480 16481// Base inspection function for prefilters and transports 16482function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 16483 16484 var inspected = {}, 16485 seekingTransport = ( structure === transports ); 16486 16487 function inspect( dataType ) { 16488 var selected; 16489 inspected[ dataType ] = true; 16490 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 16491 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 16492 if ( typeof dataTypeOrTransport === "string" && 16493 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 16494 16495 options.dataTypes.unshift( dataTypeOrTransport ); 16496 inspect( dataTypeOrTransport ); 16497 return false; 16498 } else if ( seekingTransport ) { 16499 return !( selected = dataTypeOrTransport ); 16500 } 16501 } ); 16502 return selected; 16503 } 16504 16505 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 16506} 16507 16508// A special extend for ajax options 16509// that takes "flat" options (not to be deep extended) 16510// Fixes trac-9887 16511function ajaxExtend( target, src ) { 16512 var key, deep, 16513 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 16514 16515 for ( key in src ) { 16516 if ( src[ key ] !== undefined ) { 16517 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 16518 } 16519 } 16520 if ( deep ) { 16521 jQuery.extend( true, target, deep ); 16522 } 16523 16524 return target; 16525} 16526 16527/* Handles responses to an ajax request: 16528 * - finds the right dataType (mediates between content-type and expected dataType) 16529 * - returns the corresponding response 16530 */ 16531function ajaxHandleResponses( s, jqXHR, responses ) { 16532 16533 var ct, type, finalDataType, firstDataType, 16534 contents = s.contents, 16535 dataTypes = s.dataTypes; 16536 16537 // Remove auto dataType and get content-type in the process 16538 while ( dataTypes[ 0 ] === "*" ) { 16539 dataTypes.shift(); 16540 if ( ct === undefined ) { 16541 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 16542 } 16543 } 16544 16545 // Check if we're dealing with a known content-type 16546 if ( ct ) { 16547 for ( type in contents ) { 16548 if ( contents[ type ] && contents[ type ].test( ct ) ) { 16549 dataTypes.unshift( type ); 16550 break; 16551 } 16552 } 16553 } 16554 16555 // Check to see if we have a response for the expected dataType 16556 if ( dataTypes[ 0 ] in responses ) { 16557 finalDataType = dataTypes[ 0 ]; 16558 } else { 16559 16560 // Try convertible dataTypes 16561 for ( type in responses ) { 16562 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 16563 finalDataType = type; 16564 break; 16565 } 16566 if ( !firstDataType ) { 16567 firstDataType = type; 16568 } 16569 } 16570 16571 // Or just use first one 16572 finalDataType = finalDataType || firstDataType; 16573 } 16574 16575 // If we found a dataType 16576 // We add the dataType to the list if needed 16577 // and return the corresponding response 16578 if ( finalDataType ) { 16579 if ( finalDataType !== dataTypes[ 0 ] ) { 16580 dataTypes.unshift( finalDataType ); 16581 } 16582 return responses[ finalDataType ]; 16583 } 16584} 16585 16586/* Chain conversions given the request and the original response 16587 * Also sets the responseXXX fields on the jqXHR instance 16588 */ 16589function ajaxConvert( s, response, jqXHR, isSuccess ) { 16590 var conv2, current, conv, tmp, prev, 16591 converters = {}, 16592 16593 // Work with a copy of dataTypes in case we need to modify it for conversion 16594 dataTypes = s.dataTypes.slice(); 16595 16596 // Create converters map with lowercased keys 16597 if ( dataTypes[ 1 ] ) { 16598 for ( conv in s.converters ) { 16599 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 16600 } 16601 } 16602 16603 current = dataTypes.shift(); 16604 16605 // Convert to each sequential dataType 16606 while ( current ) { 16607 16608 if ( s.responseFields[ current ] ) { 16609 jqXHR[ s.responseFields[ current ] ] = response; 16610 } 16611 16612 // Apply the dataFilter if provided 16613 if ( !prev && isSuccess && s.dataFilter ) { 16614 response = s.dataFilter( response, s.dataType ); 16615 } 16616 16617 prev = current; 16618 current = dataTypes.shift(); 16619 16620 if ( current ) { 16621 16622 // There's only work to do if current dataType is non-auto 16623 if ( current === "*" ) { 16624 16625 current = prev; 16626 16627 // Convert response if prev dataType is non-auto and differs from current 16628 } else if ( prev !== "*" && prev !== current ) { 16629 16630 // Seek a direct converter 16631 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 16632 16633 // If none found, seek a pair 16634 if ( !conv ) { 16635 for ( conv2 in converters ) { 16636 16637 // If conv2 outputs current 16638 tmp = conv2.split( " " ); 16639 if ( tmp[ 1 ] === current ) { 16640 16641 // If prev can be converted to accepted input 16642 conv = converters[ prev + " " + tmp[ 0 ] ] || 16643 converters[ "* " + tmp[ 0 ] ]; 16644 if ( conv ) { 16645 16646 // Condense equivalence converters 16647 if ( conv === true ) { 16648 conv = converters[ conv2 ]; 16649 16650 // Otherwise, insert the intermediate dataType 16651 } else if ( converters[ conv2 ] !== true ) { 16652 current = tmp[ 0 ]; 16653 dataTypes.unshift( tmp[ 1 ] ); 16654 } 16655 break; 16656 } 16657 } 16658 } 16659 } 16660 16661 // Apply converter (if not an equivalence) 16662 if ( conv !== true ) { 16663 16664 // Unless errors are allowed to bubble, catch and return them 16665 if ( conv && s.throws ) { 16666 response = conv( response ); 16667 } else { 16668 try { 16669 response = conv( response ); 16670 } catch ( e ) { 16671 return { 16672 state: "parsererror", 16673 error: conv ? e : "No conversion from " + prev + " to " + current 16674 }; 16675 } 16676 } 16677 } 16678 } 16679 } 16680 } 16681 16682 return { state: "success", data: response }; 16683} 16684 16685jQuery.extend( { 16686 16687 // Counter for holding the number of active queries 16688 active: 0, 16689 16690 // Last-Modified header cache for next request 16691 lastModified: {}, 16692 etag: {}, 16693 16694 ajaxSettings: { 16695 url: location.href, 16696 type: "GET", 16697 isLocal: rlocalProtocol.test( location.protocol ), 16698 global: true, 16699 processData: true, 16700 async: true, 16701 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 16702 16703 /* 16704 timeout: 0, 16705 data: null, 16706 dataType: null, 16707 username: null, 16708 password: null, 16709 cache: null, 16710 throws: false, 16711 traditional: false, 16712 headers: {}, 16713 */ 16714 16715 accepts: { 16716 "*": allTypes, 16717 text: "text/plain", 16718 html: "text/html", 16719 xml: "application/xml, text/xml", 16720 json: "application/json, text/javascript" 16721 }, 16722 16723 contents: { 16724 xml: /\bxml\b/, 16725 html: /\bhtml/, 16726 json: /\bjson\b/ 16727 }, 16728 16729 responseFields: { 16730 xml: "responseXML", 16731 text: "responseText", 16732 json: "responseJSON" 16733 }, 16734 16735 // Data converters 16736 // Keys separate source (or catchall "*") and destination types with a single space 16737 converters: { 16738 16739 // Convert anything to text 16740 "* text": String, 16741 16742 // Text to html (true = no transformation) 16743 "text html": true, 16744 16745 // Evaluate text as a json expression 16746 "text json": JSON.parse, 16747 16748 // Parse text as xml 16749 "text xml": jQuery.parseXML 16750 }, 16751 16752 // For options that shouldn't be deep extended: 16753 // you can add your own custom options here if 16754 // and when you create one that shouldn't be 16755 // deep extended (see ajaxExtend) 16756 flatOptions: { 16757 url: true, 16758 context: true 16759 } 16760 }, 16761 16762 // Creates a full fledged settings object into target 16763 // with both ajaxSettings and settings fields. 16764 // If target is omitted, writes into ajaxSettings. 16765 ajaxSetup: function( target, settings ) { 16766 return settings ? 16767 16768 // Building a settings object 16769 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 16770 16771 // Extending ajaxSettings 16772 ajaxExtend( jQuery.ajaxSettings, target ); 16773 }, 16774 16775 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 16776 ajaxTransport: addToPrefiltersOrTransports( transports ), 16777 16778 // Main method 16779 ajax: function( url, options ) { 16780 16781 // If url is an object, simulate pre-1.5 signature 16782 if ( typeof url === "object" ) { 16783 options = url; 16784 url = undefined; 16785 } 16786 16787 // Force options to be an object 16788 options = options || {}; 16789 16790 var transport, 16791 16792 // URL without anti-cache param 16793 cacheURL, 16794 16795 // Response headers 16796 responseHeadersString, 16797 responseHeaders, 16798 16799 // timeout handle 16800 timeoutTimer, 16801 16802 // Url cleanup var 16803 urlAnchor, 16804 16805 // Request state (becomes false upon send and true upon completion) 16806 completed, 16807 16808 // To know if global events are to be dispatched 16809 fireGlobals, 16810 16811 // Loop variable 16812 i, 16813 16814 // uncached part of the url 16815 uncached, 16816 16817 // Create the final options object 16818 s = jQuery.ajaxSetup( {}, options ), 16819 16820 // Callbacks context 16821 callbackContext = s.context || s, 16822 16823 // Context for global events is callbackContext if it is a DOM node or jQuery collection 16824 globalEventContext = s.context && 16825 ( callbackContext.nodeType || callbackContext.jquery ) ? 16826 jQuery( callbackContext ) : 16827 jQuery.event, 16828 16829 // Deferreds 16830 deferred = jQuery.Deferred(), 16831 completeDeferred = jQuery.Callbacks( "once memory" ), 16832 16833 // Status-dependent callbacks 16834 statusCode = s.statusCode || {}, 16835 16836 // Headers (they are sent all at once) 16837 requestHeaders = {}, 16838 requestHeadersNames = {}, 16839 16840 // Default abort message 16841 strAbort = "canceled", 16842 16843 // Fake xhr 16844 jqXHR = { 16845 readyState: 0, 16846 16847 // Builds headers hashtable if needed 16848 getResponseHeader: function( key ) { 16849 var match; 16850 if ( completed ) { 16851 if ( !responseHeaders ) { 16852 responseHeaders = {}; 16853 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 16854 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 16855 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 16856 .concat( match[ 2 ] ); 16857 } 16858 } 16859 match = responseHeaders[ key.toLowerCase() + " " ]; 16860 } 16861 return match == null ? null : match.join( ", " ); 16862 }, 16863 16864 // Raw string 16865 getAllResponseHeaders: function() { 16866 return completed ? responseHeadersString : null; 16867 }, 16868 16869 // Caches the header 16870 setRequestHeader: function( name, value ) { 16871 if ( completed == null ) { 16872 name = requestHeadersNames[ name.toLowerCase() ] = 16873 requestHeadersNames[ name.toLowerCase() ] || name; 16874 requestHeaders[ name ] = value; 16875 } 16876 return this; 16877 }, 16878 16879 // Overrides response content-type header 16880 overrideMimeType: function( type ) { 16881 if ( completed == null ) { 16882 s.mimeType = type; 16883 } 16884 return this; 16885 }, 16886 16887 // Status-dependent callbacks 16888 statusCode: function( map ) { 16889 var code; 16890 if ( map ) { 16891 if ( completed ) { 16892 16893 // Execute the appropriate callbacks 16894 jqXHR.always( map[ jqXHR.status ] ); 16895 } else { 16896 16897 // Lazy-add the new callbacks in a way that preserves old ones 16898 for ( code in map ) { 16899 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 16900 } 16901 } 16902 } 16903 return this; 16904 }, 16905 16906 // Cancel the request 16907 abort: function( statusText ) { 16908 var finalText = statusText || strAbort; 16909 if ( transport ) { 16910 transport.abort( finalText ); 16911 } 16912 done( 0, finalText ); 16913 return this; 16914 } 16915 }; 16916 16917 // Attach deferreds 16918 deferred.promise( jqXHR ); 16919 16920 // Add protocol if not provided (prefilters might expect it) 16921 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 16922 // We also use the url parameter if available 16923 s.url = ( ( url || s.url || location.href ) + "" ) 16924 .replace( rprotocol, location.protocol + "//" ); 16925 16926 // Alias method option to type as per ticket trac-12004 16927 s.type = options.method || options.type || s.method || s.type; 16928 16929 // Extract dataTypes list 16930 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 16931 16932 // A cross-domain request is in order when the origin doesn't match the current origin. 16933 if ( s.crossDomain == null ) { 16934 urlAnchor = document.createElement( "a" ); 16935 16936 // Support: IE <=8 - 11, Edge 12 - 15 16937 // IE throws exception on accessing the href property if url is malformed, 16938 // e.g. http://example.com:80x/ 16939 try { 16940 urlAnchor.href = s.url; 16941 16942 // Support: IE <=8 - 11 only 16943 // Anchor's host property isn't correctly set when s.url is relative 16944 urlAnchor.href = urlAnchor.href; 16945 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 16946 urlAnchor.protocol + "//" + urlAnchor.host; 16947 } catch ( e ) { 16948 16949 // If there is an error parsing the URL, assume it is crossDomain, 16950 // it can be rejected by the transport if it is invalid 16951 s.crossDomain = true; 16952 } 16953 } 16954 16955 // Convert data if not already a string 16956 if ( s.data && s.processData && typeof s.data !== "string" ) { 16957 s.data = jQuery.param( s.data, s.traditional ); 16958 } 16959 16960 // Apply prefilters 16961 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 16962 16963 // If request was aborted inside a prefilter, stop there 16964 if ( completed ) { 16965 return jqXHR; 16966 } 16967 16968 // We can fire global events as of now if asked to 16969 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 16970 fireGlobals = jQuery.event && s.global; 16971 16972 // Watch for a new set of requests 16973 if ( fireGlobals && jQuery.active++ === 0 ) { 16974 jQuery.event.trigger( "ajaxStart" ); 16975 } 16976 16977 // Uppercase the type 16978 s.type = s.type.toUpperCase(); 16979 16980 // Determine if request has content 16981 s.hasContent = !rnoContent.test( s.type ); 16982 16983 // Save the URL in case we're toying with the If-Modified-Since 16984 // and/or If-None-Match header later on 16985 // Remove hash to simplify url manipulation 16986 cacheURL = s.url.replace( rhash, "" ); 16987 16988 // More options handling for requests with no content 16989 if ( !s.hasContent ) { 16990 16991 // Remember the hash so we can put it back 16992 uncached = s.url.slice( cacheURL.length ); 16993 16994 // If data is available and should be processed, append data to url 16995 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 16996 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 16997 16998 // trac-9682: remove data so that it's not used in an eventual retry 16999 delete s.data; 17000 } 17001 17002 // Add or update anti-cache param if needed 17003 if ( s.cache === false ) { 17004 cacheURL = cacheURL.replace( rantiCache, "$1" ); 17005 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 17006 uncached; 17007 } 17008 17009 // Put hash and anti-cache on the URL that will be requested (gh-1732) 17010 s.url = cacheURL + uncached; 17011 17012 // Change '%20' to '+' if this is encoded form body content (gh-2658) 17013 } else if ( s.data && s.processData && 17014 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 17015 s.data = s.data.replace( r20, "+" ); 17016 } 17017 17018 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 17019 if ( s.ifModified ) { 17020 if ( jQuery.lastModified[ cacheURL ] ) { 17021 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 17022 } 17023 if ( jQuery.etag[ cacheURL ] ) { 17024 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 17025 } 17026 } 17027 17028 // Set the correct header, if data is being sent 17029 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 17030 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 17031 } 17032 17033 // Set the Accepts header for the server, depending on the dataType 17034 jqXHR.setRequestHeader( 17035 "Accept", 17036 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 17037 s.accepts[ s.dataTypes[ 0 ] ] + 17038 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 17039 s.accepts[ "*" ] 17040 ); 17041 17042 // Check for headers option 17043 for ( i in s.headers ) { 17044 jqXHR.setRequestHeader( i, s.headers[ i ] ); 17045 } 17046 17047 // Allow custom headers/mimetypes and early abort 17048 if ( s.beforeSend && 17049 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 17050 17051 // Abort if not done already and return 17052 return jqXHR.abort(); 17053 } 17054 17055 // Aborting is no longer a cancellation 17056 strAbort = "abort"; 17057 17058 // Install callbacks on deferreds 17059 completeDeferred.add( s.complete ); 17060 jqXHR.done( s.success ); 17061 jqXHR.fail( s.error ); 17062 17063 // Get transport 17064 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 17065 17066 // If no transport, we auto-abort 17067 if ( !transport ) { 17068 done( -1, "No Transport" ); 17069 } else { 17070 jqXHR.readyState = 1; 17071 17072 // Send global event 17073 if ( fireGlobals ) { 17074 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 17075 } 17076 17077 // If request was aborted inside ajaxSend, stop there 17078 if ( completed ) { 17079 return jqXHR; 17080 } 17081 17082 // Timeout 17083 if ( s.async && s.timeout > 0 ) { 17084 timeoutTimer = window.setTimeout( function() { 17085 jqXHR.abort( "timeout" ); 17086 }, s.timeout ); 17087 } 17088 17089 try { 17090 completed = false; 17091 transport.send( requestHeaders, done ); 17092 } catch ( e ) { 17093 17094 // Rethrow post-completion exceptions 17095 if ( completed ) { 17096 throw e; 17097 } 17098 17099 // Propagate others as results 17100 done( -1, e ); 17101 } 17102 } 17103 17104 // Callback for when everything is done 17105 function done( status, nativeStatusText, responses, headers ) { 17106 var isSuccess, success, error, response, modified, 17107 statusText = nativeStatusText; 17108 17109 // Ignore repeat invocations 17110 if ( completed ) { 17111 return; 17112 } 17113 17114 completed = true; 17115 17116 // Clear timeout if it exists 17117 if ( timeoutTimer ) { 17118 window.clearTimeout( timeoutTimer ); 17119 } 17120 17121 // Dereference transport for early garbage collection 17122 // (no matter how long the jqXHR object will be used) 17123 transport = undefined; 17124 17125 // Cache response headers 17126 responseHeadersString = headers || ""; 17127 17128 // Set readyState 17129 jqXHR.readyState = status > 0 ? 4 : 0; 17130 17131 // Determine if successful 17132 isSuccess = status >= 200 && status < 300 || status === 304; 17133 17134 // Get response data 17135 if ( responses ) { 17136 response = ajaxHandleResponses( s, jqXHR, responses ); 17137 } 17138 17139 // Use a noop converter for missing script but not if jsonp 17140 if ( !isSuccess && 17141 jQuery.inArray( "script", s.dataTypes ) > -1 && 17142 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 17143 s.converters[ "text script" ] = function() {}; 17144 } 17145 17146 // Convert no matter what (that way responseXXX fields are always set) 17147 response = ajaxConvert( s, response, jqXHR, isSuccess ); 17148 17149 // If successful, handle type chaining 17150 if ( isSuccess ) { 17151 17152 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 17153 if ( s.ifModified ) { 17154 modified = jqXHR.getResponseHeader( "Last-Modified" ); 17155 if ( modified ) { 17156 jQuery.lastModified[ cacheURL ] = modified; 17157 } 17158 modified = jqXHR.getResponseHeader( "etag" ); 17159 if ( modified ) { 17160 jQuery.etag[ cacheURL ] = modified; 17161 } 17162 } 17163 17164 // if no content 17165 if ( status === 204 || s.type === "HEAD" ) { 17166 statusText = "nocontent"; 17167 17168 // if not modified 17169 } else if ( status === 304 ) { 17170 statusText = "notmodified"; 17171 17172 // If we have data, let's convert it 17173 } else { 17174 statusText = response.state; 17175 success = response.data; 17176 error = response.error; 17177 isSuccess = !error; 17178 } 17179 } else { 17180 17181 // Extract error from statusText and normalize for non-aborts 17182 error = statusText; 17183 if ( status || !statusText ) { 17184 statusText = "error"; 17185 if ( status < 0 ) { 17186 status = 0; 17187 } 17188 } 17189 } 17190 17191 // Set data for the fake xhr object 17192 jqXHR.status = status; 17193 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 17194 17195 // Success/Error 17196 if ( isSuccess ) { 17197 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 17198 } else { 17199 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 17200 } 17201 17202 // Status-dependent callbacks 17203 jqXHR.statusCode( statusCode ); 17204 statusCode = undefined; 17205 17206 if ( fireGlobals ) { 17207 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 17208 [ jqXHR, s, isSuccess ? success : error ] ); 17209 } 17210 17211 // Complete 17212 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 17213 17214 if ( fireGlobals ) { 17215 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 17216 17217 // Handle the global AJAX counter 17218 if ( !( --jQuery.active ) ) { 17219 jQuery.event.trigger( "ajaxStop" ); 17220 } 17221 } 17222 } 17223 17224 return jqXHR; 17225 }, 17226 17227 getJSON: function( url, data, callback ) { 17228 return jQuery.get( url, data, callback, "json" ); 17229 }, 17230 17231 getScript: function( url, callback ) { 17232 return jQuery.get( url, undefined, callback, "script" ); 17233 } 17234} ); 17235 17236jQuery.each( [ "get", "post" ], function( _i, method ) { 17237 jQuery[ method ] = function( url, data, callback, type ) { 17238 17239 // Shift arguments if data argument was omitted 17240 if ( isFunction( data ) ) { 17241 type = type || callback; 17242 callback = data; 17243 data = undefined; 17244 } 17245 17246 // The url can be an options object (which then must have .url) 17247 return jQuery.ajax( jQuery.extend( { 17248 url: url, 17249 type: method, 17250 dataType: type, 17251 data: data, 17252 success: callback 17253 }, jQuery.isPlainObject( url ) && url ) ); 17254 }; 17255} ); 17256 17257jQuery.ajaxPrefilter( function( s ) { 17258 var i; 17259 for ( i in s.headers ) { 17260 if ( i.toLowerCase() === "content-type" ) { 17261 s.contentType = s.headers[ i ] || ""; 17262 } 17263 } 17264} ); 17265 17266 17267jQuery._evalUrl = function( url, options, doc ) { 17268 return jQuery.ajax( { 17269 url: url, 17270 17271 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 17272 type: "GET", 17273 dataType: "script", 17274 cache: true, 17275 async: false, 17276 global: false, 17277 17278 // Only evaluate the response if it is successful (gh-4126) 17279 // dataFilter is not invoked for failure responses, so using it instead 17280 // of the default converter is kludgy but it works. 17281 converters: { 17282 "text script": function() {} 17283 }, 17284 dataFilter: function( response ) { 17285 jQuery.globalEval( response, options, doc ); 17286 } 17287 } ); 17288}; 17289 17290 17291jQuery.fn.extend( { 17292 wrapAll: function( html ) { 17293 var wrap; 17294 17295 if ( this[ 0 ] ) { 17296 if ( isFunction( html ) ) { 17297 html = html.call( this[ 0 ] ); 17298 } 17299 17300 // The elements to wrap the target around 17301 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 17302 17303 if ( this[ 0 ].parentNode ) { 17304 wrap.insertBefore( this[ 0 ] ); 17305 } 17306 17307 wrap.map( function() { 17308 var elem = this; 17309 17310 while ( elem.firstElementChild ) { 17311 elem = elem.firstElementChild; 17312 } 17313 17314 return elem; 17315 } ).append( this ); 17316 } 17317 17318 return this; 17319 }, 17320 17321 wrapInner: function( html ) { 17322 if ( isFunction( html ) ) { 17323 return this.each( function( i ) { 17324 jQuery( this ).wrapInner( html.call( this, i ) ); 17325 } ); 17326 } 17327 17328 return this.each( function() { 17329 var self = jQuery( this ), 17330 contents = self.contents(); 17331 17332 if ( contents.length ) { 17333 contents.wrapAll( html ); 17334 17335 } else { 17336 self.append( html ); 17337 } 17338 } ); 17339 }, 17340 17341 wrap: function( html ) { 17342 var htmlIsFunction = isFunction( html ); 17343 17344 return this.each( function( i ) { 17345 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 17346 } ); 17347 }, 17348 17349 unwrap: function( selector ) { 17350 this.parent( selector ).not( "body" ).each( function() { 17351 jQuery( this ).replaceWith( this.childNodes ); 17352 } ); 17353 return this; 17354 } 17355} ); 17356 17357 17358jQuery.expr.pseudos.hidden = function( elem ) { 17359 return !jQuery.expr.pseudos.visible( elem ); 17360}; 17361jQuery.expr.pseudos.visible = function( elem ) { 17362 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 17363}; 17364 17365 17366 17367 17368jQuery.ajaxSettings.xhr = function() { 17369 try { 17370 return new window.XMLHttpRequest(); 17371 } catch ( e ) {} 17372}; 17373 17374var xhrSuccessStatus = { 17375 17376 // File protocol always yields status code 0, assume 200 17377 0: 200, 17378 17379 // Support: IE <=9 only 17380 // trac-1450: sometimes IE returns 1223 when it should be 204 17381 1223: 204 17382 }, 17383 xhrSupported = jQuery.ajaxSettings.xhr(); 17384 17385support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 17386support.ajax = xhrSupported = !!xhrSupported; 17387 17388jQuery.ajaxTransport( function( options ) { 17389 var callback, errorCallback; 17390 17391 // Cross domain only allowed if supported through XMLHttpRequest 17392 if ( support.cors || xhrSupported && !options.crossDomain ) { 17393 return { 17394 send: function( headers, complete ) { 17395 var i, 17396 xhr = options.xhr(); 17397 17398 xhr.open( 17399 options.type, 17400 options.url, 17401 options.async, 17402 options.username, 17403 options.password 17404 ); 17405 17406 // Apply custom fields if provided 17407 if ( options.xhrFields ) { 17408 for ( i in options.xhrFields ) { 17409 xhr[ i ] = options.xhrFields[ i ]; 17410 } 17411 } 17412 17413 // Override mime type if needed 17414 if ( options.mimeType && xhr.overrideMimeType ) { 17415 xhr.overrideMimeType( options.mimeType ); 17416 } 17417 17418 // X-Requested-With header 17419 // For cross-domain requests, seeing as conditions for a preflight are 17420 // akin to a jigsaw puzzle, we simply never set it to be sure. 17421 // (it can always be set on a per-request basis or even using ajaxSetup) 17422 // For same-domain requests, won't change header if already provided. 17423 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 17424 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 17425 } 17426 17427 // Set headers 17428 for ( i in headers ) { 17429 xhr.setRequestHeader( i, headers[ i ] ); 17430 } 17431 17432 // Callback 17433 callback = function( type ) { 17434 return function() { 17435 if ( callback ) { 17436 callback = errorCallback = xhr.onload = 17437 xhr.onerror = xhr.onabort = xhr.ontimeout = 17438 xhr.onreadystatechange = null; 17439 17440 if ( type === "abort" ) { 17441 xhr.abort(); 17442 } else if ( type === "error" ) { 17443 17444 // Support: IE <=9 only 17445 // On a manual native abort, IE9 throws 17446 // errors on any property access that is not readyState 17447 if ( typeof xhr.status !== "number" ) { 17448 complete( 0, "error" ); 17449 } else { 17450 complete( 17451 17452 // File: protocol always yields status 0; see trac-8605, trac-14207 17453 xhr.status, 17454 xhr.statusText 17455 ); 17456 } 17457 } else { 17458 complete( 17459 xhrSuccessStatus[ xhr.status ] || xhr.status, 17460 xhr.statusText, 17461 17462 // Support: IE <=9 only 17463 // IE9 has no XHR2 but throws on binary (trac-11426) 17464 // For XHR2 non-text, let the caller handle it (gh-2498) 17465 ( xhr.responseType || "text" ) !== "text" || 17466 typeof xhr.responseText !== "string" ? 17467 { binary: xhr.response } : 17468 { text: xhr.responseText }, 17469 xhr.getAllResponseHeaders() 17470 ); 17471 } 17472 } 17473 }; 17474 }; 17475 17476 // Listen to events 17477 xhr.onload = callback(); 17478 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 17479 17480 // Support: IE 9 only 17481 // Use onreadystatechange to replace onabort 17482 // to handle uncaught aborts 17483 if ( xhr.onabort !== undefined ) { 17484 xhr.onabort = errorCallback; 17485 } else { 17486 xhr.onreadystatechange = function() { 17487 17488 // Check readyState before timeout as it changes 17489 if ( xhr.readyState === 4 ) { 17490 17491 // Allow onerror to be called first, 17492 // but that will not handle a native abort 17493 // Also, save errorCallback to a variable 17494 // as xhr.onerror cannot be accessed 17495 window.setTimeout( function() { 17496 if ( callback ) { 17497 errorCallback(); 17498 } 17499 } ); 17500 } 17501 }; 17502 } 17503 17504 // Create the abort callback 17505 callback = callback( "abort" ); 17506 17507 try { 17508 17509 // Do send the request (this may raise an exception) 17510 xhr.send( options.hasContent && options.data || null ); 17511 } catch ( e ) { 17512 17513 // trac-14683: Only rethrow if this hasn't been notified as an error yet 17514 if ( callback ) { 17515 throw e; 17516 } 17517 } 17518 }, 17519 17520 abort: function() { 17521 if ( callback ) { 17522 callback(); 17523 } 17524 } 17525 }; 17526 } 17527} ); 17528 17529 17530 17531 17532// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 17533jQuery.ajaxPrefilter( function( s ) { 17534 if ( s.crossDomain ) { 17535 s.contents.script = false; 17536 } 17537} ); 17538 17539// Install script dataType 17540jQuery.ajaxSetup( { 17541 accepts: { 17542 script: "text/javascript, application/javascript, " + 17543 "application/ecmascript, application/x-ecmascript" 17544 }, 17545 contents: { 17546 script: /\b(?:java|ecma)script\b/ 17547 }, 17548 converters: { 17549 "text script": function( text ) { 17550 jQuery.globalEval( text ); 17551 return text; 17552 } 17553 } 17554} ); 17555 17556// Handle cache's special case and crossDomain 17557jQuery.ajaxPrefilter( "script", function( s ) { 17558 if ( s.cache === undefined ) { 17559 s.cache = false; 17560 } 17561 if ( s.crossDomain ) { 17562 s.type = "GET"; 17563 } 17564} ); 17565 17566// Bind script tag hack transport 17567jQuery.ajaxTransport( "script", function( s ) { 17568 17569 // This transport only deals with cross domain or forced-by-attrs requests 17570 if ( s.crossDomain || s.scriptAttrs ) { 17571 var script, callback; 17572 return { 17573 send: function( _, complete ) { 17574 script = jQuery( "<script>" ) 17575 .attr( s.scriptAttrs || {} ) 17576 .prop( { charset: s.scriptCharset, src: s.url } ) 17577 .on( "load error", callback = function( evt ) { 17578 script.remove(); 17579 callback = null; 17580 if ( evt ) { 17581 complete( evt.type === "error" ? 404 : 200, evt.type ); 17582 } 17583 } ); 17584 17585 // Use native DOM manipulation to avoid our domManip AJAX trickery 17586 document.head.appendChild( script[ 0 ] ); 17587 }, 17588 abort: function() { 17589 if ( callback ) { 17590 callback(); 17591 } 17592 } 17593 }; 17594 } 17595} ); 17596 17597 17598 17599 17600var oldCallbacks = [], 17601 rjsonp = /(=)\?(?=&|$)|\?\?/; 17602 17603// Default jsonp settings 17604jQuery.ajaxSetup( { 17605 jsonp: "callback", 17606 jsonpCallback: function() { 17607 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 17608 this[ callback ] = true; 17609 return callback; 17610 } 17611} ); 17612 17613// Detect, normalize options and install callbacks for jsonp requests 17614jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 17615 17616 var callbackName, overwritten, responseContainer, 17617 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 17618 "url" : 17619 typeof s.data === "string" && 17620 ( s.contentType || "" ) 17621 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 17622 rjsonp.test( s.data ) && "data" 17623 ); 17624 17625 // Handle iff the expected data type is "jsonp" or we have a parameter to set 17626 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 17627 17628 // Get callback name, remembering preexisting value associated with it 17629 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 17630 s.jsonpCallback() : 17631 s.jsonpCallback; 17632 17633 // Insert callback into url or form data 17634 if ( jsonProp ) { 17635 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 17636 } else if ( s.jsonp !== false ) { 17637 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 17638 } 17639 17640 // Use data converter to retrieve json after script execution 17641 s.converters[ "script json" ] = function() { 17642 if ( !responseContainer ) { 17643 jQuery.error( callbackName + " was not called" ); 17644 } 17645 return responseContainer[ 0 ]; 17646 }; 17647 17648 // Force json dataType 17649 s.dataTypes[ 0 ] = "json"; 17650 17651 // Install callback 17652 overwritten = window[ callbackName ]; 17653 window[ callbackName ] = function() { 17654 responseContainer = arguments; 17655 }; 17656 17657 // Clean-up function (fires after converters) 17658 jqXHR.always( function() { 17659 17660 // If previous value didn't exist - remove it 17661 if ( overwritten === undefined ) { 17662 jQuery( window ).removeProp( callbackName ); 17663 17664 // Otherwise restore preexisting value 17665 } else { 17666 window[ callbackName ] = overwritten; 17667 } 17668 17669 // Save back as free 17670 if ( s[ callbackName ] ) { 17671 17672 // Make sure that re-using the options doesn't screw things around 17673 s.jsonpCallback = originalSettings.jsonpCallback; 17674 17675 // Save the callback name for future use 17676 oldCallbacks.push( callbackName ); 17677 } 17678 17679 // Call if it was a function and we have a response 17680 if ( responseContainer && isFunction( overwritten ) ) { 17681 overwritten( responseContainer[ 0 ] ); 17682 } 17683 17684 responseContainer = overwritten = undefined; 17685 } ); 17686 17687 // Delegate to script 17688 return "script"; 17689 } 17690} ); 17691 17692 17693 17694 17695// Support: Safari 8 only 17696// In Safari 8 documents created via document.implementation.createHTMLDocument 17697// collapse sibling forms: the second one becomes a child of the first one. 17698// Because of that, this security measure has to be disabled in Safari 8. 17699// https://bugs.webkit.org/show_bug.cgi?id=137337 17700support.createHTMLDocument = ( function() { 17701 var body = document.implementation.createHTMLDocument( "" ).body; 17702 body.innerHTML = "<form></form><form></form>"; 17703 return body.childNodes.length === 2; 17704} )(); 17705 17706 17707// Argument "data" should be string of html 17708// context (optional): If specified, the fragment will be created in this context, 17709// defaults to document 17710// keepScripts (optional): If true, will include scripts passed in the html string 17711jQuery.parseHTML = function( data, context, keepScripts ) { 17712 if ( typeof data !== "string" ) { 17713 return []; 17714 } 17715 if ( typeof context === "boolean" ) { 17716 keepScripts = context; 17717 context = false; 17718 } 17719 17720 var base, parsed, scripts; 17721 17722 if ( !context ) { 17723 17724 // Stop scripts or inline event handlers from being executed immediately 17725 // by using document.implementation 17726 if ( support.createHTMLDocument ) { 17727 context = document.implementation.createHTMLDocument( "" ); 17728 17729 // Set the base href for the created document 17730 // so any parsed elements with URLs 17731 // are based on the document's URL (gh-2965) 17732 base = context.createElement( "base" ); 17733 base.href = document.location.href; 17734 context.head.appendChild( base ); 17735 } else { 17736 context = document; 17737 } 17738 } 17739 17740 parsed = rsingleTag.exec( data ); 17741 scripts = !keepScripts && []; 17742 17743 // Single tag 17744 if ( parsed ) { 17745 return [ context.createElement( parsed[ 1 ] ) ]; 17746 } 17747 17748 parsed = buildFragment( [ data ], context, scripts ); 17749 17750 if ( scripts && scripts.length ) { 17751 jQuery( scripts ).remove(); 17752 } 17753 17754 return jQuery.merge( [], parsed.childNodes ); 17755}; 17756 17757 17758/** 17759 * Load a url into a page 17760 */ 17761jQuery.fn.load = function( url, params, callback ) { 17762 var selector, type, response, 17763 self = this, 17764 off = url.indexOf( " " ); 17765 17766 if ( off > -1 ) { 17767 selector = stripAndCollapse( url.slice( off ) ); 17768 url = url.slice( 0, off ); 17769 } 17770 17771 // If it's a function 17772 if ( isFunction( params ) ) { 17773 17774 // We assume that it's the callback 17775 callback = params; 17776 params = undefined; 17777 17778 // Otherwise, build a param string 17779 } else if ( params && typeof params === "object" ) { 17780 type = "POST"; 17781 } 17782 17783 // If we have elements to modify, make the request 17784 if ( self.length > 0 ) { 17785 jQuery.ajax( { 17786 url: url, 17787 17788 // If "type" variable is undefined, then "GET" method will be used. 17789 // Make value of this field explicit since 17790 // user can override it through ajaxSetup method 17791 type: type || "GET", 17792 dataType: "html", 17793 data: params 17794 } ).done( function( responseText ) { 17795 17796 // Save response for use in complete callback 17797 response = arguments; 17798 17799 self.html( selector ? 17800 17801 // If a selector was specified, locate the right elements in a dummy div 17802 // Exclude scripts to avoid IE 'Permission Denied' errors 17803 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 17804 17805 // Otherwise use the full result 17806 responseText ); 17807 17808 // If the request succeeds, this function gets "data", "status", "jqXHR" 17809 // but they are ignored because response was set above. 17810 // If it fails, this function gets "jqXHR", "status", "error" 17811 } ).always( callback && function( jqXHR, status ) { 17812 self.each( function() { 17813 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 17814 } ); 17815 } ); 17816 } 17817 17818 return this; 17819}; 17820 17821 17822 17823 17824jQuery.expr.pseudos.animated = function( elem ) { 17825 return jQuery.grep( jQuery.timers, function( fn ) { 17826 return elem === fn.elem; 17827 } ).length; 17828}; 17829 17830 17831 17832 17833jQuery.offset = { 17834 setOffset: function( elem, options, i ) { 17835 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 17836 position = jQuery.css( elem, "position" ), 17837 curElem = jQuery( elem ), 17838 props = {}; 17839 17840 // Set position first, in-case top/left are set even on static elem 17841 if ( position === "static" ) { 17842 elem.style.position = "relative"; 17843 } 17844 17845 curOffset = curElem.offset(); 17846 curCSSTop = jQuery.css( elem, "top" ); 17847 curCSSLeft = jQuery.css( elem, "left" ); 17848 calculatePosition = ( position === "absolute" || position === "fixed" ) && 17849 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 17850 17851 // Need to be able to calculate position if either 17852 // top or left is auto and position is either absolute or fixed 17853 if ( calculatePosition ) { 17854 curPosition = curElem.position(); 17855 curTop = curPosition.top; 17856 curLeft = curPosition.left; 17857 17858 } else { 17859 curTop = parseFloat( curCSSTop ) || 0; 17860 curLeft = parseFloat( curCSSLeft ) || 0; 17861 } 17862 17863 if ( isFunction( options ) ) { 17864 17865 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 17866 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 17867 } 17868 17869 if ( options.top != null ) { 17870 props.top = ( options.top - curOffset.top ) + curTop; 17871 } 17872 if ( options.left != null ) { 17873 props.left = ( options.left - curOffset.left ) + curLeft; 17874 } 17875 17876 if ( "using" in options ) { 17877 options.using.call( elem, props ); 17878 17879 } else { 17880 curElem.css( props ); 17881 } 17882 } 17883}; 17884 17885jQuery.fn.extend( { 17886 17887 // offset() relates an element's border box to the document origin 17888 offset: function( options ) { 17889 17890 // Preserve chaining for setter 17891 if ( arguments.length ) { 17892 return options === undefined ? 17893 this : 17894 this.each( function( i ) { 17895 jQuery.offset.setOffset( this, options, i ); 17896 } ); 17897 } 17898 17899 var rect, win, 17900 elem = this[ 0 ]; 17901 17902 if ( !elem ) { 17903 return; 17904 } 17905 17906 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 17907 // Support: IE <=11 only 17908 // Running getBoundingClientRect on a 17909 // disconnected node in IE throws an error 17910 if ( !elem.getClientRects().length ) { 17911 return { top: 0, left: 0 }; 17912 } 17913 17914 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 17915 rect = elem.getBoundingClientRect(); 17916 win = elem.ownerDocument.defaultView; 17917 return { 17918 top: rect.top + win.pageYOffset, 17919 left: rect.left + win.pageXOffset 17920 }; 17921 }, 17922 17923 // position() relates an element's margin box to its offset parent's padding box 17924 // This corresponds to the behavior of CSS absolute positioning 17925 position: function() { 17926 if ( !this[ 0 ] ) { 17927 return; 17928 } 17929 17930 var offsetParent, offset, doc, 17931 elem = this[ 0 ], 17932 parentOffset = { top: 0, left: 0 }; 17933 17934 // position:fixed elements are offset from the viewport, which itself always has zero offset 17935 if ( jQuery.css( elem, "position" ) === "fixed" ) { 17936 17937 // Assume position:fixed implies availability of getBoundingClientRect 17938 offset = elem.getBoundingClientRect(); 17939 17940 } else { 17941 offset = this.offset(); 17942 17943 // Account for the *real* offset parent, which can be the document or its root element 17944 // when a statically positioned element is identified 17945 doc = elem.ownerDocument; 17946 offsetParent = elem.offsetParent || doc.documentElement; 17947 while ( offsetParent && 17948 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 17949 jQuery.css( offsetParent, "position" ) === "static" ) { 17950 17951 offsetParent = offsetParent.parentNode; 17952 } 17953 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 17954 17955 // Incorporate borders into its offset, since they are outside its content origin 17956 parentOffset = jQuery( offsetParent ).offset(); 17957 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 17958 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 17959 } 17960 } 17961 17962 // Subtract parent offsets and element margins 17963 return { 17964 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 17965 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 17966 }; 17967 }, 17968 17969 // This method will return documentElement in the following cases: 17970 // 1) For the element inside the iframe without offsetParent, this method will return 17971 // documentElement of the parent window 17972 // 2) For the hidden or detached element 17973 // 3) For body or html element, i.e. in case of the html node - it will return itself 17974 // 17975 // but those exceptions were never presented as a real life use-cases 17976 // and might be considered as more preferable results. 17977 // 17978 // This logic, however, is not guaranteed and can change at any point in the future 17979 offsetParent: function() { 17980 return this.map( function() { 17981 var offsetParent = this.offsetParent; 17982 17983 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 17984 offsetParent = offsetParent.offsetParent; 17985 } 17986 17987 return offsetParent || documentElement; 17988 } ); 17989 } 17990} ); 17991 17992// Create scrollLeft and scrollTop methods 17993jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 17994 var top = "pageYOffset" === prop; 17995 17996 jQuery.fn[ method ] = function( val ) { 17997 return access( this, function( elem, method, val ) { 17998 17999 // Coalesce documents and windows 18000 var win; 18001 if ( isWindow( elem ) ) { 18002 win = elem; 18003 } else if ( elem.nodeType === 9 ) { 18004 win = elem.defaultView; 18005 } 18006 18007 if ( val === undefined ) { 18008 return win ? win[ prop ] : elem[ method ]; 18009 } 18010 18011 if ( win ) { 18012 win.scrollTo( 18013 !top ? val : win.pageXOffset, 18014 top ? val : win.pageYOffset 18015 ); 18016 18017 } else { 18018 elem[ method ] = val; 18019 } 18020 }, method, val, arguments.length ); 18021 }; 18022} ); 18023 18024// Support: Safari <=7 - 9.1, Chrome <=37 - 49 18025// Add the top/left cssHooks using jQuery.fn.position 18026// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 18027// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 18028// getComputedStyle returns percent when specified for top/left/bottom/right; 18029// rather than make the css module depend on the offset module, just check for it here 18030jQuery.each( [ "top", "left" ], function( _i, prop ) { 18031 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 18032 function( elem, computed ) { 18033 if ( computed ) { 18034 computed = curCSS( elem, prop ); 18035 18036 // If curCSS returns percentage, fallback to offset 18037 return rnumnonpx.test( computed ) ? 18038 jQuery( elem ).position()[ prop ] + "px" : 18039 computed; 18040 } 18041 } 18042 ); 18043} ); 18044 18045 18046// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 18047jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 18048 jQuery.each( { 18049 padding: "inner" + name, 18050 content: type, 18051 "": "outer" + name 18052 }, function( defaultExtra, funcName ) { 18053 18054 // Margin is only for outerHeight, outerWidth 18055 jQuery.fn[ funcName ] = function( margin, value ) { 18056 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 18057 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 18058 18059 return access( this, function( elem, type, value ) { 18060 var doc; 18061 18062 if ( isWindow( elem ) ) { 18063 18064 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 18065 return funcName.indexOf( "outer" ) === 0 ? 18066 elem[ "inner" + name ] : 18067 elem.document.documentElement[ "client" + name ]; 18068 } 18069 18070 // Get document width or height 18071 if ( elem.nodeType === 9 ) { 18072 doc = elem.documentElement; 18073 18074 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 18075 // whichever is greatest 18076 return Math.max( 18077 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 18078 elem.body[ "offset" + name ], doc[ "offset" + name ], 18079 doc[ "client" + name ] 18080 ); 18081 } 18082 18083 return value === undefined ? 18084 18085 // Get width or height on the element, requesting but not forcing parseFloat 18086 jQuery.css( elem, type, extra ) : 18087 18088 // Set width or height on the element 18089 jQuery.style( elem, type, value, extra ); 18090 }, type, chainable ? margin : undefined, chainable ); 18091 }; 18092 } ); 18093} ); 18094 18095 18096jQuery.each( [ 18097 "ajaxStart", 18098 "ajaxStop", 18099 "ajaxComplete", 18100 "ajaxError", 18101 "ajaxSuccess", 18102 "ajaxSend" 18103], function( _i, type ) { 18104 jQuery.fn[ type ] = function( fn ) { 18105 return this.on( type, fn ); 18106 }; 18107} ); 18108 18109 18110 18111 18112jQuery.fn.extend( { 18113 18114 bind: function( types, data, fn ) { 18115 return this.on( types, null, data, fn ); 18116 }, 18117 unbind: function( types, fn ) { 18118 return this.off( types, null, fn ); 18119 }, 18120 18121 delegate: function( selector, types, data, fn ) { 18122 return this.on( types, selector, data, fn ); 18123 }, 18124 undelegate: function( selector, types, fn ) { 18125 18126 // ( namespace ) or ( selector, types [, fn] ) 18127 return arguments.length === 1 ? 18128 this.off( selector, "**" ) : 18129 this.off( types, selector || "**", fn ); 18130 }, 18131 18132 hover: function( fnOver, fnOut ) { 18133 return this 18134 .on( "mouseenter", fnOver ) 18135 .on( "mouseleave", fnOut || fnOver ); 18136 } 18137} ); 18138 18139jQuery.each( 18140 ( "blur focus focusin focusout resize scroll click dblclick " + 18141 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 18142 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 18143 function( _i, name ) { 18144 18145 // Handle event binding 18146 jQuery.fn[ name ] = function( data, fn ) { 18147 return arguments.length > 0 ? 18148 this.on( name, null, data, fn ) : 18149 this.trigger( name ); 18150 }; 18151 } 18152); 18153 18154 18155 18156 18157// Support: Android <=4.0 only 18158// Make sure we trim BOM and NBSP 18159// Require that the "whitespace run" starts from a non-whitespace 18160// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 18161var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 18162 18163// Bind a function to a context, optionally partially applying any 18164// arguments. 18165// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 18166// However, it is not slated for removal any time soon 18167jQuery.proxy = function( fn, context ) { 18168 var tmp, args, proxy; 18169 18170 if ( typeof context === "string" ) { 18171 tmp = fn[ context ]; 18172 context = fn; 18173 fn = tmp; 18174 } 18175 18176 // Quick check to determine if target is callable, in the spec 18177 // this throws a TypeError, but we will just return undefined. 18178 if ( !isFunction( fn ) ) { 18179 return undefined; 18180 } 18181 18182 // Simulated bind 18183 args = slice.call( arguments, 2 ); 18184 proxy = function() { 18185 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 18186 }; 18187 18188 // Set the guid of unique handler to the same of original handler, so it can be removed 18189 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 18190 18191 return proxy; 18192}; 18193 18194jQuery.holdReady = function( hold ) { 18195 if ( hold ) { 18196 jQuery.readyWait++; 18197 } else { 18198 jQuery.ready( true ); 18199 } 18200}; 18201jQuery.isArray = Array.isArray; 18202jQuery.parseJSON = JSON.parse; 18203jQuery.nodeName = nodeName; 18204jQuery.isFunction = isFunction; 18205jQuery.isWindow = isWindow; 18206jQuery.camelCase = camelCase; 18207jQuery.type = toType; 18208 18209jQuery.now = Date.now; 18210 18211jQuery.isNumeric = function( obj ) { 18212 18213 // As of jQuery 3.0, isNumeric is limited to 18214 // strings and numbers (primitives or objects) 18215 // that can be coerced to finite numbers (gh-2662) 18216 var type = jQuery.type( obj ); 18217 return ( type === "number" || type === "string" ) && 18218 18219 // parseFloat NaNs numeric-cast false positives ("") 18220 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 18221 // subtraction forces infinities to NaN 18222 !isNaN( obj - parseFloat( obj ) ); 18223}; 18224 18225jQuery.trim = function( text ) { 18226 return text == null ? 18227 "" : 18228 ( text + "" ).replace( rtrim, "$1" ); 18229}; 18230 18231 18232 18233// Register as a named AMD module, since jQuery can be concatenated with other 18234// files that may use define, but not via a proper concatenation script that 18235// understands anonymous AMD modules. A named AMD is safest and most robust 18236// way to register. Lowercase jquery is used because AMD module names are 18237// derived from file names, and jQuery is normally delivered in a lowercase 18238// file name. Do this after creating the global so that if an AMD module wants 18239// to call noConflict to hide this version of jQuery, it will work. 18240 18241// Note that for maximum portability, libraries that are not jQuery should 18242// declare themselves as anonymous modules, and avoid setting a global if an 18243// AMD loader is present. jQuery is a special case. For more information, see 18244// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 18245 18246if ( true ) { 18247 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 18248 return jQuery; 18249 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 18250 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 18251} 18252 18253 18254 18255 18256var 18257 18258 // Map over jQuery in case of overwrite 18259 _jQuery = window.jQuery, 18260 18261 // Map over the $ in case of overwrite 18262 _$ = window.$; 18263 18264jQuery.noConflict = function( deep ) { 18265 if ( window.$ === jQuery ) { 18266 window.$ = _$; 18267 } 18268 18269 if ( deep && window.jQuery === jQuery ) { 18270 window.jQuery = _jQuery; 18271 } 18272 18273 return jQuery; 18274}; 18275 18276// Expose jQuery and $ identifiers, even in AMD 18277// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 18278// and CommonJS for browser emulators (trac-13566) 18279if ( typeof noGlobal === "undefined" ) { 18280 window.jQuery = window.$ = jQuery; 18281} 18282 18283 18284 18285 18286return jQuery; 18287} ); 18288 18289 18290/***/ }), 18291
18292/***/ "./src/main/webpack/dependencies/main.scss": 18293/*!*************************************************!*\ 18294 !*** ./src/main/webpack/dependencies/main.scss ***! 18295 \*************************************************/ 18296/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 18297 18298"use strict"; 18299__webpack_require__.r(__webpack_exports__); 18300// extracted by mini-css-extract-plugin 18301 18302 18303/***/ }), 18304
18305/***/ "./src/main/webpack/dependencies/main.ts": 18306/*!***********************************************!*\ 18307 !*** ./src/main/webpack/dependencies/main.ts ***! 18308 \***********************************************/ 18309/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 18310 18311"use strict"; 18312__webpack_require__.r(__webpack_exports__); 18313/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main.scss */ "./src/main/webpack/dependencies/main.scss"); 18314/* harmony import */ var _vendor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vendor.js */ "./src/main/webpack/dependencies/vendor.js"); 18315/* harmony import */ var _vendor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_vendor_js__WEBPACK_IMPORTED_MODULE_1__); 18316 18317 18318 18319 18320/***/ }), 18321
18322/***/ "./src/main/webpack/dependencies/vendor.js": 18323/*!*************************************************!*\ 18324 !*** ./src/main/webpack/dependencies/vendor.js ***! 18325 \*************************************************/ 18326/***/ (function() { 18327 18328 18329 18330/***/ })
vendor: 3,722 bytes, lines 18330-18422
18330 18331 18332/******/ }); 18333/************************************************************************/ 18334/******/ // The module cache 18335/******/ var __webpack_module_cache__ = {}; 18336/******/ 18337/******/ // The require function 18338/******/ function __webpack_require__(moduleId) { 18339/******/ // Check if module is in cache 18340/******/ var cachedModule = __webpack_module_cache__[moduleId]; 18341/******/ if (cachedModule !== undefined) { 18342/******/ return cachedModule.exports; 18343/******/ } 18344/******/ // Create a new module (and put it into the cache) 18345/******/ var module = __webpack_module_cache__[moduleId] = { 18346/******/ // no module.id needed 18347/******/ // no module.loaded needed 18348/******/ exports: {} 18349/******/ }; 18350/******/ 18351/******/ // Execute the module function 18352/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 18353/******/ 18354/******/ // Return the exports of the module 18355/******/ return module.exports; 18356/******/ } 18357/******/ 18358/************************************************************************/ 18359/******/ /* webpack/runtime/compat get default export */ 18360/******/ !function() { 18361/******/ // getDefaultExport function for compatibility with non-harmony modules 18362/******/ __webpack_require__.n = function(module) { 18363/******/ var getter = module && module.__esModule ? 18364/******/ function() { return module['default']; } : 18365/******/ function() { return module; }; 18366/******/ __webpack_require__.d(getter, { a: getter }); 18367/******/ return getter; 18368/******/ }; 18369/******/ }(); 18370/******/ 18371/******/ /* webpack/runtime/define property getters */ 18372/******/ !function() { 18373/******/ // define getter functions for harmony exports 18374/******/ __webpack_require__.d = function(exports, definition) { 18375/******/ for(var key in definition) { 18376/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 18377/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 18378/******/ } 18379/******/ } 18380/******/ }; 18381/******/ }(); 18382/******/ 18383/******/ /* webpack/runtime/global */ 18384/******/ !function() { 18385/******/ __webpack_require__.g = (function() { 18386/******/ if (typeof globalThis === 'object') return globalThis; 18387/******/ try { 18388/******/ return this || new Function('return this')(); 18389/******/ } catch (e) { 18390/******/ if (typeof window === 'object') return window; 18391/******/ } 18392/******/ })(); 18393/******/ }(); 18394/******/ 18395/******/ /* webpack/runtime/hasOwnProperty shorthand */ 18396/******/ !function() { 18397/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 18398/******/ }(); 18399/******/ 18400/******/ /* webpack/runtime/make namespace object */ 18401/******/ !function() { 18402/******/ // define __esModule on exports 18403/******/ __webpack_require__.r = function(exports) { 18404/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 18405/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 18406/******/ } 18407/******/ Object.defineProperty(exports, '__esModule', { value: true }); 18408/******/ }; 18409/******/ }(); 18410/******/ 18411/************************************************************************/ 18412/******/ 18413/******/ // startup 18414/******/ // Load entry module and return exports 18415/******/ // This entry module is referenced by other modules so it can't be inlined 18416/******/ __webpack_require__("./node_modules/jquery/dist/jquery-exposed-exposed.js"); 18417/******/ __webpack_require__("./node_modules/bootstrap/dist/js/bootstrap.js"); 18418/******/ var __webpack_exports__ = __webpack_require__("./src/main/webpack/dependencies/main.ts"); 18419/******/ 18420/******/ })() 18421; 18422//# sourceMappingURL=dependencies.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.