1/* =========================================================================== */ 2/* /templates/2022/js/ninja.js */ 3/* =========================================================================== */ 4(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 5(function (process){(function (){ 6"use strict"; 7 8Object.defineProperty(exports, "__esModule", { 9 value: true 10}); 11exports.createPopper = void 0; 12Object.defineProperty(exports, "detectOverflow", { 13 enumerable: true, 14 get: function () { 15 return _detectOverflow.default; 16 } 17}); 18exports.popperGenerator = popperGenerator; 19var _getCompositeRect = _interopRequireDefault(require("./dom-utils/getCompositeRect.js")); 20var _getLayoutRect = _interopRequireDefault(require("./dom-utils/getLayoutRect.js")); 21var _listScrollParents = _interopRequireDefault(require("./dom-utils/listScrollParents.js")); 22var _getOffsetParent = _interopRequireDefault(require("./dom-utils/getOffsetParent.js")); 23var _getComputedStyle2 = _interopRequireDefault(require("./dom-utils/getComputedStyle.js")); 24var _orderModifiers = _interopRequireDefault(require("./utils/orderModifiers.js")); 25var _debounce = _interopRequireDefault(require("./utils/debounce.js")); 26var _validateModifiers = _interopRequireDefault(require("./utils/validateModifiers.js")); 27var _uniqueBy = _interopRequireDefault(require("./utils/uniqueBy.js")); 28var _getBasePlacement = _interopRequireDefault(require("./utils/getBasePlacement.js")); 29var _mergeByName = _interopRequireDefault(require("./utils/mergeByName.js")); 30var _detectOverflow = _interopRequireDefault(require("./utils/detectOverflow.js")); 31var _instanceOf = require("./dom-utils/instanceOf.js"); 32var _enums = require("./enums.js"); 33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 34var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; 35var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; 36var DEFAULT_OPTIONS = { 37 placement: 'bottom', 38 modifiers: [], 39 strategy: 'absolute' 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 return !args.some(function (element) { 46 return !(element && typeof element.getBoundingClientRect === 'function'); 47 }); 48} 49function popperGenerator(generatorOptions) { 50 if (generatorOptions === void 0) { 51 generatorOptions = {}; 52 } 53 var _generatorOptions = generatorOptions, 54 _generatorOptions$def = _generatorOptions.defaultModifiers, 55 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 56 _generatorOptions$def2 = _generatorOptions.defaultOptions, 57 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 58 return function createPopper(reference, popper, options) { 59 if (options === void 0) { 60 options = defaultOptions; 61 } 62 var state = { 63 placement: 'bottom', 64 orderedModifiers: [], 65 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 66 modifiersData: {}, 67 elements: { 68 reference: reference, 69 popper: popper 70 }, 71 attributes: {}, 72 styles: {} 73 }; 74 var effectCleanupFns = []; 75 var isDestroyed = false; 76 var instance = { 77 state: state, 78 setOptions: function setOptions(setOptionsAction) { 79 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 80 cleanupModifierEffects(); 81 state.options = Object.assign({}, defaultOptions, state.options, options); 82 state.scrollParents = { 83 reference: (0, _instanceOf.isElement)(reference) ? (0, _listScrollParents.default)(reference) : reference.contextElement ? (0, _listScrollParents.default)(reference.contextElement) : [], 84 popper: (0, _listScrollParents.default)(popper) 85 }; // Orders the modifiers based on their dependencies and `phase` 86 // properties 87 88 var orderedModifiers = (0, _orderModifiers.default)((0, _mergeByName.default)([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 89 90 state.orderedModifiers = orderedModifiers.filter(function (m) { 91 return m.enabled; 92 }); // Validate the provided modifiers so that the consumer will get warned
93 // if one of the modifiers is invalid for any reason 94 95 if (process.env.NODE_ENV !== "production") { 96 var modifiers = (0, _uniqueBy.default)([].concat(orderedModifiers, state.options.modifiers), function (_ref) { 97 var name = _ref.name; 98 return name; 99 }); 100 (0, _validateModifiers.default)(modifiers); 101 if ((0, _getBasePlacement.default)(state.options.placement) === _enums.auto) { 102 var flipModifier = state.orderedModifiers.find(function (_ref2) { 103 var name = _ref2.name; 104 return name === 'flip'; 105 }); 106 if (!flipModifier) { 107 console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); 108 } 109 } 110 var _getComputedStyle = (0, _getComputedStyle2.default)(popper), 111 marginTop = _getComputedStyle.marginTop, 112 marginRight = _getComputedStyle.marginRight, 113 marginBottom = _getComputedStyle.marginBottom, 114 marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can 115 // cause bugs with positioning, so we'll warn the consumer 116 117 if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { 118 return parseFloat(margin); 119 })) { 120 console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); 121 } 122 } 123 runModifierEffects(); 124 return instance.update(); 125 }, 126 // Sync update â it will always be executed, even if not necessary. This 127 // is useful for low frequency updates where sync behavior simplifies the 128 // logic. 129 // For high frequency updates (e.g. `resize` and `scroll` events), always 130 // prefer the async Popper#update method
131 forceUpdate: function forceUpdate() { 132 if (isDestroyed) { 133 return; 134 } 135 var _state$elements = state.elements, 136 reference = _state$elements.reference, 137 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 138 // anymore 139 140 if (!areValidElements(reference, popper)) { 141 if (process.env.NODE_ENV !== "production") { 142 console.error(INVALID_ELEMENT_ERROR); 143 } 144 return; 145 } // Store the reference and popper rects to be read by modifiers 146 147 state.rects = { 148 reference: (0, _getCompositeRect.default)(reference, (0, _getOffsetParent.default)(popper), state.options.strategy === 'fixed'), 149 popper: (0, _getLayoutRect.default)(popper) 150 }; // Modifiers have the ability to reset the current update cycle. The 151 // most common use case for this is the `flip` modifier changing the 152 // placement, which then needs to re-run all the modifiers, because the 153 // logic was previously ran for the previous placement and is therefore 154 // stale/incorrect 155 156 state.reset = false; 157 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 158 // is filled with the initial data specified by the modifier. This means 159 // it doesn't persist and is fresh on each update. 160 // To ensure persistent data, use `${name}#persistent` 161 162 state.orderedModifiers.forEach(function (modifier) { 163 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 164 }); 165 var __debug_loops__ = 0; 166 for (var index = 0; index < state.orderedModifiers.length; index++) { 167 if (process.env.NODE_ENV !== "production") { 168 __debug_loops__ += 1; 169 if (__debug_loops__ > 100) { 170 console.error(INFINITE_LOOP_ERROR); 171 break; 172 } 173 } 174 if (state.reset === true) { 175 state.reset = false; 176 index = -1; 177 continue; 178 } 179 var _state$orderedModifie = state.orderedModifiers[index], 180 fn = _state$orderedModifie.fn, 181 _state$orderedModifie2 = _state$orderedModifie.options, 182 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 183 name = _state$orderedModifie.name; 184 if (typeof fn === 'function') { 185 state = fn({ 186 state: state, 187 options: _options, 188 name: name, 189 instance: instance 190 }) || state; 191 } 192 } 193 }, 194 // Async and optimistically optimized update â it will not be executed if 195 // not necessary (debounced to run at most once-per-tick) 196 update: (0, _debounce.default)(function () { 197 return new Promise(function (resolve) { 198 instance.forceUpdate(); 199 resolve(state); 200 }); 201 }), 202 destroy: function destroy() { 203 cleanupModifierEffects(); 204 isDestroyed = true; 205 } 206 }; 207 if (!areValidElements(reference, popper)) { 208 if (process.env.NODE_ENV !== "production") { 209 console.error(INVALID_ELEMENT_ERROR); 210 } 211 return instance; 212 } 213 instance.setOptions(options).then(function (state) { 214 if (!isDestroyed && options.onFirstUpdate) { 215 options.onFirstUpdate(state); 216 } 217 }); // Modifiers have the ability to execute arbitrary code before the first 218 // update cycle runs. They will be executed in the same order as the update 219 // cycle. This is useful when a modifier adds some persistent data that 220 // other modifiers need to use, but the modifier is run after the dependent 221 // one. 222 223 function runModifierEffects() { 224 state.orderedModifiers.forEach(function (_ref3) { 225 var name = _ref3.name, 226 _ref3$options = _ref3.options, 227 options = _ref3$options === void 0 ? {} : _ref3$options, 228 effect = _ref3.effect; 229 if (typeof effect === 'function') { 230 var cleanupFn = effect({ 231 state: state, 232 name: name, 233 instance: instance, 234 options: options 235 }); 236 var noopFn = function noopFn() {}; 237 effectCleanupFns.push(cleanupFn || noopFn); 238 } 239 }); 240 } 241 function cleanupModifierEffects() { 242 effectCleanupFns.forEach(function (fn) { 243 return fn(); 244 }); 245 effectCleanupFns = []; 246 } 247 return instance; 248 }; 249} 250var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 251exports.createPopper = createPopper; 252 253}).call(this)}).call(this,require('_process')) 254},{"./dom-utils/getCompositeRect.js":5,"./dom-utils/getComputedStyle.js":6,"./dom-utils/getL
254ayoutRect.js":10,"./dom-utils/getOffsetParent.js":13,"./dom-utils/instanceOf.js":20,"./dom-utils/listScrollParents.js":24,"./enums.js":25,"./utils/debounce.js":41,"./utils/detectOverflow.js":42,"./utils/getBasePlacement.js":46,"./utils/mergeByName.js":53,"./utils/orderModifiers.js":55,"./utils/uniqueBy.js":57,"./utils/validateModifiers.js":59,"_process":64}],2:[function(require,module,exports){ 255"use strict"; 256 257Object.defineProperty(exports, "__esModule", { 258 value: true 259}); 260exports.default = contains; 261var _instanceOf = require("./instanceOf.js"); 262function contains(parent, child) { 263 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 264 265 if (parent.contains(child)) { 266 return true; 267 } // then fallback to custom implementation with Shadow DOM support 268 else if (rootNode && (0, _instanceOf.isShadowRoot)(rootNode)) { 269 var next = child; 270 do { 271 if (next && parent.isSameNode(next)) { 272 return true; 273 } // $FlowFixMe[prop-missing]: need a better way to handle this... 274 275 next = next.parentNode || next.host; 276 } while (next); 277 } // Give up, the result is false 278 279 return false; 280} 281 282},{"./instanceOf.js":20}],3:[function(require,module,exports){ 283"use strict"; 284 285Object.defineProperty(exports, "__esModule", { 286 value: true 287}); 288exports.default = getBoundingClientRect; 289var _instanceOf = require("./instanceOf.js"); 290var _math = require("../utils/math.js"); 291var _getWindow = _interopRequireDefault(require("./getWindow.js")); 292var _isLayoutViewport = _interopRequireDefault(require("./isLayoutViewport.js")); 293function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 294function getBoundingClientRect(element, includeScale, isFixedStrategy) { 295 if (includeScale === void 0) { 296 includeScale = false; 297 } 298 if (isFixedStrategy === void 0) { 299 isFixedStrategy = false; 300 } 301 var clientRect = element.getBoundingClientRect(); 302 var scaleX = 1; 303 var scaleY = 1; 304 if (includeScale && (0, _instanceOf.isHTMLElement)(element)) { 305 scaleX = element.offsetWidth > 0 ? (0, _math.round)(clientRect.width) / element.offsetWidth || 1 : 1; 306 scaleY = element.offsetHeight > 0 ? (0, _math.round)(clientRect.height) / element.offsetHeight || 1 : 1; 307 } 308 var _ref = (0, _instanceOf.isElement)(element) ? (0, _getWindow.default)(element) : window, 309 visualViewport = _ref.visualViewport; 310 var addVisualOffsets = !(0, _isLayoutViewport.default)() && isFixedStrategy; 311 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 312 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 313 var width = clientRect.width / scaleX; 314 var height = clientRect.height / scaleY; 315 return { 316 width: width, 317 height: height, 318 top: y, 319 right: x + width, 320 bottom: y + height, 321 left: x, 322 x: x, 323 y: y 324 }; 325} 326 327},{"../utils/math.js":52,"./getWindow.js":17,"./instanceOf.js":20,"./isLayoutViewport.js":21}],4:[function(require,module,exports){ 328"use strict"; 329 330Object.defineProperty(exports, "__esModule", { 331 value: true 332}); 333exports.default = getClippingRect; 334var _enums = require("../enums.js"); 335var _getViewportRect = _interopRequireDefault(require("./getViewportRect.js")); 336var _getDocumentRect = _interopRequireDefault(require("./getDocumentRect.js")); 337var _listScrollParents = _interopRequireDefault(require("./listScrollParents.js")); 338var _getOffsetParent = _interopRequireDefault(require("./getOffsetParent.js")); 339var _getDocumentElement = _interopRequireDefault(require("./getDocumentElement.js")); 340var _getComputedStyle = _interopRequireDefault(require("./getComputedStyle.js")); 341var _instanceOf = require("./instanceOf.js"); 342var _getBoundingClientRect = _interopRequireDefault(require("./getBoundingClientRect.js")); 343var _getParentNode = _interopRequireDefault(require("./getParentNode.js")); 344var _contains = _interopRequireDefault(require("./contains.js")); 345var _getNodeName = _interopRequireDefault(require("./getNodeName.js")); 346var _rectToClientRect = _interopRequireDefault(require("../utils/rectToClientRect.js")); 347var _math = require("../utils/math.js"); 348function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 349function getInnerBoundingClientRect(element, strategy) { 350 var rect = (0, _getBoundingClientRect.default)(element, false, strategy === 'fixed'); 351 rect.top = rect.top + element.clientTop; 352 rect.left = rect.left + element.clientLeft; 353 rect.bottom = rect.top + element.clientHeight; 354 rect.right = rect.left + element.clientWidth; 355 rect.width = element.clientWidth; 356 rect.height = element.clientHeight; 357 rect.x = rect.left; 358 rect.y = rect.top; 359 return rect; 360} 361function getClientRectFromMixedType(element, clippingParent, strategy) { 362 return clippingParent === _enums.viewport ? (0, _rectToClientRect.default)((0, _getViewportRect.default)(element, strategy)) : (0, _instanceOf.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0, _rectToClientRect.default)((0, _getDocumentRect.default)((0, _getDocumentElement.default)(element))); 363} // A "clipping parent" is an overflowable container with the characteristic of 364// clipping (or hiding) overflowing elements with a position different from 365// `initial` 366 367function getClippingParents(element) { 368 var clippingParents = (0, _listScrollParents.default)((0, _getParentNode.default)(element)); 369 var canEscapeClipping = ['absolute', 'fixed'].indexOf((0, _getComputedStyle.default)(element).position) >= 0; 370 var clipperElement = canEscapeClipping && (0, _instanceOf.isHTMLElement)(element) ? (0, _getOffsetParent.default)(element) : element; 371 if (!(0, _instanceOf.isElement)(clipperElement)) { 372 return []; 373 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 374 375 return clippingParents.filter(function (clippingParent) { 376 return (0, _instanceOf.isElement)(clippingParent) && (0, _contains.default)(clippingParent, clipperElement) && (0, _getNodeName.default)(clippingParent) !== 'body'; 377 }); 378} // Gets the maximum area that the element is visible in due to any number of 379// clipping parents 380
381function getClippingRect(element, boundary, rootBoundary, strategy) { 382 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 383 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 384 var firstClippingParent = clippingParents[0]; 385 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 386 var rect = getClientRectFromMixedType(element, clippingParent, strategy); 387 accRect.top = (0, _math.max)(rect.top, accRect.top); 388 accRect.right = (0, _math.min)(rect.right, accRect.right); 389 accRect.bottom = (0, _math.min)(rect.bottom, accRect.bottom); 390 accRect.left = (0, _math.max)(rect.left, accRect.left); 391 return accRect; 392 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 393 clippingRect.width = clippingRect.right - clippingRect.left; 394 clippingRect.height = clippingRect.bottom - clippingRect.top; 395 clippingRect.x = clippingRect.left; 396 clippingRect.y = clippingRect.top; 397 return clippingRect; 398} 399 400},{"../enums.js":25,"../utils/math.js":52,"../utils/rectToClientRect.js":56,"./contains.js":2,"./getBoundingClientRect.js":3,"./getComputedStyle.js":6,"./getDocumentElement.js":7,"./getDocumentRect.js":8,"./getNodeName.js":11,"./getOffsetParent.js":13,"./getParentNode.js":14,"./getViewportRect.js":16,"./instanceOf.js":20,"./listScrollParents.js":24}],5:[function(require,module,exports){ 401"use strict"; 402 403Object.defineProperty(exports, "__esModule", { 404 value: true 405}); 406exports.default = getCompositeRect; 407var _getBoundingClientRect = _interopRequireDefault(require("./getBoundingClientRect.js")); 408var _getNodeScroll = _interopRequireDefault(require("./getNodeScroll.js")); 409var _getNodeName = _interopRequireDefault(require("./getNodeName.js")); 410var _instanceOf = require("./instanceOf.js"); 411var _getWindowScrollBarX = _interopRequireDefault(require("./getWindowScrollBarX.js")); 412var _getDocumentElement = _interopRequireDefault(require("./getDocumentElement.js")); 413var _isScrollParent = _interopRequireDefault(require("./isScrollParent.js")); 414var _math = require("../utils/math.js"); 415function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 416function isElementScaled(element) { 417 var rect = element.getBoundingClientRect(); 418 var scaleX = (0, _math.round)(rect.width) / element.offsetWidth || 1; 419 var scaleY = (0, _math.round)(rect.height) / element.offsetHeight || 1; 420 return scaleX !== 1 || scaleY !== 1; 421} // Returns the composite rect of an element relative to its offsetParent. 422// Composite means it takes into account transforms as well as layout. 423 424function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 425 if (isFixed === void 0) { 426 isFixed = false; 427 } 428 var isOffsetParentAnElement = (0, _instanceOf.isHTMLElement)(offsetParent); 429 var offsetParentIsScaled = (0, _instanceOf.isHTMLElement)(offsetParent) && isElementScaled(offsetParent); 430 var documentElement = (0, _getDocumentElement.default)(offsetParent); 431 var rect = (0, _getBoundingClientRect.default)(elementOrVirtualElement, offsetParentIsScaled, isFixed); 432 var scroll = { 433 scrollLeft: 0, 434 scrollTop: 0 435 }; 436 var offsets = { 437 x: 0, 438 y: 0 439 }; 440 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 441 if ((0, _getNodeName.default)(offsetParent) !== 'body' || 442 // https://github.com/popperjs/popper-core/issues/1078 443 (0, _isScrollParent.default)(documentElement)) { 444 scroll = (0, _getNodeScroll.default)(offsetParent); 445 } 446 if ((0, _instanceOf.isHTMLElement)(offsetParent)) { 447 offsets = (0, _getBoundingClientRect.default)(offsetParent, true); 448 offsets.x += offsetParent.clientLeft; 449 offsets.y += offsetParent.clientTop; 450 } else if (documentElement) { 451 offsets.x = (0, _getWindowScrollBarX.default)(documentElement); 452 } 453 } 454 return { 455 x: rect.left + scroll.scrollLeft - offsets.x, 456 y: rect.top + scroll.scrollTop - offsets.y, 457 width: rect.width, 458 height: rect.height 459 }; 460} 461 462},{"../utils/math.js":52,"./getBoundingClientRect.js":3,"./getDocumentElement.js":7,"./getNodeName.js":11,"./getNodeScroll.js":12,"./getWindowScrollBarX.js":19,"./instanceOf.js":20,"./isScrollParent.js":22}],6:[function(require,module,exports){ 463"use strict"; 464 465Object.defineProperty(exports, "__esModule", { 466 value: true 467}); 468exports.default = getComputedStyle; 469var _getWindow = _interopRequireDefault(require("./getWindow.js")); 470function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 471function getComputedStyle(element) { 472 return (0, _getWindow.default)(element).getComputedStyle(element); 473} 474 475},{"./getWindow.js":17}],7:[function(require,module,exports){ 476"use strict"; 477 478Object.defineProperty(exports, "__esModule", { 479 value: true 480}); 481exports.default = getDocumentElement; 482var _instanceOf = require("./instanceOf.js"); 483function getDocumentElement(element) { 484 // $FlowFixMe[incompatible-return]: assume body is always available 485 return (((0, _instanceOf.isElement)(element) ? element.ownerDocument : 486 // $FlowFixMe[prop-missing] 487 element.document) || window.document).documentElement; 488} 489 490},{"./instanceOf.js":20}],8:[function(require,module,exports){ 491"use strict"; 492 493Object.defineProperty(exports, "__esModule", { 494 value: true 495}); 496exports.default = getDocumentRect; 497var _getDocumentElement = _interopRequireDefault(require("./getDocumentElement.js")); 498var _getComputedStyle = _interopRequireDefault(require("./getComputedStyle.js")); 499var _getWindowScrollBarX = _interopRequireDefault(require("./getWindowScrollBarX.js")); 500var _getWindowScroll = _interopRequireDefault(require("./getWindowScroll.js")); 501var _math = require("../utils/math.js"); 502function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 503// Gets the entire size of the scrollable document area, even extending outside 504// of the `<html>` and `<body>` rect bounds if horizontally scrollable 505 506function getDocumentRect(element) { 507 var _element$ownerDocumen; 508 var html = (0, _getDocumentElement.default)(element); 509 var winScroll = (0, _getWindowScroll.default)(element); 510 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 511 var width = (0, _math.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 512 var height = (0, _math.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 513 var x = -winScroll.scrollLeft + (0, _getWindowScrollBarX.default)(element); 514 var y = -winScroll.scrollTop; 515 if ((0, _getComputedStyle.default)(body || html).direction === 'rtl') { 516 x += (0, _math.max)(html.clientWidth, body ? body.clientWidth : 0) - width; 517 } 518 return { 519 width: width, 520 height: height, 521 x: x, 522 y: y 523 }; 524} 525 526},{"../utils/math.js":52,"./getComputedStyle.js":6,"./getDocumentElement.js":7,"./getWindowScroll.js":18,"./getWindowScrollBarX.js":19}],9:[function(require,module,exports){ 527"use strict"; 528 529Object.defineProperty(exports, "__esModule", { 530 value: true 531}); 532exports.default = getHTMLElementScroll; 533function getHTMLElementScroll(element) { 534 return { 535 scrollLeft: element.scrollLeft, 536 scrollTop: element.scrollTop 537 }; 538} 539 540},{}],10:[function(require,module,exports){ 541"use strict"; 542 543Object.defineProperty(exports, "__esModule", { 544 value: true 545}); 546exports.default = getLayoutRect; 547var _getBoundingClientRect = _interopRequireDefault(require("./getBoundingClientRect.js")); 548function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 549// Returns the layout rect of an element relative to its offsetParent. Layout 550// means it doesn't take into account transforms. 551 552function getLayoutRect(element) { 553 var clientRect = (0, _getBoundingClientRect.default)(element); // Use the clientRect sizes if it's not been transformed. 554 // Fixes https://github.com/popperjs/popper-core/issues/1223 555 556 var width = element.offsetWidth; 557 var height = element.offsetHeight; 558 if (Math.abs(clientRect.width - width) <= 1) { 559 width = clientRect.width; 560 } 561 if (Math.abs(clientRect.height - height) <= 1) { 562 height = clientRect.height; 563 } 564 return { 565 x: element.offsetLeft, 566 y: element.offsetTop, 567 width: width, 568 height: height 569 }; 570} 571 572},{"./getBoundingClientRect.js":3}],11:[function(require,module,exports){ 573"use strict"; 574 575Object.defineProperty(exports, "__esModule", { 576 value: true 577}); 578exports.default = getNodeName; 579function getNodeName(element) { 580 return element ? (element.nodeName || '').toLowerCase() : null; 581} 582 583},{}],12:[function(require,module,exports){ 584"use strict"; 585 586Object.defineProperty(exports, "__esModule", { 587 value: true 588}); 589exports.default = getNodeScroll; 590var _getWindowScroll = _interopRequireDefault(require("./getWindowScroll.js")); 591var _getWindow = _interopRequireDefault(require("./getWindow.js")); 592var _instanceOf = require("./instanceOf.js"); 593var _getHTMLElementScroll = _interopRequireDefault(require("./getHTMLElementScroll.js")); 594function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 595function getNodeScroll(node) { 596 if (node === (0, _getWindow.default)(node) || !(0, _instanceOf.isHTMLElement)(node)) { 597 return (0, _getWindowScroll.default)(node); 598 } else { 599 return (0, _getHTMLElementScroll.default)(node); 600 } 601} 602 603},{"./getHTMLElementScroll.js":9,"./getWindow.js":17,"./getWindowScroll.js":18,"./instanceOf.js":20}],13:[function(require,module,exports){ 604"use strict"; 605 606Object.defineProperty(exports, "__esModule", { 607 value: true 608}); 609exports.default = getOffsetParent; 610var _getWindow = _interopRequireDefault(require("./getWindow.js")); 611var _getNodeName = _interopRequireDefault(require("./getNodeName.js")); 612var _getComputedStyle = _interopRequireDefault(require("./getComputedStyle.js")); 613var _instanceOf = require("./instanceOf.js"); 614var _isTableElement = _interopRequireDefault(require("./isTableElement.js")); 615var _getParentNode = _interopRequireDefault(require("./getParentNode.js")); 616var _userAgent = _interopRequireDefault(require("../utils/userAgent.js")); 617function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 618function getTrueOffsetParent(element) { 619 if (!(0, _instanceOf.isHTMLElement)(element) || 620 // https://github.com/popperjs/popper-core/issues/837 621 (0, _getComputedStyle.default)(element).position === 'fixed') { 622 return null; 623 } 624 return element.offsetParent; 625} // `.offsetParent` reports `null` for fixed elements, while absolute elements 626// return the containing block 627 628function getContainingBlock(element) { 629 var isFirefox = /firefox/i.test((0, _userAgent.default)()); 630 var isIE = /Trident/i.test((0, _userAgent.default)()); 631 if (isIE && (0, _instanceOf.isHTMLElement)(element)) { 632 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 633 var elementCss = (0, _getComputedStyle.default)(element); 634 if (elementCss.position === 'fixed') { 635 return null; 636 } 637 } 638 var currentNode = (0, _getParentNode.default)(element); 639 if ((0, _instanceOf.isShadowRoot)(currentNode)) { 640 currentNode = currentNode.host; 641 } 642 while ((0, _instanceOf.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0, _getNodeName.default)(currentNode)) < 0) { 643 var css = (0, _getComputedStyle.default)(currentNode); // This is non-exhaustive but covers the most common CSS properties that 644 // create a containing block. 645 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 646 647 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') { 648 return currentNode; 649 } else { 650 currentNode = currentNode.parentNode; 651 } 652 } 653 return null; 654} // Gets the closest ancestor positioned element. Handles some edge cases, 655// such as table ancestors and cross browser bugs. 656 657function getOffsetParent(element) { 658 var window = (0, _getWindow.default)(element); 659 var offsetParent = getTrueOffsetParent(element); 660 while (offsetParent && (0, _isTableElement.default)(offsetParent) && (0, _getComputedStyle.default)(offsetParent).position === 'static') { 661 offsetParent = getTrueOffsetParent(offsetParent); 662 } 663 if (offsetParent && ((0, _getNodeName.default)(offsetParent) === 'html' || (0, _getNodeName.default)(offsetParent) === 'body' && (0, _getComputedStyle.default)(offsetParent).position === 'static')) { 664 return window; 665 } 666 return offsetParent || getContainingBlock(element) || window; 667} 668 669},{"../utils/userAgent.js":58,"./getComputedStyle.js":6,"./getNodeName.js":11,"./getParentNode.js":14,"./getWindow.js":17,"./instanceOf.js":20,"./isTableElement.js":23}],14:[function(require,module,exports){ 670"use strict"; 671 672Object.defineProperty(exports, "__esModule", { 673 value: true 674}); 675exports.default = getParentNode; 676var _getNodeName = _interopRequireDefault(require("./getNodeName.js")); 677var _getDocumentElement = _interopRequireDefault(require("./getDocumentElement.js")); 678var _instanceOf = require("./instanceOf.js"); 679function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 680function getParentNode(element) { 681 if ((0, _getNodeName.default)(element) === 'html') { 682 return element; 683 } 684 return ( 685 // this is a quicker (but less type safe) way to save quite some bytes from the bundle 686 // $FlowFixMe[incompatible-return] 687 // $FlowFixMe[prop-missing] 688 element.assignedSlot || 689 // step into the shadow DOM of the parent of a slotted node 690 element.parentNode || ( 691 // DOM Element detected 692 (0, _instanceOf.isShadowRoot)(element) ? element.host : null) || 693 // ShadowRoot detected 694 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 695 (0, _getDocumentElement.default)(element) // fallback 696 ); 697} 698 699},{"./getDocumentElement.js":7,"./getNodeName.js":11,"./instanceOf.js":20}],15:[function(require,module,exports){ 700"use strict"; 701 702Object.defineProperty(exports, "__esModule", { 703 value: true 704}); 705exports.default = getScrollParent; 706var _getParentNode = _interopRequireDefault(require("./getParentNode.js")); 707var _isScrollParent = _interopRequireDefault(require("./isScrollParent.js")); 708var _getNodeName = _interopRequireDefault(require("./getNodeName.js")); 709var _instanceOf = require("./instanceOf.js"); 710function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 711function getScrollParent(node) { 712 if (['html', 'body', '#document'].indexOf((0, _getNodeName.default)(node)) >= 0) { 713 // $FlowFixMe[incompatible-return]: assume body is always available 714 return node.ownerDocument.body; 715 } 716 if ((0, _instanceOf.isHTMLElement)(node) && (0, _isScrollParent.default)(node)) { 717 return node; 718 } 719 return getScrollParent((0, _getParentNode.default)(node)); 720} 721 722},{"./getNodeName.js":11,"./getParentNode.js":14,"./instanceOf.js":20,"./isScrollParent.js":22}],16:[function(require,module,exports){ 723"use strict"; 724 725Object.defineProperty(exports, "__esModule", { 726 value: true 727}); 728exports.default = getViewportRect; 729var _getWindow = _interopRequireDefault(require("./getWindow.js")); 730var _getDocumentElement = _interopRequireDefault(require("./getDocumentElement.js")); 731var _getWindowScrollBarX = _interopRequireDefault(require("./getWindowScrollBarX.js")); 732var _isLayoutViewport = _interopRequireDefault(require("./isLayoutViewport.js")); 733function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 734function getViewportRect(element, strategy) { 735 var win = (0, _getWindow.default)(element); 736 var html = (0, _getDocumentElement.default)(element);
737 var visualViewport = win.visualViewport; 738 var width = html.clientWidth; 739 var height = html.clientHeight; 740 var x = 0; 741 var y = 0; 742 if (visualViewport) { 743 width = visualViewport.width; 744 height = visualViewport.height; 745 var layoutViewport = (0, _isLayoutViewport.default)(); 746 if (layoutViewport || !layoutViewport && strategy === 'fixed') { 747 x = visualViewport.offsetLeft; 748 y = visualViewport.offsetTop; 749 } 750 } 751 return { 752 width: width, 753 height: height, 754 x: x + (0, _getWindowScrollBarX.default)(element), 755 y: y 756 }; 757} 758 759},{"./getDocumentElement.js":7,"./getWindow.js":17,"./getWindowScrollBarX.js":19,"./isLayoutViewport.js":21}],17:[function(require,module,exports){ 760"use strict"; 761 762Object.defineProperty(exports, "__esModule", { 763 value: true 764}); 765exports.default = getWindow; 766function getWindow(node) { 767 if (node == null) { 768 return window; 769 } 770 if (node.toString() !== '[object Window]') { 771 var ownerDocument = node.ownerDocument; 772 return ownerDocument ? ownerDocument.defaultView || window : window; 773 } 774 return node; 775} 776 777},{}],18:[function(require,module,exports){ 778"use strict"; 779 780Object.defineProperty(exports, "__esModule", { 781 value: true 782}); 783exports.default = getWindowScroll; 784var _getWindow = _interopRequireDefault(require("./getWindow.js")); 785function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 786function getWindowScroll(node) { 787 var win = (0, _getWindow.default)(node); 788 var scrollLeft = win.pageXOffset; 789 var scrollTop = win.pageYOffset; 790 return { 791 scrollLeft: scrollLeft, 792 scrollTop: scrollTop 793 }; 794} 795 796},{"./getWindow.js":17}],19:[function(require,module,exports){ 797"use strict"; 798 799Object.defineProperty(exports, "__esModule", { 800 value: true 801}); 802exports.default = getWindowScrollBarX; 803var _getBoundingClientRect = _interopRequireDefault(require("./getBoundingClientRect.js")); 804var _getDocumentElement = _interopRequireDefault(require("./getDocumentElement.js")); 805var _getWindowScroll = _interopRequireDefault(require("./getWindowScroll.js")); 806function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 807function getWindowScrollBarX(element) { 808 // If <html> has a CSS width greater than the viewport, then this will be 809 // incorrect for RTL. 810 // Popper 1 is broken in this case and never had a bug report so let's assume 811 // it's not an issue. I don't think anyone ever specifies width on <html> 812 // anyway. 813 // Browsers where the left scrollbar doesn't cause an issue report `0` for 814 // this (e.g. Edge 2019, IE11, Safari) 815 return (0, _getBoundingClientRect.default)((0, _getDocumentElement.default)(element)).left + (0, _getWindowScroll.default)(element).scrollLeft; 816} 817 818},{"./getBoundingClientRect.js":3,"./getDocumentElement.js":7,"./getWindowScroll.js":18}],20:[function(require,module,exports){ 819"use strict"; 820 821Object.defineProperty(exports, "__esModule", { 822 value: true 823}); 824exports.isElement = isElement; 825exports.isHTMLElement = isHTMLElement; 826exports.isShadowRoot = isShadowRoot; 827var _getWindow = _interopRequireDefault(require("./getWindow.js")); 828function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 829function isElement(node) { 830 var OwnElement = (0, _getWindow.default)(node).Element; 831 return node instanceof OwnElement || node instanceof Element; 832} 833function isHTMLElement(node) { 834 var OwnElement = (0, _getWindow.default)(node).HTMLElement; 835 return node instanceof OwnElement || node instanceof HTMLElement; 836} 837function isShadowRoot(node) { 838 // IE 11 has no ShadowRoot 839 if (typeof ShadowRoot === 'undefined') { 840 return false; 841 } 842 var OwnElement = (0, _getWindow.default)(node).ShadowRoot; 843 return node instanceof OwnElement || node instanceof ShadowRoot; 844} 845 846},{"./getWindow.js":17}],21:[function(require,module,exports){ 847"use strict"; 848 849Object.defineProperty(exports, "__esModule", { 850 value: true 851}); 852exports.default = isLayoutViewport; 853var _userAgent = _interopRequireDefault(require("../utils/userAgent.js")); 854function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 855function isLayoutViewport() { 856 return !/^((?!chrome|android).)*safari/i.test((0, _userAgent.default)()); 857} 858 859},{"../utils/userAgent.js":58}],22:[function(require,module,exports){ 860"use strict"; 861 862Object.defineProperty(exports, "__esModule", { 863 value: true 864}); 865exports.default = isScrollParent; 866var _getComputedStyle2 = _interopRequireDefault(require("./getComputedStyle.js")); 867function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 868function isScrollParent(element) { 869 // Firefox wants us to check `-x` and `-y` variations as well 870 var _getComputedStyle = (0, _getComputedStyle2.default)(element), 871 overflow = _getComputedStyle.overflow, 872 overflowX = _getComputedStyle.overflowX, 873 overflowY = _getComputedStyle.overflowY; 874 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 875} 876 877},{"./getComputedStyle.js":6}],23:[function(require,module,exports){ 878"use strict"; 879 880Object.defineProperty(exports, "__esModule", { 881 value: true 882}); 883exports.default = isTableElement; 884var _getNodeName = _interopRequireDefault(require("./getNodeName.js")); 885function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 886function isTableElement(element) { 887 return ['table', 'td', 'th'].indexOf((0, _getNodeName.default)(element)) >= 0; 888} 889 890},{"./getNodeName.js":11}],24:[function(require,module,exports){ 891"use strict"; 892 893Object.defineProperty(exports, "__esModule", { 894 value: true 895}); 896exports.default = listScrollParents; 897var _getScrollParent = _interopRequireDefault(require("./getScrollParent.js")); 898var _getParentNode = _interopRequireDefault(require("./getParentNode.js")); 899var _getWindow = _interopRequireDefault(require("./getWindow.js")); 900var _isScrollParent = _interopRequireDefault(require("./isScrollParent.js")); 901function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 902/* 903given a DOM element, return the list of all scroll parents, up the list of ancesors 904until we get to the top window object. This list is what we attach scroll listeners 905to, because if any of these parent elements scroll, we'll need to re-calculate the 906reference element's position. 907*/ 908 909function listScrollParents(element, list) { 910 var _element$ownerDocumen; 911 if (list === void 0) { 912 list = []; 913 } 914 var scrollParent = (0, _getScrollParent.default)(element); 915 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 916 var win = (0, _getWindow.default)(scrollParent);
917 var target = isBody ? [win].concat(win.visualViewport || [], (0, _isScrollParent.default)(scrollParent) ? scrollParent : []) : scrollParent; 918 var updatedList = list.concat(target); 919 return isBody ? updatedList : 920 // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 921 updatedList.concat(listScrollParents((0, _getParentNode.default)(target))); 922} 923 924},{"./getParentNode.js":14,"./getScrollParent.js":15,"./getWindow.js":17,"./isScrollParent.js":22}],25:[function(require,module,exports){ 925"use strict"; 926 927Object.defineProperty(exports, "__esModule", { 928 value: true 929}); 930exports.write = exports.viewport = exports.variationPlacements = exports.top = exports.start = exports.right = exports.reference = exports.read = exports.popper = exports.placements = exports.modifierPhases = exports.main = exports.left = exports.end = exports.clippingParents = exports.bottom = exports.beforeWrite = exports.beforeRead = exports.beforeMain = exports.basePlacements = exports.auto = exports.afterWrite = exports.afterRead = exp
930orts.afterMain = void 0; 931var top = 'top'; 932exports.top = top; 933var bottom = 'bottom'; 934exports.bottom = bottom; 935var right = 'right'; 936exports.right = right; 937var left = 'left'; 938exports.left = left; 939var auto = 'auto'; 940exports.auto = auto; 941var basePlacements = [top, bottom, right, left]; 942exports.basePlacements = basePlacements; 943var start = 'start'; 944exports.start = start; 945var end = 'end'; 946exports.end = end; 947var clippingParents = 'clippingParents'; 948exports.clippingParents = clippingParents; 949var viewport = 'viewport'; 950exports.viewport = viewport; 951var popper = 'popper'; 952exports.popper = popper; 953var reference = 'reference'; 954exports.reference = reference; 955var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 956 return acc.concat([placement + "-" + start, placement + "-" + end]); 957}, []); 958exports.variationPlacements = variationPlacements; 959var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 960 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 961}, []); // modifiers that need to read the DOM 962exports.placements = placements; 963var beforeRead = 'beforeRead'; 964exports.beforeRead = beforeRead; 965var read = 'read'; 966exports.read = read; 967var afterRead = 'afterRead'; // pure-logic modifiers 968exports.afterRead = afterRead; 969var beforeMain = 'beforeMain'; 970exports.beforeMain = beforeMain; 971var main = 'main'; 972exports.main = main; 973var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 974exports.afterMain = afterMain; 975var beforeWrite = 'beforeWrite'; 976exports.beforeWrite = beforeWrite; 977var write = 'write'; 978exports.write = write; 979var afterWrite = 'afterWrite'; 980exports.afterWrite = afterWrite; 981var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 982exports.modifierPhases = modifierPhases; 983 984},{}],26:[function(require,module,exports){ 985"use strict"; 986 987Object.defineProperty(exports, "__esModule", { 988 value: true 989}); 990var _exportNames = { 991 popperGenerator: true, 992 detectOverflow: true, 993 createPopperBase: true, 994 createPopper: true, 995 createPopperLite: true 996}; 997Object.defineProperty(exports, "createPopper", { 998 enumerable: true, 999 get: function () { 1000 return _popper.createPopper; 1001 } 1002}); 1003Object.defineProperty(exports, "createPopperBase", { 1004 enumerable: true, 1005 get: function () { 1006 return _createPopper.createPopper; 1007 } 1008}); 1009Object.defineProperty(exports, "createPopperLite", { 1010 enumerable: true, 1011 get: function () { 1012 return _popperLite.createPopper; 1013 } 1014}); 1015Object.defineProperty(exports, "detectOverflow", { 1016 enumerable: true, 1017 get: function () { 1018 return _createPopper.detectOverflow; 1019 } 1020}); 1021Object.defineProperty(exports, "popperGenerator", { 1022 enumerable: true, 1023 get: function () { 1024 return _createPopper.popperGenerator; 1025 } 1026}); 1027var _enums = require("./enums.js"); 1028Object.keys(_enums).forEach(function (key) { 1029 if (key === "default" || key === "__esModule") return; 1030 if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; 1031 if (key in exports && exports[key] === _enums[key]) return; 1032 Object.defineProperty(exports, key, { 1033 enumerable: true, 1034 get: function () { 1035 return _enums[key]; 1036 } 1037 }); 1038}); 1039var _index = require("./modifiers/index.js"); 1040Object.keys(_index).forEach(function (key) { 1041 if (key === "default" || key === "__esModule") return; 1042 if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; 1043 if (key in exports && exports[key] === _index[key]) return; 1044 Object.defineProperty(exports, key, { 1045 enumerable: true, 1046 get: function () { 1047 return _index[key]; 1048 } 1049 }); 1050}); 1051var _createPopper = require("./createPopper.js"); 1052var _popper = require("./popper.js"); 1053var _popperLite = require("./popper-lite.js"); 1054 1055},{"./createPopper.js":1,"./enums.js":25,"./modifiers/index.js":33,"./popper-lite.js":37,"./popper.js":38}],27:[function(require,module,exports){ 1056"use strict"; 1057 1058Object.defineProperty(exports, "__esModule", { 1059 value: true 1060}); 1061exports.default = void 0; 1062var _getNodeName = _interopRequireDefault(require("../dom-utils/getNodeName.js")); 1063var _instanceOf = require("../dom-utils/instanceOf.js"); 1064function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1065// This modifier takes the styles prepared by the `computeStyles` modifier 1066// and applies them to the HTMLElements such as popper and arrow 1067 1068function applyStyles(_ref) { 1069 var state = _ref.state;
1070 Object.keys(state.elements).forEach(function (name) { 1071 var style = state.styles[name] || {}; 1072 var attributes = state.attributes[name] || {}; 1073 var element = state.elements[name]; // arrow is optional + virtual elements 1074 1075 if (!(0, _instanceOf.isHTMLElement)(element) || !(0, _getNodeName.default)(element)) { 1076 return; 1077 } // Flow doesn't support to extend this property, but it's the most 1078 // effective way to apply styles to an HTMLElement 1079 // $FlowFixMe[cannot-write] 1080 1081 Object.assign(element.style, style); 1082 Object.keys(attributes).forEach(function (name) { 1083 var value = attributes[name]; 1084 if (value === false) { 1085 element.removeAttribute(name); 1086 } else { 1087 element.setAttribute(name, value === true ? '' : value); 1088 } 1089 }); 1090 }); 1091} 1092function effect(_ref2) { 1093 var state = _ref2.state; 1094 var initialStyles = { 1095 popper: { 1096 position: state.options.strategy, 1097 left: '0', 1098 top: '0', 1099 margin: '0' 1100 }, 1101 arrow: { 1102 position: 'absolute' 1103 }, 1104 reference: {} 1105 }; 1106 Object.assign(state.elements.popper.style, initialStyles.popper); 1107 state.styles = initialStyles; 1108 if (state.elements.arrow) { 1109 Object.assign(state.elements.arrow.style, initialStyles.arrow); 1110 } 1111 return function () { 1112 Object.keys(state.elements).forEach(function (name) { 1113 var element = state.elements[name]; 1114 var attributes = state.attributes[name] || {}; 1115 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 1116 1117 var style = styleProperties.reduce(function (style, property) { 1118 style[property] = ''; 1119 return style; 1120 }, {}); // arrow is optional + virtual elements 1121 1122 if (!(0, _instanceOf.isHTMLElement)(element) || !(0, _getNodeName.default)(element)) { 1123 return; 1124 } 1125 Object.assign(element.style, style); 1126 Object.keys(attributes).forEach(function (attribute) { 1127 element.removeAttribute(attribute); 1128 }); 1129 }); 1130 }; 1131} // eslint-disable-next-line import/no-unused-modules 1132var _default = { 1133 name: 'applyStyles', 1134 enabled: true, 1135 phase: 'write', 1136 fn: applyStyles, 1137 effect: effect, 1138 requires: ['computeStyles'] 1139}; 1140exports.default = _default; 1141 1142},{"../dom-utils/getNodeName.js":11,"../dom-utils/instanceOf.js":20}],28:[function(require,module,exports){ 1143(function (process){(function (){ 1144"use strict"; 1145 1146Object.defineProperty(exports, "__esModule", { 1147 value: true 1148}); 1149exports.default = void 0; 1150var _getBasePlacement = _interopRequireDefault(require("../utils/getBasePlacement.js")); 1151var _getLayoutRect = _interopRequireDefault(require("../dom-utils/getLayoutRect.js")); 1152var _contains = _interopRequireDefault(require("../dom-utils/contains.js")); 1153var _getOffsetParent = _interopRequireDefault(require("../dom-utils/getOffsetParent.js")); 1154var _getMainAxisFromPlacement = _interopRequireDefault(require("../utils/getMainAxisFromPlacement.js")); 1155var _within = require("../utils/within.js"); 1156var _mergePaddingObject = _interopRequireDefault(require("../utils/mergePaddingObject.js")); 1157var _expandToHashMap = _interopRequireDefault(require("../utils/expandToHashMap.js")); 1158var _enums = require("../enums.js"); 1159var _instanceOf = require("../dom-utils/instanceOf.js"); 1160function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1161// eslint-disable-next-line import/no-unused-modules 1162 1163var toPaddingObject = function toPaddingObject(padding, state) { 1164 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 1165 placement: state.placement 1166 })) : padding; 1167 return (0, _mergePaddingObject.default)(typeof padding !== 'number' ? padding : (0, _expandToHashMap.default)(padding, _enums.basePlacements)); 1168}; 1169function arrow(_ref) { 1170 var _state$modifiersData$; 1171 var state = _ref.state, 1172 name = _ref.name, 1173 options = _ref.options; 1174 var arrowElement = state.elements.arrow; 1175 var popperOffsets = state.modifiersData.popperOffsets; 1176 var basePlacement = (0, _getBasePlacement.default)(state.placement); 1177 var axis = (0, _getMainAxisFromPlacement.default)(basePlacement); 1178 var isVertical = [_enums.left, _enums.right].indexOf(basePlacement) >= 0; 1179 var len = isVertical ? 'height' : 'width'; 1180 if (!arrowElement || !popperOffsets) { 1181 return; 1182 }
1183 var paddingObject = toPaddingObject(options.padding, state); 1184 var arrowRect = (0, _getLayoutRect.default)(arrowElement); 1185 var minProp = axis === 'y' ? _enums.top : _enums.left; 1186 var maxProp = axis === 'y' ? _enums.bottom : _enums.right; 1187 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 1188 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 1189 var arrowOffsetParent = (0, _getOffsetParent.default)(arrowElement); 1190 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 1191 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 1192 // outside of the popper bounds 1193 1194 var min = paddingObject[minProp]; 1195 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 1196 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 1197 var offset = (0, _within.within)(min, center, max); // Prevents breaking syntax highlighting... 1198 1199 var axisProp = axis; 1200 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 1201} 1202function effect(_ref2) { 1203 var state = _ref2.state, 1204 options = _ref2.options; 1205 var _options$element = options.element, 1206 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 1207 if (arrowElement == null) { 1208 return; 1209 } // CSS selector 1210 1211 if (typeof arrowElement === 'string') { 1212 arrowElement = state.elements.popper.querySelector(arrowElement); 1213 if (!arrowElement) { 1214 return; 1215 } 1216 } 1217 if (process.env.NODE_ENV !== "production") { 1218 if (!(0, _instanceOf.isHTMLElement)(arrowElement)) { 1219 console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); 1220 } 1221 } 1222 if (!(0, _contains.default)(state.elements.popper, arrowElement)) { 1223 if (process.env.NODE_ENV !== "production") { 1224 console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); 1225 } 1226 return; 1227 } 1228 state.elements.arrow = arrowElement; 1229} // eslint-disable-next-line import/no-unused-modules 1230var _default = { 1231 name: 'arrow', 1232 enabled: true, 1233 phase: 'main', 1234 fn: arrow, 1235 effect: effect, 1236 requires: ['popperOffsets'], 1237 requiresIfExists: ['preventOverflow'] 1238}; 1239exports.default = _default; 1240 1241}).call(this)}).call(this,require('_process')) 1242},{"../dom-utils/contains.js":2,"../dom-utils/getLayoutRect.js":10,"../dom-utils/getOffsetParent.js":13,"../dom-utils/instanceOf.js":20,"../enums.js":25,"../utils/expandToHashMap.js":43,"../utils/getBasePlacement.js":46,"../utils/getMainAxisFromPlacement.js":48,"../utils/mergePaddingObject.js":54,"../utils/within.js":60,"_process":64}],29:[function(require,module,exports){ 1243(function (process){(function (){ 1244"use strict"; 1245 1246Object.defineProperty(exports, "__esModule", { 1247 value: true 1248}); 1249exports.default = void 0; 1250exports.mapToStyles = mapToStyles; 1251var _enums = require("../enums.js"); 1252var _getOffsetParent = _interopRequireDefault(require("../dom-utils/getOffsetParent.js")); 1253var _getWindow = _interopRequireDefault(require("../dom-utils/getWindow.js")); 1254var _getDocumentElement = _interopRequireDefault(require("../dom-utils/getDocumentElement.js")); 1255var _getComputedStyle = _interopRequireDefault(require("../dom-utils/getComputedStyle.js")); 1256var _getBasePlacement = _interopRequireDefault(require("../utils/getBasePlacement.js")); 1257var _getVariation = _interopRequireDefault(require("../utils/getVariation.js")); 1258var _math = require("../utils/math.js"); 1259function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1260// eslint-disable-next-line import/no-unused-modules 1261 1262var unsetSides = { 1263 top: 'auto', 1264 right: 'auto', 1265 bottom: 'auto', 1266 left: 'auto' 1267}; // Round the offsets to the nearest suitable subpixel based on the DPR. 1268// Zooming can change the DPR, but it seems to report a value that will 1269// cleanly divide the values into the appropriate subpixels. 1270 1271function roundOffsetsByDPR(_ref) { 1272 var x = _ref.x, 1273 y = _ref.y; 1274 var win = window; 1275 var dpr = win.devicePixelRatio || 1; 1276 return { 1277 x: (0, _math.round)(x * dpr) / dpr || 0, 1278 y: (0, _math.round)(y * dpr) / dpr || 0 1279 }; 1280} 1281function mapToStyles(_ref2) { 1282 var _Object$assign2; 1283 var popper = _ref2.popper, 1284 popperRect = _ref2.popperRect, 1285 placement = _ref2.placement, 1286 variation = _ref2.variation, 1287 offsets = _ref2.offsets, 1288 position = _ref2.position, 1289 gpuAcceleration = _ref2.gpuAcceleration, 1290 adaptive = _ref2.adaptive, 1291 roundOffsets = _ref2.roundOffsets, 1292 isFixed = _ref2.isFixed; 1293 var _offsets$x = offsets.x, 1294 x = _offsets$x === void 0 ? 0 : _offsets$x, 1295 _offsets$y = offsets.y, 1296 y = _offsets$y === void 0 ? 0 : _offsets$y; 1297 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 1298 x: x, 1299 y: y 1300 }) : { 1301 x: x, 1302 y: y 1303 }; 1304 x = _ref3.x; 1305 y = _ref3.y; 1306 var hasX = offsets.hasOwnProperty('x'); 1307 var hasY = offsets.hasOwnProperty('y'); 1308 var sideX = _enums.left; 1309 var sideY = _enums.top; 1310 var win = window; 1311 if (adaptive) { 1312 var offsetParent = (0, _getOffsetParent.default)(popper); 1313 var heightProp = 'clientHeight';
1314 var widthProp = 'clientWidth'; 1315 if (offsetParent === (0, _getWindow.default)(popper)) { 1316 offsetParent = (0, _getDocumentElement.default)(popper); 1317 if ((0, _getComputedStyle.default)(offsetParent).position !== 'static' && position === 'absolute') { 1318 heightProp = 'scrollHeight'; 1319 widthProp = 'scrollWidth'; 1320 } 1321 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 1322 1323 offsetParent = offsetParent; 1324 if (placement === _enums.top || (placement === _enums.left || placement === _enums.right) && variation === _enums.end) { 1325 sideY = _enums.bottom; 1326 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : 1327 // $FlowFixMe[prop-missing] 1328 offsetParent[heightProp]; 1329 y -= offsetY - popperRect.height; 1330 y *= gpuAcceleration ? 1 : -1; 1331 } 1332 if (placement === _enums.left || (placement === _enums.top || placement === _enums.bottom) && variation === _enums.end) { 1333 sideX = _enums.right; 1334 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : 1335 // $FlowFixMe[prop-missing] 1336 offsetParent[widthProp]; 1337 x -= offsetX - popperRect.width; 1338 x *= gpuAcceleration ? 1 : -1; 1339 } 1340 } 1341 var commonStyles = Object.assign({ 1342 position: position 1343 }, adaptive && unsetSides); 1344 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 1345 x: x, 1346 y: y 1347 }) : { 1348 x: x, 1349 y: y 1350 }; 1351 x = _ref4.x; 1352 y = _ref4.y; 1353 if (gpuAcceleration) { 1354 var _Object$assign; 1355 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)); 1356 } 1357 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 1358} 1359function computeStyles(_ref5) { 1360 var state = _ref5.state, 1361 options = _ref5.options; 1362 var _options$gpuAccelerat = options.gpuAcceleration, 1363 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 1364 _options$adaptive = options.adaptive, 1365 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 1366 _options$roundOffsets = options.roundOffsets, 1367 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 1368 if (process.env.NODE_ENV !== "production") { 1369 var transitionProperty = (0, _getComputedStyle.default)(state.elements.popper).transitionProperty || ''; 1370 if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { 1371 return transitionProperty.indexOf(property) >= 0; 1372 })) { 1373 console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); 1374 } 1375 } 1376 var commonStyles = { 1377 placement: (0, _getBasePlacement.default)(state.placement), 1378 variation: (0, _getVariation.default)(state.placement), 1379 popper: state.elements.popper, 1380 popperRect: state.rects.popper, 1381 gpuAcceleration: gpuAcceleration, 1382 isFixed: state.options.strategy === 'fixed' 1383 }; 1384 if (state.modifiersData.popperOffsets != null) { 1385 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 1386 offsets: state.modifiersData.popperOffsets, 1387 position: state.options.strategy, 1388 adaptive: adaptive, 1389 roundOffsets: roundOffsets 1390 }))); 1391 } 1392 if (state.modifiersData.arrow != null) { 1393 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 1394 offsets: state.modifiersData.arrow, 1395 position: 'absolute', 1396 adaptive: false, 1397 roundOffsets: roundOffsets 1398 }))); 1399 } 1400 state.attributes.popper = Object.assign({}, state.attributes.popper, { 1401 'data-popper-placement': state.placement 1402 }); 1403} // eslint-disable-next-line import/no-unused-modules 1404var _default = { 1405 name: 'computeStyles', 1406 enabled: true, 1407 phase: 'beforeWrite', 1408 fn: computeStyles, 1409 data: {} 1410}; 1411exports.default = _default; 1412 1413}).call(this)}).call(this,require('_process')) 1414},{"../dom-utils/getComputedStyle.js":6,"../dom-utils/getDocumentElement.js":7,"../dom-utils/getOffsetParent.
1414js":13,"../dom-utils/getWindow.js":17,"../enums.js":25,"../utils/getBasePlacement.js":46,"../utils/getVariation.js":51,"../utils/math.js":52,"_process":64}],30:[function(require,module,exports){ 1415"use strict"; 1416 1417Object.defineProperty(exports, "__esModule", { 1418 value: true 1419}); 1420exports.default = void 0; 1421var _getWindow = _interopRequireDefault(require("../dom-utils/getWindow.js")); 1422function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1423// eslint-disable-next-line import/no-unused-modules 1424 1425var passive = { 1426 passive: true 1427}; 1428function effect(_ref) { 1429 var state = _ref.state, 1430 instance = _ref.instance, 1431 options = _ref.options; 1432 var _options$scroll = options.scroll, 1433 scroll = _options$scroll === void 0 ? true : _options$scroll, 1434 _options$resize = options.resize, 1435 resize = _options$resize === void 0 ? true : _options$resize; 1436 var window = (0, _getWindow.default)(state.elements.popper); 1437 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 1438 if (scroll) { 1439 scrollParents.forEach(function (scrollParent) { 1440 scrollParent.addEventListener('scroll', instance.update, passive); 1441 }); 1442 } 1443 if (resize) { 1444 window.addEventListener('resize', instance.update, passive); 1445 } 1446 return function () { 1447 if (scroll) { 1448 scrollParents.forEach(function (scrollParent) { 1449 scrollParent.removeEventListener('scroll', instance.update, passive); 1450 }); 1451 } 1452 if (resize) { 1453 window.removeEventListener('resize', instance.update, passive); 1454 } 1455 }; 1456} // eslint-disable-next-line import/no-unused-modules 1457var _default = { 1458 name: 'eventListeners', 1459 enabled: true, 1460 phase: 'write', 1461 fn: function fn() {}, 1462 effect: effect, 1463 data: {} 1464}; 1465exports.default = _default; 1466 1467},{"../dom-utils/getWindow.js":17}],31:[function(require,module,exports){ 1468"use strict"; 1469 1470Object.defineProperty(exports, "__esModule", { 1471 value: true 1472}); 1473exports.default = void 0; 1474var _getOppositePlacement = _interopRequireDefault(require("../utils/getOppositePlacement.js")); 1475var _getBasePlacement = _interopRequireDefault(require("../utils/getBasePlacement.js")); 1476var _getOppositeVariationPlacement = _interopRequireDefault(require("../utils/getOppositeVariationPlacement.js")); 1477var _detectOverflow = _interopRequireDefault(require("../utils/detectOverflow.js")); 1478var _computeAutoPlacement = _interopRequireDefault(require("../utils/computeAutoPlacement.js")); 1479var _enums = require("../enums.js"); 1480var _getVariation = _interopRequireDefault(require("../utils/getVariation.js")); 1481function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1482// eslint-disable-next-line import/no-unused-modules 1483 1484function getExpandedFallbackPlacements(placement) { 1485 if ((0, _getBasePlacement.default)(placement) === _enums.auto) { 1486 return []; 1487 } 1488 var oppositePlacement = (0, _getOppositePlacement.default)(placement); 1489 return [(0, _getOppositeVariationPlacement.default)(placement), oppositePlacement, (0, _getOppositeVariationPlacement.default)(oppositePlacement)]; 1490} 1491function flip(_ref) { 1492 var state = _ref.state, 1493 options = _ref.options, 1494 name = _ref.name; 1495 if (state.modifiersData[name]._skip) { 1496 return; 1497 } 1498 var _options$mainAxis = options.mainAxis, 1499 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 1500 _options$altAxis = options.altAxis, 1501 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 1502 specifiedFallbackPlacements = options.fallbackPlacements, 1503 padding = options.padding, 1504 boundary = options.boundary, 1505 rootBoundary = options.rootBoundary, 1506 altBoundary = options.altBoundary, 1507 _options$flipVariatio = options.flipVariations, 1508 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 1509 allowedAutoPlacements = options.allowedAutoPlacements; 1510 var preferredPlacement = state.options.placement; 1511 var basePlacement = (0, _getBasePlacement.default)(preferredPlacement); 1512 var isBasePlacement = basePlacement === preferredPlacement; 1513 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0, _getOppositePlacement.default)(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 1514 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 1515 return acc.concat((0, _getBasePlacement.default)(placement) === _enums.auto ? (0, _computeAutoPlacement.default)(state, { 1516 placement: placement, 1517 boundary: boundary, 1518 rootBoundary: rootBoundary, 1519 padding: padding, 1520 flipVariations: flipVariations, 1521 allowedAutoPlacements: allowedAutoPlacements 1522 }) : placement); 1523 }, []); 1524 var referenceRect = state.rects.reference; 1525 var popperRect = state.rects.popper; 1526 var checksMap = new Map(); 1527 var makeFallbackChecks = true; 1528 var firstFittingPlacement = placements[0]; 1529 for (var i = 0; i < placements.length; i++) { 1530 var placement = placements[i]; 1531 var _basePlacement = (0, _getBasePlacement.default)(placement); 1532 var isStartVariation = (0, _getVariation.default)(placement) === _enums.start; 1533 var isVertical = [_enums.top, _enums.bottom].indexOf(_basePlacement) >= 0; 1534 var len = isVertical ? 'width' : 'height';
1535 var overflow = (0, _detectOverflow.default)(state, { 1536 placement: placement, 1537 boundary: boundary, 1538 rootBoundary: rootBoundary, 1539 altBoundary: altBoundary, 1540 padding: padding 1541 }); 1542 var mainVariationSide = isVertical ? isStartVariation ? _enums.right : _enums.left : isStartVariation ? _enums.bottom : _enums.top; 1543 if (referenceRect[len] > popperRect[len]) { 1544 mainVariationSide = (0, _getOppositePlacement.default)(mainVariationSide); 1545 } 1546 var altVariationSide = (0, _getOppositePlacement.default)(mainVariationSide); 1547 var checks = []; 1548 if (checkMainAxis) { 1549 checks.push(overflow[_basePlacement] <= 0); 1550 } 1551 if (checkAltAxis) { 1552 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 1553 } 1554 if (checks.every(function (check) { 1555 return check; 1556 })) { 1557 firstFittingPlacement = placement; 1558 makeFallbackChecks = false; 1559 break; 1560 } 1561 checksMap.set(placement, checks); 1562 } 1563 if (makeFallbackChecks) { 1564 // `2` may be desired in some cases â research later 1565 var numberOfChecks = flipVariations ? 3 : 1; 1566 var _loop = function _loop(_i) { 1567 var fittingPlacement = placements.find(function (placement) { 1568 var checks = checksMap.get(placement); 1569 if (checks) { 1570 return checks.slice(0, _i).every(function (check) { 1571 return check; 1572 }); 1573 } 1574 }); 1575 if (fittingPlacement) { 1576 firstFittingPlacement = fittingPlacement; 1577 return "break"; 1578 } 1579 }; 1580 for (var _i = numberOfChecks; _i > 0; _i--) { 1581 var _ret = _loop(_i); 1582 if (_ret === "break") break; 1583 } 1584 } 1585 if (state.placement !== firstFittingPlacement) { 1586 state.modifiersData[name]._skip = true; 1587 state.placement = firstFittingPlacement; 1588 state.reset = true; 1589 } 1590} // eslint-disable-next-line import/no-unused-modules 1591var _default = { 1592 name: 'flip', 1593 enabled: true, 1594 phase: 'main', 1595 fn: flip, 1596 requiresIfExists: ['offset'], 1597 data: { 1598 _skip: false 1599 } 1600}; 1601exports.default = _default; 1602 1603},{"../enums.js":25,"../utils/computeAutoPlacement.js":39,"../utils/detectOverflow.js":42,"../utils/getBasePlacement.js":46,"../utils/getOppositePlacement.js":49,"../utils/getOppositeVariationPlacement.js":50,"../utils/getVariation.js":51}],32:[function(require,module,exports){ 1604"use strict"; 1605 1606Object.defineProperty(exports, "__esModule", { 1607 value: true 1608}); 1609exports.default = void 0; 1610var _enums = require("../enums.js"); 1611var _detectOverflow = _interopRequireDefault(require("../utils/detectOverflow.js")); 1612function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1613function getSideOffsets(overflow, rect, preventedOffsets) { 1614 if (preventedOffsets === void 0) { 1615 preventedOffsets = { 1616 x: 0, 1617 y: 0 1618 }; 1619 } 1620 return { 1621 top: overflow.top - rect.height - preventedOffsets.y, 1622 right: overflow.right - rect.width + preventedOffsets.x, 1623 bottom: overflow.bottom - rect.height + preventedOffsets.y, 1624 left: overflow.left - rect.width - preventedOffsets.x 1625 }; 1626} 1627function isAnySideFullyClipped(overflow) { 1628 return [_enums.top, _enums.right, _enums.bottom, _enums.left].some(function (side) { 1629 return overflow[side] >= 0; 1630 }); 1631} 1632function hide(_ref) { 1633 var state = _ref.state, 1634 name = _ref.name; 1635 var referenceRect = state.rects.reference; 1636 var popperRect = state.rects.popper; 1637 var preventedOffsets = state.modifiersData.preventOverflow; 1638 var referenceOverflow = (0, _detectOverflow.default)(state, { 1639 elementContext: 'reference' 1640 }); 1641 var popperAltOverflow = (0, _detectOverflow.default)(state, { 1642 altBoundary: true 1643 }); 1644 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 1645 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 1646 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 1647 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 1648 state.modifiersData[name] = { 1649 referenceClippingOffsets: referenceClippingOffsets, 1650 popperEscapeOffsets: popperEscapeOffsets, 1651 isReferenceHidden: isReferenceHidden, 1652 hasPopperEscaped: hasPopperEscaped 1653 }; 1654 state.attributes.popper = Object.assign({}, state.attributes.popper, { 1655 'data-popper-reference-hidden': isReferenceHidden, 1656 'data-popper-escaped': hasPopperEscaped 1657 }); 1658} // eslint-disable-next-line import/no-unused-modules 1659var _default = { 1660 name: 'hide', 1661 enabled: true, 1662 phase: 'main', 1663 requiresIfExists: ['preventOverflow'], 1664 fn: hide 1665}; 1666exports.default = _default; 1667 1668},{"../enums.js":25,"../utils/detectOverflow.js":42}],33:[function(require,module,exports){ 1669"use strict"; 1670 1671Object.defineProperty(exports, "__esModule", { 1672 value: true 1673}); 1674Object.defineProperty(exports, "applyStyles", { 1675 enumerable: true, 1676 get: function () { 1677 return _applyStyles.default; 1678 } 1679}); 1680Object.defineProperty(exports, "arrow", { 1681 enumerable: true, 1682 get: function () { 1683 return _arrow.default; 1684 } 1685}); 1686Object.defineProperty(exports, "computeStyles", { 1687 enumerable: true, 1688 get: function () { 1689 return _computeStyles.default; 1690 } 1691}); 1692Object.defineProperty(exports, "eventListeners", { 1693 enumerable: true, 1694 get: function () { 1695 return _eventListeners.default; 1696 } 1697}); 1698Object.defineProperty(exports, "flip", { 1699 enumerable: true, 1700 get: function () { 1701 return _flip.default; 1702 } 1703}); 1704Object.defineProperty(exports, "hide", { 1705 enumerable: true, 1706 get: function () { 1707 return _hide.default; 1708 } 1709}); 1710Object.defineProperty(exports, "offset", { 1711 enumerable: true, 1712 get: function () { 1713 return _offset.default; 1714 } 1715}); 1716Object.defineProperty(exports, "popperOffsets", { 1717 enumerable: true, 1718 get: function () { 1719 return _popperOffsets.default; 1720 } 1721}); 1722Object.defineProperty(exports, "preventOverflow", { 1723 enumerable: true, 1724 get: function () { 1725 return _preventOverflow.default; 1726 } 1727}); 1728var _applyStyles = _interopRequireDefault(require("./applyStyles.js")); 1729var _arrow = _interopRequireDefault(require("./arrow.js")); 1730var _computeStyles = _interopRequireDefault(require("./computeStyles.js")); 1731var _eventListeners = _interopRequireDefault(require("./eventListeners.js")); 1732var _flip = _interopRequireDefault(require("./flip.js")); 1733var _hide = _interopRequireDefault(require("./hide.js")); 1734var _offset = _interopRequireDefault(require("./offset.js")); 1735var _popperOffsets = _interopRequireDefault(require("./popperOffsets.js")); 1736var _preventOverflow = _interopRequireDefault(require("./preventOverflow.js")); 1737function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1738 1739},{"./applyStyles.js":27,"./arrow.js":28,"./computeStyles.js":29,"./eventListeners.js":30,"./flip.js":31,"./hide.js":32,"./offset.js":34,"./popperOffsets.js":35,"./preventOverflow.js":36}],34:[function(require,module,exports){ 1740"use strict"; 1741 1742Object.defineProperty(exports, "__esModule", { 1743 value: true 1744}); 1745exports.default = void 0; 1746exports.distanceAndSkiddingToXY = distanceAndSkiddingToXY; 1747var _getBasePlacement = _interopRequireDefault(require("../utils/getBasePlacement.js")); 1748var _enums = require("../enums.js"); 1749function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1750// eslint-disable-next-line import/no-unused-modules 1751 1752function distanceAndSkiddingToXY(placement, rects, offset) { 1753 var basePlacement = (0, _getBasePlacement.default)(placement); 1754 var invertDistance = [_enums.left, _enums.top].indexOf(basePlacement) >= 0 ? -1 : 1; 1755 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 1756 placement: placement 1757 })) : offset, 1758 skidding = _ref[0], 1759 distance = _ref[1]; 1760 skidding = skidding || 0; 1761 distance = (distance || 0) * invertDistance; 1762 return [_enums.left, _enums.right].indexOf(basePlacement) >= 0 ? { 1763 x: distance, 1764 y: skidding 1765 }
1765 : { 1766 x: skidding, 1767 y: distance 1768 }; 1769} 1770function offset(_ref2) { 1771 var state = _ref2.state, 1772 options = _ref2.options, 1773 name = _ref2.name; 1774 var _options$offset = options.offset, 1775 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 1776 var data = _enums.placements.reduce(function (acc, placement) { 1777 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 1778 return acc; 1779 }, {}); 1780 var _data$state$placement = data[state.placement], 1781 x = _data$state$placement.x, 1782 y = _data$state$placement.y; 1783 if (state.modifiersData.popperOffsets != null) { 1784 state.modifiersData.popperOffsets.x += x; 1785 state.modifiersData.popperOffsets.y += y; 1786 } 1787 state.modifiersData[name] = data; 1788} // eslint-disable-next-line import/no-unused-modules 1789var _default = { 1790 name: 'offset', 1791 enabled: true, 1792 phase: 'main', 1793 requires: ['popperOffsets'], 1794 fn: offset 1795}; 1796exports.default = _default; 1797 1798},{"../enums.js":25,"../utils/getBasePlacement.js":46}],35:[function(require,module,exports){ 1799"use strict"; 1800 1801Object.defineProperty(exports, "__esModule", { 1802 value: true 1803}); 1804exports.default = void 0; 1805var _computeOffsets = _interopRequireDefault(require("../utils/computeOffsets.js")); 1806function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1807function popperOffsets(_ref) { 1808 var state = _ref.state, 1809 name = _ref.name; 1810 // Offsets are the actual position the popper needs to have to be 1811 // properly positioned near its reference element 1812 // This is the most basic placement, and will be adjusted by 1813 // the modifiers in the next step 1814 state.modifiersData[name] = (0, _computeOffsets.default)({ 1815 reference: state.rects.reference, 1816 element: state.rects.popper, 1817 strategy: 'absolute', 1818 placement: state.placement 1819 }); 1820} // eslint-disable-next-line import/no-unused-modules 1821var _default = { 1822 name: 'popperOffsets', 1823 enabled: true, 1824 phase: 'read', 1825 fn: popperOffsets, 1826 data: {} 1827}; 1828exports.default = _default; 1829 1830},{"../utils/computeOffsets.js":40}],36:[function(require,module,exports){ 1831"use strict"; 1832 1833Object.defineProperty(exports, "__esModule", { 1834 value: true 1835}); 1836exports.default = void 0; 1837var _enums = require("../enums.js"); 1838var _getBasePlacement = _interopRequireDefault(require("../utils/getBasePlacement.js")); 1839var _getMainAxisFromPlacement = _interopRequireDefault(require("../utils/getMainAxisFromPlacement.js")); 1840var _getAltAxis = _interopRequireDefault(require("../utils/getAltAxis.js")); 1841var _within = require("../utils/within.js"); 1842var _getLayoutRect = _interopRequireDefault(require("../dom-utils/getLayoutRect.js")); 1843var _getOffsetParent = _interopRequireDefault(require("../dom-utils/getOffsetParent.js")); 1844var _detectOverflow = _interopRequireDefault(require("../utils/detectOverflow.js")); 1845var _getVariation = _interopRequireDefault(require("../utils/getVariation.js")); 1846var _getFreshSideObject = _interopRequireDefault(require("../utils/getFreshSideObject.js")); 1847var _math = require("../utils/math.js"); 1848function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1849function preventOverflow(_ref) { 1850 var state = _ref.state, 1851 options = _ref.options, 1852 name = _ref.name; 1853 var _options$mainAxis = options.mainAxis, 1854 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 1855 _options$altAxis = options.altAxis, 1856 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 1857 boundary = options.boundary, 1858 rootBoundary = options.rootBoundary, 1859 altBoundary = options.altBoundary, 1860 padding = options.padding, 1861 _options$tether = options.tether, 1862 tether = _options$tether === void 0 ? true : _options$tether, 1863 _options$tetherOffset = options.tetherOffset, 1864 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 1865 var overflow = (0, _detectOverflow.default)(state, { 1866 boundary: boundary, 1867 rootBoundary: rootBoundary, 1868 padding: padding, 1869 altBoundary: altBoundary 1870 }); 1871 var basePlacement = (0, _getBasePlacement.default)(state.placement); 1872 var variation = (0, _getVariation.default)(state.placement); 1873 var isBasePlacement = !variation; 1874 var mainAxis = (0, _getMainAxisFromPlacement.default)(basePlacement); 1875 var altAxis = (0, _getAltAxis.default)(mainAxis); 1876 var popperOffsets = state.modifiersData.popperOffsets; 1877 var referenceRect = state.rects.reference; 1878 var popperRect = state.rects.popper; 1879 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 1880 placement: state.placement 1881 })) : tetherOffset; 1882 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 1883 mainAxis: tetherOffsetValue, 1884 altAxis: tetherOffsetValue 1885 } : Object.assign({ 1886 mainAxis: 0, 1887 altAxis: 0 1888 }, tetherOffsetValue); 1889 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 1890 var data = { 1891 x: 0, 1892 y: 0 1893 }; 1894 if (!popperOffsets) { 1895 return; 1896 } 1897 if (checkMainAxis) { 1898 var _offsetModifierState$; 1899 var mainSide = mainAxis === 'y' ? _enums.top : _enums.left; 1900 var altSide = mainAxis === 'y' ? _enums.bottom : _enums.right; 1901 var len = mainAxis === 'y' ? 'height' : 'width'; 1902 var offset = popperOffsets[mainAxis]; 1903 var min = offset + overflow[mainSide]; 1904 var max = offset - overflow[altSide]; 1905 var additive = tether ? -popperRect[len] / 2 : 0; 1906 var minLen = variation === _enums.start ? referenceRect[len] : popperRect[len]; 1907 var maxLen = variation === _enums.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 1908 // outside the reference bounds 1909 1910 var arrowElement = state.elements.arrow; 1911 var arrowRect = tether && arrowElement ? (0, _getLayoutRect.default)(arrowElement) : { 1912 width: 0, 1913 height: 0 1914 };
1915 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0, _getFreshSideObject.default)(); 1916 var arrowPaddingMin = arrowPaddingObject[mainSide]; 1917 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 1918 // to include its full size in the calculation. If the reference is small 1919 // and near the edge of a boundary, the popper can overflow even if the 1920 // reference is not overflowing as well (e.g. virtual elements with no 1921 // width or height) 1922 1923 var arrowLen = (0, _within.within)(0, referenceRect[len], arrowRect[len]); 1924 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 1925 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 1926 var arrowOffsetParent = state.elements.arrow && (0, _getOffsetParent.default)(state.elements.arrow); 1927 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 1928 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 1929 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 1930 var tetherMax = offset + maxOffset - offsetModifierValue; 1931 var preventedOffset = (0, _within.within)(tether ? (0, _math.min)(min, tetherMin) : min, offset, tether ? (0, _math.max)(max, tetherMax) : max); 1932 popperOffsets[mainAxis] = preventedOffset; 1933 data[mainAxis] = preventedOffset - offset; 1934 } 1935 if (checkAltAxis) { 1936 var _offsetModifierState$2; 1937 var _mainSide = mainAxis === 'x' ? _enums.top : _enums.left; 1938 var _altSide = mainAxis === 'x' ? _enums.bottom : _enums.right; 1939 var _offset = popperOffsets[altAxis]; 1940 var _len = altAxis === 'y' ? 'height' : 'width'; 1941 var _min = _offset + overflow[_mainSide]; 1942 var _max = _offset - overflow[_altSide]; 1943 var isOriginSide = [_enums.top, _enums.left].indexOf(basePlacement) !== -1; 1944 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 1945 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 1946 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 1947 var _preventedOffset = tether && isOriginSide ? (0, _within.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0, _within.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 1948 popperOffsets[altAxis] = _preventedOffset; 1949 data[altAxis] = _preventedOffset - _offset; 1950 } 1951 state.modifiersData[name] = data; 1952} // eslint-disable-next-line import/no-unused-modules 1953var _default = { 1954 name: 'preventOverflow', 1955 enabled: true, 1956 phase: 'main', 1957 fn: preventOverflow, 1958 requiresIfExists: ['offset'] 1959}; 1960exports.default = _default; 1961 1962},{"../dom-utils/getLayoutRect.js":10,"../dom-utils/getOffsetParent.js":13,"../enums.js":25,"../utils/detectOverflow.js":42,"../utils/getAltAxis.js":45,"../utils/getBasePlacement.js":46,"../utils/getFreshSideObject.js":47,"../utils/getMainAxisFromPlacement.js":48,"../utils/getVariation.js":51,"../utils/math.js":52,"../utils/within.js":60}],37:[function(require,module,exports){ 1963"use strict"; 1964 1965Object.defineProperty(exports, "__esModule", { 1966 value: true 1967}); 1968exports.defaultModifiers = exports.createPopper = void 0; 1969Object.defineProperty(exports, "detectOverflow", { 1970 enumerable: true, 1971 get: function () { 1972 return _createPopper.detectOverflow; 1973 } 1974}); 1975Object.defineProperty(exports, "popperGenerator", { 1976 enumerable: true, 1977 get: function () { 1978 return _createPopper.popperGenerator; 1979 } 1980}); 1981var _createPopper = require("./createPopper.js"); 1982var _eventListeners = _interopRequireDefault(require("./modifiers/eventListeners.js")); 1983var _popperOffsets = _interopRequireDefault(require("./modifiers/popperOffsets.js")); 1984var _computeStyles = _interopRequireDefault(require("./modifiers/computeStyles.js")); 1985var _applyStyles = _interopRequireDefault(require("./modifiers/applyStyles.js")); 1986function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 1987var defaultModifiers = [_eventListeners.default, _popperOffsets.default, _computeStyles.default, _applyStyles.default]; 1988exports.defaultModifiers = defaultModifiers; 1989var createPopper = /*#__PURE__*/(0, _createPopper.popperGenerator)({ 1990 defaultModifiers: defaultModifiers 1991}); // eslint-disable-next-line import/no-unused-modules 1992exports.createPopper = createPopper; 1993 1994},{"./createPopper.js":1,"./modifiers/applyStyles.js":27,"./modifiers/computeStyles.js":29,"./modifiers/eventListeners.js":30,"./modifiers/popperOffsets.js":35}],38:[function(require,module,exports){ 1995"use strict"; 1996 1997Object.defineProperty(exports, "__esModule", { 1998 value: true 1999}); 2000var _exportNames = { 2001 createPopper: true, 2002 defaultModifiers: true, 2003 popperGenerator: true, 2004 detectOverflow: true, 2005 createPopperLite: true 2006}; 2007exports.createPopper = void 0; 2008Object.defineProperty(exports, "createPopperLite", { 2009 enumerable: true, 2010 get: function () { 2011 return _popperLite.createPopper; 2012 } 2013}); 2014exports.defaultModifiers = void 0; 2015Object.defineProperty(exports, "detectOverflow", { 2016 enumerable: true, 2017 get: function () { 2018 return _createPopper.detectOverflow; 2019 } 2020}); 2021Object.defineProperty(exports, "popperGenerator", { 2022 enumerable: true, 2023 get: function () { 2024 return _createPopper.popperGenerator; 2025 } 2026}); 2027var _createPopper = require("./createPopper.js"); 2028var _eventListeners = _interopRequireDefault(require("./modifiers/eventListeners.js")); 2029var _popperOffsets = _interopRequireDefault(require("./modifiers/popperOffsets.js")); 2030var _computeStyles = _interopRequireDefault(require("./modifiers/computeStyles.js")); 2031var _applyStyles = _interopRequireDefault(require("./modifiers/applyStyles.js")); 2032var _offset = _interopRequireDefault(require("./modifiers/offset.js")); 2033var _flip = _interopRequireDefault(require("./modifiers/flip.js")); 2034var _preventOverflow = _interopRequireDefault(require("./modifiers/preventOverflow.js")); 2035var _arrow = _interopRequireDefault(require("./modifiers/arrow.js")); 2036var _hide = _interopRequireDefault(require("./modifiers/hide.js")); 2037var _popperLite = require("./popper-lite.js"); 2038var _index = require("./modifiers/index.js");
2039Object.keys(_index).forEach(function (key) { 2040 if (key === "default" || key === "__esModule") return; 2041 if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; 2042 if (key in exports && exports[key] === _index[key]) return; 2043 Object.defineProperty(exports, key, { 2044 enumerable: true, 2045 get: function () { 2046 return _index[key]; 2047 } 2048 }); 2049}); 2050function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 2051var defaultModifiers = [_eventListeners.default, _popperOffsets.default, _computeStyles.default, _applyStyles.default, _offset.default, _flip.default, _preventOverflow.default, _arrow.default, _hide.default]; 2052exports.defaultModifiers = defaultModifiers; 2053var createPopper = /*#__PURE__*/(0, _createPopper.popperGenerator)({ 2054 defaultModifiers: defaultModifiers 2055}); // eslint-disable-next-line import/no-unused-modules 2056exports.createPopper = createPopper; 2057 2058},{"./createPopper.js":1,"./modifiers/applyStyles.js":27,"./modifiers/arrow.js":28,"./modifiers/computeStyles.js":29,"./modifiers/eventListeners.js":30,"./modifiers/flip.js":31,"./modifiers/hide.js":32,"./modifiers/index.js":33,"./modifiers/offset.js":34,"./modifiers/popperOffsets.js":35,"./modifiers/preventOverflow.js":36,"./popper-lite.js":37}],39:[function(require,module,exports){ 2059(function (process){(function (){ 2060"use strict"; 2061 2062Object.defineProperty(exports, "__esModule", { 2063 value: true 2064}); 2065exports.default = computeAutoPlacement; 2066var _getVariation = _interopRequireDefault(require("./getVariation.js")); 2067var _enums = require("../enums.js"); 2068var _detectOverflow = _interopRequireDefault(require("./detectOverflow.js")); 2069var _getBasePlacement = _interopRequireDefault(require("./getBasePlacement.js")); 2070function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 2071function computeAutoPlacement(state, options) { 2072 if (options === void 0) { 2073 options = {}; 2074 } 2075 var _options = options, 2076 placement = _options.placement, 2077 boundary = _options.boundary, 2078 rootBoundary = _options.rootBoundary, 2079 padding = _options.padding, 2080 flipVariations = _options.flipVariations, 2081 _options$allowedAutoP = _options.allowedAutoPlacements, 2082 allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums.placements : _options$allowedAutoP; 2083 var variation = (0, _getVariation.default)(placement); 2084 var placements = variation ? flipVariations ? _enums.variationPlacements : _enums.variationPlacements.filter(function (placement) { 2085 return (0, _getVariation.default)(placement) === variation; 2086 }) : _enums.basePlacements; 2087 var allowedPlacements = placements.filter(function (placement) { 2088 return allowedAutoPlacements.indexOf(placement) >= 0; 2089 }); 2090 if (allowedPlacements.length === 0) { 2091 allowedPlacements = placements; 2092 if (process.env.NODE_ENV !== "production") { 2093 console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); 2094 } 2095 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 2096 2097 var overflows = allowedPlacements.reduce(function (acc, placement) { 2098 acc[placement] = (0, _detectOverflow.default)(state, { 2099 placement: placement, 2100 boundary: boundary, 2101 rootBoundary: rootBoundary, 2102 padding: padding 2103 })[(0, _getBasePlacement.default)(placement)]; 2104 return acc; 2105 }, {}); 2106 return Object.keys(overflows).sort(function (a, b) { 2107 return overflows[a] - overflows[b]; 2108 }); 2109} 2110 2111}).call(this)}).call(this,require('_process')) 2112},{"../enums.js":25,"./detectOverflow.js":42,"./getBasePlacement.js":46,"./getVariation.js":51,"_process":64}],40:[function(require,module,exports){ 2113"use strict"; 2114 2115Object.defineProperty(exports, "__esModule", { 2116 value: true 2117}); 2118exports.default = computeOffsets; 2119var _getBasePlacement = _interopRequireDefault(require("./getBasePlacement.js")); 2120var _getVariation = _interopRequireDefault(require("./getVariation.js")); 2121var _getMainAxisFromPlacement = _interopRequireDefault(require("./getMainAxisFromPlacement.js")); 2122var _enums = require("../enums.js"); 2123function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 2124function computeOffsets(_ref) { 2125 var reference = _ref.reference, 2126 element = _ref.element, 2127 placement = _ref.placement; 2128 var basePlacement = placement ? (0, _getBasePlacement.default)(placement) : null; 2129 var variation = placement ? (0, _getVariation.default)(placement) : null; 2130 var commonX = reference.x + reference.width / 2 - element.width / 2; 2131 var commonY = reference.y + reference.height / 2 - element.height / 2; 2132 var offsets; 2133 switch (basePlacement) { 2134 case _enums.top: 2135 offsets = { 2136 x: commonX, 2137 y: reference.y - element.height 2138 }; 2139 break; 2140 case _enums.bottom: 2141 offsets = { 2142 x: commonX, 2143 y: reference.y + reference.height 2144 }; 2145 break; 2146 case _enums.right: 2147 offsets = { 2148 x: reference.x + reference.width, 2149 y: commonY 2150 }; 2151 break; 2152 case _enums.left: 2153 offsets = { 2154 x: reference.x - element.width, 2155 y: commonY 2156 }; 2157 break; 2158 default: 2159 offsets = { 2160 x: reference.x, 2161 y: reference.y 2162 }; 2163 } 2164 var mainAxis = basePlacement ? (0, _getMainAxisFromPlacement.default)(basePlacement) : null; 2165 if (mainAxis != null) { 2166 var len = mainAxis === 'y' ? 'height' : 'width'; 2167 switch (variation) { 2168 case _enums.start: 2169 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 2170 break; 2171 case _enums.end: 2172 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 2173 break; 2174 default: 2175 } 2176 } 2177 return offsets; 2178} 2179 2180},{"../enums.js":25,"./getBasePlacement.js":46,"./getMainAxisFromPlacement.js":48,"./getVariation.js":51}],41:[function(require,module,exports){ 2181"use strict"; 2182 2183Object.defineProperty(exports, "__esModule", { 2184 value: true 2185}); 2186exports.default = debounce; 2187function debounce(fn) {
2188 var pending; 2189 return function () { 2190 if (!pending) { 2191 pending = new Promise(function (resolve) { 2192 Promise.resolve().then(function () { 2193 pending = undefined; 2194 resolve(fn()); 2195 }); 2196 }); 2197 } 2198 return pending; 2199 }; 2200} 2201 2202},{}],42:[function(require,module,exports){ 2203"use strict"; 2204 2205Object.defineProperty(exports, "__esModule", { 2206 value: true 2207}); 2208exports.default = detectOverflow; 2209var _getClippingRect = _interopRequireDefault(require("../dom-utils/getClippingRect.js")); 2210var _getDocumentElement = _interopRequireDefault(require("../dom-utils/getDocumentElement.js")); 2211var _getBoundingClientRect = _interopRequireDefault(require("../dom-utils/getBoundingClientRect.js")); 2212var _computeOffsets = _interopRequireDefault(require("./computeOffsets.js")); 2213var _rectToClientRect = _interopRequireDefault(require("./rectToClientRect.js")); 2214var _enums = require("../enums.js"); 2215var _instanceOf = require("../dom-utils/instanceOf.js"); 2216var _mergePaddingObject = _interopRequireDefault(require("./mergePaddingObject.js")); 2217var _expandToHashMap = _interopRequireDefault(require("./expandToHashMap.js")); 2218function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 2219// eslint-disable-next-line import/no-unused-modules 2220 2221function detectOverflow(state, options) { 2222 if (options === void 0) { 2223 options = {}; 2224 } 2225 var _options = options, 2226 _options$placement = _options.placement, 2227 placement = _options$placement === void 0 ? state.placement : _options$placement, 2228 _options$strategy = _options.strategy, 2229 strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, 2230 _options$boundary = _options.boundary, 2231 boundary = _options$boundary === void 0 ? _enums.clippingParents : _options$boundary, 2232 _options$rootBoundary = _options.rootBoundary, 2233 rootBoundary = _options$rootBoundary === void 0 ? _enums.viewport : _options$rootBoundary, 2234 _options$elementConte = _options.elementContext, 2235 elementContext = _options$elementConte === void 0 ? _enums.popper : _options$elementConte, 2236 _options$altBoundary = _options.altBoundary, 2237 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 2238 _options$padding = _options.padding, 2239 padding = _options$padding === void 0 ? 0 : _options$padding; 2240 var paddingObject = (0, _mergePaddingObject.default)(typeof padding !== 'number' ? padding : (0, _expandToHashMap.default)(padding, _enums.basePlacements)); 2241 var altContext = elementContext === _enums.popper ? _enums.reference : _enums.popper; 2242 var popperRect = state.rects.popper; 2243 var element = state.elements[altBoundary ? altContext : elementContext]; 2244 var clippingClientRect = (0, _getClippingRect.default)((0, _instanceOf.isElement)(element) ? element : element.contextElement || (0, _getDocumentElement.default)(state.elements.popper), boundary, rootBoundary, strategy); 2245 var referenceClientRect = (0, _getBoundingClientRect.default)(state.elements.reference); 2246 var popperOffsets = (0, _computeOffsets.default)({ 2247 reference: referenceClientRect, 2248 element: popperRect, 2249 strategy: 'absolute', 2250 placement: placement 2251 }); 2252 var popperClientRect = (0, _rectToClientRect.default)(Object.assign({}, popperRect, popperOffsets)); 2253 var elementClientRect = elementContext === _enums.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 2254 // 0 or negative = within the clipping rect 2255 2256 var overflowOffsets = { 2257 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 2258 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 2259 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 2260 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 2261 }; 2262 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 2263 2264 if (elementContext === _enums.popper && offsetData) { 2265 var offset = offsetData[placement]; 2266 Object.keys(overflowOffsets).forEach(function (key) { 2267 var multiply = [_enums.right, _enums.bottom].indexOf(key) >= 0 ? 1 : -1; 2268 var axis = [_enums.top, _enums.bottom].indexOf(key) >= 0 ? 'y' : 'x'; 2269 overflowOffsets[key] += offset[axis] * multiply; 2270 }); 2271 } 2272 return overflowOffsets; 2273} 2274 2275},{"../dom-utils/getBoundingClientRect.js":3,"../dom-utils/getClippingRect.js":4,"../dom-utils/getDocumentElement.js":7,"../dom-utils/instanceOf.js":20,"../enums.js":25,"./computeOffsets.js":40,"./expandToHashMap.js":43,"./mergePaddingOb
2275ject.js":54,"./rectToClientRect.js":56}],43:[function(require,module,exports){ 2276"use strict"; 2277 2278Object.defineProperty(exports, "__esModule", { 2279 value: true 2280}); 2281exports.default = expandToHashMap; 2282function expandToHashMap(value, keys) { 2283 return keys.reduce(function (hashMap, key) { 2284 hashMap[key] = value; 2285 return hashMap; 2286 }, {}); 2287} 2288 2289},{}],44:[function(require,module,exports){ 2290"use strict"; 2291 2292Object.defineProperty(exports, "__esModule", { 2293 value: true 2294}); 2295exports.default = format; 2296function format(str) { 2297 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 2298 args[_key - 1] = arguments[_key]; 2299 } 2300 return [].concat(args).reduce(function (p, c) { 2301 return p.replace(/%s/, c); 2302 }, str); 2303} 2304 2305},{}],45:[function(require,module,exports){ 2306"use strict"; 2307 2308Object.defineProperty(exports, "__esModule", { 2309 value: true 2310}); 2311exports.default = getAltAxis; 2312function getAltAxis(axis) { 2313 return axis === 'x' ? 'y' : 'x'; 2314} 2315 2316},{}],46:[function(require,module,exports){ 2317"use strict"; 2318 2319Object.defineProperty(exports, "__esModule", { 2320 value: true 2321}); 2322exports.default = getBasePlacement; 2323var _enums = require("../enums.js"); 2324function getBasePlacement(placement) { 2325 return placement.split('-')[0]; 2326} 2327 2328},{"../enums.js":25}],47:[function(require,module,exports){ 2329"use strict"; 2330 2331Object.defineProperty(exports, "__esModule", { 2332 value: true 2333}); 2334exports.default = getFreshSideObject; 2335function getFreshSideObject() { 2336 return { 2337 top: 0, 2338 right: 0, 2339 bottom: 0, 2340 left: 0 2341 }; 2342} 2343 2344},{}],48:[function(require,module,exports){ 2345"use strict"; 2346 2347Object.defineProperty(exports, "__esModule", { 2348 value: true 2349}); 2350exports.default = getMainAxisFromPlacement; 2351function getMainAxisFromPlacement(placement) { 2352 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 2353} 2354 2355},{}],49:[function(require,module,exports){ 2356"use strict"; 2357 2358Object.defineProperty(exports, "__esModule", { 2359 value: true 2360}); 2361exports.default = getOppositePlacement; 2362var hash = { 2363 left: 'right', 2364 right: 'left', 2365 bottom: 'top', 2366 top: 'bottom' 2367}; 2368function getOppositePlacement(placement) { 2369 return placement.replace(/left|right|bottom|top/g, function (matched) { 2370 return hash[matched]; 2371 }); 2372} 2373 2374},{}],50:[function(require,module,exports){ 2375"use strict"; 2376 2377Object.defineProperty(exports, "__esModule", { 2378 value: true 2379}); 2380exports.default = getOppositeVariationPlacement; 2381var hash = { 2382 start: 'end', 2383 end: 'start' 2384}; 2385function getOppositeVariationPlacement(placement) { 2386 return placement.replace(/start|end/g, function (matched) { 2387 return hash[matched]; 2388 }); 2389} 2390 2391},{}],51:[function(require,module,exports){ 2392"use strict"; 2393 2394Object.defineProperty(exports, "__esModule", { 2395 value: true 2396}); 2397exports.default = getVariation; 2398function getVariation(placement) { 2399 return placement.split('-')[1]; 2400} 2401 2402},{}],52:[function(require,module,exports){ 2403"use strict"; 2404 2405Object.defineProperty(exports, "__esModule", { 2406 value: true 2407}); 2408exports.round = exports.min = exports.max = void 0; 2409var max = Math.max; 2410exports.max = max; 2411var min = Math.min; 2412exports.min = min; 2413var round = Math.round; 2414exports.round = round; 2415 2416},{}],53:[function(require,module,exports){ 2417"use strict"; 2418 2419Object.defineProperty(exports, "__esModule", { 2420 value: true 2421}); 2422exports.default = mergeByName; 2423function mergeByName(modifiers) { 2424 var merged = modifiers.reduce(function (merged, current) { 2425 var existing = merged[current.name]; 2426 merged[current.name] = existing ? Object.assign({}, existing, current, { 2427 options: Object.assign({}, existing.options, current.options), 2428 data: Object.assign({}, existing.data, current.data) 2429 }) : current; 2430 return merged; 2431 }, {}); // IE11 does not support Object.values 2432 2433 return Object.keys(merged).map(function (key) { 2434 return merged[key]; 2435 }); 2436} 2437 2438},{}],54:[function(require,module,exports){ 2439"use strict"; 2440 2441Object.defineProperty(exports, "__esModule", { 2442 value: true 2443}); 2444exports.default = mergePaddingObject; 2445var _getFreshSideObject = _interopRequireDefault(require("./getFreshSideObject.js")); 2446function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2447function mergePaddingObject(paddingObject) { 2448 return Object.assign({}, (0, _getFreshSideObject.default)(), paddingObject); 2449} 2450 2451},{"./getFreshSideObject.js":47}],55:[function(require,module,exports){ 2452"use strict"; 2453 2454Object.defineProperty(exports, "__esModule", { 2455 value: true 2456}); 2457exports.default = orderModifiers; 2458var _enums = require("../enums.js"); 2459// source: https://stackoverflow.com/questions/49875255 2460 2461function order(modifiers) { 2462 var map = new Map(); 2463 var visited = new Set(); 2464 var result = []; 2465 modifiers.forEach(function (modifier) { 2466 map.set(modifier.name, modifier); 2467 }); // On visiting object, check for its dependencies and visit them recursively 2468 2469 function sort(modifier) { 2470 visited.add(modifier.name); 2471 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 2472 requires.forEach(function (dep) { 2473 if (!visited.has(dep)) { 2474 var depModifier = map.get(dep); 2475 if (depModifier) { 2476 sort(depModifier); 2477 } 2478 } 2479 }); 2480 result.push(modifier); 2481 } 2482 modifiers.forEach(function (modifier) { 2483 if (!visited.has(modifier.name)) { 2484 // check for visited object 2485 sort(modifier); 2486 } 2487 }); 2488 return result; 2489} 2490function orderModifiers(modifiers) { 2491 // order based on dependencies 2492 var orderedModifiers = order(modifiers); // order based on phase 2493 2494 return _enums.modifierPhases.reduce(function (acc, phase) { 2495 return acc.concat(orderedModifiers.filter(function (modifier) { 2496 return modifier.phase === phase; 2497 })); 2498 }, []); 2499} 2500 2501},{"../enums.js":25}],56:[function(require,module,exports){ 2502"use strict"; 2503 2504Object.defineProperty(exports, "__esModule", { 2505 value: true 2506}); 2507exports.default = rectToClientRect; 2508function rectToClientRect(rect) { 2509 return Object.assign({}, rect, { 2510 left: rect.x, 2511 top: rect.y, 2512 right: rect.x + rect.width, 2513 bottom: rect.y + rect.height 2514 }); 2515} 2516 2517},{}],57:[function(require,module,exports){ 2518"use strict"; 2519 2520Object.defineProperty(exports, "__esModule", { 2521 value: true 2522}); 2523exports.default = uniqueBy; 2524function uniqueBy(arr, fn) { 2525 var identifiers = new Set(); 2526 return arr.filter(function (item) { 2527 var identifier = fn(item); 2528 if (!identifiers.has(identifier)) { 2529 identifiers.add(identifier); 2530 return true; 2531 } 2532 }); 2533} 2534 2535},{}],58:[function(require,module,exports){ 2536"use strict"; 2537 2538Object.defineProperty(exports, "__esModule", { 2539 value: true 2540}); 2541exports.default = getUAString; 2542function getUAString() { 2543 var uaData = navigator.userAgentData; 2544 if (uaData != null && uaData.brands) { 2545 return uaData.brands.map(function (item) { 2546 return item.brand + "/" + item.version; 2547 }).join(' '); 2548 } 2549 return navigator.userAgent; 2550} 2551 2552},{}],59:[function(require,module,exports){ 2553"use strict"; 2554 2555Object.defineProperty(exports, "__esModule", { 2556 value: true 2557}); 2558exports.default = validateModifiers; 2559var _format = _interopRequireDefault(require("./format.js")); 2560var _enums = require("../enums.js"); 2561function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 2562var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; 2563var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; 2564var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; 2565function validateModifiers(modifiers) { 2566 modifiers.forEach(function (modifier) { 2567 [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)` 2568 .filter(function (value, index, self) { 2569 return self.indexOf(value) === index; 2570 }
2570).forEach(function (key) { 2571 switch (key) { 2572 case 'name': 2573 if (typeof modifier.name !== 'string') { 2574 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); 2575 } 2576 break; 2577 case 'enabled': 2578 if (typeof modifier.enabled !== 'boolean') { 2579 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); 2580 } 2581 break; 2582 case 'phase': 2583 if (_enums.modifierPhases.indexOf(modifier.phase) < 0) { 2584 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + _enums.modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); 2585 } 2586 break; 2587 case 'fn': 2588 if (typeof modifier.fn !== 'function') { 2589 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); 2590 } 2591 break; 2592 case 'effect': 2593 if (modifier.effect != null && typeof modifier.effect !== 'function') { 2594 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); 2595 } 2596 break; 2597 case 'requires': 2598 if (modifier.requires != null && !Array.isArray(modifier.requires)) { 2599 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); 2600 } 2601 break; 2602 case 'requiresIfExists': 2603 if (!Array.isArray(modifier.requiresIfExists)) { 2604 console.error((0, _format.default)(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); 2605 } 2606 break; 2607 case 'options': 2608 case 'data': 2609 break; 2610 default: 2611 console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { 2612 return "\"" + s + "\""; 2613 }).join(', ') + "; but \"" + key + "\" was provided."); 2614 } 2615 modifier.requires && modifier.requires.forEach(function (requirement) { 2616 if (modifiers.find(function (mod) { 2617 return mod.name === requirement; 2618 }) == null) { 2619 console.error((0, _format.default)(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); 2620 } 2621 }); 2622 }); 2623 }); 2624} 2625 2626},{"../enums.js":25,"./format.js":44}],60:[function(require,module,exports){ 2627"use strict"; 2628 2629Object.defineProperty(exports, "__esModule", { 2630 value: true 2631}); 2632exports.within = within; 2633exports.withinMaxClamp = withinMaxClamp; 2634var _math = require("./math.js"); 2635function within(min, value, max) { 2636 return (0, _math.max)(min, (0, _math.min)(value, max)); 2637} 2638function withinMaxClamp(min, value, max) { 2639 var v = within(min, value, max); 2640 return v > max ? max : v; 2641} 2642 2643},{"./math.js":52}],61:[function(require,module,exports){ 2644"use strict"; 2645 2646Object.defineProperty(exports, "__esModule", { 2647 value: true 2648}); 2649exports.Tooltip = exports.Toast = exports.Tab = exports.ScrollSpy = exports.Popover = exports.Offcanvas = exports.Modal = exports.Dropdown = exports.Collapse = exports.Carousel = exports.Button = exports.Alert = void 0; 2650var Popper = _interopRequireWildcard(require("@popperjs/core")); 2651function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } 2652function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
vendor: 9,062 bytes, lines 2652-2933
2652 if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } 2653/*! 2654 * Bootstrap v5.2.2 (https://getbootstrap.com/) 2655 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 2656 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2657 */ 2658 2659/** 2660 * -------------------------------------------------------------------------- 2661 * Bootstrap (v5.2.2): util/index.js 2662 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2663 * -------------------------------------------------------------------------- 2664 */ 2665const MAX_UID = 1000000; 2666const MILLISECONDS_MULTIPLIER = 1000; 2667const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp) 2668 2669const toType = object => { 2670 if (object === null || object === undefined) { 2671 return `${object}`; 2672 } 2673 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 2674}; 2675/** 2676 * Public Util API 2677 */ 2678 2679const getUID = prefix => { 2680 do { 2681 prefix += Math.floor(Math.random() * MAX_UID); 2682 } while (document.getElementById(prefix)); 2683 return prefix; 2684}; 2685const getSelector = element => { 2686 let selector = element.getAttribute('data-bs-target'); 2687 if (!selector || selector === '#') { 2688 let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, 2689 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 2690 // `document.querySelector` will rightfully complain it is invalid. 2691 // See https://github.com/twbs/bootstrap/issues/32273 2692 2693 if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { 2694 return null; 2695 } // Just in case some CMS puts out a full URL with the anchor appended 2696 2697 if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { 2698 hrefAttribute = `#${hrefAttribute.split('#')[1]}`; 2699 } 2700 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; 2701 } 2702 return selector; 2703}; 2704const getSelectorFromElement = element => { 2705 const selector = getSelector(element); 2706 if (selector) { 2707 return document.querySelector(selector) ? selector : null; 2708 } 2709 return null; 2710}; 2711const getElementFromSelector = element => { 2712 const selector = getSelector(element); 2713 return selector ? document.querySelector(selector) : null; 2714}; 2715const getTransitionDurationFromElement = element => { 2716 if (!element) { 2717 return 0; 2718 } // Get transition-duration of the element 2719 2720 let { 2721 transitionDuration, 2722 transitionDelay 2723 } = window.getComputedStyle(element); 2724 const floatTransitionDuration = Number.parseFloat(transitionDuration); 2725 const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 2726 2727 if (!floatTransitionDuration && !floatTransitionDelay) { 2728 return 0; 2729 } // If multiple durations are defined, take the first 2730 2731 transitionDuration = transitionDuration.split(',')[0]; 2732 transitionDelay = transitionDelay.split(',')[0]; 2733 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 2734}; 2735const triggerTransitionEnd = element => { 2736 element.dispatchEvent(new Event(TRANSITION_END)); 2737}; 2738const isElement = object => { 2739 if (!object || typeof object !== 'object') { 2740 return false; 2741 } 2742 if (typeof object.jquery !== 'undefined') { 2743 object = object[0]; 2744 } 2745 return typeof object.nodeType !== 'undefined'; 2746}; 2747const getElement = object => { 2748 // it's a jQuery object or a node element 2749 if (isElement(object)) { 2750 return object.jquery ? object[0] : object; 2751 } 2752 if (typeof object === 'string' && object.length > 0) { 2753 return document.querySelector(object); 2754 } 2755 return null; 2756}; 2757const isVisible = element => { 2758 if (!isElement(element) || element.getClientRects().length === 0) { 2759 return false; 2760 } 2761 const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed 2762 2763 const closedDetails = element.closest('details:not([open])'); 2764 if (!closedDetails) { 2765 return elementIsVisible; 2766 } 2767 if (closedDetails !== element) { 2768 const summary = element.closest('summary'); 2769 if (summary && summary.parentNode !== closedDetails) { 2770 return false; 2771 } 2772 if (summary === null) { 2773 return false; 2774 } 2775 } 2776 return elementIsVisible; 2777}; 2778const isDisabled = element => { 2779 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 2780 return true; 2781 } 2782 if (element.classList.contains('disabled')) { 2783 return true; 2784 } 2785 if (typeof element.disabled !== 'undefined') { 2786 return element.disabled; 2787 } 2788 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 2789}; 2790const findShadowRoot = element => { 2791 if (!document.documentElement.attachShadow) { 2792 return null; 2793 } // Can find the shadow root otherwise it'll return the document 2794 2795 if (typeof element.getRootNode === 'function') { 2796 const root = element.getRootNode(); 2797 return root instanceof ShadowRoot ? root : null; 2798 } 2799 if (element instanceof ShadowRoot) { 2800 return element; 2801 } // when we don't find a shadow root 2802 2803 if (!element.parentNode) { 2804 return null; 2805 } 2806 return findShadowRoot(element.parentNode); 2807}; 2808const noop = () => {}; 2809/** 2810 * Trick to restart an element's animation 2811 * 2812 * @param {HTMLElement} element 2813 * @return void 2814 * 2815 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 2816 */ 2817 2818const reflow = element => { 2819 element.offsetHeight; // eslint-disable-line no-unused-expressions 2820}; 2821 2822const getjQuery = () => { 2823 if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 2824 return window.jQuery; 2825 } 2826 return null; 2827}; 2828const DOMContentLoadedCallbacks = []; 2829const onDOMContentLoaded = callback => { 2830 if (document.readyState === 'loading') { 2831 // add listener on the first call when the document is in loading state 2832 if (!DOMContentLoadedCallbacks.length) { 2833 document.addEventListener('DOMContentLoaded', () => { 2834 for (const callback of DOMContentLoadedCallbacks) { 2835 callback(); 2836 } 2837 }); 2838 } 2839 DOMContentLoadedCallbacks.push(callback); 2840 } else { 2841 callback(); 2842 } 2843}; 2844const isRTL = () => document.documentElement.dir === 'rtl'; 2845const defineJQueryPlugin = plugin => { 2846 onDOMContentLoaded(() => { 2847 const $ = getjQuery(); 2848 /* istanbul ignore if */ 2849 2850 if ($) { 2851 const name = plugin.NAME; 2852 const JQUERY_NO_CONFLICT = $.fn[name]; 2853 $.fn[name] = plugin.jQueryInterface; 2854 $.fn[name].Constructor = plugin; 2855 $.fn[name].noConflict = () => { 2856 $.fn[name] = JQUERY_NO_CONFLICT; 2857 return plugin.jQueryInterface; 2858 }; 2859 } 2860 }); 2861}; 2862const execute = callback => { 2863 if (typeof callback === 'function') { 2864 callback(); 2865 } 2866}; 2867const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 2868 if (!waitForTransition) { 2869 execute(callback); 2870 return; 2871 } 2872 const durationPadding = 5; 2873 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; 2874 let called = false; 2875 const handler = ({ 2876 target 2877 }) => { 2878 if (target !== transitionElement) { 2879 return; 2880 } 2881 called = true; 2882 transitionElement.removeEventListener(TRANSITION_END, handler); 2883 execute(callback); 2884 }; 2885 transitionElement.addEventListener(TRANSITION_END, handler); 2886 setTimeout(() => { 2887 if (!called) { 2888 triggerTransitionEnd(transitionElement); 2889 } 2890 }, emulatedDuration); 2891}; 2892/** 2893 * Return the previous/next element of a list. 2894 * 2895 * @param {array} list The list of elements 2896 * @param activeElement The active element 2897 * @param shouldGetNext Choose to get next or previous element 2898 * @param isCycleAllowed 2899 * @return {Element|elem} The proper element 2900 */ 2901 2902const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 2903 const listLength = list.length; 2904 let index = list.indexOf(activeElement); // if the element does not exist in the list return an element 2905 // depending on the direction and if cycle is allowed 2906 2907 if (index === -1) { 2908 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 2909 } 2910 index += shouldGetNext ? 1 : -1; 2911 if (isCycleAllowed) { 2912 index = (index + listLength) % listLength; 2913 } 2914 return list[Math.max(0, Math.min(index, listLength - 1))]; 2915}; 2916 2917/** 2918 * -------------------------------------------------------------------------- 2919 * Bootstrap (v5.2.2): dom/event-handler.js 2920 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2921 * -------------------------------------------------------------------------- 2922 */ 2923/** 2924 * Constants 2925 */ 2926 2927const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 2928const stripNameRegex = /\..*/; 2929const stripUidRegex = /::\d+$/; 2930const eventRegistry = {}; // Events storage 2931 2932let uidEvent = 1; 2933const customEvents = {
vendor: 6,050 bytes, lines 2934-3075
2934 mouseenter: 'mouseover', 2935 mouseleave: 'mouseout' 2936}; 2937const 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']); 2938/** 2939 * Private methods 2940 */ 2941 2942function makeEventUid(element, uid) { 2943 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 2944} 2945function getElementEvents(element) { 2946 const uid = makeEventUid(element); 2947 element.uidEvent = uid; 2948 eventRegistry[uid] = eventRegistry[uid] || {}; 2949 return eventRegistry[uid]; 2950} 2951function bootstrapHandler(element, fn) { 2952 return function handler(event) { 2953 hydrateObj(event, { 2954 delegateTarget: element 2955 }); 2956 if (handler.oneOff) { 2957 EventHandler.off(element, event.type, fn); 2958 } 2959 return fn.apply(element, [event]); 2960 }; 2961} 2962function bootstrapDelegationHandler(element, selector, fn) { 2963 return function handler(event) { 2964 const domElements = element.querySelectorAll(selector); 2965 for (let { 2966 target 2967 } = event; target && target !== this; target = target.parentNode) { 2968 for (const domElement of domElements) { 2969 if (domElement !== target) { 2970 continue; 2971 } 2972 hydrateObj(event, { 2973 delegateTarget: target 2974 }); 2975 if (handler.oneOff) { 2976 EventHandler.off(element, event.type, selector, fn); 2977 } 2978 return fn.apply(target, [event]); 2979 } 2980 } 2981 }; 2982} 2983function findHandler(events, callable, delegationSelector = null) { 2984 return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); 2985} 2986function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 2987 const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check 2988 2989 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 2990 let typeEvent = getTypeEvent(originalTypeEvent); 2991 if (!nativeEvents.has(typeEvent)) { 2992 typeEvent = originalTypeEvent; 2993 } 2994 return [isDelegated, callable, typeEvent]; 2995} 2996function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 2997 if (typeof originalTypeEvent !== 'string' || !element) { 2998 return; 2999 } 3000 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 3001 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 3002 3003 if (originalTypeEvent in customEvents) { 3004 const wrapFunction = fn => { 3005 return function (event) { 3006 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 3007 return fn.call(this, event); 3008 } 3009 }; 3010 }; 3011 callable = wrapFunction(callable); 3012 } 3013 const events = getElementEvents(element); 3014 const handlers = events[typeEvent] || (events[typeEvent] = {}); 3015 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 3016 if (previousFunction) { 3017 previousFunction.oneOff = previousFunction.oneOff && oneOff; 3018 return; 3019 } 3020 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); 3021 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 3022 fn.delegationSelector = isDelegated ? handler : null; 3023 fn.callable = callable; 3024 fn.oneOff = oneOff; 3025 fn.uidEvent = uid; 3026 handlers[uid] = fn; 3027 element.addEventListener(typeEvent, fn, isDelegated); 3028} 3029function removeHandler(element, events, typeEvent, handler, delegationSelector) { 3030 const fn = findHandler(events[typeEvent], handler, delegationSelector); 3031 if (!fn) { 3032 return; 3033 } 3034 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 3035 delete events[typeEvent][fn.uidEvent]; 3036} 3037function removeNamespacedHandlers(element, events, typeEvent, namespace) { 3038 const storeElementEvent = events[typeEvent] || {}; 3039 for (const handlerKey of Object.keys(storeElementEvent)) { 3040 if (handlerKey.includes(namespace)) { 3041 const event = storeElementEvent[handlerKey]; 3042 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3043 } 3044 } 3045} 3046function getTypeEvent(event) { 3047 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 3048 event = event.replace(stripNameRegex, ''); 3049 return customEvents[event] || event; 3050} 3051const EventHandler = { 3052 on(element, event, handler, delegationFunction) { 3053 addHandler(element, event, handler, delegationFunction, false); 3054 }, 3055 one(element, event, handler, delegationFunction) { 3056 addHandler(element, event, handler, delegationFunction, true); 3057 }, 3058 off(element, originalTypeEvent, handler, delegationFunction) { 3059 if (typeof originalTypeEvent !== 'string' || !element) { 3060 return; 3061 } 3062 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3063 const inNamespace = typeEvent !== originalTypeEvent; 3064 const events = getElementEvents(element); 3065 const storeElementEvent = events[typeEvent] || {}; 3066 const isNamespace = originalTypeEvent.startsWith('.'); 3067 if (typeof callable !== 'undefined') { 3068 // Simplest case: handler is passed, remove that listener ONLY. 3069 if (!Object.keys(storeElementEvent).length) { 3070 return; 3071 } 3072 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 3073 return; 3074 } 3075 if (isNamespace) {
vendor: 7,370 bytes, lines 3076-3321
3076 for (const elementEvent of Object.keys(events)) { 3077 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 3078 } 3079 } 3080 for (const keyHandlers of Object.keys(storeElementEvent)) { 3081 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 3082 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 3083 const event = storeElementEvent[keyHandlers]; 3084 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3085 } 3086 } 3087 }, 3088 trigger(element, event, args) { 3089 if (typeof event !== 'string' || !element) { 3090 return null; 3091 } 3092 const $ = getjQuery(); 3093 const typeEvent = getTypeEvent(event); 3094 const inNamespace = event !== typeEvent; 3095 let jQueryEvent = null; 3096 let bubbles = true; 3097 let nativeDispatch = true; 3098 let defaultPrevented = false; 3099 if (inNamespace && $) { 3100 jQueryEvent = $.Event(event, args); 3101 $(element).trigger(jQueryEvent); 3102 bubbles = !jQueryEvent.isPropagationStopped(); 3103 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 3104 defaultPrevented = jQueryEvent.isDefaultPrevented(); 3105 } 3106 let evt = new Event(event, { 3107 bubbles, 3108 cancelable: true 3109 }); 3110 evt = hydrateObj(evt, args); 3111 if (defaultPrevented) { 3112 evt.preventDefault(); 3113 } 3114 if (nativeDispatch) { 3115 element.dispatchEvent(evt); 3116 } 3117 if (evt.defaultPrevented && jQueryEvent) { 3118 jQueryEvent.preventDefault(); 3119 } 3120 return evt; 3121 } 3122}; 3123function hydrateObj(obj, meta) { 3124 for (const [key, value] of Object.entries(meta || {})) { 3125 try { 3126 obj[key] = value; 3127 } catch (_unused) { 3128 Object.defineProperty(obj, key, { 3129 configurable: true, 3130 get() { 3131 return value; 3132 } 3133 }); 3134 } 3135 } 3136 return obj; 3137} 3138 3139/** 3140 * -------------------------------------------------------------------------- 3141 * Bootstrap (v5.2.2): dom/data.js 3142 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3143 * -------------------------------------------------------------------------- 3144 */ 3145 3146/** 3147 * Constants 3148 */ 3149const elementMap = new Map(); 3150const Data = { 3151 set(element, key, instance) { 3152 if (!elementMap.has(element)) { 3153 elementMap.set(element, new Map()); 3154 } 3155 const instanceMap = elementMap.get(element); // make it clear we only want one instance per element 3156 // can be removed later when multiple key/instances are fine to be used 3157 3158 if (!instanceMap.has(key) && instanceMap.size !== 0) { 3159 // eslint-disable-next-line no-console 3160 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 3161 return; 3162 } 3163 instanceMap.set(key, instance); 3164 }, 3165 get(element, key) { 3166 if (elementMap.has(element)) { 3167 return elementMap.get(element).get(key) || null; 3168 } 3169 return null; 3170 }, 3171 remove(element, key) { 3172 if (!elementMap.has(element)) { 3173 return; 3174 } 3175 const instanceMap = elementMap.get(element); 3176 instanceMap.delete(key); // free up element references if there are no instances left for an element 3177 3178 if (instanceMap.size === 0) { 3179 elementMap.delete(element); 3180 } 3181 } 3182}; 3183 3184/** 3185 * -------------------------------------------------------------------------- 3186 * Bootstrap (v5.2.2): dom/manipulator.js 3187 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3188 * -------------------------------------------------------------------------- 3189 */ 3190function normalizeData(value) { 3191 if (value === 'true') { 3192 return true; 3193 } 3194 if (value === 'false') { 3195 return false; 3196 } 3197 if (value === Number(value).toString()) { 3198 return Number(value); 3199 } 3200 if (value === '' || value === 'null') { 3201 return null; 3202 } 3203 if (typeof value !== 'string') { 3204 return value; 3205 } 3206 try { 3207 return JSON.parse(decodeURIComponent(value)); 3208 } catch (_unused) { 3209 return value; 3210 } 3211} 3212function normalizeDataKey(key) { 3213 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 3214} 3215const Manipulator = { 3216 setDataAttribute(element, key, value) { 3217 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 3218 }, 3219 removeDataAttribute(element, key) { 3220 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 3221 }, 3222 getDataAttributes(element) { 3223 if (!element) { 3224 return {}; 3225 } 3226 const attributes = {}; 3227 const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); 3228 for (const key of bsKeys) { 3229 let pureKey = key.replace(/^bs/, ''); 3230 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 3231 attributes[pureKey] = normalizeData(element.dataset[key]); 3232 } 3233 return attributes; 3234 }, 3235 getDataAttribute(element, key) { 3236 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 3237 } 3238}; 3239 3240/** 3241 * -------------------------------------------------------------------------- 3242 * Bootstrap (v5.2.2): util/config.js 3243 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3244 * -------------------------------------------------------------------------- 3245 */ 3246/** 3247 * Class definition 3248 */ 3249 3250class Config { 3251 // Getters 3252 static get Default() { 3253 return {}; 3254 } 3255 static get DefaultType() { 3256 return {}; 3257 } 3258 static get NAME() { 3259 throw new Error('You have to implement the static method "NAME", for each component!'); 3260 } 3261 _getConfig(config) { 3262 config = this._mergeConfigObj(config); 3263 config = this._configAfterMerge(config); 3264 this._typeCheckConfig(config); 3265 return config; 3266 } 3267 _configAfterMerge(config) { 3268 return config; 3269 } 3270 _mergeConfigObj(config, element) { 3271 const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse 3272 3273 return { 3274 ...this.constructor.Default, 3275 ...(typeof jsonConfig === 'object' ? jsonConfig : {}), 3276 ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}), 3277 ...(typeof config === 'object' ? config : {}) 3278 }; 3279 } 3280 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 3281 for (const property of Object.keys(configTypes)) { 3282 const expectedTypes = configTypes[property]; 3283 const value = config[property]; 3284 const valueType = isElement(value) ? 'element' : toType(value); 3285 if (!new RegExp(expectedTypes).test(valueType)) { 3286 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 3287 } 3288 } 3289 } 3290} 3291 3292/** 3293 * -------------------------------------------------------------------------- 3294 * Bootstrap (v5.2.2): base-component.js 3295 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3296 * -------------------------------------------------------------------------- 3297 */ 3298/** 3299 * Constants 3300 */ 3301 3302const VERSION = '5.2.2'; 3303/** 3304 * Class definition 3305 */ 3306 3307class BaseComponent extends Config { 3308 constructor(element, config) { 3309 super(); 3310 element = getElement(element); 3311 if (!element) { 3312 return; 3313 } 3314 this._element = element; 3315 this._config = this._getConfig(config); 3316 Data.set(this._element, this.constructor.DATA_KEY, this); 3317 } // Public 3318 3319 dispose() { 3320 Data.remove(this._element, this.constructor.DATA_KEY); 3321 EventHandler.off(this._element, this.constructor.EVENT_KEY);
vendor: 4,413 bytes, lines 3322-3475
3322 for (const propertyName of Object.getOwnPropertyNames(this)) { 3323 this[propertyName] = null; 3324 } 3325 } 3326 _queueCallback(callback, element, isAnimated = true) { 3327 executeAfterTransition(callback, element, isAnimated); 3328 } 3329 _getConfig(config) { 3330 config = this._mergeConfigObj(config, this._element); 3331 config = this._configAfterMerge(config); 3332 this._typeCheckConfig(config); 3333 return config; 3334 } // Static 3335 3336 static getInstance(element) { 3337 return Data.get(getElement(element), this.DATA_KEY); 3338 } 3339 static getOrCreateInstance(element, config = {}) { 3340 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 3341 } 3342 static get VERSION() { 3343 return VERSION; 3344 } 3345 static get DATA_KEY() { 3346 return `bs.${this.NAME}`; 3347 } 3348 static get EVENT_KEY() { 3349 return `.${this.DATA_KEY}`; 3350 } 3351 static eventName(name) { 3352 return `${name}${this.EVENT_KEY}`; 3353 } 3354} 3355 3356/** 3357 * -------------------------------------------------------------------------- 3358 * Bootstrap (v5.2.2): util/component-functions.js 3359 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3360 * -------------------------------------------------------------------------- 3361 */ 3362 3363const enableDismissTrigger = (component, method = 'hide') => { 3364 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 3365 const name = component.NAME; 3366 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 3367 if (['A', 'AREA'].includes(this.tagName)) { 3368 event.preventDefault(); 3369 } 3370 if (isDisabled(this)) { 3371 return; 3372 } 3373 const target = getElementFromSelector(this) || this.closest(`.${name}`); 3374 const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 3375 3376 instance[method](); 3377 }); 3378}; 3379 3380/** 3381 * -------------------------------------------------------------------------- 3382 * Bootstrap (v5.2.2): alert.js 3383 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3384 * -------------------------------------------------------------------------- 3385 */ 3386/** 3387 * Constants 3388 */ 3389 3390const NAME$f = 'alert'; 3391const DATA_KEY$a = 'bs.alert'; 3392const EVENT_KEY$b = `.${DATA_KEY$a}`; 3393const EVENT_CLOSE = `close${EVENT_KEY$b}`; 3394const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 3395const CLASS_NAME_FADE$5 = 'fade'; 3396const CLASS_NAME_SHOW$8 = 'show'; 3397/** 3398 * Class definition 3399 */ 3400 3401class Alert extends BaseComponent { 3402 // Getters 3403 static get NAME() { 3404 return NAME$f; 3405 } // Public 3406 3407 close() { 3408 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 3409 if (closeEvent.defaultPrevented) { 3410 return; 3411 } 3412 this._element.classList.remove(CLASS_NAME_SHOW$8); 3413 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 3414 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 3415 } // Private 3416 3417 _destroyElement() { 3418 this._element.remove(); 3419 EventHandler.trigger(this._element, EVENT_CLOSED); 3420 this.dispose(); 3421 } // Static 3422 3423 static jQueryInterface(config) { 3424 return this.each(function () { 3425 const data = Alert.getOrCreateInstance(this); 3426 if (typeof config !== 'string') { 3427 return; 3428 } 3429 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 3430 throw new TypeError(`No method named "${config}"`); 3431 } 3432 data[config](this); 3433 }); 3434 } 3435} 3436/** 3437 * Data API implementation 3438 */ 3439exports.Alert = Alert; 3440enableDismissTrigger(Alert, 'close'); 3441/** 3442 * jQuery 3443 */ 3444 3445defineJQueryPlugin(Alert); 3446 3447/** 3448 * -------------------------------------------------------------------------- 3449 * Bootstrap (v5.2.2): button.js 3450 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3451 * -------------------------------------------------------------------------- 3452 */ 3453/** 3454 * Constants 3455 */ 3456 3457const NAME$e = 'button'; 3458const DATA_KEY$9 = 'bs.button'; 3459const EVENT_KEY$a = `.${DATA_KEY$9}`; 3460const DATA_API_KEY$6 = '.data-api'; 3461const CLASS_NAME_ACTIVE$3 = 'active'; 3462const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 3463const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 3464/** 3465 * Class definition 3466 */ 3467 3468class Button extends BaseComponent { 3469 // Getters 3470 static get NAME() { 3471 return NAME$e; 3472 } // Public 3473 3474 toggle() { 3475 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle(
3475)` method 3476 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 3477 } // Static 3478 3479 static jQueryInterface(config) { 3480 return this.each(function () { 3481 const data = Button.getOrCreateInstance(this); 3482 if (config === 'toggle') { 3483 data[config](); 3484 } 3485 }); 3486 } 3487} 3488/** 3489 * Data API implementation 3490 */ 3491exports.Button = Button; 3492EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 3493 event.preventDefault(); 3494 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 3495 const data = Button.getOrCreateInstance(button); 3496 data.toggle(); 3497}); 3498/** 3499 * jQuery 3500 */ 3501 3502defineJQueryPlugin(Button); 3503 3504/** 3505 * -------------------------------------------------------------------------- 3506 * Bootstrap (v5.2.2): dom/selector-engine.js 3507 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3508 * -------------------------------------------------------------------------- 3509 */ 3510/** 3511 * Constants 3512 */ 3513 3514const SelectorEngine = { 3515 find(selector, element = document.documentElement) { 3516 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 3517 }, 3518 findOne(selector, element = document.documentElement) { 3519 return Element.prototype.querySelector.call(element, selector); 3520 }, 3521 children(element, selector) { 3522 return [].concat(...element.children).filter(child => child.matches(selector)); 3523 }, 3524 parents(element, selector) { 3525 const parents = []; 3526 let ancestor = element.parentNode.closest(selector); 3527 while (ancestor) { 3528 parents.push(ancestor); 3529 ancestor = ancestor.parentNode.closest(selector); 3530 } 3531 return parents; 3532 }, 3533 prev(element, selector) { 3534 let previous = element.previousElementSibling; 3535 while (previous) { 3536 if (previous.matches(selector)) { 3537 return [previous]; 3538 } 3539 previous = previous.previousElementSibling; 3540 } 3541 return []; 3542 }, 3543 // TODO: this is now unused; remove later along with prev() 3544 next(element, selector) { 3545 let next = element.nextElementSibling; 3546 while (next) { 3547 if (next.matches(selector)) { 3548 return [next]; 3549 } 3550 next = next.nextElementSibling; 3551 } 3552 return []; 3553 }, 3554 focusableChildren(element) { 3555 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); 3556 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 3557 } 3558}; 3559 3560/** 3561 * -------------------------------------------------------------------------- 3562 * Bootstrap (v5.2.2): util/swipe.js 3563 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3564 * -------------------------------------------------------------------------- 3565 */ 3566/** 3567 * Constants 3568 */ 3569 3570const NAME$d = 'swipe'; 3571const EVENT_KEY$9 = '.bs.swipe'; 3572const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 3573const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 3574const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 3575const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 3576const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 3577const POINTER_TYPE_TOUCH = 'touch'; 3578const POINTER_TYPE_PEN = 'pen'; 3579const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 3580const SWIPE_THRESHOLD = 40; 3581const Default$c = { 3582 endCallback: null, 3583 leftCallback: null, 3584 rightCallback: null 3585}; 3586const DefaultType$c = { 3587 endCallback: '(function|null)', 3588 leftCallback: '(function|null)', 3589 rightCallback: '(function|null)' 3590}; 3591/** 3592 * Class definition 3593 */ 3594 3595class Swipe extends Config { 3596 constructor(element, config) { 3597 super(); 3598 this._element = element; 3599 if (!element || !Swipe.isSupported()) { 3600 return; 3601 } 3602 this._config = this._getConfig(config); 3603 this._deltaX = 0; 3604 this._supportPointerEvents = Boolean(window.PointerEvent); 3605 this._initEvents(); 3606 } // Getters 3607 3608 static get Default() { 3609 return Default$c; 3610 } 3611 static get DefaultType() { 3612 return DefaultType$c; 3613 } 3614 static get NAME() { 3615 return NAME$d; 3616 } // Public 3617 3618 dispose() { 3619 EventHandler.off(this._element, EVENT_KEY$9); 3620 } // Private 3621 3622 _start(event) { 3623 if (!this._supportPointerEvents) { 3624 this._deltaX = event.touches[0].clientX; 3625 return; 3626 } 3627 if (this._eventIsPointerPenTouch(event)) { 3628 this._deltaX = event.clientX; 3629 } 3630 } 3631 _end(event) { 3632 if (this._eventIsPointerPenTouch(event)) { 3633 this._deltaX = event.clientX - this._deltaX; 3634 } 3635 this._handleSwipe(); 3636 execute(this._config.endCallback); 3637 } 3638 _move(event) { 3639 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 3640 } 3641 _handleSwipe() { 3642 const absDeltaX = Math.abs(this._deltaX); 3643 if (absDeltaX <= SWIPE_THRESHOLD) { 3644 return; 3645 } 3646 const direction = absDeltaX / this._deltaX; 3647 this._deltaX = 0; 3648 if (!direction) { 3649 return; 3650 } 3651 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 3652 } 3653 _initEvents() { 3654 if (this._supportPointerEvents) { 3655 EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); 3656 EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); 3657 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 3658 } else { 3659 EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); 3660 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); 3661 EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); 3662 } 3663 } 3664 _eventIsPointerPenTouch(event) { 3665 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 3666 } // Static 3667 3668 static isSupported() { 3669 return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 3670 } 3671} 3672 3673/** 3674 * -------------------------------------------------------------------------- 3675 * Bootstrap (v5.2.2): carousel.js 3676 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3677 * -------------------------------------------------------------------------- 3678 */ 3679/** 3680 * Constants 3681 */ 3682 3683const NAME$c = 'carousel'; 3684const DATA_KEY$8 = 'bs.carousel'; 3685const EVENT_KEY$8 = `.${DATA_KEY$8}`; 3686const DATA_API_KEY$5 = '.data-api'; 3687const ARROW_LEFT_KEY$1 = 'ArrowLeft'; 3688const ARROW_RIGHT_KEY$1 = 'ArrowRight'; 3689const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 3690 3691const ORDER_NEXT = 'next'; 3692const ORDER_PREV = 'prev'; 3693const DIRECTION_LEFT = 'left'; 3694const DIRECTION_RIGHT = 'right'; 3695const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 3696const EVENT_SLID = `slid${EVENT_KEY$8}`; 3697const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 3698const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 3699const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 3700const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 3701const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 3702const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 3703const CLASS_NAME_CAROUSEL = 'carousel'; 3704const CLASS_NAME_ACTIVE$2 = 'active'; 3705const CLASS_NAME_SLIDE = 'slide'; 3706const CLASS_NAME_END = 'carousel-item-end'; 3707const CLASS_NAME_START = 'carousel-item-start'; 3708const CLASS_NAME_NEXT = 'carousel-item-next'; 3709const CLASS_NAME_PREV = 'carousel-item-prev'; 3710const SELECTOR_ACTIVE = '.active'; 3711const SELECTOR_ITEM = '.carousel-item';
vendor: 7,653 bytes, lines 3712-3946
3712const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 3713const SELECTOR_ITEM_IMG = '.carousel-item img'; 3714const SELECTOR_INDICATORS = '.carousel-indicators'; 3715const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 3716const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 3717const KEY_TO_DIRECTION = { 3718 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 3719 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 3720}; 3721const Default$b = { 3722 interval: 5000, 3723 keyboard: true, 3724 pause: 'hover', 3725 ride: false, 3726 touch: true, 3727 wrap: true 3728}; 3729const DefaultType$b = { 3730 interval: '(number|boolean)', 3731 // TODO:v6 remove boolean support 3732 keyboard: 'boolean', 3733 pause: '(string|boolean)', 3734 ride: '(boolean|string)', 3735 touch: 'boolean', 3736 wrap: 'boolean' 3737}; 3738/** 3739 * Class definition 3740 */ 3741 3742class Carousel extends BaseComponent { 3743 constructor(element, config) { 3744 super(element, config); 3745 this._interval = null; 3746 this._activeElement = null; 3747 this._isSliding = false; 3748 this.touchTimeout = null; 3749 this._swipeHelper = null; 3750 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 3751 this._addEventListeners(); 3752 if (this._config.ride === CLASS_NAME_CAROUSEL) { 3753 this.cycle(); 3754 } 3755 } // Getters 3756 3757 static get Default() { 3758 return Default$b; 3759 } 3760 static get DefaultType() { 3761 return DefaultType$b; 3762 } 3763 static get NAME() { 3764 return NAME$c; 3765 } // Public 3766 3767 next() { 3768 this._slide(ORDER_NEXT); 3769 } 3770 nextWhenVisible() { 3771 // FIXME TODO use `document.visibilityState` 3772 // Don't call next when the page isn't visible 3773 // or the carousel or its parent isn't visible 3774 if (!document.hidden && isVisible(this._element)) { 3775 this.next(); 3776 } 3777 } 3778 prev() { 3779 this._slide(ORDER_PREV); 3780 } 3781 pause() { 3782 if (this._isSliding) { 3783 triggerTransitionEnd(this._element); 3784 } 3785 this._clearInterval(); 3786 } 3787 cycle() { 3788 this._clearInterval(); 3789 this._updateInterval(); 3790 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 3791 } 3792 _maybeEnableCycle() { 3793 if (!this._config.ride) { 3794 return; 3795 } 3796 if (this._isSliding) { 3797 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 3798 return; 3799 } 3800 this.cycle(); 3801 } 3802 to(index) { 3803 const items = this._getItems(); 3804 if (index > items.length - 1 || index < 0) { 3805 return; 3806 } 3807 if (this._isSliding) { 3808 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 3809 return; 3810 } 3811 const activeIndex = this._getItemIndex(this._getActive()); 3812 if (activeIndex === index) { 3813 return; 3814 } 3815 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 3816 this._slide(order, items[index]); 3817 } 3818 dispose() { 3819 if (this._swipeHelper) { 3820 this._swipeHelper.dispose(); 3821 } 3822 super.dispose(); 3823 } // Private 3824 3825 _configAfterMerge(config) { 3826 config.defaultInterval = config.interval; 3827 return config; 3828 } 3829 _addEventListeners() { 3830 if (this._config.keyboard) { 3831 EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); 3832 } 3833 if (this._config.pause === 'hover') { 3834 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 3835 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 3836 } 3837 if (this._config.touch && Swipe.isSupported()) { 3838 this._addTouchEventListeners(); 3839 } 3840 } 3841 _addTouchEventListeners() { 3842 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 3843 EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); 3844 } 3845 const endCallBack = () => { 3846 if (this._config.pause !== 'hover') { 3847 return; 3848 } // If it's a touch-enabled device, mouseenter/leave are fired as 3849 // part of the mouse compatibility events on first tap - the carousel 3850 // would stop cycling until user tapped out of it; 3851 // here, we listen for touchend, explicitly pause the carousel 3852 // (as if it's the second time we tap on it, mouseenter compat event 3853 // is NOT fired) and after a timeout (to allow for mouse compatibility 3854 // events to fire) we explicitly restart cycling 3855 3856 this.pause(); 3857 if (this.touchTimeout) { 3858 clearTimeout(this.touchTimeout); 3859 } 3860 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 3861 }; 3862 const swipeConfig = { 3863 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 3864 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 3865 endCallback: endCallBack 3866 }; 3867 this._swipeHelper = new Swipe(this._element, swipeConfig); 3868 } 3869 _keydown(event) { 3870 if (/input|textarea/i.test(event.target.tagName)) { 3871 return; 3872 } 3873 const direction = KEY_TO_DIRECTION[event.key]; 3874 if (direction) { 3875 event.preventDefault(); 3876 this._slide(this._directionToOrder(direction)); 3877 } 3878 } 3879 _getItemIndex(element) { 3880 return this._getItems().indexOf(element); 3881 } 3882 _setActiveIndicatorElement(index) { 3883 if (!this._indicatorsElement) { 3884 return; 3885 } 3886 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 3887 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 3888 activeIndicator.removeAttribute('aria-current'); 3889 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 3890 if (newActiveIndicator) { 3891 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 3892 newActiveIndicator.setAttribute('aria-current', 'true'); 3893 } 3894 } 3895 _updateInterval() { 3896 const element = this._activeElement || this._getActive(); 3897 if (!element) { 3898 return; 3899 } 3900 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 3901 this._config.interval = elementInterval || this._config.defaultInterval; 3902 } 3903 _slide(order, element = null) { 3904 if (this._isSliding) { 3905 return; 3906 } 3907 const activeElement = this._getActive(); 3908 const isNext = order === ORDER_NEXT; 3909 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 3910 if (nextElement === activeElement) { 3911 return; 3912 } 3913 const nextElementIndex = this._getItemIndex(nextElement); 3914 const triggerEvent = eventName => { 3915 return EventHandler.trigger(this._element, eventName, { 3916 relatedTarget: nextElement, 3917 direction: this._orderToDirection(order), 3918 from: this._getItemIndex(activeElement), 3919 to: nextElementIndex 3920 }); 3921 }; 3922 const slideEvent = triggerEvent(EVENT_SLIDE); 3923 if (slideEvent.defaultPrevented) { 3924 return; 3925 } 3926 if (!activeElement || !nextElement) { 3927 // Some weirdness is happening, so we bail 3928 // todo: change tests that use empty divs to avoid this check 3929 return; 3930 } 3931 const isCycling = Boolean(this._interval); 3932 this.pause(); 3933 this._isSliding = true; 3934 this._setActiveIndicatorElement(nextElementIndex); 3935 this._activeElement = nextElement; 3936 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 3937 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 3938 nextElement.classList.add(orderClassName); 3939 reflow(nextElement); 3940 activeElement.classList.add(directionalClassName); 3941 nextElement.classList.add(directionalClassName); 3942 const completeCallBack = () => { 3943 nextElement.classList.remove(directionalClassName, orderClassName); 3944 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 3945 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 3946 this._isSliding = false;
vendor: 2,303 bytes, lines 3947-4025
3947 triggerEvent(EVENT_SLID); 3948 }; 3949 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 3950 if (isCycling) { 3951 this.cycle(); 3952 } 3953 } 3954 _isAnimated() { 3955 return this._element.classList.contains(CLASS_NAME_SLIDE); 3956 } 3957 _getActive() { 3958 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 3959 } 3960 _getItems() { 3961 return SelectorEngine.find(SELECTOR_ITEM, this._element); 3962 } 3963 _clearInterval() { 3964 if (this._interval) { 3965 clearInterval(this._interval); 3966 this._interval = null; 3967 } 3968 } 3969 _directionToOrder(direction) { 3970 if (isRTL()) { 3971 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 3972 } 3973 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 3974 } 3975 _orderToDirection(order) { 3976 if (isRTL()) { 3977 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 3978 } 3979 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 3980 } // Static 3981 3982 static jQueryInterface(config) { 3983 return this.each(function () { 3984 const data = Carousel.getOrCreateInstance(this, config); 3985 if (typeof config === 'number') { 3986 data.to(config); 3987 return; 3988 } 3989 if (typeof config === 'string') { 3990 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 3991 throw new TypeError(`No method named "${config}"`); 3992 } 3993 data[config](); 3994 } 3995 }); 3996 } 3997} 3998/** 3999 * Data API implementation 4000 */ 4001exports.Carousel = Carousel; 4002EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { 4003 const target = getElementFromSelector(this); 4004 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 4005 return; 4006 } 4007 event.preventDefault(); 4008 const carousel = Carousel.getOrCreateInstance(target); 4009 const slideIndex = this.getAttribute('data-bs-slide-to'); 4010 if (slideIndex) { 4011 carousel.to(slideIndex); 4012 carousel._maybeEnableCycle(); 4013 return; 4014 } 4015 if (Manipulator.getDataAttribute(this, 'slide') === 'next') { 4016 carousel.next(); 4017 carousel._maybeEnableCycle(); 4018 return; 4019 } 4020 carousel.prev(); 4021 carousel._maybeEnableCycle(); 4022}); 4023EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 4024 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 4025 for (const carousel of carousels) {
vendor: 4,847 bytes, lines 4026-4175
4026 Carousel.getOrCreateInstance(carousel); 4027 } 4028}); 4029/** 4030 * jQuery 4031 */ 4032 4033defineJQueryPlugin(Carousel); 4034 4035/** 4036 * -------------------------------------------------------------------------- 4037 * Bootstrap (v5.2.2): collapse.js 4038 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4039 * -------------------------------------------------------------------------- 4040 */ 4041/** 4042 * Constants 4043 */ 4044 4045const NAME$b = 'collapse'; 4046const DATA_KEY$7 = 'bs.collapse'; 4047const EVENT_KEY$7 = `.${DATA_KEY$7}`; 4048const DATA_API_KEY$4 = '.data-api'; 4049const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 4050const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 4051const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 4052const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 4053const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 4054const CLASS_NAME_SHOW$7 = 'show'; 4055const CLASS_NAME_COLLAPSE = 'collapse'; 4056const CLASS_NAME_COLLAPSING = 'collapsing'; 4057const CLASS_NAME_COLLAPSED = 'collapsed'; 4058const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 4059const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 4060const WIDTH = 'width'; 4061const HEIGHT = 'height'; 4062const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 4063const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 4064const Default$a = { 4065 parent: null, 4066 toggle: true 4067}; 4068const DefaultType$a = { 4069 parent: '(null|element)', 4070 toggle: 'boolean' 4071}; 4072/** 4073 * Class definition 4074 */ 4075 4076class Collapse extends BaseComponent { 4077 constructor(element, config) { 4078 super(element, config); 4079 this._isTransitioning = false; 4080 this._triggerArray = []; 4081 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 4082 for (const elem of toggleList) { 4083 const selector = getSelectorFromElement(elem); 4084 const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); 4085 if (selector !== null && filterElement.length) { 4086 this._triggerArray.push(elem); 4087 } 4088 } 4089 this._initializeChildren(); 4090 if (!this._config.parent) { 4091 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 4092 } 4093 if (this._config.toggle) { 4094 this.toggle(); 4095 } 4096 } // Getters 4097 4098 static get Default() { 4099 return Default$a; 4100 } 4101 static get DefaultType() { 4102 return DefaultType$a; 4103 } 4104 static get NAME() { 4105 return NAME$b; 4106 } // Public 4107 4108 toggle() { 4109 if (this._isShown()) { 4110 this.hide(); 4111 } else { 4112 this.show(); 4113 } 4114 } 4115 show() { 4116 if (this._isTransitioning || this._isShown()) { 4117 return; 4118 } 4119 let activeChildren = []; // find active children 4120 4121 if (this._config.parent) { 4122 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { 4123 toggle: false 4124 })); 4125 } 4126 if (activeChildren.length && activeChildren[0]._isTransitioning) { 4127 return; 4128 } 4129 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 4130 if (startEvent.defaultPrevented) { 4131 return; 4132 } 4133 for (const activeInstance of activeChildren) { 4134 activeInstance.hide(); 4135 } 4136 const dimension = this._getDimension(); 4137 this._element.classList.remove(CLASS_NAME_COLLAPSE); 4138 this._element.classList.add(CLASS_NAME_COLLAPSING); 4139 this._element.style[dimension] = 0; 4140 this._addAriaAndCollapsedClass(this._triggerArray, true); 4141 this._isTransitioning = true; 4142 const complete = () => { 4143 this._isTransitioning = false; 4144 this._element.classList.remove(CLASS_NAME_COLLAPSING); 4145 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 4146 this._element.style[dimension] = ''; 4147 EventHandler.trigger(this._element, EVENT_SHOWN$6); 4148 }; 4149 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 4150 const scrollSize = `scroll${capitalizedDimension}`; 4151 this._queueCallback(complete, this._element, true); 4152 this._element.style[dimension] = `${this._element[scrollSize]}px`; 4153 } 4154 hide() { 4155 if (this._isTransitioning || !this._isShown()) { 4156 return; 4157 } 4158 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 4159 if (startEvent.defaultPrevented) { 4160 return; 4161 } 4162 const dimension = this._getDimension(); 4163 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 4164 reflow(this._element); 4165 this._element.classList.add(CLASS_NAME_COLLAPSING); 4166 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 4167 for (const trigger of this._triggerArray) { 4168 const element = getElementFromSelector(trigger); 4169 if (element && !this._isShown(element)) { 4170 this._addAriaAndCollapsedClass([trigger], false); 4171 } 4172 } 4173 this._isTransitioning = true; 4174 const complete = () => { 4175 this._isTransitioning = false;
vendor: 7,551 bytes, lines 4176-4397
4176 this._element.classList.remove(CLASS_NAME_COLLAPSING); 4177 this._element.classList.add(CLASS_NAME_COLLAPSE); 4178 EventHandler.trigger(this._element, EVENT_HIDDEN$6); 4179 }; 4180 this._element.style[dimension] = ''; 4181 this._queueCallback(complete, this._element, true); 4182 } 4183 _isShown(element = this._element) { 4184 return element.classList.contains(CLASS_NAME_SHOW$7); 4185 } // Private 4186 4187 _configAfterMerge(config) { 4188 config.toggle = Boolean(config.toggle); // Coerce string values 4189 4190 config.parent = getElement(config.parent); 4191 return config; 4192 } 4193 _getDimension() { 4194 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 4195 } 4196 _initializeChildren() { 4197 if (!this._config.parent) { 4198 return; 4199 } 4200 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 4201 for (const element of children) { 4202 const selected = getElementFromSelector(element); 4203 if (selected) { 4204 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 4205 } 4206 } 4207 } 4208 _getFirstLevelChildren(selector) { 4209 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth 4210 4211 return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); 4212 } 4213 _addAriaAndCollapsedClass(triggerArray, isOpen) { 4214 if (!triggerArray.length) { 4215 return; 4216 } 4217 for (const element of triggerArray) { 4218 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 4219 element.setAttribute('aria-expanded', isOpen); 4220 } 4221 } // Static 4222 4223 static jQueryInterface(config) { 4224 const _config = {}; 4225 if (typeof config === 'string' && /show|hide/.test(config)) { 4226 _config.toggle = false; 4227 } 4228 return this.each(function () { 4229 const data = Collapse.getOrCreateInstance(this, _config); 4230 if (typeof config === 'string') { 4231 if (typeof data[config] === 'undefined') { 4232 throw new TypeError(`No method named "${config}"`); 4233 } 4234 data[config](); 4235 } 4236 }); 4237 } 4238} 4239/** 4240 * Data API implementation 4241 */ 4242exports.Collapse = Collapse; 4243EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 4244 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 4245 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 4246 event.preventDefault(); 4247 } 4248 const selector = getSelectorFromElement(this); 4249 const selectorElements = SelectorEngine.find(selector); 4250 for (const element of selectorElements) { 4251 Collapse.getOrCreateInstance(element, { 4252 toggle: false 4253 }).toggle(); 4254 } 4255}); 4256/** 4257 * jQuery 4258 */ 4259 4260defineJQueryPlugin(Collapse); 4261 4262/** 4263 * -------------------------------------------------------------------------- 4264 * Bootstrap (v5.2.2): dropdown.js 4265 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4266 * -------------------------------------------------------------------------- 4267 */ 4268/** 4269 * Constants 4270 */ 4271 4272const NAME$a = 'dropdown'; 4273const DATA_KEY$6 = 'bs.dropdown'; 4274const EVENT_KEY$6 = `.${DATA_KEY$6}`; 4275const DATA_API_KEY$3 = '.data-api'; 4276const ESCAPE_KEY$2 = 'Escape'; 4277const TAB_KEY$1 = 'Tab'; 4278const ARROW_UP_KEY$1 = 'ArrowUp'; 4279const ARROW_DOWN_KEY$1 = 'ArrowDown'; 4280const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 4281 4282const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 4283const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 4284const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 4285const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 4286const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 4287const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 4288const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 4289const CLASS_NAME_SHOW$6 = 'show'; 4290const CLASS_NAME_DROPUP = 'dropup'; 4291const CLASS_NAME_DROPEND = 'dropend'; 4292const CLASS_NAME_DROPSTART = 'dropstart'; 4293const CLASS_NAME_DROPUP_CENTER = 'dropup-center'; 4294const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'; 4295const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 4296const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 4297const SELECTOR_MENU = '.dropdown-menu'; 4298const SELECTOR_NAVBAR = '.navbar'; 4299const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 4300const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 4301const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 4302const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 4303const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 4304const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 4305const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 4306const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 4307const PLACEMENT_TOPCENTER = 'top'; 4308const PLACEMENT_BOTTOMCENTER = 'bottom'; 4309const Default$9 = { 4310 autoClose: true, 4311 boundary: 'clippingParents', 4312 display: 'dynamic', 4313 offset: [0, 2], 4314 popperConfig: null, 4315 reference: 'toggle' 4316}; 4317const DefaultType$9 = { 4318 autoClose: '(boolean|string)', 4319 boundary: '(string|element)', 4320 display: 'string', 4321 offset: '(array|string|function)', 4322 popperConfig: '(null|object|function)', 4323 reference: '(string|element|object)' 4324}; 4325/** 4326 * Class definition 4327 */ 4328 4329class Dropdown extends BaseComponent { 4330 constructor(element, config) { 4331 super(element, config); 4332 this._popper = null; 4333 this._parent = this._element.parentNode; // dropdown wrapper 4334 // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ 4335 4336 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 4337 this._inNavbar = this._detectNavbar(); 4338 } // Getters 4339 4340 static get Default() { 4341 return Default$9; 4342 } 4343 static get DefaultType() { 4344 return DefaultType$9; 4345 } 4346 static get NAME() { 4347 return NAME$a; 4348 } // Public 4349 4350 toggle() { 4351 return this._isShown() ? this.hide() : this.show(); 4352 } 4353 show() { 4354 if (isDisabled(this._element) || this._isShown()) { 4355 return; 4356 } 4357 const relatedTarget = { 4358 relatedTarget: this._element 4359 }; 4360 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 4361 if (showEvent.defaultPrevented) { 4362 return; 4363 } 4364 this._createPopper(); // If this is a touch-enabled device we add extra 4365 // empty mouseover listeners to the body's immediate children; 4366 // only needed because of broken event delegation on iOS 4367 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 4368 4369 if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 4370 for (const element of [].concat(...document.body.children)) { 4371 EventHandler.on(element, 'mouseover', noop); 4372 } 4373 } 4374 this._element.focus(); 4375 this._element.setAttribute('aria-expanded', true); 4376 this._menu.classList.add(CLASS_NAME_SHOW$6); 4377 this._element.classList.add(CLASS_NAME_SHOW$6); 4378 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 4379 } 4380 hide() { 4381 if (isDisabled(this._element) || !this._isShown()) { 4382 return; 4383 } 4384 const relatedTarget = { 4385 relatedTarget: this._element 4386 }; 4387 this._completeHide(relatedTarget); 4388 } 4389 dispose() { 4390 if (this._popper) { 4391 this._popper.destroy(); 4392 } 4393 super.dispose(); 4394 } 4395 update() { 4396 this._inNavbar = this._detectNavbar(); 4397 if (this._popper) {
vendor: 4,917 bytes, lines 4398-4533
4398 this._popper.update(); 4399 } 4400 } // Private 4401 4402 _completeHide(relatedTarget) { 4403 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 4404 if (hideEvent.defaultPrevented) { 4405 return; 4406 } // If this is a touch-enabled device we remove the extra 4407 // empty mouseover listeners we added for iOS support 4408 4409 if ('ontouchstart' in document.documentElement) { 4410 for (const element of [].concat(...document.body.children)) { 4411 EventHandler.off(element, 'mouseover', noop); 4412 } 4413 } 4414 if (this._popper) { 4415 this._popper.destroy(); 4416 } 4417 this._menu.classList.remove(CLASS_NAME_SHOW$6); 4418 this._element.classList.remove(CLASS_NAME_SHOW$6); 4419 this._element.setAttribute('aria-expanded', 'false'); 4420 Manipulator.removeDataAttribute(this._menu, 'popper'); 4421 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 4422 } 4423 _getConfig(config) { 4424 config = super._getConfig(config); 4425 if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 4426 // Popper virtual elements require a getBoundingClientRect method 4427 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 4428 } 4429 return config; 4430 } 4431 _createPopper() { 4432 if (typeof Popper === 'undefined') { 4433 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 4434 } 4435 let referenceElement = this._element; 4436 if (this._config.reference === 'parent') { 4437 referenceElement = this._parent; 4438 } else if (isElement(this._config.reference)) { 4439 referenceElement = getElement(this._config.reference); 4440 } else if (typeof this._config.reference === 'object') { 4441 referenceElement = this._config.reference; 4442 } 4443 const popperConfig = this._getPopperConfig(); 4444 this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig); 4445 } 4446 _isShown() { 4447 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 4448 } 4449 _getPlacement() { 4450 const parentDropdown = this._parent; 4451 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 4452 return PLACEMENT_RIGHT; 4453 } 4454 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 4455 return PLACEMENT_LEFT; 4456 } 4457 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 4458 return PLACEMENT_TOPCENTER; 4459 } 4460 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { 4461 return PLACEMENT_BOTTOMCENTER; 4462 } // We need to trim the value because custom properties can also include spaces 4463 4464 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 4465 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 4466 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 4467 } 4468 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 4469 } 4470 _detectNavbar() { 4471 return this._element.closest(SELECTOR_NAVBAR) !== null; 4472 } 4473 _getOffset() { 4474 const { 4475 offset 4476 } = this._config; 4477 if (typeof offset === 'string') { 4478 return offset.split(',').map(value => Number.parseInt(value, 10)); 4479 } 4480 if (typeof offset === 'function') { 4481 return popperData => offset(popperData, this._element); 4482 } 4483 return offset; 4484 } 4485 _getPopperConfig() { 4486 const defaultBsPopperConfig = { 4487 placement: this._getPlacement(), 4488 modifiers: [{ 4489 name: 'preventOverflow', 4490 options: { 4491 boundary: this._config.boundary 4492 } 4493 }, { 4494 name: 'offset', 4495 options: { 4496 offset: this._getOffset() 4497 } 4498 }] 4499 }; // Disable Popper if we have a static display or Dropdown is in Navbar 4500 4501 if (this._inNavbar || this._config.display === 'static') { 4502 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove 4503 4504 defaultBsPopperConfig.modifiers = [{ 4505 name: 'applyStyles', 4506 enabled: false 4507 }]; 4508 } 4509 return { 4510 ...defaultBsPopperConfig, 4511 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 4512 }; 4513 } 4514 _selectMenuItem({ 4515 key, 4516 target 4517 }) { 4518 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); 4519 if (!items.length) { 4520 return; 4521 } // if target isn't included in items (e.g. when expanding the dropdown) 4522 // allow cycling to get the last item in case key equals ARROW_UP_KEY 4523 4524 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 4525 } // Static 4526 4527 static jQueryInterface(config) { 4528 return this.each(function () { 4529 const data = Dropdown.getOrCreateInstance(this, config); 4530 if (typeof config !== 'string') { 4531 return; 4532 } 4533 if (typeof data[config] === 'undefined') {
vendor: 23,169 bytes, lines 4534-5264
4534 throw new TypeError(`No method named "${config}"`); 4535 } 4536 data[config](); 4537 }); 4538 } 4539 static clearMenus(event) { 4540 if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { 4541 return; 4542 } 4543 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 4544 for (const toggle of openToggles) { 4545 const context = Dropdown.getInstance(toggle); 4546 if (!context || context._config.autoClose === false) { 4547 continue; 4548 } 4549 const composedPath = event.composedPath(); 4550 const isMenuTarget = composedPath.includes(context._menu); 4551 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 4552 continue; 4553 } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 4554 4555 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 4556 continue; 4557 } 4558 const relatedTarget = { 4559 relatedTarget: context._element 4560 }; 4561 if (event.type === 'click') { 4562 relatedTarget.clickEvent = event; 4563 } 4564 context._completeHide(relatedTarget); 4565 } 4566 } 4567 static dataApiKeydownHandler(event) { 4568 // If not an UP | DOWN | ESCAPE key => not a dropdown command 4569 // If input/textarea && if key is other than ESCAPE => not a dropdown command 4570 const isInput = /input|textarea/i.test(event.target.tagName); 4571 const isEscapeEvent = event.key === ESCAPE_KEY$2; 4572 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 4573 if (!isUpOrDownEvent && !isEscapeEvent) { 4574 return; 4575 } 4576 if (isInput && !isEscapeEvent) { 4577 return; 4578 } 4579 event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ 4580 4581 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); 4582 const instance = Dropdown.getOrCreateInstance(getToggleButton); 4583 if (isUpOrDownEvent) { 4584 event.stopPropagation(); 4585 instance.show(); 4586 instance._selectMenuItem(event); 4587 return; 4588 } 4589 if (instance._isShown()) { 4590 // else is escape and we check if it is shown 4591 event.stopPropagation(); 4592 instance.hide(); 4593 getToggleButton.focus(); 4594 } 4595 } 4596} 4597/** 4598 * Data API implementation 4599 */ 4600exports.Dropdown = Dropdown; 4601EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 4602EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 4603EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 4604EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 4605EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 4606 event.preventDefault(); 4607 Dropdown.getOrCreateInstance(this).toggle(); 4608}); 4609/** 4610 * jQuery 4611 */ 4612 4613defineJQueryPlugin(Dropdown); 4614 4615/** 4616 * -------------------------------------------------------------------------- 4617 * Bootstrap (v5.2.2): util/scrollBar.js 4618 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4619 * -------------------------------------------------------------------------- 4620 */ 4621/** 4622 * Constants 4623 */ 4624 4625const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 4626const SELECTOR_STICKY_CONTENT = '.sticky-top'; 4627const PROPERTY_PADDING = 'padding-right'; 4628const PROPERTY_MARGIN = 'margin-right'; 4629/** 4630 * Class definition 4631 */ 4632 4633class ScrollBarHelper { 4634 constructor() { 4635 this._element = document.body; 4636 } // Public 4637 4638 getWidth() { 4639 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 4640 const documentWidth = document.documentElement.clientWidth; 4641 return Math.abs(window.innerWidth - documentWidth); 4642 } 4643 hide() { 4644 const width = this.getWidth(); 4645 this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width 4646 4647 this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 4648 4649 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 4650 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); 4651 } 4652 reset() { 4653 this._resetElementAttributes(this._element, 'overflow'); 4654 this._resetElementAttributes(this._element, PROPERTY_PADDING); 4655 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 4656 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 4657 } 4658 isOverflowing() { 4659 return this.getWidth() > 0; 4660 } // Private 4661 4662 _disableOverFlow() { 4663 this._saveInitialAttribute(this._element, 'overflow'); 4664 this._element.style.overflow = 'hidden'; 4665 } 4666 _setElementAttributes(selector, styleProperty, callback) { 4667 const scrollbarWidth = this.getWidth(); 4668 const manipulationCallBack = element => { 4669 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 4670 return; 4671 } 4672 this._saveInitialAttribute(element, styleProperty); 4673 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 4674 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 4675 }; 4676 this._applyManipulationCallback(selector, manipulationCallBack); 4677 } 4678 _saveInitialAttribute(element, styleProperty) { 4679 const actualValue = element.style.getPropertyValue(styleProperty); 4680 if (actualValue) { 4681 Manipulator.setDataAttribute(element, styleProperty, actualValue); 4682 } 4683 } 4684 _resetElementAttributes(selector, styleProperty) { 4685 const manipulationCallBack = element => { 4686 const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero 4687 4688 if (value === null) { 4689 element.style.removeProperty(styleProperty); 4690 return; 4691 } 4692 Manipulator.removeDataAttribute(element, styleProperty); 4693 element.style.setProperty(styleProperty, value); 4694 }; 4695 this._applyManipulationCallback(selector, manipulationCallBack); 4696 } 4697 _applyManipulationCallback(selector, callBack) { 4698 if (isElement(selector)) { 4699 callBack(selector); 4700 return; 4701 } 4702 for (const sel of SelectorEngine.find(selector, this._element)) { 4703 callBack(sel); 4704 } 4705 } 4706} 4707 4708/** 4709 * -------------------------------------------------------------------------- 4710 * Bootstrap (v5.2.2): util/backdrop.js 4711 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4712 * -------------------------------------------------------------------------- 4713 */ 4714/** 4715 * Constants 4716 */ 4717 4718const NAME$9 = 'backdrop'; 4719const CLASS_NAME_FADE$4 = 'fade'; 4720const CLASS_NAME_SHOW$5 = 'show'; 4721const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 4722const Default$8 = { 4723 className: 'modal-backdrop', 4724 clickCallback: null, 4725 isAnimated: false, 4726 isVisible: true, 4727 // if false, we use the backdrop helper without adding any element to the dom 4728 rootElement: 'body' // give the choice to place backdrop under different elements 4729}; 4730 4731const DefaultType$8 = { 4732 className: 'string', 4733 clickCallback: '(function|null)', 4734 isAnimated: 'boolean', 4735 isVisible: 'boolean', 4736 rootElement: '(element|string)' 4737}; 4738/** 4739 * Class definition 4740 */ 4741 4742class Backdrop extends Config { 4743 constructor(config) { 4744 super(); 4745 this._config = this._getConfig(config); 4746 this._isAppended = false; 4747 this._element = null; 4748 } // Getters 4749 4750 static get Default() { 4751 return Default$8; 4752 } 4753 static get DefaultType() { 4754 return DefaultType$8; 4755 } 4756 static get NAME() { 4757 return NAME$9; 4758 } // Public 4759 4760 show(callback) { 4761 if (!this._config.isVisible) { 4762 execute(callback); 4763 return; 4764 } 4765 this._append(); 4766 const element = this._getElement(); 4767 if (this._config.isAnimated) { 4768 reflow(element); 4769 } 4770 element.classList.add(CLASS_NAME_SHOW$5); 4771 this._emulateAnimation(() => { 4772 execute(callback); 4773 }); 4774 } 4775 hide(callback) { 4776 if (!this._config.isVisible) { 4777 execute(callback); 4778 return; 4779 } 4780 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 4781 this._emulateAnimation(() => { 4782 this.dispose(); 4783 execute(callback); 4784 }); 4785 } 4786 dispose() { 4787 if (!this._isAppended) { 4788 return; 4789 } 4790 EventHandler.off(this._element, EVENT_MOUSEDOWN); 4791 this._element.remove(); 4792 this._isAppended = false; 4793 } // Private 4794 4795 _getElement() { 4796 if (!this._element) { 4797 const backdrop = document.createElement('div'); 4798 backdrop.className = this._config.className; 4799 if (this._config.isAnimated) { 4800 backdrop.classList.add(CLASS_NAME_FADE$4); 4801 } 4802 this._element = backdrop; 4803 } 4804 return this._element; 4805 } 4806 _configAfterMerge(config) { 4807 // use getElement() with the default "body" to get a fresh Element on each instantiation 4808 config.rootElement = getElement(config.rootElement); 4809 return config; 4810 } 4811 _append() { 4812 if (this._isAppended) { 4813 return; 4814 } 4815 const element = this._getElement(); 4816 this._config.rootElement.append(element); 4817 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 4818 execute(this._config.clickCallback); 4819 }); 4820 this._isAppended = true; 4821 } 4822 _emulateAnimation(callback) { 4823 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 4824 } 4825} 4826 4827/** 4828 * -------------------------------------------------------------------------- 4829 * Bootstrap (v5.2.2): util/focustrap.js 4830 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4831 * -------------------------------------------------------------------------- 4832 */ 4833/** 4834 * Constants 4835 */ 4836 4837const NAME$8 = 'focustrap'; 4838const DATA_KEY$5 = 'bs.focustrap'; 4839const EVENT_KEY$5 = `.${DATA_KEY$5}`; 4840const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 4841const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 4842const TAB_KEY = 'Tab'; 4843const TAB_NAV_FORWARD = 'forward'; 4844const TAB_NAV_BACKWARD = 'backward'; 4845const Default$7 = { 4846 autofocus: true, 4847 trapElement: null // The element to trap focus inside of 4848}; 4849 4850const DefaultType$7 = { 4851 autofocus: 'boolean', 4852 trapElement: 'element' 4853}; 4854/** 4855 * Class definition 4856 */ 4857 4858class FocusTrap extends Config { 4859 constructor(config) { 4860 super(); 4861 this._config = this._getConfig(config); 4862 this._isActive = false; 4863 this._lastTabNavDirection = null; 4864 } // Getters 4865 4866 static get Default() { 4867 return Default$7; 4868 } 4869 static get DefaultType() { 4870 return DefaultType$7; 4871 } 4872 static get NAME() { 4873 return NAME$8; 4874 } // Public 4875 4876 activate() { 4877 if (this._isActive) { 4878 return; 4879 } 4880 if (this._config.autofocus) { 4881 this._config.trapElement.focus(); 4882 } 4883 EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop 4884 4885 EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); 4886 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 4887 this._isActive = true; 4888 } 4889 deactivate() { 4890 if (!this._isActive) { 4891 return; 4892 } 4893 this._isActive = false; 4894 EventHandler.off(document, EVENT_KEY$5); 4895 } // Private 4896 4897 _handleFocusin(event) { 4898 const { 4899 trapElement 4900 } = this._config; 4901 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 4902 return; 4903 } 4904 const elements = SelectorEngine.focusableChildren(trapElement); 4905 if (elements.length === 0) { 4906 trapElement.focus(); 4907 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 4908 elements[elements.length - 1].focus(); 4909 } else { 4910 elements[0].focus(); 4911 } 4912 } 4913 _handleKeydown(event) { 4914 if (event.key !== TAB_KEY) { 4915 return; 4916 } 4917 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 4918 } 4919} 4920 4921/** 4922 * -------------------------------------------------------------------------- 4923 * Bootstrap (v5.2.2): modal.js 4924 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4925 * -------------------------------------------------------------------------- 4926 */ 4927/** 4928 * Constants 4929 */ 4930 4931const NAME$7 = 'modal'; 4932const DATA_KEY$4 = 'bs.modal'; 4933const EVENT_KEY$4 = `.${DATA_KEY$4}`; 4934const DATA_API_KEY$2 = '.data-api'; 4935const ESCAPE_KEY$1 = 'Escape'; 4936const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 4937const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 4938const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 4939const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 4940const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 4941const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 4942const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 4943const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 4944const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 4945const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 4946const CLASS_NAME_OPEN = 'modal-open'; 4947const CLASS_NAME_FADE$3 = 'fade'; 4948const CLASS_NAME_SHOW$4 = 'show'; 4949const CLASS_NAME_STATIC = 'modal-static'; 4950const OPEN_SELECTOR$1 = '.modal.show'; 4951const SELECTOR_DIALOG = '.modal-dialog'; 4952const SELECTOR_MODAL_BODY = '.modal-body'; 4953const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 4954const Default$6 = { 4955 backdrop: true, 4956 focus: true, 4957 keyboard: true 4958}; 4959const DefaultType$6 = { 4960 backdrop: '(boolean|string)', 4961 focus: 'boolean', 4962 keyboard: 'boolean' 4963}; 4964/** 4965 * Class definition 4966 */ 4967 4968class Modal extends BaseComponent { 4969 constructor(element, config) { 4970 super(element, config); 4971 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 4972 this._backdrop = this._initializeBackDrop(); 4973 this._focustrap = this._initializeFocusTrap(); 4974 this._isShown = false; 4975 this._isTransitioning = false; 4976 this._scrollBar = new ScrollBarHelper(); 4977 this._addEventListeners(); 4978 } // Getters 4979 4980 static get Default() { 4981 return Default$6; 4982 } 4983 static get DefaultType() { 4984 return DefaultType$6; 4985 } 4986 static get NAME() { 4987 return NAME$7; 4988 } // Public 4989 4990 toggle(relatedTarget) { 4991 return this._isShown ? this.hide() : this.show(relatedTarget); 4992 } 4993 show(relatedTarget) { 4994 if (this._isShown || this._isTransitioning) { 4995 return; 4996 } 4997 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 4998 relatedTarget 4999 }); 5000 if (showEvent.defaultPrevented) { 5001 return; 5002 } 5003 this._isShown = true; 5004 this._isTransitioning = true; 5005 this._scrollBar.hide(); 5006 document.body.classList.add(CLASS_NAME_OPEN); 5007 this._adjustDialog(); 5008 this._backdrop.show(() => this._showElement(relatedTarget)); 5009 } 5010 hide() { 5011 if (!this._isShown || this._isTransitioning) { 5012 return; 5013 } 5014 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 5015 if (hideEvent.defaultPrevented) { 5016 return; 5017 } 5018 this._isShown = false; 5019 this._isTransitioning = true; 5020 this._focustrap.deactivate(); 5021 this._element.classList.remove(CLASS_NAME_SHOW$4); 5022 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 5023 } 5024 dispose() { 5025 for (const htmlElement of [window, this._dialog]) { 5026 EventHandler.off(htmlElement, EVENT_KEY$4); 5027 } 5028 this._backdrop.dispose(); 5029 this._focustrap.deactivate(); 5030 super.dispose(); 5031 } 5032 handleUpdate() { 5033 this._adjustDialog(); 5034 } // Private 5035 5036 _initializeBackDrop() { 5037 return new Backdrop({ 5038 isVisible: Boolean(this._config.backdrop), 5039 // 'static' option will be translated to true, and booleans will keep their value, 5040 isAnimated: this._isAnimated() 5041 }); 5042 } 5043 _initializeFocusTrap() { 5044 return new FocusTrap({ 5045 trapElement: this._element 5046 }); 5047 } 5048 _showElement(relatedTarget) { 5049 // try to append dynamic modal 5050 if (!document.body.contains(this._element)) { 5051 document.body.append(this._element); 5052 } 5053 this._element.style.display = 'block'; 5054 this._element.removeAttribute('aria-hidden'); 5055 this._element.setAttribute('aria-modal', true); 5056 this._element.setAttribute('role', 'dialog'); 5057 this._element.scrollTop = 0; 5058 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 5059 if (modalBody) { 5060 modalBody.scrollTop = 0; 5061 } 5062 reflow(this._element); 5063 this._element.classList.add(CLASS_NAME_SHOW$4); 5064 const transitionComplete = () => { 5065 if (this._config.focus) { 5066 this._focustrap.activate(); 5067 } 5068 this._isTransitioning = false; 5069 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 5070 relatedTarget 5071 }); 5072 }; 5073 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 5074 } 5075 _addEventListeners() { 5076 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 5077 if (event.key !== ESCAPE_KEY$1) { 5078 return; 5079 } 5080 if (this._config.keyboard) { 5081 event.preventDefault(); 5082 this.hide(); 5083 return; 5084 } 5085 this._triggerBackdropTransition(); 5086 }); 5087 EventHandler.on(window, EVENT_RESIZE$1, () => { 5088 if (this._isShown && !this._isTransitioning) { 5089 this._adjustDialog(); 5090 } 5091 }); 5092 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { 5093 // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks 5094 EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => { 5095 if (this._element !== event.target || this._element !== event2.target) { 5096 return; 5097 } 5098 if (this._config.backdrop === 'static') { 5099 this._triggerBackdropTransition(); 5100 return; 5101 } 5102 if (this._config.backdrop) { 5103 this.hide(); 5104 } 5105 }); 5106 }); 5107 } 5108 _hideModal() { 5109 this._element.style.display = 'none'; 5110 this._element.setAttribute('aria-hidden', true); 5111 this._element.removeAttribute('aria-modal'); 5112 this._element.removeAttribute('role'); 5113 this._isTransitioning = false; 5114 this._backdrop.hide(() => { 5115 document.body.classList.remove(CLASS_NAME_OPEN); 5116 this._resetAdjustments(); 5117 this._scrollBar.reset(); 5118 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 5119 }); 5120 } 5121 _isAnimated() { 5122 return this._element.classList.contains(CLASS_NAME_FADE$3); 5123 } 5124 _triggerBackdropTransition() { 5125 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 5126 if (hideEvent.defaultPrevented) { 5127 return; 5128 } 5129 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5130 const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed 5131 5132 if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { 5133 return; 5134 } 5135 if (!isModalOverflowing) { 5136 this._element.style.overflowY = 'hidden'; 5137 } 5138 this._element.classList.add(CLASS_NAME_STATIC); 5139 this._queueCallback(() => { 5140 this._element.classList.remove(CLASS_NAME_STATIC); 5141 this._queueCallback(() => { 5142 this._element.style.overflowY = initialOverflowY; 5143 }, this._dialog); 5144 }, this._dialog); 5145 this._element.focus(); 5146 } 5147 /** 5148 * The following methods are used to handle overflowing modals 5149 */ 5150 5151 _adjustDialog() { 5152 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5153 const scrollbarWidth = this._scrollBar.getWidth(); 5154 const isBodyOverflowing = scrollbarWidth > 0; 5155 if (isBodyOverflowing && !isModalOverflowing) { 5156 const property = isRTL() ? 'paddingLeft' : 'paddingRight'; 5157 this._element.style[property] = `${scrollbarWidth}px`; 5158 } 5159 if (!isBodyOverflowing && isModalOverflowing) { 5160 const property = isRTL() ? 'paddingRight' : 'paddingLeft'; 5161 this._element.style[property] = `${scrollbarWidth}px`; 5162 } 5163 } 5164 _resetAdjustments() { 5165 this._element.style.paddingLeft = ''; 5166 this._element.style.paddingRight = ''; 5167 } // Static 5168 5169 static jQueryInterface(config, relatedTarget) { 5170 return this.each(function () { 5171 const data = Modal.getOrCreateInstance(this, config); 5172 if (typeof config !== 'string') { 5173 return; 5174 } 5175 if (typeof data[config] === 'undefined') { 5176 throw new TypeError(`No method named "${config}"`); 5177 } 5178 data[config](relatedTarget); 5179 }); 5180 } 5181} 5182/** 5183 * Data API implementation 5184 */ 5185exports.Modal = Modal; 5186EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 5187 const target = getElementFromSelector(this); 5188 if (['A', 'AREA'].includes(this.tagName)) { 5189 event.preventDefault(); 5190 } 5191 EventHandler.one(target, EVENT_SHOW$4, showEvent => { 5192 if (showEvent.defaultPrevented) { 5193 // only register focus restorer if modal will actually get shown 5194 return; 5195 } 5196 EventHandler.one(target, EVENT_HIDDEN$4, () => { 5197 if (isVisible(this)) { 5198 this.focus(); 5199 } 5200 }); 5201 }); // avoid conflict when clicking modal toggler while another one is open 5202 5203 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 5204 if (alreadyOpen) { 5205 Modal.getInstance(alreadyOpen).hide(); 5206 } 5207 const data = Modal.getOrCreateInstance(target); 5208 data.toggle(this); 5209}); 5210enableDismissTrigger(Modal); 5211/** 5212 * jQuery 5213 */ 5214 5215defineJQueryPlugin(Modal); 5216 5217/** 5218 * -------------------------------------------------------------------------- 5219 * Bootstrap (v5.2.2): offcanvas.js 5220 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5221 * -------------------------------------------------------------------------- 5222 */ 5223/** 5224 * Constants 5225 */ 5226 5227const NAME$6 = 'offcanvas'; 5228const DATA_KEY$3 = 'bs.offcanvas'; 5229const EVENT_KEY$3 = `.${DATA_KEY$3}`; 5230const DATA_API_KEY$1 = '.data-api'; 5231const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 5232const ESCAPE_KEY = 'Escape'; 5233const CLASS_NAME_SHOW$3 = 'show'; 5234const CLASS_NAME_SHOWING$1 = 'showing'; 5235const CLASS_NAME_HIDING = 'hiding'; 5236const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 5237const OPEN_SELECTOR = '.offcanvas.show'; 5238const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 5239const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 5240const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 5241const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 5242const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 5243const EVENT_RESIZE = `resize${EVENT_KEY$3}`; 5244const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 5245const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 5246const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 5247const Default$5 = { 5248 backdrop: true, 5249 keyboard: true, 5250 scroll: false 5251}; 5252const DefaultType$5 = { 5253 backdrop: '(boolean|string)', 5254 keyboard: 'boolean', 5255 scroll: 'boolean' 5256}; 5257/** 5258 * Class definition 5259 */ 5260 5261class Offcanvas extends BaseComponent { 5262 constructor(element, config) { 5263 super(element, config); 5264 this._isShown = false;
vendor: 6,150 bytes, lines 5265-5459
5265 this._backdrop = this._initializeBackDrop(); 5266 this._focustrap = this._initializeFocusTrap(); 5267 this._addEventListeners(); 5268 } // Getters 5269 5270 static get Default() { 5271 return Default$5; 5272 } 5273 static get DefaultType() { 5274 return DefaultType$5; 5275 } 5276 static get NAME() { 5277 return NAME$6; 5278 } // Public 5279 5280 toggle(relatedTarget) { 5281 return this._isShown ? this.hide() : this.show(relatedTarget); 5282 } 5283 show(relatedTarget) { 5284 if (this._isShown) { 5285 return; 5286 } 5287 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 5288 relatedTarget 5289 }); 5290 if (showEvent.defaultPrevented) { 5291 return; 5292 } 5293 this._isShown = true; 5294 this._backdrop.show(); 5295 if (!this._config.scroll) { 5296 new ScrollBarHelper().hide(); 5297 } 5298 this._element.setAttribute('aria-modal', true); 5299 this._element.setAttribute('role', 'dialog'); 5300 this._element.classList.add(CLASS_NAME_SHOWING$1); 5301 const completeCallBack = () => { 5302 if (!this._config.scroll || this._config.backdrop) { 5303 this._focustrap.activate(); 5304 } 5305 this._element.classList.add(CLASS_NAME_SHOW$3); 5306 this._element.classList.remove(CLASS_NAME_SHOWING$1); 5307 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 5308 relatedTarget 5309 }); 5310 }; 5311 this._queueCallback(completeCallBack, this._element, true); 5312 } 5313 hide() { 5314 if (!this._isShown) { 5315 return; 5316 } 5317 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 5318 if (hideEvent.defaultPrevented) { 5319 return; 5320 } 5321 this._focustrap.deactivate(); 5322 this._element.blur(); 5323 this._isShown = false; 5324 this._element.classList.add(CLASS_NAME_HIDING); 5325 this._backdrop.hide(); 5326 const completeCallback = () => { 5327 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 5328 this._element.removeAttribute('aria-modal'); 5329 this._element.removeAttribute('role'); 5330 if (!this._config.scroll) { 5331 new ScrollBarHelper().reset(); 5332 } 5333 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 5334 }; 5335 this._queueCallback(completeCallback, this._element, true); 5336 } 5337 dispose() { 5338 this._backdrop.dispose(); 5339 this._focustrap.deactivate(); 5340 super.dispose(); 5341 } // Private 5342 5343 _initializeBackDrop() { 5344 const clickCallback = () => { 5345 if (this._config.backdrop === 'static') { 5346 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 5347 return; 5348 } 5349 this.hide(); 5350 }; // 'static' option will be translated to true, and booleans will keep their value 5351 5352 const isVisible = Boolean(this._config.backdrop); 5353 return new Backdrop({ 5354 className: CLASS_NAME_BACKDROP, 5355 isVisible, 5356 isAnimated: true, 5357 rootElement: this._element.parentNode, 5358 clickCallback: isVisible ? clickCallback : null 5359 }); 5360 } 5361 _initializeFocusTrap() { 5362 return new FocusTrap({ 5363 trapElement: this._element 5364 }); 5365 } 5366 _addEventListeners() { 5367 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 5368 if (event.key !== ESCAPE_KEY) { 5369 return; 5370 } 5371 if (!this._config.keyboard) { 5372 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 5373 return; 5374 } 5375 this.hide(); 5376 }); 5377 } // Static 5378 5379 static jQueryInterface(config) { 5380 return this.each(function () { 5381 const data = Offcanvas.getOrCreateInstance(this, config); 5382 if (typeof config !== 'string') { 5383 return; 5384 } 5385 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 5386 throw new TypeError(`No method named "${config}"`); 5387 } 5388 data[config](this); 5389 }); 5390 } 5391} 5392/** 5393 * Data API implementation 5394 */ 5395exports.Offcanvas = Offcanvas; 5396EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 5397 const target = getElementFromSelector(this); 5398 if (['A', 'AREA'].includes(this.tagName)) { 5399 event.preventDefault(); 5400 } 5401 if (isDisabled(this)) { 5402 return; 5403 } 5404 EventHandler.one(target, EVENT_HIDDEN$3, () => { 5405 // focus on trigger when it is closed 5406 if (isVisible(this)) { 5407 this.focus(); 5408 } 5409 }); // avoid conflict when clicking a toggler of an offcanvas, while another is open 5410 5411 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 5412 if (alreadyOpen && alreadyOpen !== target) { 5413 Offcanvas.getInstance(alreadyOpen).hide(); 5414 } 5415 const data = Offcanvas.getOrCreateInstance(target); 5416 data.toggle(this); 5417}); 5418EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 5419 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 5420 Offcanvas.getOrCreateInstance(selector).show(); 5421 } 5422}); 5423EventHandler.on(window, EVENT_RESIZE, () => { 5424 for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { 5425 if (getComputedStyle(element).position !== 'fixed') { 5426 Offcanvas.getOrCreateInstance(element).hide(); 5427 } 5428 } 5429}); 5430enableDismissTrigger(Offcanvas); 5431/** 5432 * jQuery 5433 */ 5434 5435defineJQueryPlugin(Offcanvas); 5436 5437/** 5438 * -------------------------------------------------------------------------- 5439 * Bootstrap (v5.2.2): util/sanitizer.js 5440 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5441 * -------------------------------------------------------------------------- 5442 */ 5443const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 5444const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 5445/** 5446 * A pattern that recognizes a commonly useful subset of URLs that are safe. 5447 * 5448 * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 5449 */ 5450 5451const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 5452/** 5453 * A pattern that matches safe data URLs. Only matches image, video and audio types. 5454 * 5455 * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 5456 */ 5457 5458const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 5459const allowedAttribute = (attribute, allowedAttributeList) => {
vendor: 5,145 bytes, lines 5460-5645
5460 const attributeName = attribute.nodeName.toLowerCase(); 5461 if (allowedAttributeList.includes(attributeName)) { 5462 if (uriAttributes.has(attributeName)) { 5463 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 5464 } 5465 return true; 5466 } // Check if a regular expression validates the attribute. 5467 5468 return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); 5469}; 5470const DefaultAllowlist = { 5471 // Global attributes allowed on any supplied element below. 5472 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 5473 a: ['target', 'href', 'title', 'rel'], 5474 area: [], 5475 b: [], 5476 br: [], 5477 col: [], 5478 code: [], 5479 div: [], 5480 em: [], 5481 hr: [], 5482 h1: [], 5483 h2: [], 5484 h3: [], 5485 h4: [], 5486 h5: [], 5487 h6: [], 5488 i: [], 5489 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 5490 li: [], 5491 ol: [], 5492 p: [], 5493 pre: [], 5494 s: [], 5495 small: [], 5496 span: [], 5497 sub: [], 5498 sup: [], 5499 strong: [], 5500 u: [], 5501 ul: [] 5502}; 5503function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 5504 if (!unsafeHtml.length) { 5505 return unsafeHtml; 5506 } 5507 if (sanitizeFunction && typeof sanitizeFunction === 'function') { 5508 return sanitizeFunction(unsafeHtml); 5509 } 5510 const domParser = new window.DOMParser(); 5511 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 5512 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 5513 for (const element of elements) { 5514 const elementName = element.nodeName.toLowerCase(); 5515 if (!Object.keys(allowList).includes(elementName)) { 5516 element.remove(); 5517 continue; 5518 } 5519 const attributeList = [].concat(...element.attributes); 5520 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 5521 for (const attribute of attributeList) { 5522 if (!allowedAttribute(attribute, allowedAttributes)) { 5523 element.removeAttribute(attribute.nodeName); 5524 } 5525 } 5526 } 5527 return createdDocument.body.innerHTML; 5528} 5529 5530/** 5531 * -------------------------------------------------------------------------- 5532 * Bootstrap (v5.2.2): util/template-factory.js 5533 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5534 * -------------------------------------------------------------------------- 5535 */ 5536/** 5537 * Constants 5538 */ 5539 5540const NAME$5 = 'TemplateFactory'; 5541const Default$4 = { 5542 allowList: DefaultAllowlist, 5543 content: {}, 5544 // { selector : text , selector2 : text2 , } 5545 extraClass: '', 5546 html: false, 5547 sanitize: true, 5548 sanitizeFn: null, 5549 template: '<div></div>' 5550}; 5551const DefaultType$4 = { 5552 allowList: 'object', 5553 content: 'object', 5554 extraClass: '(string|function)', 5555 html: 'boolean', 5556 sanitize: 'boolean', 5557 sanitizeFn: '(null|function)', 5558 template: 'string' 5559}; 5560const DefaultContentType = { 5561 entry: '(string|element|function|null)', 5562 selector: '(string|element)' 5563}; 5564/** 5565 * Class definition 5566 */ 5567 5568class TemplateFactory extends Config { 5569 constructor(config) { 5570 super(); 5571 this._config = this._getConfig(config); 5572 } // Getters 5573 5574 static get Default() { 5575 return Default$4; 5576 } 5577 static get DefaultType() { 5578 return DefaultType$4; 5579 } 5580 static get NAME() { 5581 return NAME$5; 5582 } // Public 5583 5584 getContent() { 5585 return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); 5586 } 5587 hasContent() { 5588 return this.getContent().length > 0; 5589 } 5590 changeContent(content) { 5591 this._checkContent(content); 5592 this._config.content = { 5593 ...this._config.content, 5594 ...content 5595 }; 5596 return this; 5597 } 5598 toHtml() { 5599 const templateWrapper = document.createElement('div'); 5600 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 5601 for (const [selector, text] of Object.entries(this._config.content)) { 5602 this._setContent(templateWrapper, text, selector); 5603 } 5604 const template = templateWrapper.children[0]; 5605 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 5606 if (extraClass) { 5607 template.classList.add(...extraClass.split(' ')); 5608 } 5609 return template; 5610 } // Private 5611 5612 _typeCheckConfig(config) { 5613 super._typeCheckConfig(config); 5614 this._checkContent(config.content); 5615 } 5616 _checkContent(arg) { 5617 for (const [selector, content] of Object.entries(arg)) { 5618 super._typeCheckConfig({ 5619 selector, 5620 entry: content 5621 }, DefaultContentType); 5622 } 5623 } 5624 _setContent(template, content, selector) { 5625 const templateElement = SelectorEngine.findOne(selector, template); 5626 if (!templateElement) { 5627 return; 5628 } 5629 content = this._resolvePossibleFunction(content); 5630 if (!content) { 5631 templateElement.remove(); 5632 return; 5633 } 5634 if (isElement(content)) { 5635 this._putElementInTemplate(getElement(content), templateElement); 5636 return; 5637 } 5638 if (this._config.html) { 5639 templateElement.innerHTML = this._maybeSanitize(content); 5640 return; 5641 } 5642 templateElement.textContent = content; 5643 } 5644 _maybeSanitize(arg) { 5645 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
vendor: 5,271 bytes, lines 5646-5832
5646 } 5647 _resolvePossibleFunction(arg) { 5648 return typeof arg === 'function' ? arg(this) : arg; 5649 } 5650 _putElementInTemplate(element, templateElement) { 5651 if (this._config.html) { 5652 templateElement.innerHTML = ''; 5653 templateElement.append(element); 5654 return; 5655 } 5656 templateElement.textContent = element.textContent; 5657 } 5658} 5659 5660/** 5661 * -------------------------------------------------------------------------- 5662 * Bootstrap (v5.2.2): tooltip.js 5663 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5664 * -------------------------------------------------------------------------- 5665 */ 5666/** 5667 * Constants 5668 */ 5669 5670const NAME$4 = 'tooltip'; 5671const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 5672const CLASS_NAME_FADE$2 = 'fade'; 5673const CLASS_NAME_MODAL = 'modal'; 5674const CLASS_NAME_SHOW$2 = 'show'; 5675const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 5676const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 5677const EVENT_MODAL_HIDE = 'hide.bs.modal'; 5678const TRIGGER_HOVER = 'hover'; 5679const TRIGGER_FOCUS = 'focus'; 5680const TRIGGER_CLICK = 'click'; 5681const TRIGGER_MANUAL = 'manual'; 5682const EVENT_HIDE$2 = 'hide'; 5683const EVENT_HIDDEN$2 = 'hidden'; 5684const EVENT_SHOW$2 = 'show'; 5685const EVENT_SHOWN$2 = 'shown'; 5686const EVENT_INSERTED = 'inserted'; 5687const EVENT_CLICK$1 = 'click'; 5688const EVENT_FOCUSIN$1 = 'focusin'; 5689const EVENT_FOCUSOUT$1 = 'focusout'; 5690const EVENT_MOUSEENTER = 'mouseenter'; 5691const EVENT_MOUSELEAVE = 'mouseleave'; 5692const AttachmentMap = { 5693 AUTO: 'auto', 5694 TOP: 'top', 5695 RIGHT: isRTL() ? 'left' : 'right', 5696 BOTTOM: 'bottom', 5697 LEFT: isRTL() ? 'right' : 'left' 5698}; 5699const Default$3 = { 5700 allowList: DefaultAllowlist, 5701 animation: true, 5702 boundary: 'clippingParents', 5703 container: false, 5704 customClass: '', 5705 delay: 0, 5706 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 5707 html: false, 5708 offset: [0, 0], 5709 placement: 'top', 5710 popperConfig: null, 5711 sanitize: true, 5712 sanitizeFn: null, 5713 selector: false, 5714 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 5715 title: '', 5716 trigger: 'hover focus' 5717}; 5718const DefaultType$3 = { 5719 allowList: 'object', 5720 animation: 'boolean', 5721 boundary: '(string|element)', 5722 container: '(string|element|boolean)', 5723 customClass: '(string|function)', 5724 delay: '(number|object)', 5725 fallbackPlacements: 'array', 5726 html: 'boolean', 5727 offset: '(array|string|function)', 5728 placement: '(string|function)', 5729 popperConfig: '(null|object|function)', 5730 sanitize: 'boolean', 5731 sanitizeFn: '(null|function)', 5732 selector: '(string|boolean)', 5733 template: 'string', 5734 title: '(string|element|function)', 5735 trigger: 'string' 5736}; 5737/** 5738 * Class definition 5739 */ 5740 5741class Tooltip extends BaseComponent { 5742 constructor(element, config) { 5743 if (typeof Popper === 'undefined') { 5744 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 5745 } 5746 super(element, config); // Private 5747 5748 this._isEnabled = true; 5749 this._timeout = 0; 5750 this._isHovered = null; 5751 this._activeTrigger = {}; 5752 this._popper = null; 5753 this._templateFactory = null; 5754 this._newContent = null; // Protected 5755 5756 this.tip = null; 5757 this._setListeners(); 5758 if (!this._config.selector) { 5759 this._fixTitle(); 5760 } 5761 } // Getters 5762 5763 static get Default() { 5764 return Default$3; 5765 } 5766 static get DefaultType() { 5767 return DefaultType$3; 5768 } 5769 static get NAME() { 5770 return NAME$4; 5771 } // Public 5772 5773 enable() { 5774 this._isEnabled = true; 5775 } 5776 disable() { 5777 this._isEnabled = false; 5778 } 5779 toggleEnabled() { 5780 this._isEnabled = !this._isEnabled; 5781 } 5782 toggle() { 5783 if (!this._isEnabled) { 5784 return; 5785 } 5786 this._activeTrigger.click = !this._activeTrigger.click; 5787 if (this._isShown()) { 5788 this._leave(); 5789 return; 5790 } 5791 this._enter(); 5792 } 5793 dispose() { 5794 clearTimeout(this._timeout); 5795 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 5796 if (this.tip) { 5797 this.tip.remove(); 5798 } 5799 if (this._element.getAttribute('data-bs-original-title')) { 5800 this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); 5801 } 5802 this._disposePopper(); 5803 super.dispose(); 5804 } 5805 show() { 5806 if (this._element.style.display === 'none') { 5807 throw new Error('Please use show on visible elements'); 5808 } 5809 if (!(this._isWithContent() && this._isEnabled)) { 5810 return; 5811 } 5812 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 5813 const shadowRoot = findShadowRoot(this._element); 5814 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 5815 if (showEvent.defaultPrevented || !isInTheDom) { 5816 return; 5817 } // todo v6 remove this OR make it optional 5818 5819 if (this.tip) { 5820 this.tip.remove(); 5821 this.tip = null; 5822 } 5823 const tip = this._getTipElement(); 5824 this._element.setAttribute('aria-describedby', tip.getAttribute('id')); 5825 const { 5826 container 5827 } = this._config; 5828 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 5829 container.append(tip); 5830 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 5831 } 5832 if (this._popper) {
vendor: 2,830 bytes, lines 5833-5915
5833 this._popper.update(); 5834 } else { 5835 this._popper = this._createPopper(tip); 5836 } 5837 tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra 5838 // empty mouseover listeners to the body's immediate children; 5839 // only needed because of broken event delegation on iOS 5840 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5841 5842 if ('ontouchstart' in document.documentElement) { 5843 for (const element of [].concat(...document.body.children)) { 5844 EventHandler.on(element, 'mouseover', noop); 5845 } 5846 } 5847 const complete = () => { 5848 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 5849 if (this._isHovered === false) { 5850 this._leave(); 5851 } 5852 this._isHovered = false; 5853 }; 5854 this._queueCallback(complete, this.tip, this._isAnimated()); 5855 } 5856 hide() { 5857 if (!this._isShown()) { 5858 return; 5859 } 5860 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 5861 if (hideEvent.defaultPrevented) { 5862 return; 5863 } 5864 const tip = this._getTipElement(); 5865 tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra 5866 // empty mouseover listeners we added for iOS support 5867 5868 if ('ontouchstart' in document.documentElement) { 5869 for (const element of [].concat(...document.body.children)) { 5870 EventHandler.off(element, 'mouseover', noop); 5871 } 5872 } 5873 this._activeTrigger[TRIGGER_CLICK] = false; 5874 this._activeTrigger[TRIGGER_FOCUS] = false; 5875 this._activeTrigger[TRIGGER_HOVER] = false; 5876 this._isHovered = null; // it is a trick to support manual triggering 5877 5878 const complete = () => { 5879 if (this._isWithActiveTrigger()) { 5880 return; 5881 } 5882 if (!this._isHovered) { 5883 tip.remove(); 5884 } 5885 this._element.removeAttribute('aria-describedby'); 5886 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 5887 this._disposePopper(); 5888 }; 5889 this._queueCallback(complete, this.tip, this._isAnimated()); 5890 } 5891 update() { 5892 if (this._popper) { 5893 this._popper.update(); 5894 } 5895 } // Protected 5896 5897 _isWithContent() { 5898 return Boolean(this._getTitle()); 5899 } 5900 _getTipElement() { 5901 if (!this.tip) { 5902 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 5903 } 5904 return this.tip; 5905 } 5906 _createTipElement(content) { 5907 const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6 5908 5909 if (!tip) { 5910 return null; 5911 } 5912 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only 5913 5914 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 5915 const tipId = getUID(this.constructor.NAME).toString();
vendor: 5,644 bytes, lines 5916-6078
5916 tip.setAttribute('id', tipId); 5917 if (this._isAnimated()) { 5918 tip.classList.add(CLASS_NAME_FADE$2); 5919 } 5920 return tip; 5921 } 5922 setContent(content) { 5923 this._newContent = content; 5924 if (this._isShown()) { 5925 this._disposePopper(); 5926 this.show(); 5927 } 5928 } 5929 _getTemplateFactory(content) { 5930 if (this._templateFactory) { 5931 this._templateFactory.changeContent(content); 5932 } else { 5933 this._templateFactory = new TemplateFactory({ 5934 ...this._config, 5935 // the `content` var has to be after `this._config` 5936 // to override config.content in case of popover 5937 content, 5938 extraClass: this._resolvePossibleFunction(this._config.customClass) 5939 }); 5940 } 5941 return this._templateFactory; 5942 } 5943 _getContentForTemplate() { 5944 return { 5945 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 5946 }; 5947 } 5948 _getTitle() { 5949 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); 5950 } // Private 5951 5952 _initializeOnDelegatedTarget(event) { 5953 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 5954 } 5955 _isAnimated() { 5956 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 5957 } 5958 _isShown() { 5959 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 5960 } 5961 _createPopper(tip) { 5962 const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; 5963 const attachment = AttachmentMap[placement.toUpperCase()]; 5964 return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment)); 5965 } 5966 _getOffset() { 5967 const { 5968 offset 5969 } = this._config; 5970 if (typeof offset === 'string') { 5971 return offset.split(',').map(value => Number.parseInt(value, 10)); 5972 } 5973 if (typeof offset === 'function') { 5974 return popperData => offset(popperData, this._element); 5975 } 5976 return offset; 5977 } 5978 _resolvePossibleFunction(arg) { 5979 return typeof arg === 'function' ? arg.call(this._element) : arg; 5980 } 5981 _getPopperConfig(attachment) { 5982 const defaultBsPopperConfig = { 5983 placement: attachment, 5984 modifiers: [{ 5985 name: 'flip', 5986 options: { 5987 fallbackPlacements: this._config.fallbackPlacements 5988 } 5989 }, { 5990 name: 'offset', 5991 options: { 5992 offset: this._getOffset() 5993 } 5994 }, { 5995 name: 'preventOverflow', 5996 options: { 5997 boundary: this._config.boundary 5998 } 5999 }, { 6000 name: 'arrow', 6001 options: { 6002 element: `.${this.constructor.NAME}-arrow` 6003 } 6004 }, { 6005 name: 'preSetPlacement', 6006 enabled: true, 6007 phase: 'beforeMain', 6008 fn: data => { 6009 // Pre-set Popper's placement attribute in order to read the arrow sizes properly. 6010 // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement 6011 this._getTipElement().setAttribute('data-popper-placement', data.state.placement); 6012 } 6013 }] 6014 }; 6015 return { 6016 ...defaultBsPopperConfig, 6017 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 6018 }; 6019 } 6020 _setListeners() { 6021 const triggers = this._config.trigger.split(' '); 6022 for (const trigger of triggers) { 6023 if (trigger === 'click') { 6024 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { 6025 const context = this._initializeOnDelegatedTarget(event); 6026 context.toggle(); 6027 }); 6028 } else if (trigger !== TRIGGER_MANUAL) { 6029 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 6030 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 6031 EventHandler.on(this._element, eventIn, this._config.selector, event => { 6032 const context = this._initializeOnDelegatedTarget(event); 6033 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 6034 context._enter(); 6035 }); 6036 EventHandler.on(this._element, eventOut, this._config.selector, event => { 6037 const context = this._initializeOnDelegatedTarget(event); 6038 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 6039 context._leave(); 6040 }); 6041 } 6042 } 6043 this._hideModalHandler = () => { 6044 if (this._element) { 6045 this.hide(); 6046 } 6047 }; 6048 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6049 } 6050 _fixTitle() { 6051 const title = this._element.getAttribute('title'); 6052 if (!title) { 6053 return; 6054 } 6055 if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { 6056 this._element.setAttribute('aria-label', title); 6057 } 6058 this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility 6059 6060 this._element.removeAttribute('title'); 6061 } 6062 _enter() { 6063 if (this._isShown() || this._isHovered) { 6064 this._isHovered = true; 6065 return; 6066 } 6067 this._isHovered = true; 6068 this._setTimeout(() => { 6069 if (this._isHovered) { 6070 this.show(); 6071 } 6072 }, this._config.delay.show); 6073 } 6074 _leave() { 6075 if (this._isWithActiveTrigger()) { 6076 return; 6077 } 6078 this._isHovered = false;
vendor: 14,864 bytes, lines 6079-6534
6079 this._setTimeout(() => { 6080 if (!this._isHovered) { 6081 this.hide(); 6082 } 6083 }, this._config.delay.hide); 6084 } 6085 _setTimeout(handler, timeout) { 6086 clearTimeout(this._timeout); 6087 this._timeout = setTimeout(handler, timeout); 6088 } 6089 _isWithActiveTrigger() { 6090 return Object.values(this._activeTrigger).includes(true); 6091 } 6092 _getConfig(config) { 6093 const dataAttributes = Manipulator.getDataAttributes(this._element); 6094 for (const dataAttribute of Object.keys(dataAttributes)) { 6095 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 6096 delete dataAttributes[dataAttribute]; 6097 } 6098 } 6099 config = { 6100 ...dataAttributes, 6101 ...(typeof config === 'object' && config ? config : {}) 6102 }; 6103 config = this._mergeConfigObj(config); 6104 config = this._configAfterMerge(config); 6105 this._typeCheckConfig(config); 6106 return config; 6107 } 6108 _configAfterMerge(config) { 6109 config.container = config.container === false ? document.body : getElement(config.container); 6110 if (typeof config.delay === 'number') { 6111 config.delay = { 6112 show: config.delay, 6113 hide: config.delay 6114 }; 6115 } 6116 if (typeof config.title === 'number') { 6117 config.title = config.title.toString(); 6118 } 6119 if (typeof config.content === 'number') { 6120 config.content = config.content.toString(); 6121 } 6122 return config; 6123 } 6124 _getDelegateConfig() { 6125 const config = {}; 6126 for (const key in this._config) { 6127 if (this.constructor.Default[key] !== this._config[key]) { 6128 config[key] = this._config[key]; 6129 } 6130 } 6131 config.selector = false; 6132 config.trigger = 'manual'; // In the future can be replaced with: 6133 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 6134 // `Object.fromEntries(keysWithDifferentValues)` 6135 6136 return config; 6137 } 6138 _disposePopper() { 6139 if (this._popper) { 6140 this._popper.destroy(); 6141 this._popper = null; 6142 } 6143 } // Static 6144 6145 static jQueryInterface(config) { 6146 return this.each(function () { 6147 const data = Tooltip.getOrCreateInstance(this, config); 6148 if (typeof config !== 'string') { 6149 return; 6150 } 6151 if (typeof data[config] === 'undefined') { 6152 throw new TypeError(`No method named "${config}"`); 6153 } 6154 data[config](); 6155 }); 6156 } 6157} 6158/** 6159 * jQuery 6160 */ 6161exports.Tooltip = Tooltip; 6162defineJQueryPlugin(Tooltip); 6163 6164/** 6165 * -------------------------------------------------------------------------- 6166 * Bootstrap (v5.2.2): popover.js 6167 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6168 * -------------------------------------------------------------------------- 6169 */ 6170/** 6171 * Constants 6172 */ 6173 6174const NAME$3 = 'popover'; 6175const SELECTOR_TITLE = '.popover-header'; 6176const SELECTOR_CONTENT = '.popover-body'; 6177const Default$2 = { 6178 ...Tooltip.Default, 6179 content: '', 6180 offset: [0, 8], 6181 placement: 'right', 6182 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', 6183 trigger: 'click' 6184}; 6185const DefaultType$2 = { 6186 ...Tooltip.DefaultType, 6187 content: '(null|string|element|function)' 6188}; 6189/** 6190 * Class definition 6191 */ 6192 6193class Popover extends Tooltip { 6194 // Getters 6195 static get Default() { 6196 return Default$2; 6197 } 6198 static get DefaultType() { 6199 return DefaultType$2; 6200 } 6201 static get NAME() { 6202 return NAME$3; 6203 } // Overrides 6204 6205 _isWithContent() { 6206 return this._getTitle() || this._getContent(); 6207 } // Private 6208 6209 _getContentForTemplate() { 6210 return { 6211 [SELECTOR_TITLE]: this._getTitle(), 6212 [SELECTOR_CONTENT]: this._getContent() 6213 }; 6214 } 6215 _getContent() { 6216 return this._resolvePossibleFunction(this._config.content); 6217 } // Static 6218 6219 static jQueryInterface(config) { 6220 return this.each(function () { 6221 const data = Popover.getOrCreateInstance(this, config); 6222 if (typeof config !== 'string') { 6223 return; 6224 } 6225 if (typeof data[config] === 'undefined') { 6226 throw new TypeError(`No method named "${config}"`); 6227 } 6228 data[config](); 6229 }); 6230 } 6231} 6232/** 6233 * jQuery 6234 */ 6235exports.Popover = Popover; 6236defineJQueryPlugin(Popover); 6237 6238/** 6239 * -------------------------------------------------------------------------- 6240 * Bootstrap (v5.2.2): scrollspy.js 6241 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6242 * -------------------------------------------------------------------------- 6243 */ 6244/** 6245 * Constants 6246 */ 6247 6248const NAME$2 = 'scrollspy'; 6249const DATA_KEY$2 = 'bs.scrollspy'; 6250const EVENT_KEY$2 = `.${DATA_KEY$2}`; 6251const DATA_API_KEY = '.data-api'; 6252const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 6253const EVENT_CLICK = `click${EVENT_KEY$2}`; 6254const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`; 6255const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 6256const CLASS_NAME_ACTIVE$1 = 'active'; 6257const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 6258const SELECTOR_TARGET_LINKS = '[href]'; 6259const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 6260const SELECTOR_NAV_LINKS = '.nav-link'; 6261const SELECTOR_NAV_ITEMS = '.nav-item'; 6262const SELECTOR_LIST_ITEMS = '.list-group-item'; 6263const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 6264const SELECTOR_DROPDOWN = '.dropdown'; 6265const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 6266const Default$1 = { 6267 offset: null, 6268 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 6269 rootMargin: '0px 0px -25%', 6270 smoothScroll: false, 6271 target: null, 6272 threshold: [0.1, 0.5, 1] 6273}; 6274const DefaultType$1 = { 6275 offset: '(number|null)', 6276 // TODO v6 @deprecated, keep it for backwards compatibility reasons 6277 rootMargin: 'string', 6278 smoothScroll: 'boolean', 6279 target: 'element', 6280 threshold: 'array' 6281}; 6282/** 6283 * Class definition 6284 */ 6285 6286class ScrollSpy extends BaseComponent { 6287 constructor(element, config) { 6288 super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper 6289 6290 this._targetLinks = new Map(); 6291 this._observableSections = new Map(); 6292 this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; 6293 this._activeTarget = null; 6294 this._observer = null; 6295 this._previousScrollData = { 6296 visibleEntryTop: 0, 6297 parentScrollTop: 0 6298 }; 6299 this.refresh(); // initialize 6300 } // Getters 6301 6302 static get Default() { 6303 return Default$1; 6304 } 6305 static get DefaultType() { 6306 return DefaultType$1; 6307 } 6308 static get NAME() { 6309 return NAME$2; 6310 } // Public 6311 6312 refresh() { 6313 this._initializeTargetsAndObservables(); 6314 this._maybeEnableSmoothScroll(); 6315 if (this._observer) { 6316 this._observer.disconnect(); 6317 } else { 6318 this._observer = this._getNewObserver(); 6319 } 6320 for (const section of this._observableSections.values()) { 6321 this._observer.observe(section); 6322 } 6323 } 6324 dispose() { 6325 this._observer.disconnect(); 6326 super.dispose(); 6327 } // Private 6328 6329 _configAfterMerge(config) { 6330 // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case 6331 config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only 6332 6333 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 6334 if (typeof config.threshold === 'string') { 6335 config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); 6336 } 6337 return config; 6338 } 6339 _maybeEnableSmoothScroll() { 6340 if (!this._config.smoothScroll) { 6341 return; 6342 } // unregister any previous listeners 6343 6344 EventHandler.off(this._config.target, EVENT_CLICK); 6345 EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { 6346 const observableSection = this._observableSections.get(event.target.hash); 6347 if (observableSection) { 6348 event.preventDefault(); 6349 const root = this._rootElement || window; 6350 const height = observableSection.offsetTop - this._element.offsetTop; 6351 if (root.scrollTo) { 6352 root.scrollTo({ 6353 top: height, 6354 behavior: 'smooth' 6355 }); 6356 return; 6357 } // Chrome 60 doesn't support `scrollTo` 6358 6359 root.scrollTop = height; 6360 } 6361 }); 6362 } 6363 _getNewObserver() { 6364 const options = { 6365 root: this._rootElement, 6366 threshold: this._config.threshold, 6367 rootMargin: this._config.rootMargin 6368 }; 6369 return new IntersectionObserver(entries => this._observerCallback(entries), options); 6370 } // The logic of selection 6371 6372 _observerCallback(entries) { 6373 const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); 6374 const activate = entry => { 6375 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 6376 this._process(targetElement(entry)); 6377 }; 6378 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 6379 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 6380 this._previousScrollData.parentScrollTop = parentScrollTop; 6381 for (const entry of entries) { 6382 if (!entry.isIntersecting) { 6383 this._activeTarget = null; 6384 this._clearActiveClass(targetElement(entry)); 6385 continue; 6386 } 6387 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop 6388 6389 if (userScrollsDown && entryIsLowerThanPrevious) { 6390 activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration 6391 6392 if (!parentScrollTop) { 6393 return; 6394 } 6395 continue; 6396 } // if we are scrolling up, pick the smallest offsetTop 6397 6398 if (!userScrollsDown && !entryIsLowerThanPrevious) { 6399 activate(entry); 6400 } 6401 } 6402 } 6403 _initializeTargetsAndObservables() { 6404 this._targetLinks = new Map(); 6405 this._observableSections = new Map(); 6406 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 6407 for (const anchor of targetLinks) { 6408 // ensure that the anchor has an id and is not disabled 6409 if (!anchor.hash || isDisabled(anchor)) { 6410 continue; 6411 } 6412 const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible 6413 6414 if (isVisible(observableSection)) { 6415 this._targetLinks.set(anchor.hash, anchor); 6416 this._observableSections.set(anchor.hash, observableSection); 6417 } 6418 } 6419 } 6420 _process(target) { 6421 if (this._activeTarget === target) { 6422 return; 6423 } 6424 this._clearActiveClass(this._config.target); 6425 this._activeTarget = target; 6426 target.classList.add(CLASS_NAME_ACTIVE$1); 6427 this._activateParents(target); 6428 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 6429 relatedTarget: target 6430 }); 6431 } 6432 _activateParents(target) { 6433 // Activate dropdown parents 6434 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 6435 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 6436 return; 6437 } 6438 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 6439 // Set triggered links parents as active 6440 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 6441 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 6442 item.classList.add(CLASS_NAME_ACTIVE$1); 6443 } 6444 } 6445 } 6446 _clearActiveClass(parent) { 6447 parent.classList.remove(CLASS_NAME_ACTIVE$1); 6448 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 6449 for (const node of activeNodes) { 6450 node.classList.remove(CLASS_NAME_ACTIVE$1); 6451 } 6452 } // Static 6453 6454 static jQueryInterface(config) { 6455 return this.each(function () { 6456 const data = ScrollSpy.getOrCreateInstance(this, config); 6457 if (typeof config !== 'string') { 6458 return; 6459 } 6460 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6461 throw new TypeError(`No method named "${config}"`); 6462 } 6463 data[config](); 6464 }); 6465 } 6466} 6467/** 6468 * Data API implementation 6469 */ 6470exports.ScrollSpy = ScrollSpy; 6471EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 6472 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 6473 ScrollSpy.getOrCreateInstance(spy); 6474 } 6475}); 6476/** 6477 * jQuery 6478 */ 6479 6480defineJQueryPlugin(ScrollSpy); 6481 6482/** 6483 * -------------------------------------------------------------------------- 6484 * Bootstrap (v5.2.2): tab.js 6485 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6486 * -------------------------------------------------------------------------- 6487 */ 6488/** 6489 * Constants 6490 */ 6491 6492const NAME$1 = 'tab'; 6493const DATA_KEY$1 = 'bs.tab'; 6494const EVENT_KEY$1 = `.${DATA_KEY$1}`; 6495const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 6496const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 6497const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 6498const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 6499const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 6500const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 6501const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 6502const ARROW_LEFT_KEY = 'ArrowLeft'; 6503const ARROW_RIGHT_KEY = 'ArrowRight'; 6504const ARROW_UP_KEY = 'ArrowUp'; 6505const ARROW_DOWN_KEY = 'ArrowDown'; 6506const CLASS_NAME_ACTIVE = 'active'; 6507const CLASS_NAME_FADE$1 = 'fade'; 6508const CLASS_NAME_SHOW$1 = 'show'; 6509const CLASS_DROPDOWN = 'dropdown'; 6510const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 6511const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'; 6512const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'; 6513const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 6514const SELECTOR_OUTER = '.nav-item, .list-group-item'; 6515const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 6516const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab` 6517 6518const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 6519const 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"]`; 6520/** 6521 * Class definition 6522 */ 6523 6524class Tab extends BaseComponent { 6525 constructor(element) { 6526 super(element); 6527 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 6528 if (!this._parent) { 6529 return; // todo: should Throw exception on v6 6530 // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) 6531 } // Set up initial aria attributes 6532 6533 this._setInitialAttributes(this._parent, this._getChildren()); 6534 EventHandler.on(this._element, EVENT_KEYDOWN, event =>
vendor: 4,244 bytes, lines 6534-6658
6534 this._keydown(event)); 6535 } // Getters 6536 6537 static get NAME() { 6538 return NAME$1; 6539 } // Public 6540 6541 show() { 6542 // Shows this elem and deactivate the active sibling if exists 6543 const innerElem = this._element; 6544 if (this._elemIsActive(innerElem)) { 6545 return; 6546 } // Search for active tab on same parent to deactivate it 6547 6548 const active = this._getActiveElem(); 6549 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 6550 relatedTarget: innerElem 6551 }) : null; 6552 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 6553 relatedTarget: active 6554 }); 6555 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 6556 return; 6557 } 6558 this._deactivate(active, innerElem); 6559 this._activate(innerElem, active); 6560 } // Private 6561 6562 _activate(element, relatedElem) { 6563 if (!element) { 6564 return; 6565 } 6566 element.classList.add(CLASS_NAME_ACTIVE); 6567 this._activate(getElementFromSelector(element)); // Search and activate/show the proper section 6568 6569 const complete = () => { 6570 if (element.getAttribute('role') !== 'tab') { 6571 element.classList.add(CLASS_NAME_SHOW$1); 6572 return; 6573 } 6574 element.removeAttribute('tabindex'); 6575 element.setAttribute('aria-selected', true); 6576 this._toggleDropDown(element, true); 6577 EventHandler.trigger(element, EVENT_SHOWN$1, { 6578 relatedTarget: relatedElem 6579 }); 6580 }; 6581 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 6582 } 6583 _deactivate(element, relatedElem) { 6584 if (!element) { 6585 return; 6586 } 6587 element.classList.remove(CLASS_NAME_ACTIVE); 6588 element.blur(); 6589 this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too 6590 6591 const complete = () => { 6592 if (element.getAttribute('role') !== 'tab') { 6593 element.classList.remove(CLASS_NAME_SHOW$1); 6594 return; 6595 } 6596 element.setAttribute('aria-selected', false); 6597 element.setAttribute('tabindex', '-1'); 6598 this._toggleDropDown(element, false); 6599 EventHandler.trigger(element, EVENT_HIDDEN$1, { 6600 relatedTarget: relatedElem 6601 }); 6602 }; 6603 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 6604 } 6605 _keydown(event) { 6606 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) { 6607 return; 6608 } 6609 event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page 6610 6611 event.preventDefault(); 6612 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 6613 const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true); 6614 if (nextActiveElement) { 6615 nextActiveElement.focus({ 6616 preventScroll: true 6617 }); 6618 Tab.getOrCreateInstance(nextActiveElement).show(); 6619 } 6620 } 6621 _getChildren() { 6622 // collection of inner elements 6623 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 6624 } 6625 _getActiveElem() { 6626 return this._getChildren().find(child => this._elemIsActive(child)) || null; 6627 } 6628 _setInitialAttributes(parent, children) { 6629 this._setAttributeIfNotExists(parent, 'role', 'tablist'); 6630 for (const child of children) { 6631 this._setInitialAttributesOnChild(child); 6632 } 6633 } 6634 _setInitialAttributesOnChild(child) { 6635 child = this._getInnerElement(child); 6636 const isActive = this._elemIsActive(child); 6637 const outerElem = this._getOuterElement(child); 6638 child.setAttribute('aria-selected', isActive); 6639 if (outerElem !== child) { 6640 this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); 6641 } 6642 if (!isActive) { 6643 child.setAttribute('tabindex', '-1'); 6644 } 6645 this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too 6646 6647 this._setInitialAttributesOnTargetPanel(child); 6648 } 6649 _setInitialAttributesOnTargetPanel(child) { 6650 const target = getElementFromSelector(child); 6651 if (!target) { 6652 return; 6653 } 6654 this._setAttributeIfNotExists(target, 'role', 'tabpanel'); 6655 if (child.id) { 6656 this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`); 6657 } 6658 }
vendor: 6,638 bytes, lines 6659-6890
6659 _toggleDropDown(element, open) { 6660 const outerElem = this._getOuterElement(element); 6661 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 6662 return; 6663 } 6664 const toggle = (selector, className) => { 6665 const element = SelectorEngine.findOne(selector, outerElem); 6666 if (element) { 6667 element.classList.toggle(className, open); 6668 } 6669 }; 6670 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 6671 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 6672 outerElem.setAttribute('aria-expanded', open); 6673 } 6674 _setAttributeIfNotExists(element, attribute, value) { 6675 if (!element.hasAttribute(attribute)) { 6676 element.setAttribute(attribute, value); 6677 } 6678 } 6679 _elemIsActive(elem) { 6680 return elem.classList.contains(CLASS_NAME_ACTIVE); 6681 } // Try to get the inner element (usually the .nav-link) 6682 6683 _getInnerElement(elem) { 6684 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 6685 } // Try to get the outer element (usually the .nav-item) 6686 6687 _getOuterElement(elem) { 6688 return elem.closest(SELECTOR_OUTER) || elem; 6689 } // Static 6690 6691 static jQueryInterface(config) { 6692 return this.each(function () { 6693 const data = Tab.getOrCreateInstance(this); 6694 if (typeof config !== 'string') { 6695 return; 6696 } 6697 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6698 throw new TypeError(`No method named "${config}"`); 6699 } 6700 data[config](); 6701 }); 6702 } 6703} 6704/** 6705 * Data API implementation 6706 */ 6707exports.Tab = Tab; 6708EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 6709 if (['A', 'AREA'].includes(this.tagName)) { 6710 event.preventDefault(); 6711 } 6712 if (isDisabled(this)) { 6713 return; 6714 } 6715 Tab.getOrCreateInstance(this).show(); 6716}); 6717/** 6718 * Initialize on focus 6719 */ 6720 6721EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 6722 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 6723 Tab.getOrCreateInstance(element); 6724 } 6725}); 6726/** 6727 * jQuery 6728 */ 6729 6730defineJQueryPlugin(Tab); 6731 6732/** 6733 * -------------------------------------------------------------------------- 6734 * Bootstrap (v5.2.2): toast.js 6735 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6736 * -------------------------------------------------------------------------- 6737 */ 6738/** 6739 * Constants 6740 */ 6741 6742const NAME = 'toast'; 6743const DATA_KEY = 'bs.toast'; 6744const EVENT_KEY = `.${DATA_KEY}`; 6745const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 6746const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 6747const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 6748const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 6749const EVENT_HIDE = `hide${EVENT_KEY}`; 6750const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 6751const EVENT_SHOW = `show${EVENT_KEY}`; 6752const EVENT_SHOWN = `shown${EVENT_KEY}`; 6753const CLASS_NAME_FADE = 'fade'; 6754const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 6755 6756const CLASS_NAME_SHOW = 'show'; 6757const CLASS_NAME_SHOWING = 'showing'; 6758const DefaultType = { 6759 animation: 'boolean', 6760 autohide: 'boolean', 6761 delay: 'number' 6762}; 6763const Default = { 6764 animation: true, 6765 autohide: true, 6766 delay: 5000 6767}; 6768/** 6769 * Class definition 6770 */ 6771 6772class Toast extends BaseComponent { 6773 constructor(element, config) { 6774 super(element, config); 6775 this._timeout = null; 6776 this._hasMouseInteraction = false; 6777 this._hasKeyboardInteraction = false; 6778 this._setListeners(); 6779 } // Getters 6780 6781 static get Default() { 6782 return Default; 6783 } 6784 static get DefaultType() { 6785 return DefaultType; 6786 } 6787 static get NAME() { 6788 return NAME; 6789 } // Public 6790 6791 show() { 6792 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 6793 if (showEvent.defaultPrevented) { 6794 return; 6795 } 6796 this._clearTimeout(); 6797 if (this._config.animation) { 6798 this._element.classList.add(CLASS_NAME_FADE); 6799 } 6800 const complete = () => { 6801 this._element.classList.remove(CLASS_NAME_SHOWING); 6802 EventHandler.trigger(this._element, EVENT_SHOWN); 6803 this._maybeScheduleHide(); 6804 }; 6805 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 6806 6807 reflow(this._element); 6808 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 6809 this._queueCallback(complete, this._element, this._config.animation); 6810 } 6811 hide() { 6812 if (!this.isShown()) { 6813 return; 6814 } 6815 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 6816 if (hideEvent.defaultPrevented) { 6817 return; 6818 } 6819 const complete = () => { 6820 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 6821 6822 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 6823 EventHandler.trigger(this._element, EVENT_HIDDEN); 6824 }; 6825 this._element.classList.add(CLASS_NAME_SHOWING); 6826 this._queueCallback(complete, this._element, this._config.animation); 6827 } 6828 dispose() { 6829 this._clearTimeout(); 6830 if (this.isShown()) { 6831 this._element.classList.remove(CLASS_NAME_SHOW); 6832 } 6833 super.dispose(); 6834 } 6835 isShown() { 6836 return this._element.classList.contains(CLASS_NAME_SHOW); 6837 } // Private 6838 6839 _maybeScheduleHide() { 6840 if (!this._config.autohide) { 6841 return; 6842 } 6843 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 6844 return; 6845 } 6846 this._timeout = setTimeout(() => { 6847 this.hide(); 6848 }, this._config.delay); 6849 } 6850 _onInteraction(event, isInteracting) { 6851 switch (event.type) { 6852 case 'mouseover': 6853 case 'mouseout': 6854 { 6855 this._hasMouseInteraction = isInteracting; 6856 break; 6857 } 6858 case 'focusin': 6859 case 'focusout': 6860 { 6861 this._hasKeyboardInteraction = isInteracting; 6862 break; 6863 } 6864 } 6865 if (isInteracting) { 6866 this._clearTimeout(); 6867 return; 6868 } 6869 const nextElement = event.relatedTarget; 6870 if (this._element === nextElement || this._element.contains(nextElement)) { 6871 return; 6872 } 6873 this._maybeScheduleHide(); 6874 } 6875 _setListeners() { 6876 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 6877 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 6878 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 6879 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 6880 } 6881 _clearTimeout() { 6882 clearTimeout(this._timeout); 6883 this._timeout = null; 6884 } // Static 6885 6886 static jQueryInterface(config) { 6887 return this.each(function () { 6888 const data = Toast.getOrCreateInstance(this, config); 6889 if (typeof config === 'string') { 6890 if (typeof data[config] === 'undefined') {
vendor: 4,916 bytes, lines 6891-7072
6891 throw new TypeError(`No method named "${config}"`); 6892 } 6893 data[config](this); 6894 } 6895 }); 6896 } 6897} 6898/** 6899 * Data API implementation 6900 */ 6901exports.Toast = Toast; 6902enableDismissTrigger(Toast); 6903/** 6904 * jQuery 6905 */ 6906 6907defineJQueryPlugin(Toast); 6908 6909},{"@popperjs/core":26}],62:[function(require,module,exports){ 6910/*! 6911 * jQuery Cookie Plugin v1.4.1 6912 * https://github.com/carhartl/jquery-cookie 6913 * 6914 * Copyright 2013 Klaus Hartl 6915 * Released under the MIT license 6916 */ 6917(function (factory) { 6918 if (typeof define === 'function' && define.amd) { 6919 // AMD 6920 define(['jquery'], factory); 6921 } else if (typeof exports === 'object') { 6922 // CommonJS 6923 factory(require('jquery')); 6924 } else { 6925 // Browser globals 6926 factory(jQuery); 6927 } 6928}(function ($) { 6929 6930 var pluses = /\+/g; 6931 6932 function encode(s) { 6933 return config.raw ? s : encodeURIComponent(s); 6934 } 6935 6936 function decode(s) { 6937 return config.raw ? s : decodeURIComponent(s); 6938 } 6939 6940 function stringifyCookieValue(value) { 6941 return encode(config.json ? JSON.stringify(value) : String(value)); 6942 } 6943 6944 function parseCookieValue(s) { 6945 if (s.indexOf('"') === 0) { 6946 // This is a quoted cookie as according to RFC2068, unescape... 6947 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 6948 } 6949 6950 try { 6951 // Replace server-side written pluses with spaces. 6952 // If we can't decode the cookie, ignore it, it's unusable. 6953 // If we can't parse the cookie, ignore it, it's unusable. 6954 s = decodeURIComponent(s.replace(pluses, ' ')); 6955 return config.json ? JSON.parse(s) : s; 6956 } catch(e) {} 6957 } 6958 6959 function read(s, converter) { 6960 var value = config.raw ? s : parseCookieValue(s); 6961 return $.isFunction(converter) ? converter(value) : value; 6962 } 6963 6964 var config = $.cookie = function (key, value, options) { 6965 6966 // Write 6967 6968 if (value !== undefined && !$.isFunction(value)) { 6969 options = $.extend({}, config.defaults, options); 6970 6971 if (typeof options.expires === 'number') { 6972 var days = options.expires, t = options.expires = new Date(); 6973 t.setTime(+t + days * 864e+5); 6974 } 6975 6976 return (document.cookie = [ 6977 encode(key), '=', stringifyCookieValue(value), 6978 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 6979 options.path ? '; path=' + options.path : '', 6980 options.domain ? '; domain=' + options.domain : '', 6981 options.secure ? '; secure' : '' 6982 ].join('')); 6983 } 6984 6985 // Read 6986 6987 var result = key ? undefined : {}; 6988 6989 // To prevent the for loop in the first place assign an empty array 6990 // in case there are no cookies at all. Also prevents odd result when 6991 // calling $.cookie(). 6992 var cookies = document.cookie ? document.cookie.split('; ') : []; 6993 6994 for (var i = 0, l = cookies.length; i < l; i++) { 6995 var parts = cookies[i].split('='); 6996 var name = decode(parts.shift()); 6997 var cookie = parts.join('='); 6998 6999 if (key && key === name) { 7000 // If second argument (value) is a function it's a converter... 7001 result = read(cookie, value); 7002 break; 7003 } 7004 7005 // Prevent storing a cookie that we couldn't decode. 7006 if (!key && (cookie = read(cookie)) !== undefined) { 7007 result[name] = cookie; 7008 } 7009 } 7010 7011 return result; 7012 }; 7013 7014 config.defaults = {}; 7015 7016 $.removeCookie = function (key, options) { 7017 if ($.cookie(key) === undefined) { 7018 return false; 7019 } 7020 7021 // Must not alter options, thus extending a fresh object... 7022 $.cookie(key, '', $.extend({}, options, { expires: -1 })); 7023 return !$.cookie(key); 7024 }; 7025 7026})); 7027 7028},{"jquery":63}],63:[function(require,module,exports){ 7029/*! 7030 * jQuery JavaScript Library v3.6.1 7031 * https://jquery.com/ 7032 * 7033 * Includes Sizzle.js 7034 * https://sizzlejs.com/ 7035 * 7036 * Copyright OpenJS Foundation and other contributors 7037 * Released under the MIT license 7038 * https://jquery.org/license 7039 * 7040 * Date: 2022-08-26T17:52Z 7041 */ 7042( function( global, factory ) { 7043 7044 "use strict"; 7045 7046 if ( typeof module === "object" && typeof module.exports === "object" ) { 7047 7048 // For CommonJS and CommonJS-like environments where a proper `window` 7049 // is present, execute the factory and get jQuery. 7050 // For environments that do not have a `window` with a `document` 7051 // (such as Node.js), expose a factory as module.exports. 7052 // This accentuates the need for the creation of a real `window`. 7053 // e.g. var jQuery = require("jquery")(window); 7054 // See ticket trac-14549 for more info. 7055 module.exports = global.document ? 7056 factory( global, true ) : 7057 function( w ) { 7058 if ( !w.document ) { 7059 throw new Error( "jQuery requires a window with a document" ); 7060 } 7061 return factory( w ); 7062 }; 7063 } else { 7064 factory( global ); 7065 } 7066 7067// Pass this if window is not defined yet 7068} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 7069 7070// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 7071// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 7072// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), str
vendor: 2,883 bytes, lines 7072-7182
7072ict mode should be common 7073// enough that all such attempts are guarded in a try block. 7074"use strict"; 7075 7076var arr = []; 7077 7078var getProto = Object.getPrototypeOf; 7079 7080var slice = arr.slice; 7081 7082var flat = arr.flat ? function( array ) { 7083 return arr.flat.call( array ); 7084} : function( array ) { 7085 return arr.concat.apply( [], array ); 7086}; 7087 7088 7089var push = arr.push; 7090 7091var indexOf = arr.indexOf; 7092 7093var class2type = {}; 7094 7095var toString = class2type.toString; 7096 7097var hasOwn = class2type.hasOwnProperty; 7098 7099var fnToString = hasOwn.toString; 7100 7101var ObjectFunctionString = fnToString.call( Object ); 7102 7103var support = {}; 7104 7105var isFunction = function isFunction( obj ) { 7106 7107 // Support: Chrome <=57, Firefox <=52 7108 // In some browsers, typeof returns "function" for HTML <object> elements 7109 // (i.e., `typeof document.createElement( "object" ) === "function"`). 7110 // We don't want to classify *any* DOM node as a function. 7111 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 7112 // Plus for old WebKit, typeof returns "function" for HTML collections 7113 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 7114 return typeof obj === "function" && typeof obj.nodeType !== "number" && 7115 typeof obj.item !== "function"; 7116 }; 7117 7118 7119var isWindow = function isWindow( obj ) { 7120 return obj != null && obj === obj.window; 7121 }; 7122 7123 7124var document = window.document; 7125 7126 7127 7128 var preservedScriptAttributes = { 7129 type: true, 7130 src: true, 7131 nonce: true, 7132 noModule: true 7133 }; 7134 7135 function DOMEval( code, node, doc ) { 7136 doc = doc || document; 7137 7138 var i, val, 7139 script = doc.createElement( "script" ); 7140 7141 script.text = code; 7142 if ( node ) { 7143 for ( i in preservedScriptAttributes ) { 7144 7145 // Support: Firefox 64+, Edge 18+ 7146 // Some browsers don't support the "nonce" property on scripts. 7147 // On the other hand, just using `getAttribute` is not enough as 7148 // the `nonce` attribute is reset to an empty string whenever it 7149 // becomes browsing-context connected. 7150 // See https://github.com/whatwg/html/issues/2369 7151 // See https://html.spec.whatwg.org/#nonce-attributes 7152 // The `node.getAttribute` check was added for the sake of 7153 // `jQuery.globalEval` so that it can fake a nonce-containing node 7154 // via an object. 7155 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 7156 if ( val ) { 7157 script.setAttribute( i, val ); 7158 } 7159 } 7160 } 7161 doc.head.appendChild( script ).parentNode.removeChild( script ); 7162 } 7163 7164 7165function toType( obj ) { 7166 if ( obj == null ) { 7167 return obj + ""; 7168 } 7169 7170 // Support: Android <=2.3 only (functionish RegExp) 7171 return typeof obj === "object" || typeof obj === "function" ? 7172 class2type[ toString.call( obj ) ] || "object" : 7173 typeof obj; 7174} 7175/* global Symbol */ 7176// Defining this global in .eslintrc.json would create a danger of using the global 7177// unguarded in another place, it seems safer to define global only for this module 7178 7179 7180 7181var 7182 version = "3.6.1
vendor: 80,866 bytes, lines 7182-10114
7182", 7183 7184 // Define a local copy of jQuery 7185 jQuery = function( selector, context ) { 7186 7187 // The jQuery object is actually just the init constructor 'enhanced' 7188 // Need init if jQuery is called (just allow error to be thrown if not included) 7189 return new jQuery.fn.init( selector, context ); 7190 }; 7191 7192jQuery.fn = jQuery.prototype = { 7193 7194 // The current version of jQuery being used 7195 jquery: version, 7196 7197 constructor: jQuery, 7198 7199 // The default length of a jQuery object is 0 7200 length: 0, 7201 7202 toArray: function() { 7203 return slice.call( this ); 7204 }, 7205 7206 // Get the Nth element in the matched element set OR 7207 // Get the whole matched element set as a clean array 7208 get: function( num ) { 7209 7210 // Return all the elements in a clean array 7211 if ( num == null ) { 7212 return slice.call( this ); 7213 } 7214 7215 // Return just the one element from the set 7216 return num < 0 ? this[ num + this.length ] : this[ num ]; 7217 }, 7218 7219 // Take an array of elements and push it onto the stack 7220 // (returning the new matched element set) 7221 pushStack: function( elems ) { 7222 7223 // Build a new jQuery matched element set 7224 var ret = jQuery.merge( this.constructor(), elems ); 7225 7226 // Add the old object onto the stack (as a reference) 7227 ret.prevObject = this; 7228 7229 // Return the newly-formed element set 7230 return ret; 7231 }, 7232 7233 // Execute a callback for every element in the matched set. 7234 each: function( callback ) { 7235 return jQuery.each( this, callback ); 7236 }, 7237 7238 map: function( callback ) { 7239 return this.pushStack( jQuery.map( this, function( elem, i ) { 7240 return callback.call( elem, i, elem ); 7241 } ) ); 7242 }, 7243 7244 slice: function() { 7245 return this.pushStack( slice.apply( this, arguments ) ); 7246 }, 7247 7248 first: function() { 7249 return this.eq( 0 ); 7250 }, 7251 7252 last: function() { 7253 return this.eq( -1 ); 7254 }, 7255 7256 even: function() { 7257 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 7258 return ( i + 1 ) % 2; 7259 } ) ); 7260 }, 7261 7262 odd: function() { 7263 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 7264 return i % 2; 7265 } ) ); 7266 }, 7267 7268 eq: function( i ) { 7269 var len = this.length, 7270 j = +i + ( i < 0 ? len : 0 ); 7271 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 7272 }, 7273 7274 end: function() { 7275 return this.prevObject || this.constructor(); 7276 }, 7277 7278 // For internal use only. 7279 // Behaves like an Array's method, not like a jQuery method. 7280 push: push, 7281 sort: arr.sort, 7282 splice: arr.splice 7283}; 7284 7285jQuery.extend = jQuery.fn.extend = function() { 7286 var options, name, src, copy, copyIsArray, clone, 7287 target = arguments[ 0 ] || {}, 7288 i = 1, 7289 length = arguments.length, 7290 deep = false; 7291 7292 // Handle a deep copy situation 7293 if ( typeof target === "boolean" ) { 7294 deep = target; 7295 7296 // Skip the boolean and the target 7297 target = arguments[ i ] || {}; 7298 i++; 7299 } 7300 7301 // Handle case when target is a string or something (possible in deep copy) 7302 if ( typeof target !== "object" && !isFunction( target ) ) { 7303 target = {}; 7304 } 7305 7306 // Extend jQuery itself if only one argument is passed 7307 if ( i === length ) { 7308 target = this; 7309 i--; 7310 } 7311 7312 for ( ; i < length; i++ ) { 7313 7314 // Only deal with non-null/undefined values 7315 if ( ( options = arguments[ i ] ) != null ) { 7316 7317 // Extend the base object 7318 for ( name in options ) { 7319 copy = options[ name ]; 7320 7321 // Prevent Object.prototype pollution 7322 // Prevent never-ending loop 7323 if ( name === "__proto__" || target === copy ) { 7324 continue; 7325 } 7326 7327 // Recurse if we're merging plain objects or arrays 7328 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 7329 ( copyIsArray = Array.isArray( copy ) ) ) ) { 7330 src = target[ name ]; 7331 7332 // Ensure proper type for the source value 7333 if ( copyIsArray && !Array.isArray( src ) ) { 7334 clone = []; 7335 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 7336 clone = {}; 7337 } else { 7338 clone = src; 7339 } 7340 copyIsArray = false; 7341 7342 // Never move original objects, clone them 7343 target[ name ] = jQuery.extend( deep, clone, copy ); 7344 7345 // Don't bring in undefined values 7346 } else if ( copy !== undefined ) { 7347 target[ name ] = copy; 7348 } 7349 } 7350 } 7351 } 7352 7353 // Return the modified object 7354 return target; 7355}; 7356 7357jQuery.extend( { 7358 7359 // Unique for each copy of jQuery on the page 7360 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 7361 7362 // Assume jQuery is ready without the ready module 7363 isReady: true, 7364 7365 error: function( msg ) { 7366 throw new Error( msg ); 7367 }, 7368 7369 noop: function() {}, 7370 7371 isPlainObject: function( obj ) { 7372 var proto, Ctor; 7373 7374 // Detect obvious negatives 7375 // Use toString instead of jQuery.type to catch host objects 7376 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 7377 return false; 7378 } 7379 7380 proto = getProto( obj ); 7381 7382 // Objects with no prototype (e.g., `Object.create( null )`) are plain 7383 if ( !proto ) { 7384 return true; 7385 } 7386 7387 // Objects with prototype are plain iff they were constructed by a global Object function 7388 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 7389 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 7390 }, 7391 7392 isEmptyObject: function( obj ) { 7393 var name; 7394 7395 for ( name in obj ) { 7396 return false; 7397 } 7398 return true; 7399 }, 7400 7401 // Evaluates a script in a provided context; falls back to the global one 7402 // if not specified. 7403 globalEval: function( code, options, doc ) { 7404 DOMEval( code, { nonce: options && options.nonce }, doc ); 7405 }, 7406 7407 each: function( obj, callback ) { 7408 var length, i = 0; 7409 7410 if ( isArrayLike( obj ) ) { 7411 length = obj.length; 7412 for ( ; i < length; i++ ) { 7413 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 7414 break; 7415 } 7416 } 7417 } else { 7418 for ( i in obj ) { 7419 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 7420 break; 7421 } 7422 } 7423 } 7424 7425 return obj; 7426 }, 7427 7428 // results is for internal usage only 7429 makeArray: function( arr, results ) { 7430 var ret = results || []; 7431 7432 if ( arr != null ) { 7433 if ( isArrayLike( Object( arr ) ) ) { 7434 jQuery.merge( ret, 7435 typeof arr === "string" ? 7436 [ arr ] : arr 7437 ); 7438 } else { 7439 push.call( ret, arr ); 7440 } 7441 } 7442 7443 return ret; 7444 }, 7445 7446 inArray: function( elem, arr, i ) { 7447 return arr == null ? -1 : indexOf.call( arr, elem, i ); 7448 }, 7449 7450 // Support: Android <=4.0 only, PhantomJS 1 only 7451 // push.apply(_, arraylike) throws on ancient WebKit 7452 merge: function( first, second ) { 7453 var len = +second.length, 7454 j = 0, 7455 i = first.length; 7456 7457 for ( ; j < len; j++ ) { 7458 first[ i++ ] = second[ j ]; 7459 } 7460 7461 first.length = i; 7462 7463 return first; 7464 }, 7465 7466 grep: function( elems, callback, invert ) { 7467 var callbackInverse, 7468 matches = [], 7469 i = 0, 7470 length = elems.length, 7471 callbackExpect = !invert; 7472 7473 // Go through the array, only saving the items 7474 // that pass the validator function 7475 for ( ; i < length; i++ ) { 7476 callbackInverse = !callback( elems[ i ], i ); 7477 if ( callbackInverse !== callbackExpect ) { 7478 matches.push( elems[ i ] ); 7479 } 7480 } 7481 7482 return matches; 7483 }, 7484 7485 // arg is for internal usage only 7486 map: function( elems, callback, arg ) { 7487 var length, value, 7488 i = 0, 7489 ret = []; 7490 7491 // Go through the array, translating each of the items to their new values 7492 if ( isArrayLike( elems ) ) { 7493 length = elems.length; 7494 for ( ; i < length; i++ ) { 7495 value = callback( elems[ i ], i, arg ); 7496 7497 if ( value != null ) { 7498 ret.push( value ); 7499 } 7500 } 7501 7502 // Go through every key on the object, 7503 } else { 7504 for ( i in elems ) { 7505 value = callback( elems[ i ], i, arg ); 7506 7507 if ( value != null ) { 7508 ret.push( value ); 7509 } 7510 } 7511 } 7512 7513 // Flatten any nested arrays 7514 return flat( ret ); 7515 }, 7516 7517 // A global GUID counter for objects 7518 guid: 1, 7519 7520 // jQuery.support is not used in Core but other projects attach their 7521 // properties to it so it needs to exist. 7522 support: support 7523} ); 7524 7525if ( typeof Symbol === "function" ) { 7526 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 7527} 7528 7529// Populate the class2type map 7530jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 7531 function( _i, name ) { 7532 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 7533 } ); 7534 7535function isArrayLike( obj ) { 7536 7537 // Support: real iOS 8.2 only (not reproducible in simulator) 7538 // `in` check used to prevent JIT error (gh-2145) 7539 // hasOwn isn't used here due to false negatives 7540 // regarding Nodelist length in IE 7541 var length = !!obj && "length" in obj && obj.length, 7542 type = toType( obj ); 7543 7544 if ( isFunction( obj ) || isWindow( obj ) ) { 7545 return false; 7546 } 7547 7548 return type === "array" || length === 0 || 7549 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 7550} 7551var Sizzle = 7552/*! 7553 * Sizzle CSS Selector Engine v2.3.6 7554 * https://sizzlejs.com/ 7555 * 7556 * Copyright JS Foundation and other contributors 7557 * Released under the MIT license 7558 * https://js.foundation/ 7559 * 7560 * Date: 2021-02-16 7561 */ 7562( function( window ) { 7563var i, 7564 support, 7565 Expr, 7566 getText, 7567 isXML, 7568 tokenize, 7569 compile, 7570 select, 7571 outermostContext, 7572 sortInput, 7573 hasDuplicate, 7574 7575 // Local document vars 7576 setDocument, 7577 document, 7578 docElem, 7579 documentIsHTML, 7580 rbuggyQSA, 7581 rbuggyMatches, 7582 matches, 7583 contains, 7584 7585 // Instance-specific data 7586 expando = "sizzle" + 1 * new Date(), 7587 preferredDoc = window.document, 7588 dirruns = 0, 7589 done = 0, 7590 classCache = createCache(), 7591 tokenCache = createCache(), 7592 compilerCache = createCache(), 7593 nonnativeSelectorCache = createCache(), 7594 sortOrder = function( a, b ) { 7595 if ( a === b ) { 7596 hasDuplicate = true; 7597 } 7598 return 0; 7599 }, 7600 7601 // Instance methods 7602 hasOwn = ( {} ).hasOwnProperty, 7603 arr = [], 7604 pop = arr.pop, 7605 pushNative = arr.push, 7606 push = arr.push, 7607 slice = arr.slice, 7608 7609 // Use a stripped-down indexOf as it's faster than native 7610 // https://jsperf.com/thor-indexof-vs-for/5 7611 indexOf = function( list, elem ) { 7612 var i = 0, 7613 len = list.length; 7614 for ( ; i < len; i++ ) { 7615 if ( list[ i ] === elem ) { 7616 return i; 7617 } 7618 } 7619 return -1; 7620 }, 7621 7622 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + 7623 "ismap|loop|multiple|open|readonly|required|scoped", 7624 7625 // Regular expressions 7626 7627 // http://www.w3.org/TR/css3-selectors/#whitespace 7628 whitespace = "[\\x20\\t\\r\\n\\f]", 7629 7630 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 7631 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 7632 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 7633 7634 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 7635 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 7636 7637 // Operator (capture 2) 7638 "*([*^$|!~]?=)" + whitespace + 7639 7640 // "Attribute values must be CSS identifiers [capture 5] 7641 // or strings [capture 3 or capture 4]" 7642 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 7643 whitespace + "*\\]", 7644 7645 pseudos = ":(" + identifier + ")(?:\\((" + 7646 7647 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 7648 // 1. quoted (capture 3; capture 4 or capture 5) 7649 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 7650 7651 // 2. simple (capture 6) 7652 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 7653 7654 // 3. anything else (capture 2) 7655 ".*" + 7656 ")\\)|)", 7657 7658 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 7659 rwhitespace = new RegExp( whitespace + "+", "g" ), 7660 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + 7661 whitespace + "+$", "g" ), 7662 7663 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 7664 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + 7665 "*" ), 7666 rdescend = new RegExp( whitespace + "|>" ), 7667 7668 rpseudo = new RegExp( pseudos ), 7669 ridentifier = new RegExp( "^" + identifier + "$" ), 7670 7671 matchExpr = { 7672 "ID": new RegExp( "^#(" + identifier + ")" ), 7673 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 7674 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 7675 "ATTR": new RegExp( "^" + attributes ), 7676 "PSEUDO": new RegExp( "^" + pseudos ), 7677 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 7678 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 7679 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 7680 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 7681 7682 // For use in libraries implementing .is() 7683 // We use this for POS matching in `select` 7684 "needsContext": new RegExp( "^" + whitespace + 7685 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 7686 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 7687 }, 7688 7689 rhtml = /HTML$/i, 7690 rinputs = /^(?:input|select|textarea|button)$/i, 7691 rheader = /^h\d$/i, 7692 7693 rnative = /^[^{]+\{\s*\[native \w/, 7694 7695 // Easily-parseable/retrievable ID or TAG or CLASS selectors 7696 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 7697 7698 rsibling = /[+~]/, 7699 7700 // CSS escapes 7701 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 7702 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), 7703 funescape = function( escape, nonHex ) { 7704 var high = "0x" + escape.slice( 1 ) - 0x10000; 7705 7706 return nonHex ? 7707 7708 // Strip the backslash prefix from a non-hex escape sequence 7709 nonHex : 7710 7711 // Replace a hexadecimal escape sequence with the encoded Unicode code point 7712 // Support: IE <=11+ 7713 // For values outside the Basic Multilingual Plane (BMP), manually construct a 7714 // surrogate pair 7715 high < 0 ? 7716 String.fromCharCode( high + 0x10000 ) : 7717 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 7718 }, 7719 7720 // CSS string/identifier serialization 7721 // https://drafts.csswg.org/cssom/#common-serializing-idioms 7722 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, 7723 fcssescape = function( ch, asCodePoint ) { 7724 if ( asCodePoint ) { 7725 7726 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 7727 if ( ch === "\0" ) { 7728 return "\uFFFD"; 7729 } 7730 7731 // Control characters and (dependent upon position) numbers get escaped as code points 7732 return ch.slice( 0, -1 ) + "\\" + 7733 ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 7734 } 7735 7736 // Other potentially-special ASCII characters get backslash-escaped 7737 return "\\" + ch; 7738 }, 7739 7740 // Used for iframes 7741 // See setDocument() 7742 // Removing the function wrapper causes a "Permission Denied" 7743 // error in IE 7744 unloadHandler = function() { 7745 setDocument(); 7746 }, 7747 7748 inDisabledFieldset = addCombinator( 7749 function( elem ) { 7750 return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; 7751 }, 7752 { dir: "parentNode", next: "legend" } 7753 ); 7754 7755// Optimize for push.apply( _, NodeList ) 7756try { 7757 push.apply( 7758 ( arr = slice.call( preferredDoc.childNodes ) ), 7759 preferredDoc.childNodes 7760 ); 7761 7762 // Support: Android<4.0 7763 // Detect silently failing push.apply 7764 // eslint-disable-next-line no-unused-expressions 7765 arr[ preferredDoc.childNodes.length ].nodeType; 7766} catch ( e ) { 7767 push = { apply: arr.length ? 7768 7769 // Leverage slice if possible 7770 function( target, els ) { 7771 pushNative.apply( target, slice.call( els ) ); 7772 } : 7773 7774 // Support: IE<9 7775 // Otherwise append directly 7776 function( target, els ) { 7777 var j = target.length, 7778 i = 0; 7779 7780 // Can't trust NodeList.length 7781 while ( ( target[ j++ ] = els[ i++ ] ) ) {} 7782 target.length = j - 1; 7783 } 7784 }; 7785} 7786 7787function Sizzle( selector, context, results, seed ) { 7788 var m, i, elem, nid, match, groups, newSelector, 7789 newContext = context && context.ownerDocument, 7790 7791 // nodeType defaults to 9, since context defaults to document 7792 nodeType = context ? context.nodeType : 9; 7793 7794 results = results || []; 7795 7796 // Return early from calls with invalid selector or context 7797 if ( typeof selector !== "string" || !selector || 7798 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 7799 7800 return results; 7801 } 7802 7803 // Try to shortcut find operations (as opposed to filters) in HTML documents 7804 if ( !seed ) { 7805 setDocument( context ); 7806 context = context || document; 7807 7808 if ( documentIsHTML ) { 7809 7810 // If the selector is sufficiently simple, try using a "get*By*" DOM method 7811 // (excepting DocumentFragment context, where the methods don't exist) 7812 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 7813 7814 // ID selector 7815 if ( ( m = match[ 1 ] ) ) { 7816 7817 // Document context 7818 if ( nodeType === 9 ) { 7819 if ( ( elem = context.getElementById( m ) ) ) { 7820 7821 // Support: IE, Opera, Webkit 7822 // TODO: identify versions 7823 // getElementById can match elements by name instead of ID 7824 if ( elem.id === m ) { 7825 results.push( elem ); 7826 return results; 7827 } 7828 } else { 7829 return results; 7830 } 7831 7832 // Element context 7833 } else { 7834 7835 // Support: IE, Opera, Webkit 7836 // TODO: identify versions 7837 // getElementById can match elements by name instead of ID 7838 if ( newContext && ( elem = newContext.getElementById( m ) ) && 7839 contains( context, elem ) && 7840 elem.id === m ) { 7841 7842 results.push( elem ); 7843 return results; 7844 } 7845 } 7846 7847 // Type selector 7848 } else if ( match[ 2 ] ) { 7849 push.apply( results, context.getElementsByTagName( selector ) ); 7850 return results; 7851 7852 // Class selector 7853 } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && 7854 context.getElementsByClassName ) { 7855 7856 push.apply( results, context.getElementsByClassName( m ) ); 7857 return results; 7858 } 7859 } 7860 7861 // Take advantage of querySelectorAll 7862 if ( support.qsa && 7863 !nonnativeSelectorCache[ selector + " " ] && 7864 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && 7865 7866 // Support: IE 8 only 7867 // Exclude object elements 7868 ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { 7869 7870 newSelector = selector; 7871 newContext = context; 7872 7873 // qSA considers elements outside a scoping root when evaluating child or 7874 // descendant combinators, which is not what we want. 7875 // In such cases, we work around the behavior by prefixing every selector in the 7876 // list with an ID selector referencing the scope context. 7877 // The technique has to be used as well when a leading combinator is used 7878 // as such selectors are not recognized by querySelectorAll. 7879 // Thanks to Andrew Dupont for this technique. 7880 if ( nodeType === 1 && 7881 ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { 7882 7883 // Expand context for sibling selectors 7884 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 7885 context; 7886 7887 // We can use :scope instead of the ID hack if the browser 7888 // supports it & if we're not changing the context. 7889 if ( newContext !== context || !support.scope ) { 7890 7891 // Capture the context ID, setting it first if necessary 7892 if ( ( nid = context.getAttribute( "id" ) ) ) { 7893 nid = nid.replace( rcssescape, fcssescape ); 7894 } else { 7895 context.setAttribute( "id", ( nid = expando ) ); 7896 } 7897 } 7898 7899 // Prefix every selector in the list 7900 groups = tokenize( selector ); 7901 i = groups.length; 7902 while ( i-- ) { 7903 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 7904 toSelector( groups[ i ] ); 7905 } 7906 newSelector = groups.join( "," ); 7907 } 7908 7909 try { 7910 push.apply( results, 7911 newContext.querySelectorAll( newSelector ) 7912 ); 7913 return results; 7914 } catch ( qsaError ) { 7915 nonnativeSelectorCache( selector, true ); 7916 } finally { 7917 if ( nid === expando ) { 7918 context.removeAttribute( "id" ); 7919 } 7920 } 7921 } 7922 } 7923 } 7924 7925 // All others 7926 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 7927} 7928 7929/** 7930 * Create key-value caches of limited size 7931 * @returns {function(string, object)} Returns the Object data after storing it on itself with 7932 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 7933 * deleting the oldest entry 7934 */ 7935function createCache() { 7936 var keys = []; 7937 7938 function cache( key, value ) { 7939 7940 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 7941 if ( keys.push( key + " " ) > Expr.cacheLength ) { 7942 7943 // Only keep the most recent entries 7944 delete cache[ keys.shift() ]; 7945 } 7946 return ( cache[ key + " " ] = value ); 7947 } 7948 return cache; 7949} 7950 7951/** 7952 * Mark a function for special use by Sizzle 7953 * @param {Function} fn The function to mark 7954 */ 7955function markFunction( fn ) { 7956 fn[ expando ] = true; 7957 return fn; 7958} 7959 7960/** 7961 * Support testing using an element 7962 * @param {Function} fn Passed the created element and returns a boolean result 7963 */ 7964function assert( fn ) { 7965 var el = document.createElement( "fieldset" ); 7966 7967 try { 7968 return !!fn( el ); 7969 } catch ( e ) { 7970 return false; 7971 } finally { 7972 7973 // Remove from its parent by default 7974 if ( el.parentNode ) { 7975 el.parentNode.removeChild( el ); 7976 } 7977 7978 // release memory in IE 7979 el = null; 7980 } 7981} 7982 7983/** 7984 * Adds the same handler for all of the specified attrs 7985 * @param {String} attrs Pipe-separated list of attributes 7986 * @param {Function} handler The method that will be applied 7987 */ 7988function addHandle( attrs, handler ) { 7989 var arr = attrs.split( "|" ), 7990 i = arr.length; 7991 7992 while ( i-- ) { 7993 Expr.attrHandle[ arr[ i ] ] = handler; 7994 } 7995} 7996 7997/** 7998 * Checks document order of two siblings 7999 * @param {Element} a 8000 * @param {Element} b 8001 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 8002 */ 8003function siblingCheck( a, b ) { 8004 var cur = b && a, 8005 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 8006 a.sourceIndex - b.sourceIndex; 8007 8008 // Use IE sourceIndex if available on both nodes 8009 if ( diff ) { 8010 return diff; 8011 } 8012 8013 // Check if b follows a 8014 if ( cur ) { 8015 while ( ( cur = cur.nextSibling ) ) { 8016 if ( cur === b ) { 8017 return -1; 8018 } 8019 } 8020 } 8021 8022 return a ? 1 : -1; 8023} 8024 8025/** 8026 * Returns a function to use in pseudos for input types 8027 * @param {String} type 8028 */ 8029function createInputPseudo( type ) { 8030 return function( elem ) { 8031 var name = elem.nodeName.toLowerCase(); 8032 return name === "input" && elem.type === type; 8033 }; 8034} 8035 8036/** 8037 * Returns a function to use in pseudos for buttons 8038 * @param {String} type 8039 */ 8040function createButtonPseudo( type ) { 8041 return function( elem ) { 8042 var name = elem.nodeName.toLowerCase(); 8043 return ( name === "input" || name === "button" ) && elem.type === type; 8044 }; 8045} 8046 8047/** 8048 * Returns a function to use in pseudos for :enabled/:disabled 8049 * @param {Boolean} disabled true for :disabled; false for :enabled 8050 */ 8051function createDisabledPseudo( disabled ) { 8052 8053 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 8054 return function( elem ) { 8055 8056 // Only certain elements can match :enabled or :disabled 8057 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 8058 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 8059 if ( "form" in elem ) { 8060 8061 // Check for inherited disabledness on relevant non-disabled elements: 8062 // * listed form-associated elements in a disabled fieldset 8063 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 8064 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 8065 // * option elements in a disabled optgroup 8066 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 8067 // All such elements have a "form" property. 8068 if ( elem.parentNode && elem.disabled === false ) { 8069 8070 // Option elements defer to a parent optgroup if present 8071 if ( "label" in elem ) { 8072 if ( "label" in elem.parentNode ) { 8073 return elem.parentNode.disabled === disabled; 8074 } else { 8075 return elem.disabled === disabled; 8076 } 8077 } 8078 8079 // Support: IE 6 - 11 8080 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 8081 return elem.isDisabled === disabled || 8082 8083 // Where there is no isDisabled, check manually 8084 /* jshint -W018 */ 8085 elem.isDisabled !== !disabled && 8086 inDisabledFieldset( elem ) === disabled; 8087 } 8088 8089 return elem.disabled === disabled; 8090 8091 // Try to winnow out elements that can't be disabled before trusting the disabled property. 8092 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 8093 // even exist on them, let alone have a boolean value. 8094 } else if ( "label" in elem ) { 8095 return elem.disabled === disabled; 8096 } 8097 8098 // Remaining elements are neither :enabled nor :disabled 8099 return false; 8100 }; 8101} 8102 8103/** 8104 * Returns a function to use in pseudos for positionals 8105 * @param {Function} fn 8106 */ 8107function createPositionalPseudo( fn ) { 8108 return markFunction( function( argument ) { 8109 argument = +argument; 8110 return markFunction( function( seed, matches ) { 8111 var j, 8112 matchIndexes = fn( [], seed.length, argument ), 8113 i = matchIndexes.length; 8114 8115 // Match elements found at the specified indexes 8116 while ( i-- ) { 8117 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 8118 seed[ j ] = !( matches[ j ] = seed[ j ] ); 8119 } 8120 } 8121 } ); 8122 } ); 8123} 8124 8125/** 8126 * Checks a node for validity as a Sizzle context 8127 * @param {Element|Object=} context 8128 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 8129 */ 8130function testContext( context ) { 8131 return context && typeof context.getElementsByTagName !== "undefined" && context; 8132} 8133 8134// Expose support vars for convenience 8135support = Sizzle.support = {}; 8136 8137/** 8138 * Detects XML nodes 8139 * @param {Element|Object} elem An element or a document 8140 * @returns {Boolean} True iff elem is a non-HTML XML node 8141 */ 8142isXML = Sizzle.isXML = function( elem ) { 8143 var namespace = elem && elem.namespaceURI, 8144 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 8145 8146 // Support: IE <=8 8147 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes 8148 // https://bugs.jquery.com/ticket/4833 8149 return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); 8150}; 8151 8152/** 8153 * Sets document-related variables once based on the current document 8154 * @param {Element|Object} [doc] An element or document object to use to set the document 8155 * @returns {Object} Returns the current document 8156 */ 8157setDocument = Sizzle.setDocument = function( node ) { 8158 var hasCompare, subWindow, 8159 doc = node ? node.ownerDocument || node : preferredDoc; 8160 8161 // Return early if doc is invalid or already selected 8162 // Support: IE 11+, Edge 17 - 18+ 8163 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8164 // two documents; shallow comparisons work. 8165 // eslint-disable-next-line eqeqeq 8166 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 8167 return document; 8168 } 8169 8170 // Update global variables 8171 document = doc; 8172 docElem = document.documentElement; 8173 documentIsHTML = !isXML( document ); 8174 8175 // Support: IE 9 - 11+, Edge 12 - 18+ 8176 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 8177 // Support: IE 11+, Edge 17 - 18+ 8178 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8179 // two documents; shallow comparisons work. 8180 // eslint-disable-next-line eqeqeq 8181 if ( preferredDoc != document && 8182 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 8183 8184 // Support: IE 11, Edge 8185 if ( subWindow.addEventListener ) { 8186 subWindow.addEventListener( "unload", unloadHandler, false ); 8187 8188 // Support: IE 9 - 10 only 8189 } else if ( subWindow.attachEvent ) { 8190 subWindow.attachEvent( "onunload", unloadHandler ); 8191 } 8192 } 8193 8194 // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, 8195 // Safari 4 - 5 only, Opera <=11.6 - 12.x only 8196 // IE/Edge & older browsers don't support the :scope pseudo-class. 8197 // Support: Safari 6.0 only 8198 // Safari 6.0 supports :scope but it's an alias of :root there. 8199 support.scope = assert( function( el ) { 8200 docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); 8201 return typeof el.querySelectorAll !== "undefined" && 8202 !el.querySelectorAll( ":scope fieldset div" ).length; 8203 } ); 8204 8205 /* Attributes 8206 ---------------------------------------------------------------------- */ 8207 8208 // Support: IE<8 8209 // Verify that getAttribute really returns attributes and not properties 8210 // (excepting IE8 booleans) 8211 support.attributes = assert( function( el ) { 8212 el.className = "i"; 8213 return !el.getAttribute( "className" ); 8214 } ); 8215 8216 /* getElement(s)By* 8217 ---------------------------------------------------------------------- */ 8218 8219 // Check if getElementsByTagName("*") returns only elements 8220 support.getElementsByTagName = assert( function( el ) { 8221 el.appendChild( document.createComment( "" ) ); 8222 return !el.getElementsByTagName( "*" ).length; 8223 } ); 8224 8225 // Support: IE<9 8226 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 8227 8228 // Support: IE<10 8229 // Check if getElementById returns elements by name 8230 // The broken getElementById methods don't pick up programmatically-set names, 8231 // so use a roundabout getElementsByName test 8232 support.getById = assert( function( el ) { 8233 docElem.appendChild( el ).id = expando; 8234 return !document.getElementsByName || !document.getElementsByName( expando ).length; 8235 } ); 8236 8237 // ID filter and find 8238 if ( support.getById ) { 8239 Expr.filter[ "ID" ] = function( id ) { 8240 var attrId = id.replace( runescape, funescape ); 8241 return function( elem ) { 8242 return elem.getAttribute( "id" ) === attrId; 8243 }; 8244 }; 8245 Expr.find[ "ID" ] = function( id, context ) { 8246 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 8247 var elem = context.getElementById( id ); 8248 return elem ? [ elem ] : []; 8249 } 8250 }; 8251 } else { 8252 Expr.filter[ "ID" ] = function( id ) { 8253 var attrId = id.replace( runescape, funescape ); 8254 return function( elem ) { 8255 var node = typeof elem.getAttributeNode !== "undefined" && 8256 elem.getAttributeNode( "id" ); 8257 return node && node.value === attrId; 8258 }; 8259 }; 8260 8261 // Support: IE 6 - 7 only 8262 // getElementById is not reliable as a find shortcut 8263 Expr.find[ "ID" ] = function( id, context ) { 8264 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 8265 var node, i, elems, 8266 elem = context.getElementById( id ); 8267 8268 if ( elem ) { 8269 8270 // Verify the id attribute 8271 node = elem.getAttributeNode( "id" ); 8272 if ( node && node.value === id ) { 8273 return [ elem ]; 8274 } 8275 8276 // Fall back on getElementsByName 8277 elems = context.getElementsByName( id ); 8278 i = 0; 8279 while ( ( elem = elems[ i++ ] ) ) { 8280 node = elem.getAttributeNode( "id" ); 8281 if ( node && node.value === id ) { 8282 return [ elem ]; 8283 } 8284 } 8285 } 8286 8287 return []; 8288 } 8289 }; 8290 } 8291 8292 // Tag 8293 Expr.find[ "TAG" ] = support.getElementsByTagName ? 8294 function( tag, context ) { 8295 if ( typeof context.getElementsByTagName !== "undefined" ) { 8296 return context.getElementsByTagName( tag ); 8297 8298 // DocumentFragment nodes don't have gEBTN 8299 } else if ( support.qsa ) { 8300 return context.querySelectorAll( tag ); 8301 } 8302 } : 8303 8304 function( tag, context ) { 8305 var elem, 8306 tmp = [], 8307 i = 0, 8308 8309 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 8310 results = context.getElementsByTagName( tag ); 8311 8312 // Filter out possible comments 8313 if ( tag === "*" ) { 8314 while ( ( elem = results[ i++ ] ) ) { 8315 if ( elem.nodeType === 1 ) { 8316 tmp.push( elem ); 8317 } 8318 } 8319 8320 return tmp; 8321 } 8322 return results; 8323 }; 8324 8325 // Class 8326 Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { 8327 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 8328 return context.getElementsByClassName( className ); 8329 } 8330 }; 8331 8332 /* QSA/matchesSelector 8333 ---------------------------------------------------------------------- */ 8334 8335 // QSA and matchesSelector support 8336 8337 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 8338 rbuggyMatches = []; 8339 8340 // qSa(:focus) reports false when true (Chrome 21) 8341 // We allow this because of a bug in IE8/9 that throws an error 8342 // whenever `document.activeElement` is accessed on an iframe 8343 // So, we allow :focus to pass through QSA all the time to avoid the IE error 8344 // See https://bugs.jquery.com/ticket/13378 8345 rbuggyQSA = []; 8346 8347 if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { 8348 8349 // Build QSA regex 8350 // Regex strategy adopted from Diego Perini 8351 assert( function( el ) { 8352 8353 var input; 8354 8355 // Select is set to empty string on purpose 8356 // This is to test IE's treatment of not explicitly 8357 // setting a boolean content attribute, 8358 // since its presence should be enough 8359 // https://bugs.jquery.com/ticket/12359 8360 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + 8361 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 8362 "<option selected=''></option></select>"; 8363 8364 // Support: IE8, Opera 11-12.16 8365 // Nothing should be selected when empty strings follow ^= or $= or *= 8366 // The test attribute must be unknown in Opera but "safe" for WinRT 8367 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 8368 if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { 8369 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 8370 } 8371 8372 // Support: IE8 8373 // Boolean attributes and "value" are not treated correctly 8374 if ( !el.querySelectorAll( "[selected]" ).length ) { 8375 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 8376 } 8377 8378 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 8379 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 8380 rbuggyQSA.push( "~=" ); 8381 } 8382 8383 // Support: IE 11+, Edge 15 - 18+ 8384 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 8385 // Adding a temporary attribute to the document before the selection works 8386 // around the issue. 8387 // Interestingly, IE 10 & older don't seem to have the issue. 8388 input = document.createElement( "input" ); 8389 input.setAttribute( "name", "" ); 8390 el.appendChild( input ); 8391 if ( !el.querySelectorAll( "[name='']" ).length ) { 8392 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 8393 whitespace + "*(?:''|\"\")" ); 8394 } 8395 8396 // Webkit/Opera - :checked should return selected option elements 8397 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 8398 // IE8 throws error here and will not see later tests 8399 if ( !el.querySelectorAll( ":checked" ).length ) { 8400 rbuggyQSA.push( ":checked" ); 8401 } 8402 8403 // Support: Safari 8+, iOS 8+ 8404 // https://bugs.webkit.org/show_bug.cgi?id=136851 8405 // In-page `selector#id sibling-combinator selector` fails 8406 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 8407 rbuggyQSA.push( ".#.+[+~]" ); 8408 } 8409 8410 // Support: Firefox <=3.6 - 5 only 8411 // Old Firefox doesn't throw on a badly-escaped identifier. 8412 el.querySelectorAll( "\\\f" ); 8413 rbuggyQSA.push( "[\\r\\n\\f]" ); 8414 } ); 8415 8416 assert( function( el ) { 8417 el.innerHTML = "<a href='' disabled='disabled'></a>" + 8418 "<select disabled='disabled'><option/></select>"; 8419 8420 // Support: Windows 8 Native Apps 8421 // The type and name attributes are restricted during .innerHTML assignment 8422 var input = document.createElement( "input" ); 8423 input.setAttribute( "type", "hidden" ); 8424 el.appendChild( input ).setAttribute( "name", "D" ); 8425 8426 // Support: IE8 8427 // Enforce case-sensitivity of name attribute 8428 if ( el.querySelectorAll( "[name=d]" ).length ) { 8429 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 8430 } 8431 8432 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 8433 // IE8 throws error here and will not see later tests 8434 if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { 8435 rbuggyQSA.push( ":enabled", ":disabled" ); 8436 } 8437 8438 // Support: IE9-11+ 8439 // IE's :disabled selector does not pick up the children of disabled fieldsets 8440 docElem.appendChild( el ).disabled = true; 8441 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 8442 rbuggyQSA.push( ":enabled", ":disabled" ); 8443 } 8444 8445 // Support: Opera 10 - 11 only 8446 // Opera 10-11 does not throw on post-comma invalid pseudos 8447 el.querySelectorAll( "*,:x" ); 8448 rbuggyQSA.push( ",.*:" ); 8449 } ); 8450 } 8451 8452 if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || 8453 docElem.webkitMatchesSelector || 8454 docElem.mozMatchesSelector || 8455 docElem.oMatchesSelector || 8456 docElem.msMatchesSelector ) ) ) ) { 8457 8458 assert( function( el ) { 8459 8460 // Check to see if it's possible to do matchesSelector 8461 // on a disconnected node (IE 9) 8462 support.disconnectedMatch = matches.call( el, "*" ); 8463 8464 // This should fail with an exception 8465 // Gecko does not error, returns false instead 8466 matches.call( el, "[s!='']:x" ); 8467 rbuggyMatches.push( "!=", pseudos ); 8468 } ); 8469 } 8470 8471 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 8472 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); 8473 8474 /* Contains 8475 ---------------------------------------------------------------------- */ 8476 hasCompare = rnative.test( docElem.compareDocumentPosition ); 8477 8478 // Element contains another 8479 // Purposefully self-exclusive 8480 // As in, an element does not contain itself 8481 contains = hasCompare || rnative.test( docElem.contains ) ? 8482 function( a, b ) { 8483 var adown = a.nodeType === 9 ? a.documentElement : a, 8484 bup = b && b.parentNode; 8485 return a === bup || !!( bup && bup.nodeType === 1 && ( 8486 adown.contains ? 8487 adown.contains( bup ) : 8488 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 8489 ) ); 8490 } : 8491 function( a, b ) { 8492 if ( b ) { 8493 while ( ( b = b.parentNode ) ) { 8494 if ( b === a ) { 8495 return true; 8496 } 8497 } 8498 } 8499 return false; 8500 }; 8501 8502 /* Sorting 8503 ---------------------------------------------------------------------- */ 8504 8505 // Document order sorting 8506 sortOrder = hasCompare ? 8507 function( a, b ) { 8508 8509 // Flag for duplicate removal 8510 if ( a === b ) { 8511 hasDuplicate = true; 8512 return 0; 8513 } 8514 8515 // Sort on method existence if only one input has compareDocumentPosition 8516 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 8517 if ( compare ) { 8518 return compare; 8519 } 8520 8521 // Calculate position if both inputs belong to the same document 8522 // Support: IE 11+, Edge 17 - 18+ 8523 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8524 // two documents; shallow comparisons work. 8525 // eslint-disable-next-line eqeqeq 8526 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 8527 a.compareDocumentPosition( b ) : 8528 8529 // Otherwise we know they are disconnected 8530 1; 8531 8532 // Disconnected nodes 8533 if ( compare & 1 || 8534 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 8535 8536 // Choose the first element that is related to our preferred document 8537 // Support: IE 11+, Edge 17 - 18+ 8538 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8539 // two documents; shallow comparisons work. 8540 // eslint-disable-next-line eqeqeq 8541 if ( a == document || a.ownerDocument == preferredDoc && 8542 contains( preferredDoc, a ) ) { 8543 return -1; 8544 } 8545 8546 // Support: IE 11+, Edge 17 - 18+ 8547 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8548 // two documents; shallow comparisons work. 8549 // eslint-disable-next-line eqeqeq 8550 if ( b == document || b.ownerDocument == preferredDoc && 8551 contains( preferredDoc, b ) ) { 8552 return 1; 8553 } 8554 8555 // Maintain original order 8556 return sortInput ? 8557 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 8558 0; 8559 } 8560 8561 return compare & 4 ? -1 : 1; 8562 } : 8563 function( a, b ) { 8564 8565 // Exit early if the nodes are identical 8566 if ( a === b ) { 8567 hasDuplicate = true; 8568 return 0; 8569 } 8570 8571 var cur, 8572 i = 0, 8573 aup = a.parentNode, 8574 bup = b.parentNode, 8575 ap = [ a ], 8576 bp = [ b ]; 8577 8578 // Parentless nodes are either documents or disconnected 8579 if ( !aup || !bup ) { 8580 8581 // Support: IE 11+, Edge 17 - 18+ 8582 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8583 // two documents; shallow comparisons work. 8584 /* eslint-disable eqeqeq */ 8585 return a == document ? -1 : 8586 b == document ? 1 : 8587 /* eslint-enable eqeqeq */ 8588 aup ? -1 : 8589 bup ? 1 : 8590 sortInput ? 8591 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 8592 0; 8593 8594 // If the nodes are siblings, we can do a quick check 8595 } else if ( aup === bup ) { 8596 return siblingCheck( a, b ); 8597 } 8598 8599 // Otherwise we need full lists of their ancestors for comparison 8600 cur = a; 8601 while ( ( cur = cur.parentNode ) ) { 8602 ap.unshift( cur ); 8603 } 8604 cur = b; 8605 while ( ( cur = cur.parentNode ) ) { 8606 bp.unshift( cur ); 8607 } 8608 8609 // Walk down the tree looking for a discrepancy 8610 while ( ap[ i ] === bp[ i ] ) { 8611 i++; 8612 } 8613 8614 return i ? 8615 8616 // Do a sibling check if the nodes have a common ancestor 8617 siblingCheck( ap[ i ], bp[ i ] ) : 8618 8619 // Otherwise nodes in our document sort first 8620 // Support: IE 11+, Edge 17 - 18+ 8621 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8622 // two documents; shallow comparisons work. 8623 /* eslint-disable eqeqeq */ 8624 ap[ i ] == preferredDoc ? -1 : 8625 bp[ i ] == preferredDoc ? 1 : 8626 /* eslint-enable eqeqeq */ 8627 0; 8628 }; 8629 8630 return document; 8631}; 8632 8633Sizzle.matches = function( expr, elements ) { 8634 return Sizzle( expr, null, null, elements ); 8635}; 8636 8637Sizzle.matchesSelector = function( elem, expr ) { 8638 setDocument( elem ); 8639 8640 if ( support.matchesSelector && documentIsHTML && 8641 !nonnativeSelectorCache[ expr + " " ] && 8642 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 8643 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 8644 8645 try { 8646 var ret = matches.call( elem, expr ); 8647 8648 // IE 9's matchesSelector returns false on disconnected nodes 8649 if ( ret || support.disconnectedMatch || 8650 8651 // As well, disconnected nodes are said to be in a document 8652 // fragment in IE 9 8653 elem.document && elem.document.nodeType !== 11 ) { 8654 return ret; 8655 } 8656 } catch ( e ) { 8657 nonnativeSelectorCache( expr, true ); 8658 } 8659 } 8660 8661 return Sizzle( expr, document, null, [ elem ] ).length > 0; 8662}; 8663 8664Sizzle.contains = function( context, elem ) { 8665 8666 // Set document vars if needed 8667 // Support: IE 11+, Edge 17 - 18+ 8668 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8669 // two documents; shallow comparisons work. 8670 // eslint-disable-next-line eqeqeq 8671 if ( ( context.ownerDocument || context ) != document ) { 8672 setDocument( context ); 8673 } 8674 return contains( context, elem ); 8675}; 8676 8677Sizzle.attr = function( elem, name ) { 8678 8679 // Set document vars if needed 8680 // Support: IE 11+, Edge 17 - 18+ 8681 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8682 // two documents; shallow comparisons work. 8683 // eslint-disable-next-line eqeqeq 8684 if ( ( elem.ownerDocument || elem ) != document ) { 8685 setDocument( elem ); 8686 } 8687 8688 var fn = Expr.attrHandle[ name.toLowerCase() ], 8689 8690 // Don't get fooled by Object.prototype properties (jQuery #13807) 8691 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 8692 fn( elem, name, !documentIsHTML ) : 8693 undefined; 8694 8695 return val !== undefined ? 8696 val : 8697 support.attributes || !documentIsHTML ? 8698 elem.getAttribute( name ) : 8699 ( val = elem.getAttributeNode( name ) ) && val.specified ? 8700 val.value : 8701 null; 8702}; 8703 8704Sizzle.escape = function( sel ) { 8705 return ( sel + "" ).replace( rcssescape, fcssescape ); 8706}; 8707 8708Sizzle.error = function( msg ) { 8709 throw new Error( "Syntax error, unrecognized expression: " + msg ); 8710}; 8711 8712/** 8713 * Document sorting and removing duplicates 8714 * @param {ArrayLike} results 8715 */ 8716Sizzle.uniqueSort = function( results ) { 8717 var elem, 8718 duplicates = [], 8719 j = 0, 8720 i = 0; 8721 8722 // Unless we *know* we can detect duplicates, assume their presence 8723 hasDuplicate = !support.detectDuplicates; 8724 sortInput = !support.sortStable && results.slice( 0 ); 8725 results.sort( sortOrder ); 8726 8727 if ( hasDuplicate ) { 8728 while ( ( elem = results[ i++ ] ) ) { 8729 if ( elem === results[ i ] ) { 8730 j = duplicates.push( i ); 8731 } 8732 } 8733 while ( j-- ) { 8734 results.splice( duplicates[ j ], 1 ); 8735 } 8736 } 8737 8738 // Clear input after sorting to release objects 8739 // See https://github.com/jquery/sizzle/pull/225 8740 sortInput = null; 8741 8742 return results; 8743}; 8744 8745/** 8746 * Utility function for retrieving the text value of an array of DOM nodes 8747 * @param {Array|Element} elem 8748 */ 8749getText = Sizzle.getText = function( elem ) { 8750 var node, 8751 ret = "", 8752 i = 0, 8753 nodeType = elem.nodeType; 8754 8755 if ( !nodeType ) { 8756 8757 // If no nodeType, this is expected to be an array 8758 while ( ( node = elem[ i++ ] ) ) { 8759 8760 // Do not traverse comment nodes 8761 ret += getText( node ); 8762 } 8763 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 8764 8765 // Use textContent for elements 8766 // innerText usage removed for consistency of new lines (jQuery #11153) 8767 if ( typeof elem.textContent === "string" ) { 8768 return elem.textContent; 8769 } else { 8770 8771 // Traverse its children 8772 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 8773 ret += getText( elem ); 8774 } 8775 } 8776 } else if ( nodeType === 3 || nodeType === 4 ) { 8777 return elem.nodeValue; 8778 } 8779 8780 // Do not include comment or processing instruction nodes 8781 8782 return ret; 8783}; 8784 8785Expr = Sizzle.selectors = { 8786 8787 // Can be adjusted by the user 8788 cacheLength: 50, 8789 8790 createPseudo: markFunction, 8791 8792 match: matchExpr, 8793 8794 attrHandle: {}, 8795 8796 find: {}, 8797 8798 relative: { 8799 ">": { dir: "parentNode", first: true }, 8800 " ": { dir: "parentNode" }, 8801 "+": { dir: "previousSibling", first: true }, 8802 "~": { dir: "previousSibling" } 8803 }, 8804 8805 preFilter: { 8806 "ATTR": function( match ) { 8807 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 8808 8809 // Move the given value to match[3] whether quoted or unquoted 8810 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || 8811 match[ 5 ] || "" ).replace( runescape, funescape ); 8812 8813 if ( match[ 2 ] === "~=" ) { 8814 match[ 3 ] = " " + match[ 3 ] + " "; 8815 } 8816 8817 return match.slice( 0, 4 ); 8818 }, 8819 8820 "CHILD": function( match ) { 8821 8822 /* matches from matchExpr["CHILD"] 8823 1 type (only|nth|...) 8824 2 what (child|of-type) 8825 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 8826 4 xn-component of xn+y argument ([+-]?\d*n|) 8827 5 sign of xn-component 8828 6 x of xn-component 8829 7 sign of y-component 8830 8 y of y-component 8831 */ 8832 match[ 1 ] = match[ 1 ].toLowerCase(); 8833 8834 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 8835 8836 // nth-* requires argument 8837 if ( !match[ 3 ] ) { 8838 Sizzle.error( match[ 0 ] ); 8839 } 8840 8841 // numeric x and y parameters for Expr.filter.CHILD 8842 // remember that false/true cast respectively to 0/1 8843 match[ 4 ] = +( match[ 4 ] ? 8844 match[ 5 ] + ( match[ 6 ] || 1 ) : 8845 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); 8846 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 8847 8848 // other types prohibit arguments 8849 } else if ( match[ 3 ] ) { 8850 Sizzle.error( match[ 0 ] ); 8851 } 8852 8853 return match; 8854 }, 8855 8856 "PSEUDO": function( match ) { 8857 var excess, 8858 unquoted = !match[ 6 ] && match[ 2 ]; 8859 8860 if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { 8861 return null; 8862 } 8863 8864 // Accept quoted arguments as-is 8865 if ( match[ 3 ] ) { 8866 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 8867 8868 // Strip excess characters from unquoted arguments 8869 } else if ( unquoted && rpseudo.test( unquoted ) && 8870 8871 // Get excess from tokenize (recursively) 8872 ( excess = tokenize( unquoted, true ) ) && 8873 8874 // advance to the next closing parenthesis 8875 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 8876 8877 // excess is a negative index 8878 match[ 0 ] = match[ 0 ].slice( 0, excess ); 8879 match[ 2 ] = unquoted.slice( 0, excess ); 8880 } 8881 8882 // Return only captures needed by the pseudo filter method (type and argument) 8883 return match.slice( 0, 3 ); 8884 } 8885 }, 8886 8887 filter: { 8888 8889 "TAG": function( nodeNameSelector ) { 8890 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 8891 return nodeNameSelector === "*" ? 8892 function() { 8893 return true; 8894 } : 8895 function( elem ) { 8896 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 8897 }; 8898 }, 8899 8900 "CLASS": function( className ) { 8901 var pattern = classCache[ className + " " ]; 8902 8903 return pattern || 8904 ( pattern = new RegExp( "(^|" + whitespace + 8905 ")" + className + "(" + whitespace + "|$)" ) ) && classCache( 8906 className, function( elem ) { 8907 return pattern.test( 8908 typeof elem.className === "string" && elem.className || 8909 typeof elem.getAttribute !== "undefined" && 8910 elem.getAttribute( "class" ) || 8911 "" 8912 ); 8913 } ); 8914 }, 8915 8916 "ATTR": function( name, operator, check ) { 8917 return function( elem ) { 8918 var result = Sizzle.attr( elem, name ); 8919 8920 if ( result == null ) { 8921 return operator === "!="; 8922 } 8923 if ( !operator ) { 8924 return true; 8925 } 8926 8927 result += ""; 8928 8929 /* eslint-disable max-len */ 8930 8931 return operator === "=" ? result === check : 8932 operator === "!=" ? result !== check : 8933 operator === "^=" ? check && result.indexOf( check ) === 0 : 8934 operator === "*=" ? check && result.indexOf( check ) > -1 : 8935 operator === "$=" ? check && result.slice( -check.length ) === check : 8936 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 8937 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 8938 false; 8939 /* eslint-enable max-len */ 8940 8941 }; 8942 }, 8943 8944 "CHILD": function( type, what, _argument, first, last ) { 8945 var simple = type.slice( 0, 3 ) !== "nth", 8946 forward = type.slice( -4 ) !== "last", 8947 ofType = what === "of-type"; 8948 8949 return first === 1 && last === 0 ? 8950 8951 // Shortcut for :nth-*(n) 8952 function( elem ) { 8953 return !!elem.parentNode; 8954 } : 8955 8956 function( elem, _context, xml ) { 8957 var cache, uniqueCache, outerCache, node, nodeIndex, start, 8958 dir = simple !== forward ? "nextSibling" : "previousSibling", 8959 parent = elem.parentNode, 8960 name = ofType && elem.nodeName.toLowerCase(), 8961 useCache = !xml && !ofType, 8962 diff = false; 8963 8964 if ( parent ) { 8965 8966 // :(first|last|only)-(child|of-type) 8967 if ( simple ) { 8968 while ( dir ) { 8969 node = elem; 8970 while ( ( node = node[ dir ] ) ) { 8971 if ( ofType ? 8972 node.nodeName.toLowerCase() === name : 8973 node.nodeType === 1 ) { 8974 8975 return false; 8976 } 8977 } 8978 8979 // Reverse direction for :only-* (if we haven't yet done so) 8980 start = dir = type === "only" && !start && "nextSibling"; 8981 } 8982 return true; 8983 } 8984 8985 start = [ forward ? parent.firstChild : parent.lastChild ]; 8986 8987 // non-xml :nth-child(...) stores cache data on `parent` 8988 if ( forward && useCache ) { 8989 8990 // Seek `elem` from a previously-cached index 8991 8992 // ...in a gzip-friendly way 8993 node = parent; 8994 outerCache = node[ expando ] || ( node[ expando ] = {} ); 8995 8996 // Support: IE <9 only 8997 // Defend against cloned attroperties (jQuery gh-1709) 8998 uniqueCache = outerCache[ node.uniqueID ] || 8999 ( outerCache[ node.uniqueID ] = {} ); 9000 9001 cache = uniqueCache[ type ] || []; 9002 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9003 diff = nodeIndex && cache[ 2 ]; 9004 node = nodeIndex && parent.childNodes[ nodeIndex ]; 9005 9006 while ( ( node = ++nodeIndex && node && node[ dir ] || 9007 9008 // Fallback to seeking `elem` from the start 9009 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9010 9011 // When found, cache indexes on `parent` and break 9012 if ( node.nodeType === 1 && ++diff && node === elem ) { 9013 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 9014 break; 9015 } 9016 } 9017 9018 } else { 9019 9020 // Use previously-cached element index if available 9021 if ( useCache ) { 9022 9023 // ...in a gzip-friendly way 9024 node = elem; 9025 outerCache = node[ expando ] || ( node[ expando ] = {} ); 9026 9027 // Support: IE <9 only 9028 // Defend against cloned attroperties (jQuery gh-1709) 9029 uniqueCache = outerCache[ node.uniqueID ] || 9030 ( outerCache[ node.uniqueID ] = {} ); 9031 9032 cache = uniqueCache[ type ] || []; 9033 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 9034 diff = nodeIndex; 9035 } 9036 9037 // xml :nth-child(...) 9038 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 9039 if ( diff === false ) { 9040 9041 // Use the same loop as above to seek `elem` from the start 9042 while ( ( node = ++nodeIndex && node && node[ dir ] || 9043 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 9044 9045 if ( ( ofType ? 9046 node.nodeName.toLowerCase() === name : 9047 node.nodeType === 1 ) && 9048 ++diff ) { 9049 9050 // Cache the index of each encountered element 9051 if ( useCache ) { 9052 outerCache = node[ expando ] || 9053 ( node[ expando ] = {} ); 9054 9055 // Support: IE <9 only 9056 // Defend against cloned attroperties (jQuery gh-1709) 9057 uniqueCache = outerCache[ node.uniqueID ] || 9058 ( outerCache[ node.uniqueID ] = {} ); 9059 9060 uniqueCache[ type ] = [ dirruns, diff ]; 9061 } 9062 9063 if ( node === elem ) { 9064 break; 9065 } 9066 } 9067 } 9068 } 9069 } 9070 9071 // Incorporate the offset, then check against cycle size 9072 diff -= last; 9073 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 9074 } 9075 }; 9076 }, 9077 9078 "PSEUDO": function( pseudo, argument ) { 9079 9080 // pseudo-class names are case-insensitive 9081 // http://www.w3.org/TR/selectors/#pseudo-classes 9082 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 9083 // Remember that setFilters inherits from pseudos 9084 var args, 9085 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 9086 Sizzle.error( "unsupported pseudo: " + pseudo ); 9087 9088 // The user may use createPseudo to indicate that 9089 // arguments are needed to create the filter function 9090 // just as Sizzle does 9091 if ( fn[ expando ] ) { 9092 return fn( argument ); 9093 } 9094 9095 // But maintain support for old signatures 9096 if ( fn.length > 1 ) { 9097 args = [ pseudo, pseudo, "", argument ]; 9098 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 9099 markFunction( function( seed, matches ) { 9100 var idx, 9101 matched = fn( seed, argument ), 9102 i = matched.length; 9103 while ( i-- ) { 9104 idx = indexOf( seed, matched[ i ] ); 9105 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 9106 } 9107 } ) : 9108 function( elem ) { 9109 return fn( elem, 0, args ); 9110 }; 9111 } 9112 9113 return fn; 9114 } 9115 }, 9116 9117 pseudos: { 9118 9119 // Potentially complex pseudos 9120 "not": markFunction( function( selector ) { 9121 9122 // Trim the selector passed to compile 9123 // to avoid treating leading and trailing 9124 // spaces as combinators 9125 var input = [], 9126 results = [], 9127 matcher = compile( selector.replace( rtrim, "$1" ) ); 9128 9129 return matcher[ expando ] ? 9130 markFunction( function( seed, matches, _context, xml ) { 9131 var elem, 9132 unmatched = matcher( seed, null, xml, [] ), 9133 i = seed.length; 9134 9135 // Match elements unmatched by `matcher` 9136 while ( i-- ) { 9137 if ( ( elem = unmatched[ i ] ) ) { 9138 seed[ i ] = !( matches[ i ] = elem ); 9139 } 9140 } 9141 } ) : 9142 function( elem, _context, xml ) { 9143 input[ 0 ] = elem; 9144 matcher( input, null, xml, results ); 9145 9146 // Don't keep the element (issue #299) 9147 input[ 0 ] = null; 9148 return !results.pop(); 9149 }; 9150 } ), 9151 9152 "has": markFunction( function( selector ) { 9153 return function( elem ) { 9154 return Sizzle( selector, elem ).length > 0; 9155 }; 9156 } ), 9157 9158 "contains": markFunction( function( text ) { 9159 text = text.replace( runescape, funescape ); 9160 return function( elem ) { 9161 return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; 9162 }; 9163 } ), 9164 9165 // "Whether an element is represented by a :lang() selector 9166 // is based solely on the element's language value 9167 // being equal to the identifier C, 9168 // or beginning with the identifier C immediately followed by "-". 9169 // The matching of C against the element's language value is performed case-insensitively. 9170 // The identifier C does not have to be a valid language name." 9171 // http://www.w3.org/TR/selectors/#lang-pseudo 9172 "lang": markFunction( function( lang ) { 9173 9174 // lang value must be a valid identifier 9175 if ( !ridentifier.test( lang || "" ) ) { 9176 Sizzle.error( "unsupported lang: " + lang ); 9177 } 9178 lang = lang.replace( runescape, funescape ).toLowerCase(); 9179 return function( elem ) { 9180 var elemLang; 9181 do { 9182 if ( ( elemLang = documentIsHTML ? 9183 elem.lang : 9184 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 9185 9186 elemLang = elemLang.toLowerCase(); 9187 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 9188 } 9189 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 9190 return false; 9191 }; 9192 } ), 9193 9194 // Miscellaneous 9195 "target": function( elem ) { 9196 var hash = window.location && window.location.hash; 9197 return hash && hash.slice( 1 ) === elem.id; 9198 }, 9199 9200 "root": function( elem ) { 9201 return elem === docElem; 9202 }, 9203 9204 "focus": function( elem ) { 9205 return elem === document.activeElement && 9206 ( !document.hasFocus || document.hasFocus() ) && 9207 !!( elem.type || elem.href || ~elem.tabIndex ); 9208 }, 9209 9210 // Boolean properties 9211 "enabled": createDisabledPseudo( false ), 9212 "disabled": createDisabledPseudo( true ), 9213 9214 "checked": function( elem ) { 9215 9216 // In CSS3, :checked should return both checked and selected elements 9217 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 9218 var nodeName = elem.nodeName.toLowerCase(); 9219 return ( nodeName === "input" && !!elem.checked ) || 9220 ( nodeName === "option" && !!elem.selected ); 9221 }, 9222 9223 "selected": function( elem ) { 9224 9225 // Accessing this property makes selected-by-default 9226 // options in Safari work properly 9227 if ( elem.parentNode ) { 9228 // eslint-disable-next-line no-unused-expressions 9229 elem.parentNode.selectedIndex; 9230 } 9231 9232 return elem.selected === true; 9233 }, 9234 9235 // Contents 9236 "empty": function( elem ) { 9237 9238 // http://www.w3.org/TR/selectors/#empty-pseudo 9239 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 9240 // but not by others (comment: 8; processing instruction: 7; etc.) 9241 // nodeType < 6 works because attributes (2) do not appear as children 9242 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 9243 if ( elem.nodeType < 6 ) { 9244 return false; 9245 } 9246 } 9247 return true; 9248 }, 9249 9250 "parent": function( elem ) { 9251 return !Expr.pseudos[ "empty" ]( elem ); 9252 }, 9253 9254 // Element/input types 9255 "header": function( elem ) { 9256 return rheader.test( elem.nodeName ); 9257 }, 9258 9259 "input": function( elem ) { 9260 return rinputs.test( elem.nodeName ); 9261 }, 9262 9263 "button": function( elem ) { 9264 var name = elem.nodeName.toLowerCase(); 9265 return name === "input" && elem.type === "button" || name === "button"; 9266 }, 9267 9268 "text": function( elem ) { 9269 var attr; 9270 return elem.nodeName.toLowerCase() === "input" && 9271 elem.type === "text" && 9272 9273 // Support: IE<8 9274 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 9275 ( ( attr = elem.getAttribute( "type" ) ) == null || 9276 attr.toLowerCase() === "text" ); 9277 }, 9278 9279 // Position-in-collection 9280 "first": createPositionalPseudo( function() { 9281 return [ 0 ]; 9282 } ), 9283 9284 "last": createPositionalPseudo( function( _matchIndexes, length ) { 9285 return [ length - 1 ]; 9286 } ), 9287 9288 "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { 9289 return [ argument < 0 ? argument + length : argument ]; 9290 } ), 9291 9292 "even": createPositionalPseudo( function( matchIndexes, length ) { 9293 var i = 0; 9294 for ( ; i < length; i += 2 ) { 9295 matchIndexes.push( i ); 9296 } 9297 return matchIndexes; 9298 } ), 9299 9300 "odd": createPositionalPseudo( function( matchIndexes, length ) { 9301 var i = 1; 9302 for ( ; i < length; i += 2 ) { 9303 matchIndexes.push( i ); 9304 } 9305 return matchIndexes; 9306 } ), 9307 9308 "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { 9309 var i = argument < 0 ? 9310 argument + length : 9311 argument > length ? 9312 length : 9313 argument; 9314 for ( ; --i >= 0; ) { 9315 matchIndexes.push( i ); 9316 } 9317 return matchIndexes; 9318 } ), 9319 9320 "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { 9321 var i = argument < 0 ? argument + length : argument; 9322 for ( ; ++i < length; ) { 9323 matchIndexes.push( i ); 9324 } 9325 return matchIndexes; 9326 } ) 9327 } 9328}; 9329 9330Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; 9331 9332// Add button/input type pseudos 9333for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 9334 Expr.pseudos[ i ] = createInputPseudo( i ); 9335} 9336for ( i in { submit: true, reset: true } ) { 9337 Expr.pseudos[ i ] = createButtonPseudo( i ); 9338} 9339 9340// Easy API for creating new setFilters 9341function setFilters() {} 9342setFilters.prototype = Expr.filters = Expr.pseudos; 9343Expr.setFilters = new setFilters(); 9344 9345tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 9346 var matched, match, tokens, type, 9347 soFar, groups, preFilters, 9348 cached = tokenCache[ selector + " " ]; 9349 9350 if ( cached ) { 9351 return parseOnly ? 0 : cached.slice( 0 ); 9352 } 9353 9354 soFar = selector; 9355 groups = []; 9356 preFilters = Expr.preFilter; 9357 9358 while ( soFar ) { 9359 9360 // Comma and first run 9361 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 9362 if ( match ) { 9363 9364 // Don't consume trailing commas as valid 9365 soFar = soFar.slice( match[ 0 ].length ) || soFar; 9366 } 9367 groups.push( ( tokens = [] ) ); 9368 } 9369 9370 matched = false; 9371 9372 // Combinators 9373 if ( ( match = rcombinators.exec( soFar ) ) ) { 9374 matched = match.shift(); 9375 tokens.push( { 9376 value: matched, 9377 9378 // Cast descendant combinators to space 9379 type: match[ 0 ].replace( rtrim, " " ) 9380 } ); 9381 soFar = soFar.slice( matched.length ); 9382 } 9383 9384 // Filters 9385 for ( type in Expr.filter ) { 9386 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 9387 ( match = preFilters[ type ]( match ) ) ) ) { 9388 matched = match.shift(); 9389 tokens.push( { 9390 value: matched, 9391 type: type, 9392 matches: match 9393 } ); 9394 soFar = soFar.slice( matched.length ); 9395 } 9396 } 9397 9398 if ( !matched ) { 9399 break; 9400 } 9401 } 9402 9403 // Return the length of the invalid excess 9404 // if we're just parsing 9405 // Otherwise, throw an error or return tokens 9406 return parseOnly ? 9407 soFar.length : 9408 soFar ? 9409 Sizzle.error( selector ) : 9410 9411 // Cache the tokens 9412 tokenCache( selector, groups ).slice( 0 ); 9413}; 9414 9415function toSelector( tokens ) { 9416 var i = 0, 9417 len = tokens.length, 9418 selector = ""; 9419 for ( ; i < len; i++ ) { 9420 selector += tokens[ i ].value; 9421 } 9422 return selector; 9423} 9424 9425function addCombinator( matcher, combinator, base ) { 9426 var dir = combinator.dir, 9427 skip = combinator.next, 9428 key = skip || dir, 9429 checkNonElements = base && key === "parentNode", 9430 doneName = done++; 9431 9432 return combinator.first ? 9433 9434 // Check against closest ancestor/preceding element 9435 function( elem, context, xml ) { 9436 while ( ( elem = elem[ dir ] ) ) { 9437 if ( elem.nodeType === 1 || checkNonElements ) { 9438 return matcher( elem, context, xml ); 9439 } 9440 } 9441 return false; 9442 } : 9443 9444 // Check against all ancestor/preceding elements 9445 function( elem, context, xml ) { 9446 var oldCache, uniqueCache, outerCache, 9447 newCache = [ dirruns, doneName ]; 9448 9449 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 9450 if ( xml ) { 9451 while ( ( elem = elem[ dir ] ) ) { 9452 if ( elem.nodeType === 1 || checkNonElements ) { 9453 if ( matcher( elem, context, xml ) ) { 9454 return true; 9455 } 9456 } 9457 } 9458 } else { 9459 while ( ( elem = elem[ dir ] ) ) { 9460 if ( elem.nodeType === 1 || checkNonElements ) { 9461 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 9462 9463 // Support: IE <9 only 9464 // Defend against cloned attroperties (jQuery gh-1709) 9465 uniqueCache = outerCache[ elem.uniqueID ] || 9466 ( outerCache[ elem.uniqueID ] = {} ); 9467 9468 if ( skip && skip === elem.nodeName.toLowerCase() ) { 9469 elem = elem[ dir ] || elem; 9470 } else if ( ( oldCache = uniqueCache[ key ] ) && 9471 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 9472 9473 // Assign to newCache so results back-propagate to previous elements 9474 return ( newCache[ 2 ] = oldCache[ 2 ] ); 9475 } else { 9476 9477 // Reuse newcache so results back-propagate to previous elements 9478 uniqueCache[ key ] = newCache; 9479 9480 // A match means we're done; a fail means we have to keep checking 9481 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 9482 return true; 9483 } 9484 } 9485 } 9486 } 9487 } 9488 return false; 9489 }; 9490} 9491 9492function elementMatcher( matchers ) { 9493 return matchers.length > 1 ? 9494 function( elem, context, xml ) { 9495 var i = matchers.length; 9496 while ( i-- ) { 9497 if ( !matchers[ i ]( elem, context, xml ) ) { 9498 return false; 9499 } 9500 } 9501 return true; 9502 } : 9503 matchers[ 0 ]; 9504} 9505 9506function multipleContexts( selector, contexts, results ) { 9507 var i = 0, 9508 len = contexts.length; 9509 for ( ; i < len; i++ ) { 9510 Sizzle( selector, contexts[ i ], results ); 9511 } 9512 return results; 9513} 9514 9515function condense( unmatched, map, filter, context, xml ) { 9516 var elem, 9517 newUnmatched = [], 9518 i = 0, 9519 len = unmatched.length, 9520 mapped = map != null; 9521 9522 for ( ; i < len; i++ ) { 9523 if ( ( elem = unmatched[ i ] ) ) { 9524 if ( !filter || filter( elem, context, xml ) ) { 9525 newUnmatched.push( elem ); 9526 if ( mapped ) { 9527 map.push( i ); 9528 } 9529 } 9530 } 9531 } 9532 9533 return newUnmatched; 9534} 9535 9536function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 9537 if ( postFilter && !postFilter[ expando ] ) { 9538 postFilter = setMatcher( postFilter ); 9539 } 9540 if ( postFinder && !postFinder[ expando ] ) { 9541 postFinder = setMatcher( postFinder, postSelector ); 9542 } 9543 return markFunction( function( seed, results, context, xml ) { 9544 var temp, i, elem, 9545 preMap = [], 9546 postMap = [], 9547 preexisting = results.length, 9548 9549 // Get initial elements from seed or context 9550 elems = seed || multipleContexts( 9551 selector || "*", 9552 context.nodeType ? [ context ] : context, 9553 [] 9554 ), 9555 9556 // Prefilter to get matcher input, preserving a map for seed-results synchronization 9557 matcherIn = preFilter && ( seed || !selector ) ? 9558 condense( elems, preMap, preFilter, context, xml ) : 9559 elems, 9560 9561 matcherOut = matcher ? 9562 9563 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 9564 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 9565 9566 // ...intermediate processing is necessary 9567 [] : 9568 9569 // ...otherwise use results directly 9570 results : 9571 matcherIn; 9572 9573 // Find primary matches 9574 if ( matcher ) { 9575 matcher( matcherIn, matcherOut, context, xml ); 9576 } 9577 9578 // Apply postFilter 9579 if ( postFilter ) { 9580 temp = condense( matcherOut, postMap ); 9581 postFilter( temp, [], context, xml ); 9582 9583 // Un-match failing elements by moving them back to matcherIn 9584 i = temp.length; 9585 while ( i-- ) { 9586 if ( ( elem = temp[ i ] ) ) { 9587 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 9588 } 9589 } 9590 } 9591 9592 if ( seed ) { 9593 if ( postFinder || preFilter ) { 9594 if ( postFinder ) { 9595 9596 // Get the final matcherOut by condensing this intermediate into postFinder contexts 9597 temp = []; 9598 i = matcherOut.length; 9599 while ( i-- ) { 9600 if ( ( elem = matcherOut[ i ] ) ) { 9601 9602 // Restore matcherIn since elem is not yet a final match 9603 temp.push( ( matcherIn[ i ] = elem ) ); 9604 } 9605 } 9606 postFinder( null, ( matcherOut = [] ), temp, xml ); 9607 } 9608 9609 // Move matched elements from seed to results to keep them synchronized 9610 i = matcherOut.length; 9611 while ( i-- ) { 9612 if ( ( elem = matcherOut[ i ] ) && 9613 ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { 9614 9615 seed[ temp ] = !( results[ temp ] = elem ); 9616 } 9617 } 9618 } 9619 9620 // Add elements to results, through postFinder if defined 9621 } else { 9622 matcherOut = condense( 9623 matcherOut === results ? 9624 matcherOut.splice( preexisting, matcherOut.length ) : 9625 matcherOut 9626 ); 9627 if ( postFinder ) { 9628 postFinder( null, results, matcherOut, xml ); 9629 } else { 9630 push.apply( results, matcherOut ); 9631 } 9632 } 9633 } ); 9634} 9635 9636function matcherFromTokens( tokens ) { 9637 var checkContext, matcher, j, 9638 len = tokens.length, 9639 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 9640 implicitRelative = leadingRelative || Expr.relative[ " " ], 9641 i = leadingRelative ? 1 : 0, 9642 9643 // The foundational matcher ensures that elements are reachable from top-level context(s) 9644 matchContext = addCombinator( function( elem ) { 9645 return elem === checkContext; 9646 }, implicitRelative, true ), 9647 matchAnyContext = addCombinator( function( elem ) { 9648 return indexOf( checkContext, elem ) > -1; 9649 }, implicitRelative, true ), 9650 matchers = [ function( elem, context, xml ) { 9651 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 9652 ( checkContext = context ).nodeType ? 9653 matchContext( elem, context, xml ) : 9654 matchAnyContext( elem, context, xml ) ); 9655 9656 // Avoid hanging onto element (issue #299) 9657 checkContext = null; 9658 return ret; 9659 } ]; 9660 9661 for ( ; i < len; i++ ) { 9662 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 9663 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 9664 } else { 9665 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 9666 9667 // Return special upon seeing a positional matcher 9668 if ( matcher[ expando ] ) { 9669 9670 // Find the next relative operator (if any) for proper handling 9671 j = ++i; 9672 for ( ; j < len; j++ ) { 9673 if ( Expr.relative[ tokens[ j ].type ] ) { 9674 break; 9675 } 9676 } 9677 return setMatcher( 9678 i > 1 && elementMatcher( matchers ), 9679 i > 1 && toSelector( 9680 9681 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 9682 tokens 9683 .slice( 0, i - 1 ) 9684 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 9685 ).replace( rtrim, "$1" ), 9686 matcher, 9687 i < j && matcherFromTokens( tokens.slice( i, j ) ), 9688 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 9689 j < len && toSelector( tokens ) 9690 ); 9691 } 9692 matchers.push( matcher ); 9693 } 9694 } 9695 9696 return elementMatcher( matchers ); 9697} 9698 9699function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 9700 var bySet = setMatchers.length > 0, 9701 byElement = elementMatchers.length > 0, 9702 superMatcher = function( seed, context, xml, results, outermost ) { 9703 var elem, j, matcher, 9704 matchedCount = 0, 9705 i = "0", 9706 unmatched = seed && [], 9707 setMatched = [], 9708 contextBackup = outermostContext, 9709 9710 // We must always have either seed elements or outermost context 9711 elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), 9712 9713 // Use integer dirruns iff this is the outermost matcher 9714 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 9715 len = elems.length; 9716 9717 if ( outermost ) { 9718 9719 // Support: IE 11+, Edge 17 - 18+ 9720 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9721 // two documents; shallow comparisons work. 9722 // eslint-disable-next-line eqeqeq 9723 outermostContext = context == document || context || outermost; 9724 } 9725 9726 // Add elements passing elementMatchers directly to results 9727 // Support: IE<9, Safari 9728 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 9729 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 9730 if ( byElement && elem ) { 9731 j = 0; 9732 9733 // Support: IE 11+, Edge 17 - 18+ 9734 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9735 // two documents; shallow comparisons work. 9736 // eslint-disable-next-line eqeqeq 9737 if ( !context && elem.ownerDocument != document ) { 9738 setDocument( elem ); 9739 xml = !documentIsHTML; 9740 } 9741 while ( ( matcher = elementMatchers[ j++ ] ) ) { 9742 if ( matcher( elem, context || document, xml ) ) { 9743 results.push( elem ); 9744 break; 9745 } 9746 } 9747 if ( outermost ) { 9748 dirruns = dirrunsUnique; 9749 } 9750 } 9751 9752 // Track unmatched elements for set filters 9753 if ( bySet ) { 9754 9755 // They will have gone through all possible matchers 9756 if ( ( elem = !matcher && elem ) ) { 9757 matchedCount--; 9758 } 9759 9760 // Lengthen the array for every element, matched or not 9761 if ( seed ) { 9762 unmatched.push( elem ); 9763 } 9764 } 9765 } 9766 9767 // `i` is now the count of elements visited above, and adding it to `matchedCount` 9768 // makes the latter nonnegative. 9769 matchedCount += i; 9770 9771 // Apply set filters to unmatched elements 9772 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 9773 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 9774 // no element matchers and no seed. 9775 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 9776 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 9777 // numerically zero. 9778 if ( bySet && i !== matchedCount ) { 9779 j = 0; 9780 while ( ( matcher = setMatchers[ j++ ] ) ) { 9781 matcher( unmatched, setMatched, context, xml ); 9782 } 9783 9784 if ( seed ) { 9785 9786 // Reintegrate element matches to eliminate the need for sorting 9787 if ( matchedCount > 0 ) { 9788 while ( i-- ) { 9789 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 9790 setMatched[ i ] = pop.call( results ); 9791 } 9792 } 9793 } 9794 9795 // Discard index placeholder values to get only actual matches 9796 setMatched = condense( setMatched ); 9797 } 9798 9799 // Add matches to results 9800 push.apply( results, setMatched ); 9801 9802 // Seedless set matches succeeding multiple successful matchers stipulate sorting 9803 if ( outermost && !seed && setMatched.length > 0 && 9804 ( matchedCount + setMatchers.length ) > 1 ) { 9805 9806 Sizzle.uniqueSort( results ); 9807 } 9808 } 9809 9810 // Override manipulation of globals by nested matchers 9811 if ( outermost ) { 9812 dirruns = dirrunsUnique; 9813 outermostContext = contextBackup; 9814 } 9815 9816 return unmatched; 9817 }; 9818 9819 return bySet ? 9820 markFunction( superMatcher ) : 9821 superMatcher; 9822} 9823 9824compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 9825 var i, 9826 setMatchers = [], 9827 elementMatchers = [], 9828 cached = compilerCache[ selector + " " ]; 9829 9830 if ( !cached ) { 9831 9832 // Generate a function of recursive functions that can be used to check each element 9833 if ( !match ) { 9834 match = tokenize( selector ); 9835 } 9836 i = match.length; 9837 while ( i-- ) { 9838 cached = matcherFromTokens( match[ i ] ); 9839 if ( cached[ expando ] ) { 9840 setMatchers.push( cached ); 9841 } else { 9842 elementMatchers.push( cached ); 9843 } 9844 } 9845 9846 // Cache the compiled function 9847 cached = compilerCache( 9848 selector, 9849 matcherFromGroupMatchers( elementMatchers, setMatchers ) 9850 ); 9851 9852 // Save selector and tokenization 9853 cached.selector = selector; 9854 } 9855 return cached; 9856}; 9857 9858/** 9859 * A low-level selection function that works with Sizzle's compiled 9860 * selector functions 9861 * @param {String|Function} selector A selector or a pre-compiled 9862 * selector function built with Sizzle.compile 9863 * @param {Element} context 9864 * @param {Array} [results] 9865 * @param {Array} [seed] A set of elements to match against 9866 */ 9867select = Sizzle.select = function( selector, context, results, seed ) { 9868 var i, tokens, token, type, find, 9869 compiled = typeof selector === "function" && selector, 9870 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 9871 9872 results = results || []; 9873 9874 // Try to minimize operations if there is only one selector in the list and no seed 9875 // (the latter of which guarantees us context) 9876 if ( match.length === 1 ) { 9877 9878 // Reduce context if the leading compound selector is an ID 9879 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 9880 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 9881 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 9882 9883 context = ( Expr.find[ "ID" ]( token.matches[ 0 ] 9884 .replace( runescape, funescape ), context ) || [] )[ 0 ]; 9885 if ( !context ) { 9886 return results; 9887 9888 // Precompiled matchers will still verify ancestry, so step up a level 9889 } else if ( compiled ) { 9890 context = context.parentNode; 9891 } 9892 9893 selector = selector.slice( tokens.shift().value.length ); 9894 } 9895 9896 // Fetch a seed set for right-to-left matching 9897 i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; 9898 while ( i-- ) { 9899 token = tokens[ i ]; 9900 9901 // Abort if we hit a combinator 9902 if ( Expr.relative[ ( type = token.type ) ] ) { 9903 break; 9904 } 9905 if ( ( find = Expr.find[ type ] ) ) { 9906 9907 // Search, expanding context for leading sibling combinators 9908 if ( ( seed = find( 9909 token.matches[ 0 ].replace( runescape, funescape ), 9910 rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || 9911 context 9912 ) ) ) { 9913 9914 // If seed is empty or no tokens remain, we can return early 9915 tokens.splice( i, 1 ); 9916 selector = seed.length && toSelector( tokens ); 9917 if ( !selector ) { 9918 push.apply( results, seed ); 9919 return results; 9920 } 9921 9922 break; 9923 } 9924 } 9925 } 9926 } 9927 9928 // Compile and execute a filtering function if one is not provided 9929 // Provide `match` to avoid retokenization if we modified the selector above 9930 ( compiled || compile( selector, match ) )( 9931 seed, 9932 context, 9933 !documentIsHTML, 9934 results, 9935 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 9936 ); 9937 return results; 9938}; 9939 9940// One-time assignments 9941 9942// Sort stability 9943support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 9944 9945// Support: Chrome 14-35+ 9946// Always assume duplicates if they aren't passed to the comparison function 9947support.detectDuplicates = !!hasDuplicate; 9948 9949// Initialize against the default document 9950setDocument(); 9951 9952// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 9953// Detached nodes confoundingly follow *each other* 9954support.sortDetached = assert( function( el ) { 9955 9956 // Should return 1, but returns 4 (following) 9957 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 9958} ); 9959 9960// Support: IE<8 9961// Prevent attribute/property "interpolation" 9962// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 9963if ( !assert( function( el ) { 9964 el.innerHTML = "<a href='#'></a>"; 9965 return el.firstChild.getAttribute( "href" ) === "#"; 9966} ) ) { 9967 addHandle( "type|href|height|width", function( elem, name, isXML ) { 9968 if ( !isXML ) { 9969 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 9970 } 9971 } ); 9972} 9973 9974// Support: IE<9 9975// Use defaultValue in place of getAttribute("value") 9976if ( !support.attributes || !assert( function( el ) { 9977 el.innerHTML = "<input/>"; 9978 el.firstChild.setAttribute( "value", "" ); 9979 return el.firstChild.getAttribute( "value" ) === ""; 9980} ) ) { 9981 addHandle( "value", function( elem, _name, isXML ) { 9982 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 9983 return elem.defaultValue; 9984 } 9985 } ); 9986} 9987 9988// Support: IE<9 9989// Use getAttributeNode to fetch booleans when getAttribute lies 9990if ( !assert( function( el ) { 9991 return el.getAttribute( "disabled" ) == null; 9992} ) ) { 9993 addHandle( booleans, function( elem, name, isXML ) { 9994 var val; 9995 if ( !isXML ) { 9996 return elem[ name ] === true ? name.toLowerCase() : 9997 ( val = elem.getAttributeNode( name ) ) && val.specified ? 9998 val.value : 9999 null; 10000 } 10001 } ); 10002} 10003 10004return Sizzle; 10005 10006} )( window ); 10007 10008 10009 10010jQuery.find = Sizzle; 10011jQuery.expr = Sizzle.selectors; 10012 10013// Deprecated 10014jQuery.expr[ ":" ] = jQuery.expr.pseudos; 10015jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 10016jQuery.text = Sizzle.getText; 10017jQuery.isXMLDoc = Sizzle.isXML; 10018jQuery.contains = Sizzle.contains; 10019jQuery.escapeSelector = Sizzle.escape; 10020 10021 10022 10023 10024var dir = function( elem, dir, until ) { 10025 var matched = [], 10026 truncate = until !== undefined; 10027 10028 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 10029 if ( elem.nodeType === 1 ) { 10030 if ( truncate && jQuery( elem ).is( until ) ) { 10031 break; 10032 } 10033 matched.push( elem ); 10034 } 10035 } 10036 return matched; 10037}; 10038 10039 10040var siblings = function( n, elem ) { 10041 var matched = []; 10042 10043 for ( ; n; n = n.nextSibling ) { 10044 if ( n.nodeType === 1 && n !== elem ) { 10045 matched.push( n ); 10046 } 10047 } 10048 10049 return matched; 10050}; 10051 10052 10053var rneedsContext = jQuery.expr.match.needsContext; 10054 10055 10056 10057function nodeName( elem, name ) { 10058 10059 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 10060 10061} 10062var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 10063 10064 10065 10066// Implement the identical functionality for filter and not 10067function winnow( elements, qualifier, not ) { 10068 if ( isFunction( qualifier ) ) { 10069 return jQuery.grep( elements, function( elem, i ) { 10070 return !!qualifier.call( elem, i, elem ) !== not; 10071 } ); 10072 } 10073 10074 // Single element 10075 if ( qualifier.nodeType ) { 10076 return jQuery.grep( elements, function( elem ) { 10077 return ( elem === qualifier ) !== not; 10078 } ); 10079 } 10080 10081 // Arraylike of elements (jQuery, arguments, Array) 10082 if ( typeof qualifier !== "string" ) { 10083 return jQuery.grep( elements, function( elem ) { 10084 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 10085 } ); 10086 } 10087 10088 // Filtered directly for both simple and complex selectors 10089 return jQuery.filter( qualifier, elements, not ); 10090} 10091 10092jQuery.filter = function( expr, elems, not ) { 10093 var elem = elems[ 0 ]; 10094 10095 if ( not ) { 10096 expr = ":not(" + expr + ")"; 10097 } 10098 10099 if ( elems.length === 1 && elem.nodeType === 1 ) { 10100 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 10101 } 10102 10103 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 10104 return elem.nodeType === 1; 10105 } ) ); 10106}; 10107 10108jQuery.fn.extend( { 10109 find: function( selector ) { 10110 var i, ret, 10111 len = this.length, 10112 self = this; 10113 10114 if ( typeof selector !== "string" ) {
vendor: 4,670 bytes, lines 10115-10300
10115 return this.pushStack( jQuery( selector ).filter( function() { 10116 for ( i = 0; i < len; i++ ) { 10117 if ( jQuery.contains( self[ i ], this ) ) { 10118 return true; 10119 } 10120 } 10121 } ) ); 10122 } 10123 10124 ret = this.pushStack( [] ); 10125 10126 for ( i = 0; i < len; i++ ) { 10127 jQuery.find( selector, self[ i ], ret ); 10128 } 10129 10130 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 10131 }, 10132 filter: function( selector ) { 10133 return this.pushStack( winnow( this, selector || [], false ) ); 10134 }, 10135 not: function( selector ) { 10136 return this.pushStack( winnow( this, selector || [], true ) ); 10137 }, 10138 is: function( selector ) { 10139 return !!winnow( 10140 this, 10141 10142 // If this is a positional/relative selector, check membership in the returned set 10143 // so $("p:first").is("p:last") won't return true for a doc with two "p". 10144 typeof selector === "string" && rneedsContext.test( selector ) ? 10145 jQuery( selector ) : 10146 selector || [], 10147 false 10148 ).length; 10149 } 10150} ); 10151 10152 10153// Initialize a jQuery object 10154 10155 10156// A central reference to the root jQuery(document) 10157var rootjQuery, 10158 10159 // A simple way to check for HTML strings 10160 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 10161 // Strict HTML recognition (trac-11290: must start with <) 10162 // Shortcut simple #id case for speed 10163 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 10164 10165 init = jQuery.fn.init = function( selector, context, root ) { 10166 var match, elem; 10167 10168 // HANDLE: $(""), $(null), $(undefined), $(false) 10169 if ( !selector ) { 10170 return this; 10171 } 10172 10173 // Method init() accepts an alternate rootjQuery 10174 // so migrate can support jQuery.sub (gh-2101) 10175 root = root || rootjQuery; 10176 10177 // Handle HTML strings 10178 if ( typeof selector === "string" ) { 10179 if ( selector[ 0 ] === "<" && 10180 selector[ selector.length - 1 ] === ">" && 10181 selector.length >= 3 ) { 10182 10183 // Assume that strings that start and end with <> are HTML and skip the regex check 10184 match = [ null, selector, null ]; 10185 10186 } else { 10187 match = rquickExpr.exec( selector ); 10188 } 10189 10190 // Match html or make sure no context is specified for #id 10191 if ( match && ( match[ 1 ] || !context ) ) { 10192 10193 // HANDLE: $(html) -> $(array) 10194 if ( match[ 1 ] ) { 10195 context = context instanceof jQuery ? context[ 0 ] : context; 10196 10197 // Option to run scripts is true for back-compat 10198 // Intentionally let the error be thrown if parseHTML is not present 10199 jQuery.merge( this, jQuery.parseHTML( 10200 match[ 1 ], 10201 context && context.nodeType ? context.ownerDocument || context : document, 10202 true 10203 ) ); 10204 10205 // HANDLE: $(html, props) 10206 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 10207 for ( match in context ) { 10208 10209 // Properties of context are called as methods if possible 10210 if ( isFunction( this[ match ] ) ) { 10211 this[ match ]( context[ match ] ); 10212 10213 // ...and otherwise set as attributes 10214 } else { 10215 this.attr( match, context[ match ] ); 10216 } 10217 } 10218 } 10219 10220 return this; 10221 10222 // HANDLE: $(#id) 10223 } else { 10224 elem = document.getElementById( match[ 2 ] ); 10225 10226 if ( elem ) { 10227 10228 // Inject the element directly into the jQuery object 10229 this[ 0 ] = elem; 10230 this.length = 1; 10231 } 10232 return this; 10233 } 10234 10235 // HANDLE: $(expr, $(...)) 10236 } else if ( !context || context.jquery ) { 10237 return ( context || root ).find( selector ); 10238 10239 // HANDLE: $(expr, context) 10240 // (which is just equivalent to: $(context).find(expr) 10241 } else { 10242 return this.constructor( context ).find( selector ); 10243 } 10244 10245 // HANDLE: $(DOMElement) 10246 } else if ( selector.nodeType ) { 10247 this[ 0 ] = selector; 10248 this.length = 1; 10249 return this; 10250 10251 // HANDLE: $(function) 10252 // Shortcut for document ready 10253 } else if ( isFunction( selector ) ) { 10254 return root.ready !== undefined ? 10255 root.ready( selector ) : 10256 10257 // Execute immediately if ready is not present 10258 selector( jQuery ); 10259 } 10260 10261 return jQuery.makeArray( selector, this ); 10262 }; 10263 10264// Give the init function the jQuery prototype for later instantiation 10265init.prototype = jQuery.fn; 10266 10267// Initialize central reference 10268rootjQuery = jQuery( document ); 10269 10270 10271var rparentsprev = /^(?:parents|prev(?:Until|All))/, 10272 10273 // Methods guaranteed to produce a unique set when starting from a unique set 10274 guaranteedUnique = { 10275 children: true, 10276 contents: true, 10277 next: true, 10278 prev: true 10279 }; 10280 10281jQuery.fn.extend( { 10282 has: function( target ) { 10283 var targets = jQuery( target, this ), 10284 l = targets.length; 10285 10286 return this.filter( function() { 10287 var i = 0; 10288 for ( ; i < l; i++ ) { 10289 if ( jQuery.contains( this, targets[ i ] ) ) { 10290 return true; 10291 } 10292 } 10293 } ); 10294 }, 10295 10296 closest: function( selectors, context ) { 10297 var cur, 10298 i = 0, 10299 l = this.length, 10300 matched = [],
vendor: 15,549 bytes, lines 10301-10886
10301 targets = typeof selectors !== "string" && jQuery( selectors ); 10302 10303 // Positional selectors never match, since there's no _selection_ context 10304 if ( !rneedsContext.test( selectors ) ) { 10305 for ( ; i < l; i++ ) { 10306 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 10307 10308 // Always skip document fragments 10309 if ( cur.nodeType < 11 && ( targets ? 10310 targets.index( cur ) > -1 : 10311 10312 // Don't pass non-elements to Sizzle 10313 cur.nodeType === 1 && 10314 jQuery.find.matchesSelector( cur, selectors ) ) ) { 10315 10316 matched.push( cur ); 10317 break; 10318 } 10319 } 10320 } 10321 } 10322 10323 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 10324 }, 10325 10326 // Determine the position of an element within the set 10327 index: function( elem ) { 10328 10329 // No argument, return index in parent 10330 if ( !elem ) { 10331 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 10332 } 10333 10334 // Index in selector 10335 if ( typeof elem === "string" ) { 10336 return indexOf.call( jQuery( elem ), this[ 0 ] ); 10337 } 10338 10339 // Locate the position of the desired element 10340 return indexOf.call( this, 10341 10342 // If it receives a jQuery object, the first element is used 10343 elem.jquery ? elem[ 0 ] : elem 10344 ); 10345 }, 10346 10347 add: function( selector, context ) { 10348 return this.pushStack( 10349 jQuery.uniqueSort( 10350 jQuery.merge( this.get(), jQuery( selector, context ) ) 10351 ) 10352 ); 10353 }, 10354 10355 addBack: function( selector ) { 10356 return this.add( selector == null ? 10357 this.prevObject : this.prevObject.filter( selector ) 10358 ); 10359 } 10360} ); 10361 10362function sibling( cur, dir ) { 10363 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 10364 return cur; 10365} 10366 10367jQuery.each( { 10368 parent: function( elem ) { 10369 var parent = elem.parentNode; 10370 return parent && parent.nodeType !== 11 ? parent : null; 10371 }, 10372 parents: function( elem ) { 10373 return dir( elem, "parentNode" ); 10374 }, 10375 parentsUntil: function( elem, _i, until ) { 10376 return dir( elem, "parentNode", until ); 10377 }, 10378 next: function( elem ) { 10379 return sibling( elem, "nextSibling" ); 10380 }, 10381 prev: function( elem ) { 10382 return sibling( elem, "previousSibling" ); 10383 }, 10384 nextAll: function( elem ) { 10385 return dir( elem, "nextSibling" ); 10386 }, 10387 prevAll: function( elem ) { 10388 return dir( elem, "previousSibling" ); 10389 }, 10390 nextUntil: function( elem, _i, until ) { 10391 return dir( elem, "nextSibling", until ); 10392 }, 10393 prevUntil: function( elem, _i, until ) { 10394 return dir( elem, "previousSibling", until ); 10395 }, 10396 siblings: function( elem ) { 10397 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 10398 }, 10399 children: function( elem ) { 10400 return siblings( elem.firstChild ); 10401 }, 10402 contents: function( elem ) { 10403 if ( elem.contentDocument != null && 10404 10405 // Support: IE 11+ 10406 // <object> elements with no `data` attribute has an object 10407 // `contentDocument` with a `null` prototype. 10408 getProto( elem.contentDocument ) ) { 10409 10410 return elem.contentDocument; 10411 } 10412 10413 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 10414 // Treat the template element as a regular one in browsers that 10415 // don't support it. 10416 if ( nodeName( elem, "template" ) ) { 10417 elem = elem.content || elem; 10418 } 10419 10420 return jQuery.merge( [], elem.childNodes ); 10421 } 10422}, function( name, fn ) { 10423 jQuery.fn[ name ] = function( until, selector ) { 10424 var matched = jQuery.map( this, fn, until ); 10425 10426 if ( name.slice( -5 ) !== "Until" ) { 10427 selector = until; 10428 } 10429 10430 if ( selector && typeof selector === "string" ) { 10431 matched = jQuery.filter( selector, matched ); 10432 } 10433 10434 if ( this.length > 1 ) { 10435 10436 // Remove duplicates 10437 if ( !guaranteedUnique[ name ] ) { 10438 jQuery.uniqueSort( matched ); 10439 } 10440 10441 // Reverse order for parents* and prev-derivatives 10442 if ( rparentsprev.test( name ) ) { 10443 matched.reverse(); 10444 } 10445 } 10446 10447 return this.pushStack( matched ); 10448 }; 10449} ); 10450var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 10451 10452 10453 10454// Convert String-formatted options into Object-formatted ones 10455function createOptions( options ) { 10456 var object = {}; 10457 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 10458 object[ flag ] = true; 10459 } ); 10460 return object; 10461} 10462 10463/* 10464 * Create a callback list using the following parameters: 10465 * 10466 * options: an optional list of space-separated options that will change how 10467 * the callback list behaves or a more traditional option object 10468 * 10469 * By default a callback list will act like an event callback list and can be 10470 * "fired" multiple times. 10471 * 10472 * Possible options: 10473 * 10474 * once: will ensure the callback list can only be fired once (like a Deferred) 10475 * 10476 * memory: will keep track of previous values and will call any callback added 10477 * after the list has been fired right away with the latest "memorized" 10478 * values (like a Deferred) 10479 * 10480 * unique: will ensure a callback can only be added once (no duplicate in the list) 10481 * 10482 * stopOnFalse: interrupt callings when a callback returns false 10483 * 10484 */ 10485jQuery.Callbacks = function( options ) { 10486 10487 // Convert options from String-formatted to Object-formatted if needed 10488 // (we check in cache first) 10489 options = typeof options === "string" ? 10490 createOptions( options ) : 10491 jQuery.extend( {}, options ); 10492 10493 var // Flag to know if list is currently firing 10494 firing, 10495 10496 // Last fire value for non-forgettable lists 10497 memory, 10498 10499 // Flag to know if list was already fired 10500 fired, 10501 10502 // Flag to prevent firing 10503 locked, 10504 10505 // Actual callback list 10506 list = [], 10507 10508 // Queue of execution data for repeatable lists 10509 queue = [], 10510 10511 // Index of currently firing callback (modified by add/remove as needed) 10512 firingIndex = -1, 10513 10514 // Fire callbacks 10515 fire = function() { 10516 10517 // Enforce single-firing 10518 locked = locked || options.once; 10519 10520 // Execute callbacks for all pending executions, 10521 // respecting firingIndex overrides and runtime changes 10522 fired = firing = true; 10523 for ( ; queue.length; firingIndex = -1 ) { 10524 memory = queue.shift(); 10525 while ( ++firingIndex < list.length ) { 10526 10527 // Run callback and check for early termination 10528 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 10529 options.stopOnFalse ) { 10530 10531 // Jump to end and forget the data so .add doesn't re-fire 10532 firingIndex = list.length; 10533 memory = false; 10534 } 10535 } 10536 } 10537 10538 // Forget the data if we're done with it 10539 if ( !options.memory ) { 10540 memory = false; 10541 } 10542 10543 firing = false; 10544 10545 // Clean up if we're done firing for good 10546 if ( locked ) { 10547 10548 // Keep an empty list if we have data for future add calls 10549 if ( memory ) { 10550 list = []; 10551 10552 // Otherwise, this object is spent 10553 } else { 10554 list = ""; 10555 } 10556 } 10557 }, 10558 10559 // Actual Callbacks object 10560 self = { 10561 10562 // Add a callback or a collection of callbacks to the list 10563 add: function() { 10564 if ( list ) { 10565 10566 // If we have memory from a past run, we should fire after adding 10567 if ( memory && !firing ) { 10568 firingIndex = list.length - 1; 10569 queue.push( memory ); 10570 } 10571 10572 ( function add( args ) { 10573 jQuery.each( args, function( _, arg ) { 10574 if ( isFunction( arg ) ) { 10575 if ( !options.unique || !self.has( arg ) ) { 10576 list.push( arg ); 10577 } 10578 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 10579 10580 // Inspect recursively 10581 add( arg ); 10582 } 10583 } ); 10584 } )( arguments ); 10585 10586 if ( memory && !firing ) { 10587 fire(); 10588 } 10589 } 10590 return this; 10591 }, 10592 10593 // Remove a callback from the list 10594 remove: function() { 10595 jQuery.each( arguments, function( _, arg ) { 10596 var index; 10597 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 10598 list.splice( index, 1 ); 10599 10600 // Handle firing indexes 10601 if ( index <= firingIndex ) { 10602 firingIndex--; 10603 } 10604 } 10605 } ); 10606 return this; 10607 }, 10608 10609 // Check if a given callback is in the list. 10610 // If no argument is given, return whether or not list has callbacks attached. 10611 has: function( fn ) { 10612 return fn ? 10613 jQuery.inArray( fn, list ) > -1 : 10614 list.length > 0; 10615 }, 10616 10617 // Remove all callbacks from the list 10618 empty: function() { 10619 if ( list ) { 10620 list = []; 10621 } 10622 return this; 10623 }, 10624 10625 // Disable .fire and .add 10626 // Abort any current/pending executions 10627 // Clear all callbacks and values 10628 disable: function() { 10629 locked = queue = []; 10630 list = memory = ""; 10631 return this; 10632 }, 10633 disabled: function() { 10634 return !list; 10635 }, 10636 10637 // Disable .fire 10638 // Also disable .add unless we have memory (since it would have no effect) 10639 // Abort any pending executions 10640 lock: function() { 10641 locked = queue = []; 10642 if ( !memory && !firing ) { 10643 list = memory = ""; 10644 } 10645 return this; 10646 }, 10647 locked: function() { 10648 return !!locked; 10649 }, 10650 10651 // Call all callbacks with the given context and arguments 10652 fireWith: function( context, args ) { 10653 if ( !locked ) { 10654 args = args || []; 10655 args = [ context, args.slice ? args.slice() : args ]; 10656 queue.push( args ); 10657 if ( !firing ) { 10658 fire(); 10659 } 10660 } 10661 return this; 10662 }, 10663 10664 // Call all the callbacks with the given arguments 10665 fire: function() { 10666 self.fireWith( this, arguments ); 10667 return this; 10668 }, 10669 10670 // To know if the callbacks have already been called at least once 10671 fired: function() { 10672 return !!fired; 10673 } 10674 }; 10675 10676 return self; 10677}; 10678 10679 10680function Identity( v ) { 10681 return v; 10682} 10683function Thrower( ex ) { 10684 throw ex; 10685} 10686 10687function adoptValue( value, resolve, reject, noValue ) { 10688 var method; 10689 10690 try { 10691 10692 // Check for promise aspect first to privilege synchronous behavior 10693 if ( value && isFunction( ( method = value.promise ) ) ) { 10694 method.call( value ).done( resolve ).fail( reject ); 10695 10696 // Other thenables 10697 } else if ( value && isFunction( ( method = value.then ) ) ) { 10698 method.call( value, resolve, reject ); 10699 10700 // Other non-thenables 10701 } else { 10702 10703 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 10704 // * false: [ value ].slice( 0 ) => resolve( value ) 10705 // * true: [ value ].slice( 1 ) => resolve() 10706 resolve.apply( undefined, [ value ].slice( noValue ) ); 10707 } 10708 10709 // For Promises/A+, convert exceptions into rejections 10710 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 10711 // Deferred#then to conditionally suppress rejection. 10712 } catch ( value ) { 10713 10714 // Support: Android 4.0 only 10715 // Strict mode functions invoked without .call/.apply get global-object context 10716 reject.apply( undefined, [ value ] ); 10717 } 10718} 10719 10720jQuery.extend( { 10721 10722 Deferred: function( func ) { 10723 var tuples = [ 10724 10725 // action, add listener, callbacks, 10726 // ... .then handlers, argument index, [final state] 10727 [ "notify", "progress", jQuery.Callbacks( "memory" ), 10728 jQuery.Callbacks( "memory" ), 2 ], 10729 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 10730 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 10731 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 10732 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 10733 ], 10734 state = "pending", 10735 promise = { 10736 state: function() { 10737 return state; 10738 }, 10739 always: function() { 10740 deferred.done( arguments ).fail( arguments ); 10741 return this; 10742 }, 10743 "catch": function( fn ) { 10744 return promise.then( null, fn ); 10745 }, 10746 10747 // Keep pipe for back-compat 10748 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 10749 var fns = arguments; 10750 10751 return jQuery.Deferred( function( newDefer ) { 10752 jQuery.each( tuples, function( _i, tuple ) { 10753 10754 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 10755 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 10756 10757 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 10758 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 10759 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 10760 deferred[ tuple[ 1 ] ]( function() { 10761 var returned = fn && fn.apply( this, arguments ); 10762 if ( returned && isFunction( returned.promise ) ) { 10763 returned.promise() 10764 .progress( newDefer.notify ) 10765 .done( newDefer.resolve ) 10766 .fail( newDefer.reject ); 10767 } else { 10768 newDefer[ tuple[ 0 ] + "With" ]( 10769 this, 10770 fn ? [ returned ] : arguments 10771 ); 10772 } 10773 } ); 10774 } ); 10775 fns = null; 10776 } ).promise(); 10777 }, 10778 then: function( onFulfilled, onRejected, onProgress ) { 10779 var maxDepth = 0; 10780 function resolve( depth, deferred, handler, special ) { 10781 return function() { 10782 var that = this, 10783 args = arguments, 10784 mightThrow = function() { 10785 var returned, then; 10786 10787 // Support: Promises/A+ section 2.3.3.3.3 10788 // https://promisesaplus.com/#point-59 10789 // Ignore double-resolution attempts 10790 if ( depth < maxDepth ) { 10791 return; 10792 } 10793 10794 returned = handler.apply( that, args ); 10795 10796 // Support: Promises/A+ section 2.3.1 10797 // https://promisesaplus.com/#point-48 10798 if ( returned === deferred.promise() ) { 10799 throw new TypeError( "Thenable self-resolution" ); 10800 } 10801 10802 // Support: Promises/A+ sections 2.3.3.1, 3.5 10803 // https://promisesaplus.com/#point-54 10804 // https://promisesaplus.com/#point-75 10805 // Retrieve `then` only once 10806 then = returned && 10807 10808 // Support: Promises/A+ section 2.3.4 10809 // https://promisesaplus.com/#point-64 10810 // Only check objects and functions for thenability 10811 ( typeof returned === "object" || 10812 typeof returned === "function" ) && 10813 returned.then; 10814 10815 // Handle a returned thenable 10816 if ( isFunction( then ) ) { 10817 10818 // Special processors (notify) just wait for resolution 10819 if ( special ) { 10820 then.call( 10821 returned, 10822 resolve( maxDepth, deferred, Identity, special ), 10823 resolve( maxDepth, deferred, Thrower, special ) 10824 ); 10825 10826 // Normal processors (resolve) also hook into progress 10827 } else { 10828 10829 // ...and disregard older resolution values 10830 maxDepth++; 10831 10832 then.call( 10833 returned, 10834 resolve( maxDepth, deferred, Identity, special ), 10835 resolve( maxDepth, deferred, Thrower, special ), 10836 resolve( maxDepth, deferred, Identity, 10837 deferred.notifyWith ) 10838 ); 10839 } 10840 10841 // Handle all other returned values 10842 } else { 10843 10844 // Only substitute handlers pass on context 10845 // and multiple values (non-spec behavior) 10846 if ( handler !== Identity ) { 10847 that = undefined; 10848 args = [ returned ]; 10849 } 10850 10851 // Process the value(s) 10852 // Default process is resolve 10853 ( special || deferred.resolveWith )( that, args ); 10854 } 10855 }, 10856 10857 // Only normal processors (resolve) catch and reject exceptions 10858 process = special ? 10859 mightThrow : 10860 function() { 10861 try { 10862 mightThrow(); 10863 } catch ( e ) { 10864 10865 if ( jQuery.Deferred.exceptionHook ) { 10866 jQuery.Deferred.exceptionHook( e, 10867 process.stackTrace ); 10868 } 10869 10870 // Support: Promises/A+ section 2.3.3.3.4.1 10871 // https://promisesaplus.com/#point-61 10872 // Ignore post-resolution exceptions 10873 if ( depth + 1 >= maxDepth ) { 10874 10875 // Only substitute handlers pass on context 10876 // and multiple values (non-spec behavior) 10877 if ( handler !== Thrower ) { 10878 that = undefined; 10879 args = [ e ]; 10880 } 10881 10882 deferred.rejectWith( that, args ); 10883 } 10884 } 10885 }; 10886
vendor: 10,679 bytes, lines 10887-11335
10887 // Support: Promises/A+ section 2.3.3.3.1 10888 // https://promisesaplus.com/#point-57 10889 // Re-resolve promises immediately to dodge false rejection from 10890 // subsequent errors 10891 if ( depth ) { 10892 process(); 10893 } else { 10894 10895 // Call an optional hook to record the stack, in case of exception 10896 // since it's otherwise lost when execution goes async 10897 if ( jQuery.Deferred.getStackHook ) { 10898 process.stackTrace = jQuery.Deferred.getStackHook(); 10899 } 10900 window.setTimeout( process ); 10901 } 10902 }; 10903 } 10904 10905 return jQuery.Deferred( function( newDefer ) { 10906 10907 // progress_handlers.add( ... ) 10908 tuples[ 0 ][ 3 ].add( 10909 resolve( 10910 0, 10911 newDefer, 10912 isFunction( onProgress ) ? 10913 onProgress : 10914 Identity, 10915 newDefer.notifyWith 10916 ) 10917 ); 10918 10919 // fulfilled_handlers.add( ... ) 10920 tuples[ 1 ][ 3 ].add( 10921 resolve( 10922 0, 10923 newDefer, 10924 isFunction( onFulfilled ) ? 10925 onFulfilled : 10926 Identity 10927 ) 10928 ); 10929 10930 // rejected_handlers.add( ... ) 10931 tuples[ 2 ][ 3 ].add( 10932 resolve( 10933 0, 10934 newDefer, 10935 isFunction( onRejected ) ? 10936 onRejected : 10937 Thrower 10938 ) 10939 ); 10940 } ).promise(); 10941 }, 10942 10943 // Get a promise for this deferred 10944 // If obj is provided, the promise aspect is added to the object 10945 promise: function( obj ) { 10946 return obj != null ? jQuery.extend( obj, promise ) : promise; 10947 } 10948 }, 10949 deferred = {}; 10950 10951 // Add list-specific methods 10952 jQuery.each( tuples, function( i, tuple ) { 10953 var list = tuple[ 2 ], 10954 stateString = tuple[ 5 ]; 10955 10956 // promise.progress = list.add 10957 // promise.done = list.add 10958 // promise.fail = list.add 10959 promise[ tuple[ 1 ] ] = list.add; 10960 10961 // Handle state 10962 if ( stateString ) { 10963 list.add( 10964 function() { 10965 10966 // state = "resolved" (i.e., fulfilled) 10967 // state = "rejected" 10968 state = stateString; 10969 }, 10970 10971 // rejected_callbacks.disable 10972 // fulfilled_callbacks.disable 10973 tuples[ 3 - i ][ 2 ].disable, 10974 10975 // rejected_handlers.disable 10976 // fulfilled_handlers.disable 10977 tuples[ 3 - i ][ 3 ].disable, 10978 10979 // progress_callbacks.lock 10980 tuples[ 0 ][ 2 ].lock, 10981 10982 // progress_handlers.lock 10983 tuples[ 0 ][ 3 ].lock 10984 ); 10985 } 10986 10987 // progress_handlers.fire 10988 // fulfilled_handlers.fire 10989 // rejected_handlers.fire 10990 list.add( tuple[ 3 ].fire ); 10991 10992 // deferred.notify = function() { deferred.notifyWith(...) } 10993 // deferred.resolve = function() { deferred.resolveWith(...) } 10994 // deferred.reject = function() { deferred.rejectWith(...) } 10995 deferred[ tuple[ 0 ] ] = function() { 10996 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 10997 return this; 10998 }; 10999 11000 // deferred.notifyWith = list.fireWith 11001 // deferred.resolveWith = list.fireWith 11002 // deferred.rejectWith = list.fireWith 11003 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 11004 } ); 11005 11006 // Make the deferred a promise 11007 promise.promise( deferred ); 11008 11009 // Call given func if any 11010 if ( func ) { 11011 func.call( deferred, deferred ); 11012 } 11013 11014 // All done! 11015 return deferred; 11016 }, 11017 11018 // Deferred helper 11019 when: function( singleValue ) { 11020 var 11021 11022 // count of uncompleted subordinates 11023 remaining = arguments.length, 11024 11025 // count of unprocessed arguments 11026 i = remaining, 11027 11028 // subordinate fulfillment data 11029 resolveContexts = Array( i ), 11030 resolveValues = slice.call( arguments ), 11031 11032 // the primary Deferred 11033 primary = jQuery.Deferred(), 11034 11035 // subordinate callback factory 11036 updateFunc = function( i ) { 11037 return function( value ) { 11038 resolveContexts[ i ] = this; 11039 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 11040 if ( !( --remaining ) ) { 11041 primary.resolveWith( resolveContexts, resolveValues ); 11042 } 11043 }; 11044 }; 11045 11046 // Single- and empty arguments are adopted like Promise.resolve 11047 if ( remaining <= 1 ) { 11048 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 11049 !remaining ); 11050 11051 // Use .then() to unwrap secondary thenables (cf. gh-3000) 11052 if ( primary.state() === "pending" || 11053 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 11054 11055 return primary.then(); 11056 } 11057 } 11058 11059 // Multiple arguments are aggregated like Promise.all array elements 11060 while ( i-- ) { 11061 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 11062 } 11063 11064 return primary.promise(); 11065 } 11066} ); 11067 11068 11069// These usually indicate a programmer mistake during development, 11070// warn about them ASAP rather than swallowing them by default. 11071var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 11072 11073jQuery.Deferred.exceptionHook = function( error, stack ) { 11074 11075 // Support: IE 8 - 9 only 11076 // Console exists when dev tools are open, which can happen at any time 11077 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 11078 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 11079 } 11080}; 11081 11082 11083 11084 11085jQuery.readyException = function( error ) { 11086 window.setTimeout( function() { 11087 throw error; 11088 } ); 11089}; 11090 11091 11092 11093 11094// The deferred used on DOM ready 11095var readyList = jQuery.Deferred(); 11096 11097jQuery.fn.ready = function( fn ) { 11098 11099 readyList 11100 .then( fn ) 11101 11102 // Wrap jQuery.readyException in a function so that the lookup 11103 // happens at the time of error handling instead of callback 11104 // registration. 11105 .catch( function( error ) { 11106 jQuery.readyException( error ); 11107 } ); 11108 11109 return this; 11110}; 11111 11112jQuery.extend( { 11113 11114 // Is the DOM ready to be used? Set to true once it occurs. 11115 isReady: false, 11116 11117 // A counter to track how many items to wait for before 11118 // the ready event fires. See trac-6781 11119 readyWait: 1, 11120 11121 // Handle when the DOM is ready 11122 ready: function( wait ) { 11123 11124 // Abort if there are pending holds or we're already ready 11125 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 11126 return; 11127 } 11128 11129 // Remember that the DOM is ready 11130 jQuery.isReady = true; 11131 11132 // If a normal DOM Ready event fired, decrement, and wait if need be 11133 if ( wait !== true && --jQuery.readyWait > 0 ) { 11134 return; 11135 } 11136 11137 // If there are functions bound, to execute 11138 readyList.resolveWith( document, [ jQuery ] ); 11139 } 11140} ); 11141 11142jQuery.ready.then = readyList.then; 11143 11144// The ready event handler and self cleanup method 11145function completed() { 11146 document.removeEventListener( "DOMContentLoaded", completed ); 11147 window.removeEventListener( "load", completed ); 11148 jQuery.ready(); 11149} 11150 11151// Catch cases where $(document).ready() is called 11152// after the browser event has already occurred. 11153// Support: IE <=9 - 10 only 11154// Older IE sometimes signals "interactive" too soon 11155if ( document.readyState === "complete" || 11156 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 11157 11158 // Handle it asynchronously to allow scripts the opportunity to delay ready 11159 window.setTimeout( jQuery.ready ); 11160 11161} else { 11162 11163 // Use the handy event callback 11164 document.addEventListener( "DOMContentLoaded", completed ); 11165 11166 // A fallback to window.onload, that will always work 11167 window.addEventListener( "load", completed ); 11168} 11169 11170 11171 11172 11173// Multifunctional method to get and set values of a collection 11174// The value/s can optionally be executed if it's a function 11175var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 11176 var i = 0, 11177 len = elems.length, 11178 bulk = key == null; 11179 11180 // Sets many values 11181 if ( toType( key ) === "object" ) { 11182 chainable = true; 11183 for ( i in key ) { 11184 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 11185 } 11186 11187 // Sets one value 11188 } else if ( value !== undefined ) { 11189 chainable = true; 11190 11191 if ( !isFunction( value ) ) { 11192 raw = true; 11193 } 11194 11195 if ( bulk ) { 11196 11197 // Bulk operations run against the entire set 11198 if ( raw ) { 11199 fn.call( elems, value ); 11200 fn = null; 11201 11202 // ...except when executing function values 11203 } else { 11204 bulk = fn; 11205 fn = function( elem, _key, value ) { 11206 return bulk.call( jQuery( elem ), value ); 11207 }; 11208 } 11209 } 11210 11211 if ( fn ) { 11212 for ( ; i < len; i++ ) { 11213 fn( 11214 elems[ i ], key, raw ? 11215 value : 11216 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 11217 ); 11218 } 11219 } 11220 } 11221 11222 if ( chainable ) { 11223 return elems; 11224 } 11225 11226 // Gets 11227 if ( bulk ) { 11228 return fn.call( elems ); 11229 } 11230 11231 return len ? fn( elems[ 0 ], key ) : emptyGet; 11232}; 11233 11234 11235// Matches dashed string for camelizing 11236var rmsPrefix = /^-ms-/, 11237 rdashAlpha = /-([a-z])/g; 11238 11239// Used by camelCase as callback to replace() 11240function fcamelCase( _all, letter ) { 11241 return letter.toUpperCase(); 11242} 11243 11244// Convert dashed to camelCase; used by the css and data modules 11245// Support: IE <=9 - 11, Edge 12 - 15 11246// Microsoft forgot to hump their vendor prefix (trac-9572) 11247function camelCase( string ) { 11248 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 11249} 11250var acceptData = function( owner ) { 11251 11252 // Accepts only: 11253 // - Node 11254 // - Node.ELEMENT_NODE 11255 // - Node.DOCUMENT_NODE 11256 // - Object 11257 // - Any 11258 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 11259}; 11260 11261 11262 11263 11264function Data() { 11265 this.expando = jQuery.expando + Data.uid++; 11266} 11267 11268Data.uid = 1; 11269 11270Data.prototype = { 11271 11272 cache: function( owner ) { 11273 11274 // Check if the owner object already has a cache 11275 var value = owner[ this.expando ]; 11276 11277 // If not, create one 11278 if ( !value ) { 11279 value = {}; 11280 11281 // We can accept data for non-element nodes in modern browsers, 11282 // but we should not, see trac-8335. 11283 // Always return an empty object. 11284 if ( acceptData( owner ) ) { 11285 11286 // If it is a node unlikely to be stringify-ed or looped over 11287 // use plain assignment 11288 if ( owner.nodeType ) { 11289 owner[ this.expando ] = value; 11290 11291 // Otherwise secure it in a non-enumerable property 11292 // configurable must be true to allow the property to be 11293 // deleted when data is removed 11294 } else { 11295 Object.defineProperty( owner, this.expando, { 11296 value: value, 11297 configurable: true 11298 } ); 11299 } 11300 } 11301 } 11302 11303 return value; 11304 }, 11305 set: function( owner, data, value ) { 11306 var prop, 11307 cache = this.cache( owner ); 11308 11309 // Handle: [ owner, key, value ] args 11310 // Always use camelCase key (gh-2257) 11311 if ( typeof data === "string" ) { 11312 cache[ camelCase( data ) ] = value; 11313 11314 // Handle: [ owner, { properties } ] args 11315 } else { 11316 11317 // Copy the properties one-by-one to the cache object 11318 for ( prop in data ) { 11319 cache[ camelCase( prop ) ] = data[ prop ]; 11320 } 11321 } 11322 return cache; 11323 }, 11324 get: function( owner, key ) { 11325 return key === undefined ? 11326 this.cache( owner ) : 11327 11328 // Always use camelCase key (gh-2257) 11329 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 11330 }, 11331 access: function( owner, key, value ) { 11332 11333 // In cases where either: 11334 // 11335 // 1. No key was specified
vendor: 4,579 bytes, lines 11336-11519
11336 // 2. A string key was specified, but no value provided 11337 // 11338 // Take the "read" path and allow the get method to determine 11339 // which value to return, respectively either: 11340 // 11341 // 1. The entire cache object 11342 // 2. The data stored at the key 11343 // 11344 if ( key === undefined || 11345 ( ( key && typeof key === "string" ) && value === undefined ) ) { 11346 11347 return this.get( owner, key ); 11348 } 11349 11350 // When the key is not a string, or both a key and value 11351 // are specified, set or extend (existing objects) with either: 11352 // 11353 // 1. An object of properties 11354 // 2. A key and value 11355 // 11356 this.set( owner, key, value ); 11357 11358 // Since the "set" path can have two possible entry points 11359 // return the expected data based on which path was taken[*] 11360 return value !== undefined ? value : key; 11361 }, 11362 remove: function( owner, key ) { 11363 var i, 11364 cache = owner[ this.expando ]; 11365 11366 if ( cache === undefined ) { 11367 return; 11368 } 11369 11370 if ( key !== undefined ) { 11371 11372 // Support array or space separated string of keys 11373 if ( Array.isArray( key ) ) { 11374 11375 // If key is an array of keys... 11376 // We always set camelCase keys, so remove that. 11377 key = key.map( camelCase ); 11378 } else { 11379 key = camelCase( key ); 11380 11381 // If a key with the spaces exists, use it. 11382 // Otherwise, create an array by matching non-whitespace 11383 key = key in cache ? 11384 [ key ] : 11385 ( key.match( rnothtmlwhite ) || [] ); 11386 } 11387 11388 i = key.length; 11389 11390 while ( i-- ) { 11391 delete cache[ key[ i ] ]; 11392 } 11393 } 11394 11395 // Remove the expando if there's no more data 11396 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 11397 11398 // Support: Chrome <=35 - 45 11399 // Webkit & Blink performance suffers when deleting properties 11400 // from DOM nodes, so set to undefined instead 11401 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 11402 if ( owner.nodeType ) { 11403 owner[ this.expando ] = undefined; 11404 } else { 11405 delete owner[ this.expando ]; 11406 } 11407 } 11408 }, 11409 hasData: function( owner ) { 11410 var cache = owner[ this.expando ]; 11411 return cache !== undefined && !jQuery.isEmptyObject( cache ); 11412 } 11413}; 11414var dataPriv = new Data(); 11415 11416var dataUser = new Data(); 11417 11418 11419 11420// Implementation Summary 11421// 11422// 1. Enforce API surface and semantic compatibility with 1.9.x branch 11423// 2. Improve the module's maintainability by reducing the storage 11424// paths to a single mechanism. 11425// 3. Use the same single mechanism to support "private" and "user" data. 11426// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 11427// 5. Avoid exposing implementation details on user objects (eg. expando properties) 11428// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 11429 11430var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 11431 rmultiDash = /[A-Z]/g; 11432 11433function getData( data ) { 11434 if ( data === "true" ) { 11435 return true; 11436 } 11437 11438 if ( data === "false" ) { 11439 return false; 11440 } 11441 11442 if ( data === "null" ) { 11443 return null; 11444 } 11445 11446 // Only convert to a number if it doesn't change the string 11447 if ( data === +data + "" ) { 11448 return +data; 11449 } 11450 11451 if ( rbrace.test( data ) ) { 11452 return JSON.parse( data ); 11453 } 11454 11455 return data; 11456} 11457 11458function dataAttr( elem, key, data ) { 11459 var name; 11460 11461 // If nothing was found internally, try to fetch any 11462 // data from the HTML5 data-* attribute 11463 if ( data === undefined && elem.nodeType === 1 ) { 11464 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 11465 data = elem.getAttribute( name ); 11466 11467 if ( typeof data === "string" ) { 11468 try { 11469 data = getData( data ); 11470 } catch ( e ) {} 11471 11472 // Make sure we set the data so it isn't changed later 11473 dataUser.set( elem, key, data ); 11474 } else { 11475 data = undefined; 11476 } 11477 } 11478 return data; 11479} 11480 11481jQuery.extend( { 11482 hasData: function( elem ) { 11483 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 11484 }, 11485 11486 data: function( elem, name, data ) { 11487 return dataUser.access( elem, name, data ); 11488 }, 11489 11490 removeData: function( elem, name ) { 11491 dataUser.remove( elem, name ); 11492 }, 11493 11494 // TODO: Now that all calls to _data and _removeData have been replaced 11495 // with direct calls to dataPriv methods, these can be deprecated. 11496 _data: function( elem, name, data ) { 11497 return dataPriv.access( elem, name, data ); 11498 }, 11499 11500 _removeData: function( elem, name ) { 11501 dataPriv.remove( elem, name ); 11502 } 11503} ); 11504 11505jQuery.fn.extend( { 11506 data: function( key, value ) { 11507 var i, name, data, 11508 elem = this[ 0 ], 11509 attrs = elem && elem.attributes; 11510 11511 // Gets all values 11512 if ( key === undefined ) { 11513 if ( this.length ) { 11514 data = dataUser.get( elem ); 11515 11516 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 11517 i = attrs.length; 11518 while ( i-- ) { 11519
vendor: 4,119 bytes, lines 11520-11694
11520 // Support: IE 11 only 11521 // The attrs elements can be null (trac-14894) 11522 if ( attrs[ i ] ) { 11523 name = attrs[ i ].name; 11524 if ( name.indexOf( "data-" ) === 0 ) { 11525 name = camelCase( name.slice( 5 ) ); 11526 dataAttr( elem, name, data[ name ] ); 11527 } 11528 } 11529 } 11530 dataPriv.set( elem, "hasDataAttrs", true ); 11531 } 11532 } 11533 11534 return data; 11535 } 11536 11537 // Sets multiple values 11538 if ( typeof key === "object" ) { 11539 return this.each( function() { 11540 dataUser.set( this, key ); 11541 } ); 11542 } 11543 11544 return access( this, function( value ) { 11545 var data; 11546 11547 // The calling jQuery object (element matches) is not empty 11548 // (and therefore has an element appears at this[ 0 ]) and the 11549 // `value` parameter was not undefined. An empty jQuery object 11550 // will result in `undefined` for elem = this[ 0 ] which will 11551 // throw an exception if an attempt to read a data cache is made. 11552 if ( elem && value === undefined ) { 11553 11554 // Attempt to get data from the cache 11555 // The key will always be camelCased in Data 11556 data = dataUser.get( elem, key ); 11557 if ( data !== undefined ) { 11558 return data; 11559 } 11560 11561 // Attempt to "discover" the data in 11562 // HTML5 custom data-* attrs 11563 data = dataAttr( elem, key ); 11564 if ( data !== undefined ) { 11565 return data; 11566 } 11567 11568 // We tried really hard, but the data doesn't exist. 11569 return; 11570 } 11571 11572 // Set the data... 11573 this.each( function() { 11574 11575 // We always store the camelCased key 11576 dataUser.set( this, key, value ); 11577 } ); 11578 }, null, value, arguments.length > 1, null, true ); 11579 }, 11580 11581 removeData: function( key ) { 11582 return this.each( function() { 11583 dataUser.remove( this, key ); 11584 } ); 11585 } 11586} ); 11587 11588 11589jQuery.extend( { 11590 queue: function( elem, type, data ) { 11591 var queue; 11592 11593 if ( elem ) { 11594 type = ( type || "fx" ) + "queue"; 11595 queue = dataPriv.get( elem, type ); 11596 11597 // Speed up dequeue by getting out quickly if this is just a lookup 11598 if ( data ) { 11599 if ( !queue || Array.isArray( data ) ) { 11600 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 11601 } else { 11602 queue.push( data ); 11603 } 11604 } 11605 return queue || []; 11606 } 11607 }, 11608 11609 dequeue: function( elem, type ) { 11610 type = type || "fx"; 11611 11612 var queue = jQuery.queue( elem, type ), 11613 startLength = queue.length, 11614 fn = queue.shift(), 11615 hooks = jQuery._queueHooks( elem, type ), 11616 next = function() { 11617 jQuery.dequeue( elem, type ); 11618 }; 11619 11620 // If the fx queue is dequeued, always remove the progress sentinel 11621 if ( fn === "inprogress" ) { 11622 fn = queue.shift(); 11623 startLength--; 11624 } 11625 11626 if ( fn ) { 11627 11628 // Add a progress sentinel to prevent the fx queue from being 11629 // automatically dequeued 11630 if ( type === "fx" ) { 11631 queue.unshift( "inprogress" ); 11632 } 11633 11634 // Clear up the last queue stop function 11635 delete hooks.stop; 11636 fn.call( elem, next, hooks ); 11637 } 11638 11639 if ( !startLength && hooks ) { 11640 hooks.empty.fire(); 11641 } 11642 }, 11643 11644 // Not public - generate a queueHooks object, or return the current one 11645 _queueHooks: function( elem, type ) { 11646 var key = type + "queueHooks"; 11647 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 11648 empty: jQuery.Callbacks( "once memory" ).add( function() { 11649 dataPriv.remove( elem, [ type + "queue", key ] ); 11650 } ) 11651 } ); 11652 } 11653} ); 11654 11655jQuery.fn.extend( { 11656 queue: function( type, data ) { 11657 var setter = 2; 11658 11659 if ( typeof type !== "string" ) { 11660 data = type; 11661 type = "fx"; 11662 setter--; 11663 } 11664 11665 if ( arguments.length < setter ) { 11666 return jQuery.queue( this[ 0 ], type ); 11667 } 11668 11669 return data === undefined ? 11670 this : 11671 this.each( function() { 11672 var queue = jQuery.queue( this, type, data ); 11673 11674 // Ensure a hooks for this queue 11675 jQuery._queueHooks( this, type ); 11676 11677 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 11678 jQuery.dequeue( this, type ); 11679 } 11680 } ); 11681 }, 11682 dequeue: function( type ) { 11683 return this.each( function() { 11684 jQuery.dequeue( this, type ); 11685 } ); 11686 }, 11687 clearQueue: function( type ) { 11688 return this.queue( type || "fx", [] ); 11689 }, 11690 11691 // Get a promise resolved when queues of a certain type 11692 // are emptied (fx is the type by default) 11693 promise: function( type, obj ) { 11694 var tmp,
vendor: 6,339 bytes, lines 11695-11943
11695 count = 1, 11696 defer = jQuery.Deferred(), 11697 elements = this, 11698 i = this.length, 11699 resolve = function() { 11700 if ( !( --count ) ) { 11701 defer.resolveWith( elements, [ elements ] ); 11702 } 11703 }; 11704 11705 if ( typeof type !== "string" ) { 11706 obj = type; 11707 type = undefined; 11708 } 11709 type = type || "fx"; 11710 11711 while ( i-- ) { 11712 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 11713 if ( tmp && tmp.empty ) { 11714 count++; 11715 tmp.empty.add( resolve ); 11716 } 11717 } 11718 resolve(); 11719 return defer.promise( obj ); 11720 } 11721} ); 11722var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 11723 11724var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 11725 11726 11727var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 11728 11729var documentElement = document.documentElement; 11730 11731 11732 11733 var isAttached = function( elem ) { 11734 return jQuery.contains( elem.ownerDocument, elem ); 11735 }, 11736 composed = { composed: true }; 11737 11738 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 11739 // Check attachment across shadow DOM boundaries when possible (gh-3504) 11740 // Support: iOS 10.0-10.2 only 11741 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 11742 // leading to errors. We need to check for `getRootNode`. 11743 if ( documentElement.getRootNode ) { 11744 isAttached = function( elem ) { 11745 return jQuery.contains( elem.ownerDocument, elem ) || 11746 elem.getRootNode( composed ) === elem.ownerDocument; 11747 }; 11748 } 11749var isHiddenWithinTree = function( elem, el ) { 11750 11751 // isHiddenWithinTree might be called from jQuery#filter function; 11752 // in that case, element will be second argument 11753 elem = el || elem; 11754 11755 // Inline style trumps all 11756 return elem.style.display === "none" || 11757 elem.style.display === "" && 11758 11759 // Otherwise, check computed style 11760 // Support: Firefox <=43 - 45 11761 // Disconnected elements can have computed display: none, so first confirm that elem is 11762 // in the document. 11763 isAttached( elem ) && 11764 11765 jQuery.css( elem, "display" ) === "none"; 11766 }; 11767 11768 11769 11770function adjustCSS( elem, prop, valueParts, tween ) { 11771 var adjusted, scale, 11772 maxIterations = 20, 11773 currentValue = tween ? 11774 function() { 11775 return tween.cur(); 11776 } : 11777 function() { 11778 return jQuery.css( elem, prop, "" ); 11779 }, 11780 initial = currentValue(), 11781 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 11782 11783 // Starting value computation is required for potential unit mismatches 11784 initialInUnit = elem.nodeType && 11785 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 11786 rcssNum.exec( jQuery.css( elem, prop ) ); 11787 11788 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 11789 11790 // Support: Firefox <=54 11791 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 11792 initial = initial / 2; 11793 11794 // Trust units reported by jQuery.css 11795 unit = unit || initialInUnit[ 3 ]; 11796 11797 // Iteratively approximate from a nonzero starting point 11798 initialInUnit = +initial || 1; 11799 11800 while ( maxIterations-- ) { 11801 11802 // Evaluate and update our best guess (doubling guesses that zero out). 11803 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 11804 jQuery.style( elem, prop, initialInUnit + unit ); 11805 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 11806 maxIterations = 0; 11807 } 11808 initialInUnit = initialInUnit / scale; 11809 11810 } 11811 11812 initialInUnit = initialInUnit * 2; 11813 jQuery.style( elem, prop, initialInUnit + unit ); 11814 11815 // Make sure we update the tween properties later on 11816 valueParts = valueParts || []; 11817 } 11818 11819 if ( valueParts ) { 11820 initialInUnit = +initialInUnit || +initial || 0; 11821 11822 // Apply relative offset (+=/-=) if specified 11823 adjusted = valueParts[ 1 ] ? 11824 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 11825 +valueParts[ 2 ]; 11826 if ( tween ) { 11827 tween.unit = unit; 11828 tween.start = initialInUnit; 11829 tween.end = adjusted; 11830 } 11831 } 11832 return adjusted; 11833} 11834 11835 11836var defaultDisplayMap = {}; 11837 11838function getDefaultDisplay( elem ) { 11839 var temp, 11840 doc = elem.ownerDocument, 11841 nodeName = elem.nodeName, 11842 display = defaultDisplayMap[ nodeName ]; 11843 11844 if ( display ) { 11845 return display; 11846 } 11847 11848 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 11849 display = jQuery.css( temp, "display" ); 11850 11851 temp.parentNode.removeChild( temp ); 11852 11853 if ( display === "none" ) { 11854 display = "block"; 11855 } 11856 defaultDisplayMap[ nodeName ] = display; 11857 11858 return display; 11859} 11860 11861function showHide( elements, show ) { 11862 var display, elem, 11863 values = [], 11864 index = 0, 11865 length = elements.length; 11866 11867 // Determine new display value for elements that need to change 11868 for ( ; index < length; index++ ) { 11869 elem = elements[ index ]; 11870 if ( !elem.style ) { 11871 continue; 11872 } 11873 11874 display = elem.style.display; 11875 if ( show ) { 11876 11877 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 11878 // check is required in this first loop unless we have a nonempty display value (either 11879 // inline or about-to-be-restored) 11880 if ( display === "none" ) { 11881 values[ index ] = dataPriv.get( elem, "display" ) || null; 11882 if ( !values[ index ] ) { 11883 elem.style.display = ""; 11884 } 11885 } 11886 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 11887 values[ index ] = getDefaultDisplay( elem ); 11888 } 11889 } else { 11890 if ( display !== "none" ) { 11891 values[ index ] = "none"; 11892 11893 // Remember what we're overwriting 11894 dataPriv.set( elem, "display", display ); 11895 } 11896 } 11897 } 11898 11899 // Set the display of the elements in a second loop to avoid constant reflow 11900 for ( index = 0; index < length; index++ ) { 11901 if ( values[ index ] != null ) { 11902 elements[ index ].style.display = values[ index ]; 11903 } 11904 } 11905 11906 return elements; 11907} 11908 11909jQuery.fn.extend( { 11910 show: function() { 11911 return showHide( this, true ); 11912 }, 11913 hide: function() { 11914 return showHide( this ); 11915 }, 11916 toggle: function( state ) { 11917 if ( typeof state === "boolean" ) { 11918 return state ? this.show() : this.hide(); 11919 } 11920 11921 return this.each( function() { 11922 if ( isHiddenWithinTree( this ) ) { 11923 jQuery( this ).show(); 11924 } else { 11925 jQuery( this ).hide(); 11926 } 11927 } ); 11928 } 11929} ); 11930var rcheckableType = ( /^(?:checkbox|radio)$/i ); 11931 11932var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 11933 11934var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 11935 11936 11937 11938( function() { 11939 var fragment = document.createDocumentFragment(), 11940 div = fragment.appendChild( document.createElement( "div" ) ), 11941 input = document.createElement( "input" ); 11942 11943 // Support: Android 4.0 - 4.3 only
vendor: 4,796 bytes, lines 11944-12131
11944 // Check state lost if the name is set (trac-11217) 11945 // Support: Windows Web Apps (WWA) 11946 // `name` and `type` must use .setAttribute for WWA (trac-14901) 11947 input.setAttribute( "type", "radio" ); 11948 input.setAttribute( "checked", "checked" ); 11949 input.setAttribute( "name", "t" ); 11950 11951 div.appendChild( input ); 11952 11953 // Support: Android <=4.1 only 11954 // Older WebKit doesn't clone checked state correctly in fragments 11955 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 11956 11957 // Support: IE <=11 only 11958 // Make sure textarea (and checkbox) defaultValue is properly cloned 11959 div.innerHTML = "<textarea>x</textarea>"; 11960 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 11961 11962 // Support: IE <=9 only 11963 // IE <=9 replaces <option> tags with their contents when inserted outside of 11964 // the select element. 11965 div.innerHTML = "<option></option>"; 11966 support.option = !!div.lastChild; 11967} )(); 11968 11969 11970// We have to close these tags to support XHTML (trac-13200) 11971var wrapMap = { 11972 11973 // XHTML parsers do not magically insert elements in the 11974 // same way that tag soup parsers do. So we cannot shorten 11975 // this by omitting <tbody> or other required elements. 11976 thead: [ 1, "<table>", "</table>" ], 11977 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 11978 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 11979 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 11980 11981 _default: [ 0, "", "" ] 11982}; 11983 11984wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 11985wrapMap.th = wrapMap.td; 11986 11987// Support: IE <=9 only 11988if ( !support.option ) { 11989 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 11990} 11991 11992 11993function getAll( context, tag ) { 11994 11995 // Support: IE <=9 - 11 only 11996 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 11997 var ret; 11998 11999 if ( typeof context.getElementsByTagName !== "undefined" ) { 12000 ret = context.getElementsByTagName( tag || "*" ); 12001 12002 } else if ( typeof context.querySelectorAll !== "undefined" ) { 12003 ret = context.querySelectorAll( tag || "*" ); 12004 12005 } else { 12006 ret = []; 12007 } 12008 12009 if ( tag === undefined || tag && nodeName( context, tag ) ) { 12010 return jQuery.merge( [ context ], ret ); 12011 } 12012 12013 return ret; 12014} 12015 12016 12017// Mark scripts as having already been evaluated 12018function setGlobalEval( elems, refElements ) { 12019 var i = 0, 12020 l = elems.length; 12021 12022 for ( ; i < l; i++ ) { 12023 dataPriv.set( 12024 elems[ i ], 12025 "globalEval", 12026 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 12027 ); 12028 } 12029} 12030 12031 12032var rhtml = /<|&#?\w+;/; 12033 12034function buildFragment( elems, context, scripts, selection, ignored ) { 12035 var elem, tmp, tag, wrap, attached, j, 12036 fragment = context.createDocumentFragment(), 12037 nodes = [], 12038 i = 0, 12039 l = elems.length; 12040 12041 for ( ; i < l; i++ ) { 12042 elem = elems[ i ]; 12043 12044 if ( elem || elem === 0 ) { 12045 12046 // Add nodes directly 12047 if ( toType( elem ) === "object" ) { 12048 12049 // Support: Android <=4.0 only, PhantomJS 1 only 12050 // push.apply(_, arraylike) throws on ancient WebKit 12051 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 12052 12053 // Convert non-html into a text node 12054 } else if ( !rhtml.test( elem ) ) { 12055 nodes.push( context.createTextNode( elem ) ); 12056 12057 // Convert html into DOM nodes 12058 } else { 12059 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 12060 12061 // Deserialize a standard representation 12062 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 12063 wrap = wrapMap[ tag ] || wrapMap._default; 12064 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 12065 12066 // Descend through wrappers to the right content 12067 j = wrap[ 0 ]; 12068 while ( j-- ) { 12069 tmp = tmp.lastChild; 12070 } 12071 12072 // Support: Android <=4.0 only, PhantomJS 1 only 12073 // push.apply(_, arraylike) throws on ancient WebKit 12074 jQuery.merge( nodes, tmp.childNodes ); 12075 12076 // Remember the top-level container 12077 tmp = fragment.firstChild; 12078 12079 // Ensure the created nodes are orphaned (trac-12392) 12080 tmp.textContent = ""; 12081 } 12082 } 12083 } 12084 12085 // Remove wrapper from fragment 12086 fragment.textContent = ""; 12087 12088 i = 0; 12089 while ( ( elem = nodes[ i++ ] ) ) { 12090 12091 // Skip elements already in the context collection (trac-4087) 12092 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 12093 if ( ignored ) { 12094 ignored.push( elem ); 12095 } 12096 continue; 12097 } 12098 12099 attached = isAttached( elem ); 12100 12101 // Append to fragment 12102 tmp = getAll( fragment.appendChild( elem ), "script" ); 12103 12104 // Preserve script evaluation history 12105 if ( attached ) { 12106 setGlobalEval( tmp ); 12107 } 12108 12109 // Capture executables 12110 if ( scripts ) { 12111 j = 0; 12112 while ( ( elem = tmp[ j++ ] ) ) { 12113 if ( rscriptType.test( elem.type || "" ) ) { 12114 scripts.push( elem ); 12115 } 12116 } 12117 } 12118 } 12119 12120 return fragment; 12121} 12122 12123 12124var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 12125 12126function returnTrue() { 12127 return true; 12128} 12129 12130function returnFalse() { 12131 return false;
vendor: 10,171 bytes, lines 12132-12486
12132} 12133 12134// Support: IE <=9 - 11+ 12135// focus() and blur() are asynchronous, except when they are no-op. 12136// So expect focus to be synchronous when the element is already active, 12137// and blur to be synchronous when the element is not already active. 12138// (focus and blur are always synchronous in other supported browsers, 12139// this just defines when we can count on it). 12140function expectSync( elem, type ) { 12141 return ( elem === safeActiveElement() ) === ( type === "focus" ); 12142} 12143 12144// Support: IE <=9 only 12145// Accessing document.activeElement can throw unexpectedly 12146// https://bugs.jquery.com/ticket/13393 12147function safeActiveElement() { 12148 try { 12149 return document.activeElement; 12150 } catch ( err ) { } 12151} 12152 12153function on( elem, types, selector, data, fn, one ) { 12154 var origFn, type; 12155 12156 // Types can be a map of types/handlers 12157 if ( typeof types === "object" ) { 12158 12159 // ( types-Object, selector, data ) 12160 if ( typeof selector !== "string" ) { 12161 12162 // ( types-Object, data ) 12163 data = data || selector; 12164 selector = undefined; 12165 } 12166 for ( type in types ) { 12167 on( elem, type, selector, data, types[ type ], one ); 12168 } 12169 return elem; 12170 } 12171 12172 if ( data == null && fn == null ) { 12173 12174 // ( types, fn ) 12175 fn = selector; 12176 data = selector = undefined; 12177 } else if ( fn == null ) { 12178 if ( typeof selector === "string" ) { 12179 12180 // ( types, selector, fn ) 12181 fn = data; 12182 data = undefined; 12183 } else { 12184 12185 // ( types, data, fn ) 12186 fn = data; 12187 data = selector; 12188 selector = undefined; 12189 } 12190 } 12191 if ( fn === false ) { 12192 fn = returnFalse; 12193 } else if ( !fn ) { 12194 return elem; 12195 } 12196 12197 if ( one === 1 ) { 12198 origFn = fn; 12199 fn = function( event ) { 12200 12201 // Can use an empty set, since event contains the info 12202 jQuery().off( event ); 12203 return origFn.apply( this, arguments ); 12204 }; 12205 12206 // Use same guid so caller can remove using origFn 12207 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 12208 } 12209 return elem.each( function() { 12210 jQuery.event.add( this, types, fn, data, selector ); 12211 } ); 12212} 12213 12214/* 12215 * Helper functions for managing events -- not part of the public interface. 12216 * Props to Dean Edwards' addEvent library for many of the ideas. 12217 */ 12218jQuery.event = { 12219 12220 global: {}, 12221 12222 add: function( elem, types, handler, data, selector ) { 12223 12224 var handleObjIn, eventHandle, tmp, 12225 events, t, handleObj, 12226 special, handlers, type, namespaces, origType, 12227 elemData = dataPriv.get( elem ); 12228 12229 // Only attach events to objects that accept data 12230 if ( !acceptData( elem ) ) { 12231 return; 12232 } 12233 12234 // Caller can pass in an object of custom data in lieu of the handler 12235 if ( handler.handler ) { 12236 handleObjIn = handler; 12237 handler = handleObjIn.handler; 12238 selector = handleObjIn.selector; 12239 } 12240 12241 // Ensure that invalid selectors throw exceptions at attach time 12242 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 12243 if ( selector ) { 12244 jQuery.find.matchesSelector( documentElement, selector ); 12245 } 12246 12247 // Make sure that the handler has a unique ID, used to find/remove it later 12248 if ( !handler.guid ) { 12249 handler.guid = jQuery.guid++; 12250 } 12251 12252 // Init the element's event structure and main handler, if this is the first 12253 if ( !( events = elemData.events ) ) { 12254 events = elemData.events = Object.create( null ); 12255 } 12256 if ( !( eventHandle = elemData.handle ) ) { 12257 eventHandle = elemData.handle = function( e ) { 12258 12259 // Discard the second event of a jQuery.event.trigger() and 12260 // when an event is called after a page has unloaded 12261 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 12262 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 12263 }; 12264 } 12265 12266 // Handle multiple events separated by a space 12267 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12268 t = types.length; 12269 while ( t-- ) { 12270 tmp = rtypenamespace.exec( types[ t ] ) || []; 12271 type = origType = tmp[ 1 ]; 12272 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12273 12274 // There *must* be a type, no attaching namespace-only handlers 12275 if ( !type ) { 12276 continue; 12277 } 12278 12279 // If event changes its type, use the special event handlers for the changed type 12280 special = jQuery.event.special[ type ] || {}; 12281 12282 // If selector defined, determine special event api type, otherwise given type 12283 type = ( selector ? special.delegateType : special.bindType ) || type; 12284 12285 // Update special based on newly reset type 12286 special = jQuery.event.special[ type ] || {}; 12287 12288 // handleObj is passed to all event handlers 12289 handleObj = jQuery.extend( { 12290 type: type, 12291 origType: origType, 12292 data: data, 12293 handler: handler, 12294 guid: handler.guid, 12295 selector: selector, 12296 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 12297 namespace: namespaces.join( "." ) 12298 }, handleObjIn ); 12299 12300 // Init the event handler queue if we're the first 12301 if ( !( handlers = events[ type ] ) ) { 12302 handlers = events[ type ] = []; 12303 handlers.delegateCount = 0; 12304 12305 // Only use addEventListener if the special events handler returns false 12306 if ( !special.setup || 12307 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 12308 12309 if ( elem.addEventListener ) { 12310 elem.addEventListener( type, eventHandle ); 12311 } 12312 } 12313 } 12314 12315 if ( special.add ) { 12316 special.add.call( elem, handleObj ); 12317 12318 if ( !handleObj.handler.guid ) { 12319 handleObj.handler.guid = handler.guid; 12320 } 12321 } 12322 12323 // Add to the element's handler list, delegates in front 12324 if ( selector ) { 12325 handlers.splice( handlers.delegateCount++, 0, handleObj ); 12326 } else { 12327 handlers.push( handleObj ); 12328 } 12329 12330 // Keep track of which events have ever been used, for event optimization 12331 jQuery.event.global[ type ] = true; 12332 } 12333 12334 }, 12335 12336 // Detach an event or set of events from an element 12337 remove: function( elem, types, handler, selector, mappedTypes ) { 12338 12339 var j, origCount, tmp, 12340 events, t, handleObj, 12341 special, handlers, type, namespaces, origType, 12342 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 12343 12344 if ( !elemData || !( events = elemData.events ) ) { 12345 return; 12346 } 12347 12348 // Once for each type.namespace in types; type may be omitted 12349 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12350 t = types.length; 12351 while ( t-- ) { 12352 tmp = rtypenamespace.exec( types[ t ] ) || []; 12353 type = origType = tmp[ 1 ]; 12354 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12355 12356 // Unbind all events (on this namespace, if provided) for the element 12357 if ( !type ) { 12358 for ( type in events ) { 12359 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 12360 } 12361 continue; 12362 } 12363 12364 special = jQuery.event.special[ type ] || {}; 12365 type = ( selector ? special.delegateType : special.bindType ) || type; 12366 handlers = events[ type ] || []; 12367 tmp = tmp[ 2 ] && 12368 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 12369 12370 // Remove matching events 12371 origCount = j = handlers.length; 12372 while ( j-- ) { 12373 handleObj = handlers[ j ]; 12374 12375 if ( ( mappedTypes || origType === handleObj.origType ) && 12376 ( !handler || handler.guid === handleObj.guid ) && 12377 ( !tmp || tmp.test( handleObj.namespace ) ) && 12378 ( !selector || selector === handleObj.selector || 12379 selector === "**" && handleObj.selector ) ) { 12380 handlers.splice( j, 1 ); 12381 12382 if ( handleObj.selector ) { 12383 handlers.delegateCount--; 12384 } 12385 if ( special.remove ) { 12386 special.remove.call( elem, handleObj ); 12387 } 12388 } 12389 } 12390 12391 // Remove generic event handler if we removed something and no more handlers exist 12392 // (avoids potential for endless recursion during removal of special event handlers) 12393 if ( origCount && !handlers.length ) { 12394 if ( !special.teardown || 12395 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 12396 12397 jQuery.removeEvent( elem, type, elemData.handle ); 12398 } 12399 12400 delete events[ type ]; 12401 } 12402 } 12403 12404 // Remove data and the expando if it's no longer used 12405 if ( jQuery.isEmptyObject( events ) ) { 12406 dataPriv.remove( elem, "handle events" ); 12407 } 12408 }, 12409 12410 dispatch: function( nativeEvent ) { 12411 12412 var i, j, ret, matched, handleObj, handlerQueue, 12413 args = new Array( arguments.length ), 12414 12415 // Make a writable jQuery.Event from the native event object 12416 event = jQuery.event.fix( nativeEvent ), 12417 12418 handlers = ( 12419 dataPriv.get( this, "events" ) || Object.create( null ) 12420 )[ event.type ] || [], 12421 special = jQuery.event.special[ event.type ] || {}; 12422 12423 // Use the fix-ed jQuery.Event rather than the (read-only) native event 12424 args[ 0 ] = event; 12425 12426 for ( i = 1; i < arguments.length; i++ ) { 12427 args[ i ] = arguments[ i ]; 12428 } 12429 12430 event.delegateTarget = this; 12431 12432 // Call the preDispatch hook for the mapped type, and let it bail if desired 12433 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 12434 return; 12435 } 12436 12437 // Determine handlers 12438 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 12439 12440 // Run delegates first; they may want to stop propagation beneath us 12441 i = 0; 12442 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 12443 event.currentTarget = matched.elem; 12444 12445 j = 0; 12446 while ( ( handleObj = matched.handlers[ j++ ] ) && 12447 !event.isImmediatePropagationStopped() ) { 12448 12449 // If the event is namespaced, then each handler is only invoked if it is 12450 // specially universal or its namespaces are a superset of the event's. 12451 if ( !event.rnamespace || handleObj.namespace === false || 12452 event.rnamespace.test( handleObj.namespace ) ) { 12453 12454 event.handleObj = handleObj; 12455 event.data = handleObj.data; 12456 12457 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 12458 handleObj.handler ).apply( matched.elem, args ); 12459 12460 if ( ret !== undefined ) { 12461 if ( ( event.result = ret ) === false ) { 12462 event.preventDefault(); 12463 event.stopPropagation(); 12464 } 12465 } 12466 } 12467 } 12468 } 12469 12470 // Call the postDispatch hook for the mapped type 12471 if ( special.postDispatch ) { 12472 special.postDispatch.call( this, event ); 12473 } 12474 12475 return event.result; 12476 }, 12477 12478 handlers: function( event, handlers ) { 12479 var i, handleObj, sel, matchedHandlers, matchedSelectors, 12480 handlerQueue = [], 12481 delegateCount = handlers.delegateCount, 12482 cur = event.target; 12483 12484 // Find delegate handlers 12485 if ( delegateCount && 12486
vendor: 21,304 bytes, lines 12487-13247
12487 // Support: IE <=9 12488 // Black-hole SVG <use> instance trees (trac-13180) 12489 cur.nodeType && 12490 12491 // Support: Firefox <=42 12492 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 12493 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 12494 // Support: IE 11 only 12495 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 12496 !( event.type === "click" && event.button >= 1 ) ) { 12497 12498 for ( ; cur !== this; cur = cur.parentNode || this ) { 12499 12500 // Don't check non-elements (trac-13208) 12501 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 12502 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 12503 matchedHandlers = []; 12504 matchedSelectors = {}; 12505 for ( i = 0; i < delegateCount; i++ ) { 12506 handleObj = handlers[ i ]; 12507 12508 // Don't conflict with Object.prototype properties (trac-13203) 12509 sel = handleObj.selector + " "; 12510 12511 if ( matchedSelectors[ sel ] === undefined ) { 12512 matchedSelectors[ sel ] = handleObj.needsContext ? 12513 jQuery( sel, this ).index( cur ) > -1 : 12514 jQuery.find( sel, this, null, [ cur ] ).length; 12515 } 12516 if ( matchedSelectors[ sel ] ) { 12517 matchedHandlers.push( handleObj ); 12518 } 12519 } 12520 if ( matchedHandlers.length ) { 12521 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 12522 } 12523 } 12524 } 12525 } 12526 12527 // Add the remaining (directly-bound) handlers 12528 cur = this; 12529 if ( delegateCount < handlers.length ) { 12530 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 12531 } 12532 12533 return handlerQueue; 12534 }, 12535 12536 addProp: function( name, hook ) { 12537 Object.defineProperty( jQuery.Event.prototype, name, { 12538 enumerable: true, 12539 configurable: true, 12540 12541 get: isFunction( hook ) ? 12542 function() { 12543 if ( this.originalEvent ) { 12544 return hook( this.originalEvent ); 12545 } 12546 } : 12547 function() { 12548 if ( this.originalEvent ) { 12549 return this.originalEvent[ name ]; 12550 } 12551 }, 12552 12553 set: function( value ) { 12554 Object.defineProperty( this, name, { 12555 enumerable: true, 12556 configurable: true, 12557 writable: true, 12558 value: value 12559 } ); 12560 } 12561 } ); 12562 }, 12563 12564 fix: function( originalEvent ) { 12565 return originalEvent[ jQuery.expando ] ? 12566 originalEvent : 12567 new jQuery.Event( originalEvent ); 12568 }, 12569 12570 special: { 12571 load: { 12572 12573 // Prevent triggered image.load events from bubbling to window.load 12574 noBubble: true 12575 }, 12576 click: { 12577 12578 // Utilize native event to ensure correct state for checkable inputs 12579 setup: function( data ) { 12580 12581 // For mutual compressibility with _default, replace `this` access with a local var. 12582 // `|| data` is dead code meant only to preserve the variable through minification. 12583 var el = this || data; 12584 12585 // Claim the first handler 12586 if ( rcheckableType.test( el.type ) && 12587 el.click && nodeName( el, "input" ) ) { 12588 12589 // dataPriv.set( el, "click", ... ) 12590 leverageNative( el, "click", returnTrue ); 12591 } 12592 12593 // Return false to allow normal processing in the caller 12594 return false; 12595 }, 12596 trigger: function( data ) { 12597 12598 // For mutual compressibility with _default, replace `this` access with a local var. 12599 // `|| data` is dead code meant only to preserve the variable through minification. 12600 var el = this || data; 12601 12602 // Force setup before triggering a click 12603 if ( rcheckableType.test( el.type ) && 12604 el.click && nodeName( el, "input" ) ) { 12605 12606 leverageNative( el, "click" ); 12607 } 12608 12609 // Return non-false to allow normal event-path propagation 12610 return true; 12611 }, 12612 12613 // For cross-browser consistency, suppress native .click() on links 12614 // Also prevent it if we're currently inside a leveraged native-event stack 12615 _default: function( event ) { 12616 var target = event.target; 12617 return rcheckableType.test( target.type ) && 12618 target.click && nodeName( target, "input" ) && 12619 dataPriv.get( target, "click" ) || 12620 nodeName( target, "a" ); 12621 } 12622 }, 12623 12624 beforeunload: { 12625 postDispatch: function( event ) { 12626 12627 // Support: Firefox 20+ 12628 // Firefox doesn't alert if the returnValue field is not set. 12629 if ( event.result !== undefined && event.originalEvent ) { 12630 event.originalEvent.returnValue = event.result; 12631 } 12632 } 12633 } 12634 } 12635}; 12636 12637// Ensure the presence of an event listener that handles manually-triggered 12638// synthetic events by interrupting progress until reinvoked in response to 12639// *native* events that it fires directly, ensuring that state changes have 12640// already occurred before other listeners are invoked. 12641function leverageNative( el, type, expectSync ) { 12642 12643 // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add 12644 if ( !expectSync ) { 12645 if ( dataPriv.get( el, type ) === undefined ) { 12646 jQuery.event.add( el, type, returnTrue ); 12647 } 12648 return; 12649 } 12650 12651 // Register the controller as a special universal handler for all event namespaces 12652 dataPriv.set( el, type, false ); 12653 jQuery.event.add( el, type, { 12654 namespace: false, 12655 handler: function( event ) { 12656 var notAsync, result, 12657 saved = dataPriv.get( this, type ); 12658 12659 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 12660 12661 // Interrupt processing of the outer synthetic .trigger()ed event 12662 // Saved data should be false in such cases, but might be a leftover capture object 12663 // from an async native handler (gh-4350) 12664 if ( !saved.length ) { 12665 12666 // Store arguments for use when handling the inner native event 12667 // There will always be at least one argument (an event object), so this array 12668 // will not be confused with a leftover capture object. 12669 saved = slice.call( arguments ); 12670 dataPriv.set( this, type, saved ); 12671 12672 // Trigger the native event and capture its result 12673 // Support: IE <=9 - 11+ 12674 // focus() and blur() are asynchronous 12675 notAsync = expectSync( this, type ); 12676 this[ type ](); 12677 result = dataPriv.get( this, type ); 12678 if ( saved !== result || notAsync ) { 12679 dataPriv.set( this, type, false ); 12680 } else { 12681 result = {}; 12682 } 12683 if ( saved !== result ) { 12684 12685 // Cancel the outer synthetic event 12686 event.stopImmediatePropagation(); 12687 event.preventDefault(); 12688 12689 // Support: Chrome 86+ 12690 // In Chrome, if an element having a focusout handler is blurred by 12691 // clicking outside of it, it invokes the handler synchronously. If 12692 // that handler calls `.remove()` on the element, the data is cleared, 12693 // leaving `result` undefined. We need to guard against this. 12694 return result && result.value; 12695 } 12696 12697 // If this is an inner synthetic event for an event with a bubbling surrogate 12698 // (focus or blur), assume that the surrogate already propagated from triggering the 12699 // native event and prevent that from happening again here. 12700 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 12701 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 12702 // less bad than duplication. 12703 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 12704 event.stopPropagation(); 12705 } 12706 12707 // If this is a native event triggered above, everything is now in order 12708 // Fire an inner synthetic event with the original arguments 12709 } else if ( saved.length ) { 12710 12711 // ...and capture the result 12712 dataPriv.set( this, type, { 12713 value: jQuery.event.trigger( 12714 12715 // Support: IE <=9 - 11+ 12716 // Extend with the prototype to reset the above stopImmediatePropagation() 12717 jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), 12718 saved.slice( 1 ), 12719 this 12720 ) 12721 } ); 12722 12723 // Abort handling of the native event 12724 event.stopImmediatePropagation(); 12725 } 12726 } 12727 } ); 12728} 12729 12730jQuery.removeEvent = function( elem, type, handle ) { 12731 12732 // This "if" is needed for plain objects 12733 if ( elem.removeEventListener ) { 12734 elem.removeEventListener( type, handle ); 12735 } 12736}; 12737 12738jQuery.Event = function( src, props ) { 12739 12740 // Allow instantiation without the 'new' keyword 12741 if ( !( this instanceof jQuery.Event ) ) { 12742 return new jQuery.Event( src, props ); 12743 } 12744 12745 // Event object 12746 if ( src && src.type ) { 12747 this.originalEvent = src; 12748 this.type = src.type; 12749 12750 // Events bubbling up the document may have been marked as prevented 12751 // by a handler lower down the tree; reflect the correct value. 12752 this.isDefaultPrevented = src.defaultPrevented || 12753 src.defaultPrevented === undefined && 12754 12755 // Support: Android <=2.3 only 12756 src.returnValue === false ? 12757 returnTrue : 12758 returnFalse; 12759 12760 // Create target properties 12761 // Support: Safari <=6 - 7 only 12762 // Target should not be a text node (trac-504, trac-13143) 12763 this.target = ( src.target && src.target.nodeType === 3 ) ? 12764 src.target.parentNode : 12765 src.target; 12766 12767 this.currentTarget = src.currentTarget; 12768 this.relatedTarget = src.relatedTarget; 12769 12770 // Event type 12771 } else { 12772 this.type = src; 12773 } 12774 12775 // Put explicitly provided properties onto the event object 12776 if ( props ) { 12777 jQuery.extend( this, props ); 12778 } 12779 12780 // Create a timestamp if incoming event doesn't have one 12781 this.timeStamp = src && src.timeStamp || Date.now(); 12782 12783 // Mark it as fixed 12784 this[ jQuery.expando ] = true; 12785}; 12786 12787// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 12788// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 12789jQuery.Event.prototype = { 12790 constructor: jQuery.Event, 12791 isDefaultPrevented: returnFalse, 12792 isPropagationStopped: returnFalse, 12793 isImmediatePropagationStopped: returnFalse, 12794 isSimulated: false, 12795 12796 preventDefault: function() { 12797 var e = this.originalEvent; 12798 12799 this.isDefaultPrevented = returnTrue; 12800 12801 if ( e && !this.isSimulated ) { 12802 e.preventDefault(); 12803 } 12804 }, 12805 stopPropagation: function() { 12806 var e = this.originalEvent; 12807 12808 this.isPropagationStopped = returnTrue; 12809 12810 if ( e && !this.isSimulated ) { 12811 e.stopPropagation(); 12812 } 12813 }, 12814 stopImmediatePropagation: function() { 12815 var e = this.originalEvent; 12816 12817 this.isImmediatePropagationStopped = returnTrue; 12818 12819 if ( e && !this.isSimulated ) { 12820 e.stopImmediatePropagation(); 12821 } 12822 12823 this.stopPropagation(); 12824 } 12825}; 12826 12827// Includes all common event props including KeyEvent and MouseEvent specific props 12828jQuery.each( { 12829 altKey: true, 12830 bubbles: true, 12831 cancelable: true, 12832 changedTouches: true, 12833 ctrlKey: true, 12834 detail: true, 12835 eventPhase: true, 12836 metaKey: true, 12837 pageX: true, 12838 pageY: true, 12839 shiftKey: true, 12840 view: true, 12841 "char": true, 12842 code: true, 12843 charCode: true, 12844 key: true, 12845 keyCode: true, 12846 button: true, 12847 buttons: true, 12848 clientX: true, 12849 clientY: true, 12850 offsetX: true, 12851 offsetY: true, 12852 pointerId: true, 12853 pointerType: true, 12854 screenX: true, 12855 screenY: true, 12856 targetTouches: true, 12857 toElement: true, 12858 touches: true, 12859 which: true 12860}, jQuery.event.addProp ); 12861 12862jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 12863 jQuery.event.special[ type ] = { 12864 12865 // Utilize native event if possible so blur/focus sequence is correct 12866 setup: function() { 12867 12868 // Claim the first handler 12869 // dataPriv.set( this, "focus", ... ) 12870 // dataPriv.set( this, "blur", ... ) 12871 leverageNative( this, type, expectSync ); 12872 12873 // Return false to allow normal processing in the caller 12874 return false; 12875 }, 12876 trigger: function() { 12877 12878 // Force setup before trigger 12879 leverageNative( this, type ); 12880 12881 // Return non-false to allow normal event-path propagation 12882 return true; 12883 }, 12884 12885 // Suppress native focus or blur if we're currently inside 12886 // a leveraged native-event stack 12887 _default: function( event ) { 12888 return dataPriv.get( event.target, type ); 12889 }, 12890 12891 delegateType: delegateType 12892 }; 12893} ); 12894 12895// Create mouseenter/leave events using mouseover/out and event-time checks 12896// so that event delegation works in jQuery. 12897// Do the same for pointerenter/pointerleave and pointerover/pointerout 12898// 12899// Support: Safari 7 only 12900// Safari sends mouseenter too often; see: 12901// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 12902// for the description of the bug (it existed in older Chrome versions as well). 12903jQuery.each( { 12904 mouseenter: "mouseover", 12905 mouseleave: "mouseout", 12906 pointerenter: "pointerover", 12907 pointerleave: "pointerout" 12908}, function( orig, fix ) { 12909 jQuery.event.special[ orig ] = { 12910 delegateType: fix, 12911 bindType: fix, 12912 12913 handle: function( event ) { 12914 var ret, 12915 target = this, 12916 related = event.relatedTarget, 12917 handleObj = event.handleObj; 12918 12919 // For mouseenter/leave call the handler if related is outside the target. 12920 // NB: No relatedTarget if the mouse left/entered the browser window 12921 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 12922 event.type = handleObj.origType; 12923 ret = handleObj.handler.apply( this, arguments ); 12924 event.type = fix; 12925 } 12926 return ret; 12927 } 12928 }; 12929} ); 12930 12931jQuery.fn.extend( { 12932 12933 on: function( types, selector, data, fn ) { 12934 return on( this, types, selector, data, fn ); 12935 }, 12936 one: function( types, selector, data, fn ) { 12937 return on( this, types, selector, data, fn, 1 ); 12938 }, 12939 off: function( types, selector, fn ) { 12940 var handleObj, type; 12941 if ( types && types.preventDefault && types.handleObj ) { 12942 12943 // ( event ) dispatched jQuery.Event 12944 handleObj = types.handleObj; 12945 jQuery( types.delegateTarget ).off( 12946 handleObj.namespace ? 12947 handleObj.origType + "." + handleObj.namespace : 12948 handleObj.origType, 12949 handleObj.selector, 12950 handleObj.handler 12951 ); 12952 return this; 12953 } 12954 if ( typeof types === "object" ) { 12955 12956 // ( types-object [, selector] ) 12957 for ( type in types ) { 12958 this.off( type, selector, types[ type ] ); 12959 } 12960 return this; 12961 } 12962 if ( selector === false || typeof selector === "function" ) { 12963 12964 // ( types [, fn] ) 12965 fn = selector; 12966 selector = undefined; 12967 } 12968 if ( fn === false ) { 12969 fn = returnFalse; 12970 } 12971 return this.each( function() { 12972 jQuery.event.remove( this, types, fn, selector ); 12973 } ); 12974 } 12975} ); 12976 12977 12978var 12979 12980 // Support: IE <=10 - 11, Edge 12 - 13 only 12981 // In IE/Edge using regex groups here causes severe slowdowns. 12982 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 12983 rnoInnerhtml = /<script|<style|<link/i, 12984 12985 // checked="checked" or checked 12986 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 12987 12988 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 12989 12990// Prefer a tbody over its parent table for containing new rows 12991function manipulationTarget( elem, content ) { 12992 if ( nodeName( elem, "table" ) && 12993 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 12994 12995 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 12996 } 12997 12998 return elem; 12999} 13000 13001// Replace/restore the type attribute of script elements for safe DOM manipulation 13002function disableScript( elem ) { 13003 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 13004 return elem; 13005} 13006function restoreScript( elem ) { 13007 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 13008 elem.type = elem.type.slice( 5 ); 13009 } else { 13010 elem.removeAttribute( "type" ); 13011 } 13012 13013 return elem; 13014} 13015 13016function cloneCopyEvent( src, dest ) { 13017 var i, l, type, pdataOld, udataOld, udataCur, events; 13018 13019 if ( dest.nodeType !== 1 ) { 13020 return; 13021 } 13022 13023 // 1. Copy private data: events, handlers, etc. 13024 if ( dataPriv.hasData( src ) ) { 13025 pdataOld = dataPriv.get( src ); 13026 events = pdataOld.events; 13027 13028 if ( events ) { 13029 dataPriv.remove( dest, "handle events" ); 13030 13031 for ( type in events ) { 13032 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 13033 jQuery.event.add( dest, type, events[ type ][ i ] ); 13034 } 13035 } 13036 } 13037 } 13038 13039 // 2. Copy user data 13040 if ( dataUser.hasData( src ) ) { 13041 udataOld = dataUser.access( src ); 13042 udataCur = jQuery.extend( {}, udataOld ); 13043 13044 dataUser.set( dest, udataCur ); 13045 } 13046} 13047 13048// Fix IE bugs, see support tests 13049function fixInput( src, dest ) { 13050 var nodeName = dest.nodeName.toLowerCase(); 13051 13052 // Fails to persist the checked state of a cloned checkbox or radio button. 13053 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 13054 dest.checked = src.checked; 13055 13056 // Fails to return the selected option to the default selected state when cloning options 13057 } else if ( nodeName === "input" || nodeName === "textarea" ) { 13058 dest.defaultValue = src.defaultValue; 13059 } 13060} 13061 13062function domManip( collection, args, callback, ignored ) { 13063 13064 // Flatten any nested arrays 13065 args = flat( args ); 13066 13067 var fragment, first, scripts, hasScripts, node, doc, 13068 i = 0, 13069 l = collection.length, 13070 iNoClone = l - 1, 13071 value = args[ 0 ], 13072 valueIsFunction = isFunction( value ); 13073 13074 // We can't cloneNode fragments that contain checked, in WebKit 13075 if ( valueIsFunction || 13076 ( l > 1 && typeof value === "string" && 13077 !support.checkClone && rchecked.test( value ) ) ) { 13078 return collection.each( function( index ) { 13079 var self = collection.eq( index ); 13080 if ( valueIsFunction ) { 13081 args[ 0 ] = value.call( this, index, self.html() ); 13082 } 13083 domManip( self, args, callback, ignored ); 13084 } ); 13085 } 13086 13087 if ( l ) { 13088 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 13089 first = fragment.firstChild; 13090 13091 if ( fragment.childNodes.length === 1 ) { 13092 fragment = first; 13093 } 13094 13095 // Require either new content or an interest in ignored elements to invoke the callback 13096 if ( first || ignored ) { 13097 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 13098 hasScripts = scripts.length; 13099 13100 // Use the original fragment for the last item 13101 // instead of the first because it can end up 13102 // being emptied incorrectly in certain situations (trac-8070). 13103 for ( ; i < l; i++ ) { 13104 node = fragment; 13105 13106 if ( i !== iNoClone ) { 13107 node = jQuery.clone( node, true, true ); 13108 13109 // Keep references to cloned scripts for later restoration 13110 if ( hasScripts ) { 13111 13112 // Support: Android <=4.0 only, PhantomJS 1 only 13113 // push.apply(_, arraylike) throws on ancient WebKit 13114 jQuery.merge( scripts, getAll( node, "script" ) ); 13115 } 13116 } 13117 13118 callback.call( collection[ i ], node, i ); 13119 } 13120 13121 if ( hasScripts ) { 13122 doc = scripts[ scripts.length - 1 ].ownerDocument; 13123 13124 // Reenable scripts 13125 jQuery.map( scripts, restoreScript ); 13126 13127 // Evaluate executable scripts on first document insertion 13128 for ( i = 0; i < hasScripts; i++ ) { 13129 node = scripts[ i ]; 13130 if ( rscriptType.test( node.type || "" ) && 13131 !dataPriv.access( node, "globalEval" ) && 13132 jQuery.contains( doc, node ) ) { 13133 13134 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 13135 13136 // Optional AJAX dependency, but won't run scripts if not present 13137 if ( jQuery._evalUrl && !node.noModule ) { 13138 jQuery._evalUrl( node.src, { 13139 nonce: node.nonce || node.getAttribute( "nonce" ) 13140 }, doc ); 13141 } 13142 } else { 13143 13144 // Unwrap a CDATA section containing script contents. This shouldn't be 13145 // needed as in XML documents they're already not visible when 13146 // inspecting element contents and in HTML documents they have no 13147 // meaning but we're preserving that logic for backwards compatibility. 13148 // This will be removed completely in 4.0. See gh-4904. 13149 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 13150 } 13151 } 13152 } 13153 } 13154 } 13155 } 13156 13157 return collection; 13158} 13159 13160function remove( elem, selector, keepData ) { 13161 var node, 13162 nodes = selector ? jQuery.filter( selector, elem ) : elem, 13163 i = 0; 13164 13165 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 13166 if ( !keepData && node.nodeType === 1 ) { 13167 jQuery.cleanData( getAll( node ) ); 13168 } 13169 13170 if ( node.parentNode ) { 13171 if ( keepData && isAttached( node ) ) { 13172 setGlobalEval( getAll( node, "script" ) ); 13173 } 13174 node.parentNode.removeChild( node ); 13175 } 13176 } 13177 13178 return elem; 13179} 13180 13181jQuery.extend( { 13182 htmlPrefilter: function( html ) { 13183 return html; 13184 }, 13185 13186 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 13187 var i, l, srcElements, destElements, 13188 clone = elem.cloneNode( true ), 13189 inPage = isAttached( elem ); 13190 13191 // Fix IE cloning issues 13192 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 13193 !jQuery.isXMLDoc( elem ) ) { 13194 13195 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 13196 destElements = getAll( clone ); 13197 srcElements = getAll( elem ); 13198 13199 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13200 fixInput( srcElements[ i ], destElements[ i ] ); 13201 } 13202 } 13203 13204 // Copy the events from the original to the clone 13205 if ( dataAndEvents ) { 13206 if ( deepDataAndEvents ) { 13207 srcElements = srcElements || getAll( elem ); 13208 destElements = destElements || getAll( clone ); 13209 13210 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13211 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 13212 } 13213 } else { 13214 cloneCopyEvent( elem, clone ); 13215 } 13216 } 13217 13218 // Preserve script evaluation history 13219 destElements = getAll( clone, "script" ); 13220 if ( destElements.length > 0 ) { 13221 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 13222 } 13223 13224 // Return the cloned set 13225 return clone; 13226 }, 13227 13228 cleanData: function( elems ) { 13229 var data, elem, type, 13230 special = jQuery.event.special, 13231 i = 0; 13232 13233 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 13234 if ( acceptData( elem ) ) { 13235 if ( ( data = elem[ dataPriv.expando ] ) ) { 13236 if ( data.events ) { 13237 for ( type in data.events ) { 13238 if ( special[ type ] ) { 13239 jQuery.event.remove( elem, type ); 13240 13241 // This is a shortcut to avoid jQuery.event.remove's overhead 13242 } else { 13243 jQuery.removeEvent( elem, type, data.handle ); 13244 } 13245 } 13246 } 13247
vendor: 1,119 bytes, lines 13248-13292
13248 // Support: Chrome <=35 - 45+ 13249 // Assign undefined instead of using delete, see Data#remove 13250 elem[ dataPriv.expando ] = undefined; 13251 } 13252 if ( elem[ dataUser.expando ] ) { 13253 13254 // Support: Chrome <=35 - 45+ 13255 // Assign undefined instead of using delete, see Data#remove 13256 elem[ dataUser.expando ] = undefined; 13257 } 13258 } 13259 } 13260 } 13261} ); 13262 13263jQuery.fn.extend( { 13264 detach: function( selector ) { 13265 return remove( this, selector, true ); 13266 }, 13267 13268 remove: function( selector ) { 13269 return remove( this, selector ); 13270 }, 13271 13272 text: function( value ) { 13273 return access( this, function( value ) { 13274 return value === undefined ? 13275 jQuery.text( this ) : 13276 this.empty().each( function() { 13277 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13278 this.textContent = value; 13279 } 13280 } ); 13281 }, null, value, arguments.length ); 13282 }, 13283 13284 append: function() { 13285 return domManip( this, arguments, function( elem ) { 13286 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13287 var target = manipulationTarget( this, elem ); 13288 target.appendChild( elem ); 13289 } 13290 } ); 13291 }, 13292
vendor: 4,664 bytes, lines 13293-13493
13293 prepend: function() { 13294 return domManip( this, arguments, function( elem ) { 13295 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13296 var target = manipulationTarget( this, elem ); 13297 target.insertBefore( elem, target.firstChild ); 13298 } 13299 } ); 13300 }, 13301 13302 before: function() { 13303 return domManip( this, arguments, function( elem ) { 13304 if ( this.parentNode ) { 13305 this.parentNode.insertBefore( elem, this ); 13306 } 13307 } ); 13308 }, 13309 13310 after: function() { 13311 return domManip( this, arguments, function( elem ) { 13312 if ( this.parentNode ) { 13313 this.parentNode.insertBefore( elem, this.nextSibling ); 13314 } 13315 } ); 13316 }, 13317 13318 empty: function() { 13319 var elem, 13320 i = 0; 13321 13322 for ( ; ( elem = this[ i ] ) != null; i++ ) { 13323 if ( elem.nodeType === 1 ) { 13324 13325 // Prevent memory leaks 13326 jQuery.cleanData( getAll( elem, false ) ); 13327 13328 // Remove any remaining nodes 13329 elem.textContent = ""; 13330 } 13331 } 13332 13333 return this; 13334 }, 13335 13336 clone: function( dataAndEvents, deepDataAndEvents ) { 13337 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 13338 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 13339 13340 return this.map( function() { 13341 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 13342 } ); 13343 }, 13344 13345 html: function( value ) { 13346 return access( this, function( value ) { 13347 var elem = this[ 0 ] || {}, 13348 i = 0, 13349 l = this.length; 13350 13351 if ( value === undefined && elem.nodeType === 1 ) { 13352 return elem.innerHTML; 13353 } 13354 13355 // See if we can take a shortcut and just use innerHTML 13356 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 13357 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 13358 13359 value = jQuery.htmlPrefilter( value ); 13360 13361 try { 13362 for ( ; i < l; i++ ) { 13363 elem = this[ i ] || {}; 13364 13365 // Remove element nodes and prevent memory leaks 13366 if ( elem.nodeType === 1 ) { 13367 jQuery.cleanData( getAll( elem, false ) ); 13368 elem.innerHTML = value; 13369 } 13370 } 13371 13372 elem = 0; 13373 13374 // If using innerHTML throws an exception, use the fallback method 13375 } catch ( e ) {} 13376 } 13377 13378 if ( elem ) { 13379 this.empty().append( value ); 13380 } 13381 }, null, value, arguments.length ); 13382 }, 13383 13384 replaceWith: function() { 13385 var ignored = []; 13386 13387 // Make the changes, replacing each non-ignored context element with the new content 13388 return domManip( this, arguments, function( elem ) { 13389 var parent = this.parentNode; 13390 13391 if ( jQuery.inArray( this, ignored ) < 0 ) { 13392 jQuery.cleanData( getAll( this ) ); 13393 if ( parent ) { 13394 parent.replaceChild( elem, this ); 13395 } 13396 } 13397 13398 // Force callback invocation 13399 }, ignored ); 13400 } 13401} ); 13402 13403jQuery.each( { 13404 appendTo: "append", 13405 prependTo: "prepend", 13406 insertBefore: "before", 13407 insertAfter: "after", 13408 replaceAll: "replaceWith" 13409}, function( name, original ) { 13410 jQuery.fn[ name ] = function( selector ) { 13411 var elems, 13412 ret = [], 13413 insert = jQuery( selector ), 13414 last = insert.length - 1, 13415 i = 0; 13416 13417 for ( ; i <= last; i++ ) { 13418 elems = i === last ? this : this.clone( true ); 13419 jQuery( insert[ i ] )[ original ]( elems ); 13420 13421 // Support: Android <=4.0 only, PhantomJS 1 only 13422 // .get() because push.apply(_, arraylike) throws on ancient WebKit 13423 push.apply( ret, elems.get() ); 13424 } 13425 13426 return this.pushStack( ret ); 13427 }; 13428} ); 13429var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 13430 13431var rcustomProp = /^--/; 13432 13433 13434var getStyles = function( elem ) { 13435 13436 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 13437 // IE throws on elements created in popups 13438 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 13439 var view = elem.ownerDocument.defaultView; 13440 13441 if ( !view || !view.opener ) { 13442 view = window; 13443 } 13444 13445 return view.getComputedStyle( elem ); 13446 }; 13447 13448var swap = function( elem, options, callback ) { 13449 var ret, name, 13450 old = {}; 13451 13452 // Remember the old values, and insert the new ones 13453 for ( name in options ) { 13454 old[ name ] = elem.style[ name ]; 13455 elem.style[ name ] = options[ name ]; 13456 } 13457 13458 ret = callback.call( elem ); 13459 13460 // Revert the old values 13461 for ( name in options ) { 13462 elem.style[ name ] = old[ name ]; 13463 } 13464 13465 return ret; 13466}; 13467 13468 13469var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 13470 13471var whitespace = "[\\x20\\t\\r\\n\\f]"; 13472 13473 13474var rtrimCSS = new RegExp( 13475 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 13476 "g" 13477); 13478 13479 13480 13481 13482( function() { 13483 13484 // Executing both pixelPosition & boxSizingReliable tests require only one layout 13485 // so they're executed at the same time to save the second computation. 13486 function computeStyleTests() { 13487 13488 // This is a singleton, we need to execute it only once 13489 if ( !div ) { 13490 return; 13491 } 13492 13493 container.style.cssText = "position:absolute;
vendor: 4,131 bytes, lines 13493-13612
13493left:-11111px;width:60px;" + 13494 "margin-top:1px;padding:0;border:0"; 13495 div.style.cssText = 13496 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 13497 "margin:auto;border:1px;padding:1px;" + 13498 "width:60%;top:1%"; 13499 documentElement.appendChild( container ).appendChild( div ); 13500 13501 var divStyle = window.getComputedStyle( div ); 13502 pixelPositionVal = divStyle.top !== "1%"; 13503 13504 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 13505 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 13506 13507 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 13508 // Some styles come back with percentage values, even though they shouldn't 13509 div.style.right = "60%"; 13510 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 13511 13512 // Support: IE 9 - 11 only 13513 // Detect misreporting of content dimensions for box-sizing:border-box elements 13514 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 13515 13516 // Support: IE 9 only 13517 // Detect overflow:scroll screwiness (gh-3699) 13518 // Support: Chrome <=64 13519 // Don't get tricked when zoom affects offsetWidth (gh-4029) 13520 div.style.position = "absolute"; 13521 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 13522 13523 documentElement.removeChild( container ); 13524 13525 // Nullify the div so it wouldn't be stored in the memory and 13526 // it will also be a sign that checks already performed 13527 div = null; 13528 } 13529 13530 function roundPixelMeasures( measure ) { 13531 return Math.round( parseFloat( measure ) ); 13532 } 13533 13534 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 13535 reliableTrDimensionsVal, reliableMarginLeftVal, 13536 container = document.createElement( "div" ), 13537 div = document.createElement( "div" ); 13538 13539 // Finish early in limited (non-browser) environments 13540 if ( !div.style ) { 13541 return; 13542 } 13543 13544 // Support: IE <=9 - 11 only 13545 // Style of cloned element affects source element cloned (trac-8908) 13546 div.style.backgroundClip = "content-box"; 13547 div.cloneNode( true ).style.backgroundClip = ""; 13548 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 13549 13550 jQuery.extend( support, { 13551 boxSizingReliable: function() { 13552 computeStyleTests(); 13553 return boxSizingReliableVal; 13554 }, 13555 pixelBoxStyles: function() { 13556 computeStyleTests(); 13557 return pixelBoxStylesVal; 13558 }, 13559 pixelPosition: function() { 13560 computeStyleTests(); 13561 return pixelPositionVal; 13562 }, 13563 reliableMarginLeft: function() { 13564 computeStyleTests(); 13565 return reliableMarginLeftVal; 13566 }, 13567 scrollboxSize: function() { 13568 computeStyleTests(); 13569 return scrollboxSizeVal; 13570 }, 13571 13572 // Support: IE 9 - 11+, Edge 15 - 18+ 13573 // IE/Edge misreport `getComputedStyle` of table rows with width/height 13574 // set in CSS while `offset*` properties report correct values. 13575 // Behavior in IE 9 is more subtle than in newer versions & it passes 13576 // some versions of this test; make sure not to make it pass there! 13577 // 13578 // Support: Firefox 70+ 13579 // Only Firefox includes border widths 13580 // in computed dimensions. (gh-4529) 13581 reliableTrDimensions: function() { 13582 var table, tr, trChild, trStyle; 13583 if ( reliableTrDimensionsVal == null ) { 13584 table = document.createElement( "table" ); 13585 tr = document.createElement( "tr" ); 13586 trChild = document.createElement( "div" ); 13587 13588 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 13589 tr.style.cssText = "border:1px solid"; 13590 13591 // Support: Chrome 86+ 13592 // Height set through cssText does not get applied. 13593 // Computed height then comes back as 0. 13594 tr.style.height = "1px"; 13595 trChild.style.height = "9px"; 13596 13597 // Support: Android 8 Chrome 86+ 13598 // In our bodyBackground.html iframe, 13599 // display for all div elements is set to "inline", 13600 // which causes a problem only in Android 8 Chrome 86. 13601 // Ensuring the div is display: block 13602 // gets around this issue. 13603 trChild.style.display = "block"; 13604 13605 documentElement 13606 .appendChild( table ) 13607 .appendChild( tr ) 13608 .appendChild( trChild ); 13609 13610 trStyle = window.getComputedStyle( tr ); 13611 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 13612 parseInt( trStyle.borderTopWidth, 10 ) +
vendor: 11,424 bytes, lines 13613-14007
13613 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 13614 13615 documentElement.removeChild( table ); 13616 } 13617 return reliableTrDimensionsVal; 13618 } 13619 } ); 13620} )(); 13621 13622 13623function curCSS( elem, name, computed ) { 13624 var width, minWidth, maxWidth, ret, 13625 isCustomProp = rcustomProp.test( name ), 13626 13627 // Support: Firefox 51+ 13628 // Retrieving style before computed somehow 13629 // fixes an issue with getting wrong values 13630 // on detached elements 13631 style = elem.style; 13632 13633 computed = computed || getStyles( elem ); 13634 13635 // getPropertyValue is needed for: 13636 // .css('filter') (IE 9 only, trac-12537) 13637 // .css('--customProperty) (gh-3144) 13638 if ( computed ) { 13639 ret = computed.getPropertyValue( name ) || computed[ name ]; 13640 13641 // trim whitespace for custom property (issue gh-4926) 13642 if ( isCustomProp ) { 13643 13644 // rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED 13645 // as whitespace while CSS does not, but this is not a problem 13646 // because CSS preprocessing replaces them with U+000A LINE FEED 13647 // (which *is* CSS whitespace) 13648 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 13649 ret = ret.replace( rtrimCSS, "$1" ); 13650 } 13651 13652 if ( ret === "" && !isAttached( elem ) ) { 13653 ret = jQuery.style( elem, name ); 13654 } 13655 13656 // A tribute to the "awesome hack by Dean Edwards" 13657 // Android Browser returns percentage for some values, 13658 // but width seems to be reliably pixels. 13659 // This is against the CSSOM draft spec: 13660 // https://drafts.csswg.org/cssom/#resolved-values 13661 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 13662 13663 // Remember the original values 13664 width = style.width; 13665 minWidth = style.minWidth; 13666 maxWidth = style.maxWidth; 13667 13668 // Put in the new values to get a computed value out 13669 style.minWidth = style.maxWidth = style.width = ret; 13670 ret = computed.width; 13671 13672 // Revert the changed values 13673 style.width = width; 13674 style.minWidth = minWidth; 13675 style.maxWidth = maxWidth; 13676 } 13677 } 13678 13679 return ret !== undefined ? 13680 13681 // Support: IE <=9 - 11 only 13682 // IE returns zIndex value as an integer. 13683 ret + "" : 13684 ret; 13685} 13686 13687 13688function addGetHookIf( conditionFn, hookFn ) { 13689 13690 // Define the hook, we'll check on the first run if it's really needed. 13691 return { 13692 get: function() { 13693 if ( conditionFn() ) { 13694 13695 // Hook not needed (or it's not possible to use it due 13696 // to missing dependency), remove it. 13697 delete this.get; 13698 return; 13699 } 13700 13701 // Hook needed; redefine it so that the support test is not executed again. 13702 return ( this.get = hookFn ).apply( this, arguments ); 13703 } 13704 }; 13705} 13706 13707 13708var cssPrefixes = [ "Webkit", "Moz", "ms" ], 13709 emptyStyle = document.createElement( "div" ).style, 13710 vendorProps = {}; 13711 13712// Return a vendor-prefixed property or undefined 13713function vendorPropName( name ) { 13714 13715 // Check for vendor prefixed names 13716 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 13717 i = cssPrefixes.length; 13718 13719 while ( i-- ) { 13720 name = cssPrefixes[ i ] + capName; 13721 if ( name in emptyStyle ) { 13722 return name; 13723 } 13724 } 13725} 13726 13727// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 13728function finalPropName( name ) { 13729 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 13730 13731 if ( final ) { 13732 return final; 13733 } 13734 if ( name in emptyStyle ) { 13735 return name; 13736 } 13737 return vendorProps[ name ] = vendorPropName( name ) || name; 13738} 13739 13740 13741var 13742 13743 // Swappable if display is none or starts with table 13744 // except "table", "table-cell", or "table-caption" 13745 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 13746 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 13747 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 13748 cssNormalTransform = { 13749 letterSpacing: "0", 13750 fontWeight: "400" 13751 }; 13752 13753function setPositiveNumber( _elem, value, subtract ) { 13754 13755 // Any relative (+/-) values have already been 13756 // normalized at this point 13757 var matches = rcssNum.exec( value ); 13758 return matches ? 13759 13760 // Guard against undefined "subtract", e.g., when used as in cssHooks 13761 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 13762 value; 13763} 13764 13765function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 13766 var i = dimension === "width" ? 1 : 0, 13767 extra = 0, 13768 delta = 0; 13769 13770 // Adjustment may not be necessary 13771 if ( box === ( isBorderBox ? "border" : "content" ) ) { 13772 return 0; 13773 } 13774 13775 for ( ; i < 4; i += 2 ) { 13776 13777 // Both box models exclude margin 13778 if ( box === "margin" ) { 13779 delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 13780 } 13781 13782 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 13783 if ( !isBorderBox ) { 13784 13785 // Add padding 13786 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 13787 13788 // For "border" or "margin", add border 13789 if ( box !== "padding" ) { 13790 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 13791 13792 // But still keep track of it otherwise 13793 } else { 13794 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 13795 } 13796 13797 // If we get here with a border-box (content + padding + border), we're seeking "content" or 13798 // "padding" or "margin" 13799 } else { 13800 13801 // For "content", subtract padding 13802 if ( box === "content" ) { 13803 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 13804 } 13805 13806 // For "content" or "padding", subtract border 13807 if ( box !== "margin" ) { 13808 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 13809 } 13810 } 13811 } 13812 13813 // Account for positive content-box scroll gutter when requested by providing computedVal 13814 if ( !isBorderBox && computedVal >= 0 ) { 13815 13816 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 13817 // Assuming integer scroll gutter, subtract the rest and round down 13818 delta += Math.max( 0, Math.ceil( 13819 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 13820 computedVal - 13821 delta - 13822 extra - 13823 0.5 13824 13825 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 13826 // Use an explicit zero to avoid NaN (gh-3964) 13827 ) ) || 0; 13828 } 13829 13830 return delta; 13831} 13832 13833function getWidthOrHeight( elem, dimension, extra ) { 13834 13835 // Start with computed style 13836 var styles = getStyles( elem ), 13837 13838 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 13839 // Fake content-box until we know it's needed to know the true value. 13840 boxSizingNeeded = !support.boxSizingReliable() || extra, 13841 isBorderBox = boxSizingNeeded && 13842 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 13843 valueIsBorderBox = isBorderBox, 13844 13845 val = curCSS( elem, dimension, styles ), 13846 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 13847 13848 // Support: Firefox <=54 13849 // Return a confounding non-pixel value or feign ignorance, as appropriate. 13850 if ( rnumnonpx.test( val ) ) { 13851 if ( !extra ) { 13852 return val; 13853 } 13854 val = "auto"; 13855 } 13856 13857 13858 // Support: IE 9 - 11 only 13859 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 13860 // In those cases, the computed value can be trusted to be border-box. 13861 if ( ( !support.boxSizingReliable() && isBorderBox || 13862 13863 // Support: IE 10 - 11+, Edge 15 - 18+ 13864 // IE/Edge misreport `getComputedStyle` of table rows with width/height 13865 // set in CSS while `offset*` properties report correct values. 13866 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 13867 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 13868 13869 // Fall back to offsetWidth/offsetHeight when value is "auto" 13870 // This happens for inline elements with no explicit setting (gh-3571) 13871 val === "auto" || 13872 13873 // Support: Android <=4.1 - 4.3 only 13874 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 13875 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 13876 13877 // Make sure the element is visible & connected 13878 elem.getClientRects().length ) { 13879 13880 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 13881 13882 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 13883 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 13884 // retrieved value as a content box dimension. 13885 valueIsBorderBox = offsetProp in elem; 13886 if ( valueIsBorderBox ) { 13887 val = elem[ offsetProp ]; 13888 } 13889 } 13890 13891 // Normalize "" and auto 13892 val = parseFloat( val ) || 0; 13893 13894 // Adjust for the element's box model 13895 return ( val + 13896 boxModelAdjustment( 13897 elem, 13898 dimension, 13899 extra || ( isBorderBox ? "border" : "content" ), 13900 valueIsBorderBox, 13901 styles, 13902 13903 // Provide the current computed size to request scroll gutter calculation (gh-3589) 13904 val 13905 ) 13906 ) + "px"; 13907} 13908 13909jQuery.extend( { 13910 13911 // Add in style property hooks for overriding the default 13912 // behavior of getting and setting a style property 13913 cssHooks: { 13914 opacity: { 13915 get: function( elem, computed ) { 13916 if ( computed ) { 13917 13918 // We should always get a number back from opacity 13919 var ret = curCSS( elem, "opacity" ); 13920 return ret === "" ? "1" : ret; 13921 } 13922 } 13923 } 13924 }, 13925 13926 // Don't automatically add "px" to these possibly-unitless properties 13927 cssNumber: { 13928 "animationIterationCount": true, 13929 "columnCount": true, 13930 "fillOpacity": true, 13931 "flexGrow": true, 13932 "flexShrink": true, 13933 "fontWeight": true, 13934 "gridArea": true, 13935 "gridColumn": true, 13936 "gridColumnEnd": true, 13937 "gridColumnStart": true, 13938 "gridRow": true, 13939 "gridRowEnd": true, 13940 "gridRowStart": true, 13941 "lineHeight": true, 13942 "opacity": true, 13943 "order": true, 13944 "orphans": true, 13945 "widows": true, 13946 "zIndex": true, 13947 "zoom": true 13948 }, 13949 13950 // Add in properties whose names you wish to fix before 13951 // setting or getting the value 13952 cssProps: {}, 13953 13954 // Get and set the style property on a DOM Node 13955 style: function( elem, name, value, extra ) { 13956 13957 // Don't set styles on text and comment nodes 13958 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 13959 return; 13960 } 13961 13962 // Make sure that we're working with the right name 13963 var ret, type, hooks, 13964 origName = camelCase( name ), 13965 isCustomProp = rcustomProp.test( name ), 13966 style = elem.style; 13967 13968 // Make sure that we're working with the right name. We don't 13969 // want to query the value if it is a CSS custom property 13970 // since they are user-defined. 13971 if ( !isCustomProp ) { 13972 name = finalPropName( origName ); 13973 } 13974 13975 // Gets hook for the prefixed version, then unprefixed version 13976 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 13977 13978 // Check if we're setting a value 13979 if ( value !== undefined ) { 13980 type = typeof value; 13981 13982 // Convert "+=" or "-=" to relative numbers (trac-7345) 13983 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 13984 value = adjustCSS( elem, name, ret ); 13985 13986 // Fixes bug trac-9237 13987 type = "number"; 13988 } 13989 13990 // Make sure that null and NaN values aren't set (trac-7116) 13991 if ( value == null || value !== value ) { 13992 return; 13993 } 13994 13995 // If a number was passed in, add the unit (except for certain CSS properties) 13996 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 13997 // "px" to a few hardcoded values. 13998 if ( type === "number" && !isCustomProp ) { 13999 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 14000 } 14001 14002 // background-* props affect original clone's values 14003 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 14004 style[ name ] = "inherit"; 14005 } 14006 14007 // If a hook was provided, use that value, otherwise just set the specified value
vendor: 16,052 bytes, lines 14008-14612
14008 if ( !hooks || !( "set" in hooks ) || 14009 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 14010 14011 if ( isCustomProp ) { 14012 style.setProperty( name, value ); 14013 } else { 14014 style[ name ] = value; 14015 } 14016 } 14017 14018 } else { 14019 14020 // If a hook was provided get the non-computed value from there 14021 if ( hooks && "get" in hooks && 14022 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 14023 14024 return ret; 14025 } 14026 14027 // Otherwise just get the value from the style object 14028 return style[ name ]; 14029 } 14030 }, 14031 14032 css: function( elem, name, extra, styles ) { 14033 var val, num, hooks, 14034 origName = camelCase( name ), 14035 isCustomProp = rcustomProp.test( name ); 14036 14037 // Make sure that we're working with the right name. We don't 14038 // want to modify the value if it is a CSS custom property 14039 // since they are user-defined. 14040 if ( !isCustomProp ) { 14041 name = finalPropName( origName ); 14042 } 14043 14044 // Try prefixed name followed by the unprefixed name 14045 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 14046 14047 // If a hook was provided get the computed value from there 14048 if ( hooks && "get" in hooks ) { 14049 val = hooks.get( elem, true, extra ); 14050 } 14051 14052 // Otherwise, if a way to get the computed value exists, use that 14053 if ( val === undefined ) { 14054 val = curCSS( elem, name, styles ); 14055 } 14056 14057 // Convert "normal" to computed value 14058 if ( val === "normal" && name in cssNormalTransform ) { 14059 val = cssNormalTransform[ name ]; 14060 } 14061 14062 // Make numeric if forced or a qualifier was provided and val looks numeric 14063 if ( extra === "" || extra ) { 14064 num = parseFloat( val ); 14065 return extra === true || isFinite( num ) ? num || 0 : val; 14066 } 14067 14068 return val; 14069 } 14070} ); 14071 14072jQuery.each( [ "height", "width" ], function( _i, dimension ) { 14073 jQuery.cssHooks[ dimension ] = { 14074 get: function( elem, computed, extra ) { 14075 if ( computed ) { 14076 14077 // Certain elements can have dimension info if we invisibly show them 14078 // but it must have a current display style that would benefit 14079 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 14080 14081 // Support: Safari 8+ 14082 // Table columns in Safari have non-zero offsetWidth & zero 14083 // getBoundingClientRect().width unless display is changed. 14084 // Support: IE <=11 only 14085 // Running getBoundingClientRect on a disconnected node 14086 // in IE throws an error. 14087 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 14088 swap( elem, cssShow, function() { 14089 return getWidthOrHeight( elem, dimension, extra ); 14090 } ) : 14091 getWidthOrHeight( elem, dimension, extra ); 14092 } 14093 }, 14094 14095 set: function( elem, value, extra ) { 14096 var matches, 14097 styles = getStyles( elem ), 14098 14099 // Only read styles.position if the test has a chance to fail 14100 // to avoid forcing a reflow. 14101 scrollboxSizeBuggy = !support.scrollboxSize() && 14102 styles.position === "absolute", 14103 14104 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 14105 boxSizingNeeded = scrollboxSizeBuggy || extra, 14106 isBorderBox = boxSizingNeeded && 14107 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 14108 subtract = extra ? 14109 boxModelAdjustment( 14110 elem, 14111 dimension, 14112 extra, 14113 isBorderBox, 14114 styles 14115 ) : 14116 0; 14117 14118 // Account for unreliable border-box dimensions by comparing offset* to computed and 14119 // faking a content-box to get border and padding (gh-3699) 14120 if ( isBorderBox && scrollboxSizeBuggy ) { 14121 subtract -= Math.ceil( 14122 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 14123 parseFloat( styles[ dimension ] ) - 14124 boxModelAdjustment( elem, dimension, "border", false, styles ) - 14125 0.5 14126 ); 14127 } 14128 14129 // Convert to pixels if value adjustment is needed 14130 if ( subtract && ( matches = rcssNum.exec( value ) ) && 14131 ( matches[ 3 ] || "px" ) !== "px" ) { 14132 14133 elem.style[ dimension ] = value; 14134 value = jQuery.css( elem, dimension ); 14135 } 14136 14137 return setPositiveNumber( elem, value, subtract ); 14138 } 14139 }; 14140} ); 14141 14142jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 14143 function( elem, computed ) { 14144 if ( computed ) { 14145 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 14146 elem.getBoundingClientRect().left - 14147 swap( elem, { marginLeft: 0 }, function() { 14148 return elem.getBoundingClientRect().left; 14149 } ) 14150 ) + "px"; 14151 } 14152 } 14153); 14154 14155// These hooks are used by animate to expand properties 14156jQuery.each( { 14157 margin: "", 14158 padding: "", 14159 border: "Width" 14160}, function( prefix, suffix ) { 14161 jQuery.cssHooks[ prefix + suffix ] = { 14162 expand: function( value ) { 14163 var i = 0, 14164 expanded = {}, 14165 14166 // Assumes a single number if not a string 14167 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 14168 14169 for ( ; i < 4; i++ ) { 14170 expanded[ prefix + cssExpand[ i ] + suffix ] = 14171 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 14172 } 14173 14174 return expanded; 14175 } 14176 }; 14177 14178 if ( prefix !== "margin" ) { 14179 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 14180 } 14181} ); 14182 14183jQuery.fn.extend( { 14184 css: function( name, value ) { 14185 return access( this, function( elem, name, value ) { 14186 var styles, len, 14187 map = {}, 14188 i = 0; 14189 14190 if ( Array.isArray( name ) ) { 14191 styles = getStyles( elem ); 14192 len = name.length; 14193 14194 for ( ; i < len; i++ ) { 14195 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 14196 } 14197 14198 return map; 14199 } 14200 14201 return value !== undefined ? 14202 jQuery.style( elem, name, value ) : 14203 jQuery.css( elem, name ); 14204 }, name, value, arguments.length > 1 ); 14205 } 14206} ); 14207 14208 14209function Tween( elem, options, prop, end, easing ) { 14210 return new Tween.prototype.init( elem, options, prop, end, easing ); 14211} 14212jQuery.Tween = Tween; 14213 14214Tween.prototype = { 14215 constructor: Tween, 14216 init: function( elem, options, prop, end, easing, unit ) { 14217 this.elem = elem; 14218 this.prop = prop; 14219 this.easing = easing || jQuery.easing._default; 14220 this.options = options; 14221 this.start = this.now = this.cur(); 14222 this.end = end; 14223 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 14224 }, 14225 cur: function() { 14226 var hooks = Tween.propHooks[ this.prop ]; 14227 14228 return hooks && hooks.get ? 14229 hooks.get( this ) : 14230 Tween.propHooks._default.get( this ); 14231 }, 14232 run: function( percent ) { 14233 var eased, 14234 hooks = Tween.propHooks[ this.prop ]; 14235 14236 if ( this.options.duration ) { 14237 this.pos = eased = jQuery.easing[ this.easing ]( 14238 percent, this.options.duration * percent, 0, 1, this.options.duration 14239 ); 14240 } else { 14241 this.pos = eased = percent; 14242 } 14243 this.now = ( this.end - this.start ) * eased + this.start; 14244 14245 if ( this.options.step ) { 14246 this.options.step.call( this.elem, this.now, this ); 14247 } 14248 14249 if ( hooks && hooks.set ) { 14250 hooks.set( this ); 14251 } else { 14252 Tween.propHooks._default.set( this ); 14253 } 14254 return this; 14255 } 14256}; 14257 14258Tween.prototype.init.prototype = Tween.prototype; 14259 14260Tween.propHooks = { 14261 _default: { 14262 get: function( tween ) { 14263 var result; 14264 14265 // Use a property on the element directly when it is not a DOM element, 14266 // or when there is no matching style property that exists. 14267 if ( tween.elem.nodeType !== 1 || 14268 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 14269 return tween.elem[ tween.prop ]; 14270 } 14271 14272 // Passing an empty string as a 3rd parameter to .css will automatically 14273 // attempt a parseFloat and fallback to a string if the parse fails. 14274 // Simple values such as "10px" are parsed to Float; 14275 // complex values such as "rotate(1rad)" are returned as-is. 14276 result = jQuery.css( tween.elem, tween.prop, "" ); 14277 14278 // Empty strings, null, undefined and "auto" are converted to 0. 14279 return !result || result === "auto" ? 0 : result; 14280 }, 14281 set: function( tween ) { 14282 14283 // Use step hook for back compat. 14284 // Use cssHook if its there. 14285 // Use .style if available and use plain properties where available. 14286 if ( jQuery.fx.step[ tween.prop ] ) { 14287 jQuery.fx.step[ tween.prop ]( tween ); 14288 } else if ( tween.elem.nodeType === 1 && ( 14289 jQuery.cssHooks[ tween.prop ] || 14290 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 14291 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 14292 } else { 14293 tween.elem[ tween.prop ] = tween.now; 14294 } 14295 } 14296 } 14297}; 14298 14299// Support: IE <=9 only 14300// Panic based approach to setting things on disconnected nodes 14301Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 14302 set: function( tween ) { 14303 if ( tween.elem.nodeType && tween.elem.parentNode ) { 14304 tween.elem[ tween.prop ] = tween.now; 14305 } 14306 } 14307}; 14308 14309jQuery.easing = { 14310 linear: function( p ) { 14311 return p; 14312 }, 14313 swing: function( p ) { 14314 return 0.5 - Math.cos( p * Math.PI ) / 2; 14315 }, 14316 _default: "swing" 14317}; 14318 14319jQuery.fx = Tween.prototype.init; 14320 14321// Back compat <1.8 extension point 14322jQuery.fx.step = {}; 14323 14324 14325 14326 14327var 14328 fxNow, inProgress, 14329 rfxtypes = /^(?:toggle|show|hide)$/, 14330 rrun = /queueHooks$/; 14331 14332function schedule() { 14333 if ( inProgress ) { 14334 if ( document.hidden === false && window.requestAnimationFrame ) { 14335 window.requestAnimationFrame( schedule ); 14336 } else { 14337 window.setTimeout( schedule, jQuery.fx.interval ); 14338 } 14339 14340 jQuery.fx.tick(); 14341 } 14342} 14343 14344// Animations created synchronously will run synchronously 14345function createFxNow() { 14346 window.setTimeout( function() { 14347 fxNow = undefined; 14348 } ); 14349 return ( fxNow = Date.now() ); 14350} 14351 14352// Generate parameters to create a standard animation 14353function genFx( type, includeWidth ) { 14354 var which, 14355 i = 0, 14356 attrs = { height: type }; 14357 14358 // If we include width, step value is 1 to do all cssExpand values, 14359 // otherwise step value is 2 to skip over Left and Right 14360 includeWidth = includeWidth ? 1 : 0; 14361 for ( ; i < 4; i += 2 - includeWidth ) { 14362 which = cssExpand[ i ]; 14363 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 14364 } 14365 14366 if ( includeWidth ) { 14367 attrs.opacity = attrs.width = type; 14368 } 14369 14370 return attrs; 14371} 14372 14373function createTween( value, prop, animation ) { 14374 var tween, 14375 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 14376 index = 0, 14377 length = collection.length; 14378 for ( ; index < length; index++ ) { 14379 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 14380 14381 // We're done with this property 14382 return tween; 14383 } 14384 } 14385} 14386 14387function defaultPrefilter( elem, props, opts ) { 14388 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 14389 isBox = "width" in props || "height" in props, 14390 anim = this, 14391 orig = {}, 14392 style = elem.style, 14393 hidden = elem.nodeType && isHiddenWithinTree( elem ), 14394 dataShow = dataPriv.get( elem, "fxshow" ); 14395 14396 // Queue-skipping animations hijack the fx hooks 14397 if ( !opts.queue ) { 14398 hooks = jQuery._queueHooks( elem, "fx" ); 14399 if ( hooks.unqueued == null ) { 14400 hooks.unqueued = 0; 14401 oldfire = hooks.empty.fire; 14402 hooks.empty.fire = function() { 14403 if ( !hooks.unqueued ) { 14404 oldfire(); 14405 } 14406 }; 14407 } 14408 hooks.unqueued++; 14409 14410 anim.always( function() { 14411 14412 // Ensure the complete handler is called before this completes 14413 anim.always( function() { 14414 hooks.unqueued--; 14415 if ( !jQuery.queue( elem, "fx" ).length ) { 14416 hooks.empty.fire(); 14417 } 14418 } ); 14419 } ); 14420 } 14421 14422 // Detect show/hide animations 14423 for ( prop in props ) { 14424 value = props[ prop ]; 14425 if ( rfxtypes.test( value ) ) { 14426 delete props[ prop ]; 14427 toggle = toggle || value === "toggle"; 14428 if ( value === ( hidden ? "hide" : "show" ) ) { 14429 14430 // Pretend to be hidden if this is a "show" and 14431 // there is still data from a stopped show/hide 14432 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 14433 hidden = true; 14434 14435 // Ignore all other no-op show/hide data 14436 } else { 14437 continue; 14438 } 14439 } 14440 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 14441 } 14442 } 14443 14444 // Bail out if this is a no-op like .hide().hide() 14445 propTween = !jQuery.isEmptyObject( props ); 14446 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 14447 return; 14448 } 14449 14450 // Restrict "overflow" and "display" styles during box animations 14451 if ( isBox && elem.nodeType === 1 ) { 14452 14453 // Support: IE <=9 - 11, Edge 12 - 15 14454 // Record all 3 overflow attributes because IE does not infer the shorthand 14455 // from identically-valued overflowX and overflowY and Edge just mirrors 14456 // the overflowX value there. 14457 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 14458 14459 // Identify a display type, preferring old show/hide data over the CSS cascade 14460 restoreDisplay = dataShow && dataShow.display; 14461 if ( restoreDisplay == null ) { 14462 restoreDisplay = dataPriv.get( elem, "display" ); 14463 } 14464 display = jQuery.css( elem, "display" ); 14465 if ( display === "none" ) { 14466 if ( restoreDisplay ) { 14467 display = restoreDisplay; 14468 } else { 14469 14470 // Get nonempty value(s) by temporarily forcing visibility 14471 showHide( [ elem ], true ); 14472 restoreDisplay = elem.style.display || restoreDisplay; 14473 display = jQuery.css( elem, "display" ); 14474 showHide( [ elem ] ); 14475 } 14476 } 14477 14478 // Animate inline elements as inline-block 14479 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 14480 if ( jQuery.css( elem, "float" ) === "none" ) { 14481 14482 // Restore the original display value at the end of pure show/hide animations 14483 if ( !propTween ) { 14484 anim.done( function() { 14485 style.display = restoreDisplay; 14486 } ); 14487 if ( restoreDisplay == null ) { 14488 display = style.display; 14489 restoreDisplay = display === "none" ? "" : display; 14490 } 14491 } 14492 style.display = "inline-block"; 14493 } 14494 } 14495 } 14496 14497 if ( opts.overflow ) { 14498 style.overflow = "hidden"; 14499 anim.always( function() { 14500 style.overflow = opts.overflow[ 0 ]; 14501 style.overflowX = opts.overflow[ 1 ]; 14502 style.overflowY = opts.overflow[ 2 ]; 14503 } ); 14504 } 14505 14506 // Implement show/hide animations 14507 propTween = false; 14508 for ( prop in orig ) { 14509 14510 // General show/hide setup for this element animation 14511 if ( !propTween ) { 14512 if ( dataShow ) { 14513 if ( "hidden" in dataShow ) { 14514 hidden = dataShow.hidden; 14515 } 14516 } else { 14517 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 14518 } 14519 14520 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 14521 if ( toggle ) { 14522 dataShow.hidden = !hidden; 14523 } 14524 14525 // Show elements before animating them 14526 if ( hidden ) { 14527 showHide( [ elem ], true ); 14528 } 14529 14530 /* eslint-disable no-loop-func */ 14531 14532 anim.done( function() { 14533 14534 /* eslint-enable no-loop-func */ 14535 14536 // The final step of a "hide" animation is actually hiding the element 14537 if ( !hidden ) { 14538 showHide( [ elem ] ); 14539 } 14540 dataPriv.remove( elem, "fxshow" ); 14541 for ( prop in orig ) { 14542 jQuery.style( elem, prop, orig[ prop ] ); 14543 } 14544 } ); 14545 } 14546 14547 // Per-property setup 14548 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 14549 if ( !( prop in dataShow ) ) { 14550 dataShow[ prop ] = propTween.start; 14551 if ( hidden ) { 14552 propTween.end = propTween.start; 14553 propTween.start = 0; 14554 } 14555 } 14556 } 14557} 14558 14559function propFilter( props, specialEasing ) { 14560 var index, name, easing, value, hooks; 14561 14562 // camelCase, specialEasing and expand cssHook pass 14563 for ( index in props ) { 14564 name = camelCase( index ); 14565 easing = specialEasing[ name ]; 14566 value = props[ index ]; 14567 if ( Array.isArray( value ) ) { 14568 easing = value[ 1 ]; 14569 value = props[ index ] = value[ 0 ]; 14570 } 14571 14572 if ( index !== name ) { 14573 props[ name ] = value; 14574 delete props[ index ]; 14575 } 14576 14577 hooks = jQuery.cssHooks[ name ]; 14578 if ( hooks && "expand" in hooks ) { 14579 value = hooks.expand( value ); 14580 delete props[ name ]; 14581 14582 // Not quite $.extend, this won't overwrite existing keys. 14583 // Reusing 'index' because we have the correct "name" 14584 for ( index in value ) { 14585 if ( !( index in props ) ) { 14586 props[ index ] = value[ index ]; 14587 specialEasing[ index ] = easing; 14588 } 14589 } 14590 } else { 14591 specialEasing[ name ] = easing; 14592 } 14593 } 14594} 14595 14596function Animation( elem, properties, options ) { 14597 var result, 14598 stopped, 14599 index = 0, 14600 length = Animation.prefilters.length, 14601 deferred = jQuery.Deferred().always( function() { 14602 14603 // Don't match elem in the :animated selector 14604 delete tick.elem; 14605 } ), 14606 tick = function() { 14607 if ( stopped ) { 14608 return false; 14609 } 14610 var currentTime = fxNow || createFxNow(), 14611 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 14612
vendor: 9,542 bytes, lines 14613-15003
14613 // Support: Android 2.3 only 14614 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 14615 temp = remaining / animation.duration || 0, 14616 percent = 1 - temp, 14617 index = 0, 14618 length = animation.tweens.length; 14619 14620 for ( ; index < length; index++ ) { 14621 animation.tweens[ index ].run( percent ); 14622 } 14623 14624 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 14625 14626 // If there's more to do, yield 14627 if ( percent < 1 && length ) { 14628 return remaining; 14629 } 14630 14631 // If this was an empty animation, synthesize a final progress notification 14632 if ( !length ) { 14633 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 14634 } 14635 14636 // Resolve the animation and report its conclusion 14637 deferred.resolveWith( elem, [ animation ] ); 14638 return false; 14639 }, 14640 animation = deferred.promise( { 14641 elem: elem, 14642 props: jQuery.extend( {}, properties ), 14643 opts: jQuery.extend( true, { 14644 specialEasing: {}, 14645 easing: jQuery.easing._default 14646 }, options ), 14647 originalProperties: properties, 14648 originalOptions: options, 14649 startTime: fxNow || createFxNow(), 14650 duration: options.duration, 14651 tweens: [], 14652 createTween: function( prop, end ) { 14653 var tween = jQuery.Tween( elem, animation.opts, prop, end, 14654 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 14655 animation.tweens.push( tween ); 14656 return tween; 14657 }, 14658 stop: function( gotoEnd ) { 14659 var index = 0, 14660 14661 // If we are going to the end, we want to run all the tweens 14662 // otherwise we skip this part 14663 length = gotoEnd ? animation.tweens.length : 0; 14664 if ( stopped ) { 14665 return this; 14666 } 14667 stopped = true; 14668 for ( ; index < length; index++ ) { 14669 animation.tweens[ index ].run( 1 ); 14670 } 14671 14672 // Resolve when we played the last frame; otherwise, reject 14673 if ( gotoEnd ) { 14674 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 14675 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 14676 } else { 14677 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 14678 } 14679 return this; 14680 } 14681 } ), 14682 props = animation.props; 14683 14684 propFilter( props, animation.opts.specialEasing ); 14685 14686 for ( ; index < length; index++ ) { 14687 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 14688 if ( result ) { 14689 if ( isFunction( result.stop ) ) { 14690 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 14691 result.stop.bind( result ); 14692 } 14693 return result; 14694 } 14695 } 14696 14697 jQuery.map( props, createTween, animation ); 14698 14699 if ( isFunction( animation.opts.start ) ) { 14700 animation.opts.start.call( elem, animation ); 14701 } 14702 14703 // Attach callbacks from options 14704 animation 14705 .progress( animation.opts.progress ) 14706 .done( animation.opts.done, animation.opts.complete ) 14707 .fail( animation.opts.fail ) 14708 .always( animation.opts.always ); 14709 14710 jQuery.fx.timer( 14711 jQuery.extend( tick, { 14712 elem: elem, 14713 anim: animation, 14714 queue: animation.opts.queue 14715 } ) 14716 ); 14717 14718 return animation; 14719} 14720 14721jQuery.Animation = jQuery.extend( Animation, { 14722 14723 tweeners: { 14724 "*": [ function( prop, value ) { 14725 var tween = this.createTween( prop, value ); 14726 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 14727 return tween; 14728 } ] 14729 }, 14730 14731 tweener: function( props, callback ) { 14732 if ( isFunction( props ) ) { 14733 callback = props; 14734 props = [ "*" ]; 14735 } else { 14736 props = props.match( rnothtmlwhite ); 14737 } 14738 14739 var prop, 14740 index = 0, 14741 length = props.length; 14742 14743 for ( ; index < length; index++ ) { 14744 prop = props[ index ]; 14745 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 14746 Animation.tweeners[ prop ].unshift( callback ); 14747 } 14748 }, 14749 14750 prefilters: [ defaultPrefilter ], 14751 14752 prefilter: function( callback, prepend ) { 14753 if ( prepend ) { 14754 Animation.prefilters.unshift( callback ); 14755 } else { 14756 Animation.prefilters.push( callback ); 14757 } 14758 } 14759} ); 14760 14761jQuery.speed = function( speed, easing, fn ) { 14762 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 14763 complete: fn || !fn && easing || 14764 isFunction( speed ) && speed, 14765 duration: speed, 14766 easing: fn && easing || easing && !isFunction( easing ) && easing 14767 }; 14768 14769 // Go to the end state if fx are off 14770 if ( jQuery.fx.off ) { 14771 opt.duration = 0; 14772 14773 } else { 14774 if ( typeof opt.duration !== "number" ) { 14775 if ( opt.duration in jQuery.fx.speeds ) { 14776 opt.duration = jQuery.fx.speeds[ opt.duration ]; 14777 14778 } else { 14779 opt.duration = jQuery.fx.speeds._default; 14780 } 14781 } 14782 } 14783 14784 // Normalize opt.queue - true/undefined/null -> "fx" 14785 if ( opt.queue == null || opt.queue === true ) { 14786 opt.queue = "fx"; 14787 } 14788 14789 // Queueing 14790 opt.old = opt.complete; 14791 14792 opt.complete = function() { 14793 if ( isFunction( opt.old ) ) { 14794 opt.old.call( this ); 14795 } 14796 14797 if ( opt.queue ) { 14798 jQuery.dequeue( this, opt.queue ); 14799 } 14800 }; 14801 14802 return opt; 14803}; 14804 14805jQuery.fn.extend( { 14806 fadeTo: function( speed, to, easing, callback ) { 14807 14808 // Show any hidden elements after setting opacity to 0 14809 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 14810 14811 // Animate to the value specified 14812 .end().animate( { opacity: to }, speed, easing, callback ); 14813 }, 14814 animate: function( prop, speed, easing, callback ) { 14815 var empty = jQuery.isEmptyObject( prop ), 14816 optall = jQuery.speed( speed, easing, callback ), 14817 doAnimation = function() { 14818 14819 // Operate on a copy of prop so per-property easing won't be lost 14820 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 14821 14822 // Empty animations, or finishing resolves immediately 14823 if ( empty || dataPriv.get( this, "finish" ) ) { 14824 anim.stop( true ); 14825 } 14826 }; 14827 14828 doAnimation.finish = doAnimation; 14829 14830 return empty || optall.queue === false ? 14831 this.each( doAnimation ) : 14832 this.queue( optall.queue, doAnimation ); 14833 }, 14834 stop: function( type, clearQueue, gotoEnd ) { 14835 var stopQueue = function( hooks ) { 14836 var stop = hooks.stop; 14837 delete hooks.stop; 14838 stop( gotoEnd ); 14839 }; 14840 14841 if ( typeof type !== "string" ) { 14842 gotoEnd = clearQueue; 14843 clearQueue = type; 14844 type = undefined; 14845 } 14846 if ( clearQueue ) { 14847 this.queue( type || "fx", [] ); 14848 } 14849 14850 return this.each( function() { 14851 var dequeue = true, 14852 index = type != null && type + "queueHooks", 14853 timers = jQuery.timers, 14854 data = dataPriv.get( this ); 14855 14856 if ( index ) { 14857 if ( data[ index ] && data[ index ].stop ) { 14858 stopQueue( data[ index ] ); 14859 } 14860 } else { 14861 for ( index in data ) { 14862 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 14863 stopQueue( data[ index ] ); 14864 } 14865 } 14866 } 14867 14868 for ( index = timers.length; index--; ) { 14869 if ( timers[ index ].elem === this && 14870 ( type == null || timers[ index ].queue === type ) ) { 14871 14872 timers[ index ].anim.stop( gotoEnd ); 14873 dequeue = false; 14874 timers.splice( index, 1 ); 14875 } 14876 } 14877 14878 // Start the next in the queue if the last step wasn't forced. 14879 // Timers currently will call their complete callbacks, which 14880 // will dequeue but only if they were gotoEnd. 14881 if ( dequeue || !gotoEnd ) { 14882 jQuery.dequeue( this, type ); 14883 } 14884 } ); 14885 }, 14886 finish: function( type ) { 14887 if ( type !== false ) { 14888 type = type || "fx"; 14889 } 14890 return this.each( function() { 14891 var index, 14892 data = dataPriv.get( this ), 14893 queue = data[ type + "queue" ], 14894 hooks = data[ type + "queueHooks" ], 14895 timers = jQuery.timers, 14896 length = queue ? queue.length : 0; 14897 14898 // Enable finishing flag on private data 14899 data.finish = true; 14900 14901 // Empty the queue first 14902 jQuery.queue( this, type, [] ); 14903 14904 if ( hooks && hooks.stop ) { 14905 hooks.stop.call( this, true ); 14906 } 14907 14908 // Look for any active animations, and finish them 14909 for ( index = timers.length; index--; ) { 14910 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 14911 timers[ index ].anim.stop( true ); 14912 timers.splice( index, 1 ); 14913 } 14914 } 14915 14916 // Look for any animations in the old queue and finish them 14917 for ( index = 0; index < length; index++ ) { 14918 if ( queue[ index ] && queue[ index ].finish ) { 14919 queue[ index ].finish.call( this ); 14920 } 14921 } 14922 14923 // Turn off finishing flag 14924 delete data.finish; 14925 } ); 14926 } 14927} ); 14928 14929jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 14930 var cssFn = jQuery.fn[ name ]; 14931 jQuery.fn[ name ] = function( speed, easing, callback ) { 14932 return speed == null || typeof speed === "boolean" ? 14933 cssFn.apply( this, arguments ) : 14934 this.animate( genFx( name, true ), speed, easing, callback ); 14935 }; 14936} ); 14937 14938// Generate shortcuts for custom animations 14939jQuery.each( { 14940 slideDown: genFx( "show" ), 14941 slideUp: genFx( "hide" ), 14942 slideToggle: genFx( "toggle" ), 14943 fadeIn: { opacity: "show" }, 14944 fadeOut: { opacity: "hide" }, 14945 fadeToggle: { opacity: "toggle" } 14946}, function( name, props ) { 14947 jQuery.fn[ name ] = function( speed, easing, callback ) { 14948 return this.animate( props, speed, easing, callback ); 14949 }; 14950} ); 14951 14952jQuery.timers = []; 14953jQuery.fx.tick = function() { 14954 var timer, 14955 i = 0, 14956 timers = jQuery.timers; 14957 14958 fxNow = Date.now(); 14959 14960 for ( ; i < timers.length; i++ ) { 14961 timer = timers[ i ]; 14962 14963 // Run the timer and safely remove it when done (allowing for external removal) 14964 if ( !timer() && timers[ i ] === timer ) { 14965 timers.splice( i--, 1 ); 14966 } 14967 } 14968 14969 if ( !timers.length ) { 14970 jQuery.fx.stop(); 14971 } 14972 fxNow = undefined; 14973}; 14974 14975jQuery.fx.timer = function( timer ) { 14976 jQuery.timers.push( timer ); 14977 jQuery.fx.start(); 14978}; 14979 14980jQuery.fx.interval = 13; 14981jQuery.fx.start = function() { 14982 if ( inProgress ) { 14983 return; 14984 } 14985 14986 inProgress = true; 14987 schedule(); 14988}; 14989 14990jQuery.fx.stop = function() { 14991 inProgress = null; 14992}; 14993 14994jQuery.fx.speeds = { 14995 slow: 600, 14996 fast: 200, 14997 14998 // Default speed 14999 _default: 400 15000}; 15001 15002 15003// Based off of the plugin by Clint Helfers, with permission.
vendor: 5,177 bytes, lines 15004-15224
15004jQuery.fn.delay = function( time, type ) { 15005 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 15006 type = type || "fx"; 15007 15008 return this.queue( type, function( next, hooks ) { 15009 var timeout = window.setTimeout( next, time ); 15010 hooks.stop = function() { 15011 window.clearTimeout( timeout ); 15012 }; 15013 } ); 15014}; 15015 15016 15017( function() { 15018 var input = document.createElement( "input" ), 15019 select = document.createElement( "select" ), 15020 opt = select.appendChild( document.createElement( "option" ) ); 15021 15022 input.type = "checkbox"; 15023 15024 // Support: Android <=4.3 only 15025 // Default value for a checkbox should be "on" 15026 support.checkOn = input.value !== ""; 15027 15028 // Support: IE <=11 only 15029 // Must access selectedIndex to make default options select 15030 support.optSelected = opt.selected; 15031 15032 // Support: IE <=11 only 15033 // An input loses its value after becoming a radio 15034 input = document.createElement( "input" ); 15035 input.value = "t"; 15036 input.type = "radio"; 15037 support.radioValue = input.value === "t"; 15038} )(); 15039 15040 15041var boolHook, 15042 attrHandle = jQuery.expr.attrHandle; 15043 15044jQuery.fn.extend( { 15045 attr: function( name, value ) { 15046 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 15047 }, 15048 15049 removeAttr: function( name ) { 15050 return this.each( function() { 15051 jQuery.removeAttr( this, name ); 15052 } ); 15053 } 15054} ); 15055 15056jQuery.extend( { 15057 attr: function( elem, name, value ) { 15058 var ret, hooks, 15059 nType = elem.nodeType; 15060 15061 // Don't get/set attributes on text, comment and attribute nodes 15062 if ( nType === 3 || nType === 8 || nType === 2 ) { 15063 return; 15064 } 15065 15066 // Fallback to prop when attributes are not supported 15067 if ( typeof elem.getAttribute === "undefined" ) { 15068 return jQuery.prop( elem, name, value ); 15069 } 15070 15071 // Attribute hooks are determined by the lowercase version 15072 // Grab necessary hook if one is defined 15073 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15074 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 15075 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 15076 } 15077 15078 if ( value !== undefined ) { 15079 if ( value === null ) { 15080 jQuery.removeAttr( elem, name ); 15081 return; 15082 } 15083 15084 if ( hooks && "set" in hooks && 15085 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15086 return ret; 15087 } 15088 15089 elem.setAttribute( name, value + "" ); 15090 return value; 15091 } 15092 15093 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15094 return ret; 15095 } 15096 15097 ret = jQuery.find.attr( elem, name ); 15098 15099 // Non-existent attributes return null, we normalize to undefined 15100 return ret == null ? undefined : ret; 15101 }, 15102 15103 attrHooks: { 15104 type: { 15105 set: function( elem, value ) { 15106 if ( !support.radioValue && value === "radio" && 15107 nodeName( elem, "input" ) ) { 15108 var val = elem.value; 15109 elem.setAttribute( "type", value ); 15110 if ( val ) { 15111 elem.value = val; 15112 } 15113 return value; 15114 } 15115 } 15116 } 15117 }, 15118 15119 removeAttr: function( elem, value ) { 15120 var name, 15121 i = 0, 15122 15123 // Attribute names can contain non-HTML whitespace characters 15124 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 15125 attrNames = value && value.match( rnothtmlwhite ); 15126 15127 if ( attrNames && elem.nodeType === 1 ) { 15128 while ( ( name = attrNames[ i++ ] ) ) { 15129 elem.removeAttribute( name ); 15130 } 15131 } 15132 } 15133} ); 15134 15135// Hooks for boolean attributes 15136boolHook = { 15137 set: function( elem, value, name ) { 15138 if ( value === false ) { 15139 15140 // Remove boolean attributes when set to false 15141 jQuery.removeAttr( elem, name ); 15142 } else { 15143 elem.setAttribute( name, name ); 15144 } 15145 return name; 15146 } 15147}; 15148 15149jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 15150 var getter = attrHandle[ name ] || jQuery.find.attr; 15151 15152 attrHandle[ name ] = function( elem, name, isXML ) { 15153 var ret, handle, 15154 lowercaseName = name.toLowerCase(); 15155 15156 if ( !isXML ) { 15157 15158 // Avoid an infinite loop by temporarily removing this function from the getter 15159 handle = attrHandle[ lowercaseName ]; 15160 attrHandle[ lowercaseName ] = ret; 15161 ret = getter( elem, name, isXML ) != null ? 15162 lowercaseName : 15163 null; 15164 attrHandle[ lowercaseName ] = handle; 15165 } 15166 return ret; 15167 }; 15168} ); 15169 15170 15171 15172 15173var rfocusable = /^(?:input|select|textarea|button)$/i, 15174 rclickable = /^(?:a|area)$/i; 15175 15176jQuery.fn.extend( { 15177 prop: function( name, value ) { 15178 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 15179 }, 15180 15181 removeProp: function( name ) { 15182 return this.each( function() { 15183 delete this[ jQuery.propFix[ name ] || name ]; 15184 } ); 15185 } 15186} ); 15187 15188jQuery.extend( { 15189 prop: function( elem, name, value ) { 15190 var ret, hooks, 15191 nType = elem.nodeType; 15192 15193 // Don't get/set properties on text, comment and attribute nodes 15194 if ( nType === 3 || nType === 8 || nType === 2 ) { 15195 return; 15196 } 15197 15198 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15199 15200 // Fix name and attach hooks 15201 name = jQuery.propFix[ name ] || name; 15202 hooks = jQuery.propHooks[ name ]; 15203 } 15204 15205 if ( value !== undefined ) { 15206 if ( hooks && "set" in hooks && 15207 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15208 return ret; 15209 } 15210 15211 return ( elem[ name ] = value ); 15212 } 15213 15214 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15215 return ret; 15216 } 15217 15218 return elem[ name ]; 15219 }, 15220 15221 propHooks: { 15222 tabIndex: { 15223 get: function( elem ) { 15224
vendor: 6,126 bytes, lines 15225-15484
15225 // Support: IE <=9 - 11 only 15226 // elem.tabIndex doesn't always return the 15227 // correct value when it hasn't been explicitly set 15228 // Use proper attribute retrieval (trac-12072) 15229 var tabindex = jQuery.find.attr( elem, "tabindex" ); 15230 15231 if ( tabindex ) { 15232 return parseInt( tabindex, 10 ); 15233 } 15234 15235 if ( 15236 rfocusable.test( elem.nodeName ) || 15237 rclickable.test( elem.nodeName ) && 15238 elem.href 15239 ) { 15240 return 0; 15241 } 15242 15243 return -1; 15244 } 15245 } 15246 }, 15247 15248 propFix: { 15249 "for": "htmlFor", 15250 "class": "className" 15251 } 15252} ); 15253 15254// Support: IE <=11 only 15255// Accessing the selectedIndex property 15256// forces the browser to respect setting selected 15257// on the option 15258// The getter ensures a default option is selected 15259// when in an optgroup 15260// eslint rule "no-unused-expressions" is disabled for this code 15261// since it considers such accessions noop 15262if ( !support.optSelected ) { 15263 jQuery.propHooks.selected = { 15264 get: function( elem ) { 15265 15266 /* eslint no-unused-expressions: "off" */ 15267 15268 var parent = elem.parentNode; 15269 if ( parent && parent.parentNode ) { 15270 parent.parentNode.selectedIndex; 15271 } 15272 return null; 15273 }, 15274 set: function( elem ) { 15275 15276 /* eslint no-unused-expressions: "off" */ 15277 15278 var parent = elem.parentNode; 15279 if ( parent ) { 15280 parent.selectedIndex; 15281 15282 if ( parent.parentNode ) { 15283 parent.parentNode.selectedIndex; 15284 } 15285 } 15286 } 15287 }; 15288} 15289 15290jQuery.each( [ 15291 "tabIndex", 15292 "readOnly", 15293 "maxLength", 15294 "cellSpacing", 15295 "cellPadding", 15296 "rowSpan", 15297 "colSpan", 15298 "useMap", 15299 "frameBorder", 15300 "contentEditable" 15301], function() { 15302 jQuery.propFix[ this.toLowerCase() ] = this; 15303} ); 15304 15305 15306 15307 15308 // Strip and collapse whitespace according to HTML spec 15309 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 15310 function stripAndCollapse( value ) { 15311 var tokens = value.match( rnothtmlwhite ) || []; 15312 return tokens.join( " " ); 15313 } 15314 15315 15316function getClass( elem ) { 15317 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 15318} 15319 15320function classesToArray( value ) { 15321 if ( Array.isArray( value ) ) { 15322 return value; 15323 } 15324 if ( typeof value === "string" ) { 15325 return value.match( rnothtmlwhite ) || []; 15326 } 15327 return []; 15328} 15329 15330jQuery.fn.extend( { 15331 addClass: function( value ) { 15332 var classNames, cur, curValue, className, i, finalValue; 15333 15334 if ( isFunction( value ) ) { 15335 return this.each( function( j ) { 15336 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 15337 } ); 15338 } 15339 15340 classNames = classesToArray( value ); 15341 15342 if ( classNames.length ) { 15343 return this.each( function() { 15344 curValue = getClass( this ); 15345 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 15346 15347 if ( cur ) { 15348 for ( i = 0; i < classNames.length; i++ ) { 15349 className = classNames[ i ]; 15350 if ( cur.indexOf( " " + className + " " ) < 0 ) { 15351 cur += className + " "; 15352 } 15353 } 15354 15355 // Only assign if different to avoid unneeded rendering. 15356 finalValue = stripAndCollapse( cur ); 15357 if ( curValue !== finalValue ) { 15358 this.setAttribute( "class", finalValue ); 15359 } 15360 } 15361 } ); 15362 } 15363 15364 return this; 15365 }, 15366 15367 removeClass: function( value ) { 15368 var classNames, cur, curValue, className, i, finalValue; 15369 15370 if ( isFunction( value ) ) { 15371 return this.each( function( j ) { 15372 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 15373 } ); 15374 } 15375 15376 if ( !arguments.length ) { 15377 return this.attr( "class", "" ); 15378 } 15379 15380 classNames = classesToArray( value ); 15381 15382 if ( classNames.length ) { 15383 return this.each( function() { 15384 curValue = getClass( this ); 15385 15386 // This expression is here for better compressibility (see addClass) 15387 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 15388 15389 if ( cur ) { 15390 for ( i = 0; i < classNames.length; i++ ) { 15391 className = classNames[ i ]; 15392 15393 // Remove *all* instances 15394 while ( cur.indexOf( " " + className + " " ) > -1 ) { 15395 cur = cur.replace( " " + className + " ", " " ); 15396 } 15397 } 15398 15399 // Only assign if different to avoid unneeded rendering. 15400 finalValue = stripAndCollapse( cur ); 15401 if ( curValue !== finalValue ) { 15402 this.setAttribute( "class", finalValue ); 15403 } 15404 } 15405 } ); 15406 } 15407 15408 return this; 15409 }, 15410 15411 toggleClass: function( value, stateVal ) { 15412 var classNames, className, i, self, 15413 type = typeof value, 15414 isValidValue = type === "string" || Array.isArray( value ); 15415 15416 if ( isFunction( value ) ) { 15417 return this.each( function( i ) { 15418 jQuery( this ).toggleClass( 15419 value.call( this, i, getClass( this ), stateVal ), 15420 stateVal 15421 ); 15422 } ); 15423 } 15424 15425 if ( typeof stateVal === "boolean" && isValidValue ) { 15426 return stateVal ? this.addClass( value ) : this.removeClass( value ); 15427 } 15428 15429 classNames = classesToArray( value ); 15430 15431 return this.each( function() { 15432 if ( isValidValue ) { 15433 15434 // Toggle individual class names 15435 self = jQuery( this ); 15436 15437 for ( i = 0; i < classNames.length; i++ ) { 15438 className = classNames[ i ]; 15439 15440 // Check each className given, space separated list 15441 if ( self.hasClass( className ) ) { 15442 self.removeClass( className ); 15443 } else { 15444 self.addClass( className ); 15445 } 15446 } 15447 15448 // Toggle whole class name 15449 } else if ( value === undefined || type === "boolean" ) { 15450 className = getClass( this ); 15451 if ( className ) { 15452 15453 // Store className if set 15454 dataPriv.set( this, "__className__", className ); 15455 } 15456 15457 // If the element has a class name or if we're passed `false`, 15458 // then remove the whole classname (if there was one, the above saved it). 15459 // Otherwise bring back whatever was previously saved (if anything), 15460 // falling back to the empty string if nothing was stored. 15461 if ( this.setAttribute ) { 15462 this.setAttribute( "class", 15463 className || value === false ? 15464 "" : 15465 dataPriv.get( this, "__className__" ) || "" 15466 ); 15467 } 15468 } 15469 } ); 15470 }, 15471 15472 hasClass: function( selector ) { 15473 var className, elem, 15474 i = 0; 15475 15476 className = " " + selector + " "; 15477 while ( ( elem = this[ i++ ] ) ) { 15478 if ( elem.nodeType === 1 && 15479 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 15480 return true; 15481 } 15482 } 15483 15484 return false;
vendor: 1,385 bytes, lines 15485-15554
15485 } 15486} ); 15487 15488 15489 15490 15491var rreturn = /\r/g; 15492 15493jQuery.fn.extend( { 15494 val: function( value ) { 15495 var hooks, ret, valueIsFunction, 15496 elem = this[ 0 ]; 15497 15498 if ( !arguments.length ) { 15499 if ( elem ) { 15500 hooks = jQuery.valHooks[ elem.type ] || 15501 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 15502 15503 if ( hooks && 15504 "get" in hooks && 15505 ( ret = hooks.get( elem, "value" ) ) !== undefined 15506 ) { 15507 return ret; 15508 } 15509 15510 ret = elem.value; 15511 15512 // Handle most common string cases 15513 if ( typeof ret === "string" ) { 15514 return ret.replace( rreturn, "" ); 15515 } 15516 15517 // Handle cases where value is null/undef or number 15518 return ret == null ? "" : ret; 15519 } 15520 15521 return; 15522 } 15523 15524 valueIsFunction = isFunction( value ); 15525 15526 return this.each( function( i ) { 15527 var val; 15528 15529 if ( this.nodeType !== 1 ) { 15530 return; 15531 } 15532 15533 if ( valueIsFunction ) { 15534 val = value.call( this, i, jQuery( this ).val() ); 15535 } else { 15536 val = value; 15537 } 15538 15539 // Treat null/undefined as ""; convert numbers to string 15540 if ( val == null ) { 15541 val = ""; 15542 15543 } else if ( typeof val === "number" ) { 15544 val += ""; 15545 15546 } else if ( Array.isArray( val ) ) { 15547 val = jQuery.map( val, function( value ) { 15548 return value == null ? "" : value + ""; 15549 } ); 15550 } 15551 15552 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 15553 15554 // If set returns undefined, fall back to normal setting
vendor: 8,269 bytes, lines 15555-15869
15555 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 15556 this.value = val; 15557 } 15558 } ); 15559 } 15560} ); 15561 15562jQuery.extend( { 15563 valHooks: { 15564 option: { 15565 get: function( elem ) { 15566 15567 var val = jQuery.find.attr( elem, "value" ); 15568 return val != null ? 15569 val : 15570 15571 // Support: IE <=10 - 11 only 15572 // option.text throws exceptions (trac-14686, trac-14858) 15573 // Strip and collapse whitespace 15574 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 15575 stripAndCollapse( jQuery.text( elem ) ); 15576 } 15577 }, 15578 select: { 15579 get: function( elem ) { 15580 var value, option, i, 15581 options = elem.options, 15582 index = elem.selectedIndex, 15583 one = elem.type === "select-one", 15584 values = one ? null : [], 15585 max = one ? index + 1 : options.length; 15586 15587 if ( index < 0 ) { 15588 i = max; 15589 15590 } else { 15591 i = one ? index : 0; 15592 } 15593 15594 // Loop through all the selected options 15595 for ( ; i < max; i++ ) { 15596 option = options[ i ]; 15597 15598 // Support: IE <=9 only 15599 // IE8-9 doesn't update selected after form reset (trac-2551) 15600 if ( ( option.selected || i === index ) && 15601 15602 // Don't return options that are disabled or in a disabled optgroup 15603 !option.disabled && 15604 ( !option.parentNode.disabled || 15605 !nodeName( option.parentNode, "optgroup" ) ) ) { 15606 15607 // Get the specific value for the option 15608 value = jQuery( option ).val(); 15609 15610 // We don't need an array for one selects 15611 if ( one ) { 15612 return value; 15613 } 15614 15615 // Multi-Selects return an array 15616 values.push( value ); 15617 } 15618 } 15619 15620 return values; 15621 }, 15622 15623 set: function( elem, value ) { 15624 var optionSet, option, 15625 options = elem.options, 15626 values = jQuery.makeArray( value ), 15627 i = options.length; 15628 15629 while ( i-- ) { 15630 option = options[ i ]; 15631 15632 /* eslint-disable no-cond-assign */ 15633 15634 if ( option.selected = 15635 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 15636 ) { 15637 optionSet = true; 15638 } 15639 15640 /* eslint-enable no-cond-assign */ 15641 } 15642 15643 // Force browsers to behave consistently when non-matching value is set 15644 if ( !optionSet ) { 15645 elem.selectedIndex = -1; 15646 } 15647 return values; 15648 } 15649 } 15650 } 15651} ); 15652 15653// Radios and checkboxes getter/setter 15654jQuery.each( [ "radio", "checkbox" ], function() { 15655 jQuery.valHooks[ this ] = { 15656 set: function( elem, value ) { 15657 if ( Array.isArray( value ) ) { 15658 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 15659 } 15660 } 15661 }; 15662 if ( !support.checkOn ) { 15663 jQuery.valHooks[ this ].get = function( elem ) { 15664 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 15665 }; 15666 } 15667} ); 15668 15669 15670 15671 15672// Return jQuery for attributes-only inclusion 15673 15674 15675support.focusin = "onfocusin" in window; 15676 15677 15678var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 15679 stopPropagationCallback = function( e ) { 15680 e.stopPropagation(); 15681 }; 15682 15683jQuery.extend( jQuery.event, { 15684 15685 trigger: function( event, data, elem, onlyHandlers ) { 15686 15687 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 15688 eventPath = [ elem || document ], 15689 type = hasOwn.call( event, "type" ) ? event.type : event, 15690 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 15691 15692 cur = lastElement = tmp = elem = elem || document; 15693 15694 // Don't do events on text and comment nodes 15695 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 15696 return; 15697 } 15698 15699 // focus/blur morphs to focusin/out; ensure we're not firing them right now 15700 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 15701 return; 15702 } 15703 15704 if ( type.indexOf( "." ) > -1 ) { 15705 15706 // Namespaced trigger; create a regexp to match event type in handle() 15707 namespaces = type.split( "." ); 15708 type = namespaces.shift(); 15709 namespaces.sort(); 15710 } 15711 ontype = type.indexOf( ":" ) < 0 && "on" + type; 15712 15713 // Caller can pass in a jQuery.Event object, Object, or just an event type string 15714 event = event[ jQuery.expando ] ? 15715 event : 15716 new jQuery.Event( type, typeof event === "object" && event ); 15717 15718 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 15719 event.isTrigger = onlyHandlers ? 2 : 3; 15720 event.namespace = namespaces.join( "." ); 15721 event.rnamespace = event.namespace ? 15722 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 15723 null; 15724 15725 // Clean up the event in case it is being reused 15726 event.result = undefined; 15727 if ( !event.target ) { 15728 event.target = elem; 15729 } 15730 15731 // Clone any incoming data and prepend the event, creating the handler arg list 15732 data = data == null ? 15733 [ event ] : 15734 jQuery.makeArray( data, [ event ] ); 15735 15736 // Allow special events to draw outside the lines 15737 special = jQuery.event.special[ type ] || {}; 15738 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 15739 return; 15740 } 15741 15742 // Determine event propagation path in advance, per W3C events spec (trac-9951) 15743 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 15744 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 15745 15746 bubbleType = special.delegateType || type; 15747 if ( !rfocusMorph.test( bubbleType + type ) ) { 15748 cur = cur.parentNode; 15749 } 15750 for ( ; cur; cur = cur.parentNode ) { 15751 eventPath.push( cur ); 15752 tmp = cur; 15753 } 15754 15755 // Only add window if we got to document (e.g., not plain obj or detached DOM) 15756 if ( tmp === ( elem.ownerDocument || document ) ) { 15757 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 15758 } 15759 } 15760 15761 // Fire handlers on the event path 15762 i = 0; 15763 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 15764 lastElement = cur; 15765 event.type = i > 1 ? 15766 bubbleType : 15767 special.bindType || type; 15768 15769 // jQuery handler 15770 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 15771 dataPriv.get( cur, "handle" ); 15772 if ( handle ) { 15773 handle.apply( cur, data ); 15774 } 15775 15776 // Native handler 15777 handle = ontype && cur[ ontype ]; 15778 if ( handle && handle.apply && acceptData( cur ) ) { 15779 event.result = handle.apply( cur, data ); 15780 if ( event.result === false ) { 15781 event.preventDefault(); 15782 } 15783 } 15784 } 15785 event.type = type; 15786 15787 // If nobody prevented the default action, do it now 15788 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 15789 15790 if ( ( !special._default || 15791 special._default.apply( eventPath.pop(), data ) === false ) && 15792 acceptData( elem ) ) { 15793 15794 // Call a native DOM method on the target with the same name as the event. 15795 // Don't do default actions on window, that's where global variables be (trac-6170) 15796 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 15797 15798 // Don't re-trigger an onFOO event when we call its FOO() method 15799 tmp = elem[ ontype ]; 15800 15801 if ( tmp ) { 15802 elem[ ontype ] = null; 15803 } 15804 15805 // Prevent re-triggering of the same event, since we already bubbled it above 15806 jQuery.event.triggered = type; 15807 15808 if ( event.isPropagationStopped() ) { 15809 lastElement.addEventListener( type, stopPropagationCallback ); 15810 } 15811 15812 elem[ type ](); 15813 15814 if ( event.isPropagationStopped() ) { 15815 lastElement.removeEventListener( type, stopPropagationCallback ); 15816 } 15817 15818 jQuery.event.triggered = undefined; 15819 15820 if ( tmp ) { 15821 elem[ ontype ] = tmp; 15822 } 15823 } 15824 } 15825 } 15826 15827 return event.result; 15828 }, 15829 15830 // Piggyback on a donor event to simulate a different one 15831 // Used only for `focus(in | out)` events 15832 simulate: function( type, elem, event ) { 15833 var e = jQuery.extend( 15834 new jQuery.Event(), 15835 event, 15836 { 15837 type: type, 15838 isSimulated: true 15839 } 15840 ); 15841 15842 jQuery.event.trigger( e, null, elem ); 15843 } 15844 15845} ); 15846 15847jQuery.fn.extend( { 15848 15849 trigger: function( type, data ) { 15850 return this.each( function() { 15851 jQuery.event.trigger( type, data, this ); 15852 } ); 15853 }, 15854 triggerHandler: function( type, data ) { 15855 var elem = this[ 0 ]; 15856 if ( elem ) { 15857 return jQuery.event.trigger( type, data, elem, true ); 15858 } 15859 } 15860} ); 15861 15862 15863// Support: Firefox <=44 15864// Firefox doesn't have focus(in | out) events 15865// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 15866// 15867// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 15868// focus(in | out) events fire after focus & blur events, 15869// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
vendor: 4,255 bytes, lines 15870-16039
15870// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 15871if ( !support.focusin ) { 15872 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 15873 15874 // Attach a single capturing handler on the document while someone wants focusin/focusout 15875 var handler = function( event ) { 15876 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 15877 }; 15878 15879 jQuery.event.special[ fix ] = { 15880 setup: function() { 15881 15882 // Handle: regular nodes (via `this.ownerDocument`), window 15883 // (via `this.document`) & document (via `this`). 15884 var doc = this.ownerDocument || this.document || this, 15885 attaches = dataPriv.access( doc, fix ); 15886 15887 if ( !attaches ) { 15888 doc.addEventListener( orig, handler, true ); 15889 } 15890 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 15891 }, 15892 teardown: function() { 15893 var doc = this.ownerDocument || this.document || this, 15894 attaches = dataPriv.access( doc, fix ) - 1; 15895 15896 if ( !attaches ) { 15897 doc.removeEventListener( orig, handler, true ); 15898 dataPriv.remove( doc, fix ); 15899 15900 } else { 15901 dataPriv.access( doc, fix, attaches ); 15902 } 15903 } 15904 }; 15905 } ); 15906} 15907var location = window.location; 15908 15909var nonce = { guid: Date.now() }; 15910 15911var rquery = ( /\?/ ); 15912 15913 15914 15915// Cross-browser xml parsing 15916jQuery.parseXML = function( data ) { 15917 var xml, parserErrorElem; 15918 if ( !data || typeof data !== "string" ) { 15919 return null; 15920 } 15921 15922 // Support: IE 9 - 11 only 15923 // IE throws on parseFromString with invalid input. 15924 try { 15925 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 15926 } catch ( e ) {} 15927 15928 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 15929 if ( !xml || parserErrorElem ) { 15930 jQuery.error( "Invalid XML: " + ( 15931 parserErrorElem ? 15932 jQuery.map( parserErrorElem.childNodes, function( el ) { 15933 return el.textContent; 15934 } ).join( "\n" ) : 15935 data 15936 ) ); 15937 } 15938 return xml; 15939}; 15940 15941 15942var 15943 rbracket = /\[\]$/, 15944 rCRLF = /\r?\n/g, 15945 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 15946 rsubmittable = /^(?:input|select|textarea|keygen)/i; 15947 15948function buildParams( prefix, obj, traditional, add ) { 15949 var name; 15950 15951 if ( Array.isArray( obj ) ) { 15952 15953 // Serialize array item. 15954 jQuery.each( obj, function( i, v ) { 15955 if ( traditional || rbracket.test( prefix ) ) { 15956 15957 // Treat each array item as a scalar. 15958 add( prefix, v ); 15959 15960 } else { 15961 15962 // Item is non-scalar (array or object), encode its numeric index. 15963 buildParams( 15964 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 15965 v, 15966 traditional, 15967 add 15968 ); 15969 } 15970 } ); 15971 15972 } else if ( !traditional && toType( obj ) === "object" ) { 15973 15974 // Serialize object item. 15975 for ( name in obj ) { 15976 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 15977 } 15978 15979 } else { 15980 15981 // Serialize scalar item. 15982 add( prefix, obj ); 15983 } 15984} 15985 15986// Serialize an array of form elements or a set of 15987// key/values into a query string 15988jQuery.param = function( a, traditional ) { 15989 var prefix, 15990 s = [], 15991 add = function( key, valueOrFunction ) { 15992 15993 // If value is a function, invoke it and use its return value 15994 var value = isFunction( valueOrFunction ) ? 15995 valueOrFunction() : 15996 valueOrFunction; 15997 15998 s[ s.length ] = encodeURIComponent( key ) + "=" + 15999 encodeURIComponent( value == null ? "" : value ); 16000 }; 16001 16002 if ( a == null ) { 16003 return ""; 16004 } 16005 16006 // If an array was passed in, assume that it is an array of form elements. 16007 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 16008 16009 // Serialize the form elements 16010 jQuery.each( a, function() { 16011 add( this.name, this.value ); 16012 } ); 16013 16014 } else { 16015 16016 // If traditional, encode the "old" way (the way 1.3.2 or older 16017 // did it), otherwise encode params recursively. 16018 for ( prefix in a ) { 16019 buildParams( prefix, a[ prefix ], traditional, add ); 16020 } 16021 } 16022 16023 // Return the resulting serialization 16024 return s.join( "&" ); 16025}; 16026 16027jQuery.fn.extend( { 16028 serialize: function() { 16029 return jQuery.param( this.serializeArray() ); 16030 }, 16031 serializeArray: function() { 16032 return this.map( function() { 16033 16034 // Can add propHook for "elements" to filter or add form elements 16035 var elements = jQuery.prop( this, "elements" ); 16036 return elements ? jQuery.makeArray( elements ) : this; 16037 } ).filter( function() { 16038 var type = this.type; 16039
vendor: 32,437 bytes, lines 16040-17293
16040 // Use .is( ":disabled" ) so that fieldset[disabled] works 16041 return this.name && !jQuery( this ).is( ":disabled" ) && 16042 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 16043 ( this.checked || !rcheckableType.test( type ) ); 16044 } ).map( function( _i, elem ) { 16045 var val = jQuery( this ).val(); 16046 16047 if ( val == null ) { 16048 return null; 16049 } 16050 16051 if ( Array.isArray( val ) ) { 16052 return jQuery.map( val, function( val ) { 16053 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16054 } ); 16055 } 16056 16057 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 16058 } ).get(); 16059 } 16060} ); 16061 16062 16063var 16064 r20 = /%20/g, 16065 rhash = /#.*$/, 16066 rantiCache = /([?&])_=[^&]*/, 16067 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 16068 16069 // trac-7653, trac-8125, trac-8152: local protocol detection 16070 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 16071 rnoContent = /^(?:GET|HEAD)$/, 16072 rprotocol = /^\/\//, 16073 16074 /* Prefilters 16075 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 16076 * 2) These are called: 16077 * - BEFORE asking for a transport 16078 * - AFTER param serialization (s.data is a string if s.processData is true) 16079 * 3) key is the dataType 16080 * 4) the catchall symbol "*" can be used 16081 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 16082 */ 16083 prefilters = {}, 16084 16085 /* Transports bindings 16086 * 1) key is the dataType 16087 * 2) the catchall symbol "*" can be used 16088 * 3) selection will start with transport dataType and THEN go to "*" if needed 16089 */ 16090 transports = {}, 16091 16092 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 16093 allTypes = "*/".concat( "*" ), 16094 16095 // Anchor tag for parsing the document origin 16096 originAnchor = document.createElement( "a" ); 16097 16098originAnchor.href = location.href; 16099 16100// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 16101function addToPrefiltersOrTransports( structure ) { 16102 16103 // dataTypeExpression is optional and defaults to "*" 16104 return function( dataTypeExpression, func ) { 16105 16106 if ( typeof dataTypeExpression !== "string" ) { 16107 func = dataTypeExpression; 16108 dataTypeExpression = "*"; 16109 } 16110 16111 var dataType, 16112 i = 0, 16113 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 16114 16115 if ( isFunction( func ) ) { 16116 16117 // For each dataType in the dataTypeExpression 16118 while ( ( dataType = dataTypes[ i++ ] ) ) { 16119 16120 // Prepend if requested 16121 if ( dataType[ 0 ] === "+" ) { 16122 dataType = dataType.slice( 1 ) || "*"; 16123 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 16124 16125 // Otherwise append 16126 } else { 16127 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 16128 } 16129 } 16130 } 16131 }; 16132} 16133 16134// Base inspection function for prefilters and transports 16135function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 16136 16137 var inspected = {}, 16138 seekingTransport = ( structure === transports ); 16139 16140 function inspect( dataType ) { 16141 var selected; 16142 inspected[ dataType ] = true; 16143 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 16144 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 16145 if ( typeof dataTypeOrTransport === "string" && 16146 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 16147 16148 options.dataTypes.unshift( dataTypeOrTransport ); 16149 inspect( dataTypeOrTransport ); 16150 return false; 16151 } else if ( seekingTransport ) { 16152 return !( selected = dataTypeOrTransport ); 16153 } 16154 } ); 16155 return selected; 16156 } 16157 16158 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 16159} 16160 16161// A special extend for ajax options 16162// that takes "flat" options (not to be deep extended) 16163// Fixes trac-9887 16164function ajaxExtend( target, src ) { 16165 var key, deep, 16166 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 16167 16168 for ( key in src ) { 16169 if ( src[ key ] !== undefined ) { 16170 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 16171 } 16172 } 16173 if ( deep ) { 16174 jQuery.extend( true, target, deep ); 16175 } 16176 16177 return target; 16178} 16179 16180/* Handles responses to an ajax request: 16181 * - finds the right dataType (mediates between content-type and expected dataType) 16182 * - returns the corresponding response 16183 */ 16184function ajaxHandleResponses( s, jqXHR, responses ) { 16185 16186 var ct, type, finalDataType, firstDataType, 16187 contents = s.contents, 16188 dataTypes = s.dataTypes; 16189 16190 // Remove auto dataType and get content-type in the process 16191 while ( dataTypes[ 0 ] === "*" ) { 16192 dataTypes.shift(); 16193 if ( ct === undefined ) { 16194 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 16195 } 16196 } 16197 16198 // Check if we're dealing with a known content-type 16199 if ( ct ) { 16200 for ( type in contents ) { 16201 if ( contents[ type ] && contents[ type ].test( ct ) ) { 16202 dataTypes.unshift( type ); 16203 break; 16204 } 16205 } 16206 } 16207 16208 // Check to see if we have a response for the expected dataType 16209 if ( dataTypes[ 0 ] in responses ) { 16210 finalDataType = dataTypes[ 0 ]; 16211 } else { 16212 16213 // Try convertible dataTypes 16214 for ( type in responses ) { 16215 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 16216 finalDataType = type; 16217 break; 16218 } 16219 if ( !firstDataType ) { 16220 firstDataType = type; 16221 } 16222 } 16223 16224 // Or just use first one 16225 finalDataType = finalDataType || firstDataType; 16226 } 16227 16228 // If we found a dataType 16229 // We add the dataType to the list if needed 16230 // and return the corresponding response 16231 if ( finalDataType ) { 16232 if ( finalDataType !== dataTypes[ 0 ] ) { 16233 dataTypes.unshift( finalDataType ); 16234 } 16235 return responses[ finalDataType ]; 16236 } 16237} 16238 16239/* Chain conversions given the request and the original response 16240 * Also sets the responseXXX fields on the jqXHR instance 16241 */ 16242function ajaxConvert( s, response, jqXHR, isSuccess ) { 16243 var conv2, current, conv, tmp, prev, 16244 converters = {}, 16245 16246 // Work with a copy of dataTypes in case we need to modify it for conversion 16247 dataTypes = s.dataTypes.slice(); 16248 16249 // Create converters map with lowercased keys 16250 if ( dataTypes[ 1 ] ) { 16251 for ( conv in s.converters ) { 16252 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 16253 } 16254 } 16255 16256 current = dataTypes.shift(); 16257 16258 // Convert to each sequential dataType 16259 while ( current ) { 16260 16261 if ( s.responseFields[ current ] ) { 16262 jqXHR[ s.responseFields[ current ] ] = response; 16263 } 16264 16265 // Apply the dataFilter if provided 16266 if ( !prev && isSuccess && s.dataFilter ) { 16267 response = s.dataFilter( response, s.dataType ); 16268 } 16269 16270 prev = current; 16271 current = dataTypes.shift(); 16272 16273 if ( current ) { 16274 16275 // There's only work to do if current dataType is non-auto 16276 if ( current === "*" ) { 16277 16278 current = prev; 16279 16280 // Convert response if prev dataType is non-auto and differs from current 16281 } else if ( prev !== "*" && prev !== current ) { 16282 16283 // Seek a direct converter 16284 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 16285 16286 // If none found, seek a pair 16287 if ( !conv ) { 16288 for ( conv2 in converters ) { 16289 16290 // If conv2 outputs current 16291 tmp = conv2.split( " " ); 16292 if ( tmp[ 1 ] === current ) { 16293 16294 // If prev can be converted to accepted input 16295 conv = converters[ prev + " " + tmp[ 0 ] ] || 16296 converters[ "* " + tmp[ 0 ] ]; 16297 if ( conv ) { 16298 16299 // Condense equivalence converters 16300 if ( conv === true ) { 16301 conv = converters[ conv2 ]; 16302 16303 // Otherwise, insert the intermediate dataType 16304 } else if ( converters[ conv2 ] !== true ) { 16305 current = tmp[ 0 ]; 16306 dataTypes.unshift( tmp[ 1 ] ); 16307 } 16308 break; 16309 } 16310 } 16311 } 16312 } 16313 16314 // Apply converter (if not an equivalence) 16315 if ( conv !== true ) { 16316 16317 // Unless errors are allowed to bubble, catch and return them 16318 if ( conv && s.throws ) { 16319 response = conv( response ); 16320 } else { 16321 try { 16322 response = conv( response ); 16323 } catch ( e ) { 16324 return { 16325 state: "parsererror", 16326 error: conv ? e : "No conversion from " + prev + " to " + current 16327 }; 16328 } 16329 } 16330 } 16331 } 16332 } 16333 } 16334 16335 return { state: "success", data: response }; 16336} 16337 16338jQuery.extend( { 16339 16340 // Counter for holding the number of active queries 16341 active: 0, 16342 16343 // Last-Modified header cache for next request 16344 lastModified: {}, 16345 etag: {}, 16346 16347 ajaxSettings: { 16348 url: location.href, 16349 type: "GET", 16350 isLocal: rlocalProtocol.test( location.protocol ), 16351 global: true, 16352 processData: true, 16353 async: true, 16354 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 16355 16356 /* 16357 timeout: 0, 16358 data: null, 16359 dataType: null, 16360 username: null, 16361 password: null, 16362 cache: null, 16363 throws: false, 16364 traditional: false, 16365 headers: {}, 16366 */ 16367 16368 accepts: { 16369 "*": allTypes, 16370 text: "text/plain", 16371 html: "text/html", 16372 xml: "application/xml, text/xml", 16373 json: "application/json, text/javascript" 16374 }, 16375 16376 contents: { 16377 xml: /\bxml\b/, 16378 html: /\bhtml/, 16379 json: /\bjson\b/ 16380 }, 16381 16382 responseFields: { 16383 xml: "responseXML", 16384 text: "responseText", 16385 json: "responseJSON" 16386 }, 16387 16388 // Data converters 16389 // Keys separate source (or catchall "*") and destination types with a single space 16390 converters: { 16391 16392 // Convert anything to text 16393 "* text": String, 16394 16395 // Text to html (true = no transformation) 16396 "text html": true, 16397 16398 // Evaluate text as a json expression 16399 "text json": JSON.parse, 16400 16401 // Parse text as xml 16402 "text xml": jQuery.parseXML 16403 }, 16404 16405 // For options that shouldn't be deep extended: 16406 // you can add your own custom options here if 16407 // and when you create one that shouldn't be 16408 // deep extended (see ajaxExtend) 16409 flatOptions: { 16410 url: true, 16411 context: true 16412 } 16413 }, 16414 16415 // Creates a full fledged settings object into target 16416 // with both ajaxSettings and settings fields. 16417 // If target is omitted, writes into ajaxSettings. 16418 ajaxSetup: function( target, settings ) { 16419 return settings ? 16420 16421 // Building a settings object 16422 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 16423 16424 // Extending ajaxSettings 16425 ajaxExtend( jQuery.ajaxSettings, target ); 16426 }, 16427 16428 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 16429 ajaxTransport: addToPrefiltersOrTransports( transports ), 16430 16431 // Main method 16432 ajax: function( url, options ) { 16433 16434 // If url is an object, simulate pre-1.5 signature 16435 if ( typeof url === "object" ) { 16436 options = url; 16437 url = undefined; 16438 } 16439 16440 // Force options to be an object 16441 options = options || {}; 16442 16443 var transport, 16444 16445 // URL without anti-cache param 16446 cacheURL, 16447 16448 // Response headers 16449 responseHeadersString, 16450 responseHeaders, 16451 16452 // timeout handle 16453 timeoutTimer, 16454 16455 // Url cleanup var 16456 urlAnchor, 16457 16458 // Request state (becomes false upon send and true upon completion) 16459 completed, 16460 16461 // To know if global events are to be dispatched 16462 fireGlobals, 16463 16464 // Loop variable 16465 i, 16466 16467 // uncached part of the url 16468 uncached, 16469 16470 // Create the final options object 16471 s = jQuery.ajaxSetup( {}, options ), 16472 16473 // Callbacks context 16474 callbackContext = s.context || s, 16475 16476 // Context for global events is callbackContext if it is a DOM node or jQuery collection 16477 globalEventContext = s.context && 16478 ( callbackContext.nodeType || callbackContext.jquery ) ? 16479 jQuery( callbackContext ) : 16480 jQuery.event, 16481 16482 // Deferreds 16483 deferred = jQuery.Deferred(), 16484 completeDeferred = jQuery.Callbacks( "once memory" ), 16485 16486 // Status-dependent callbacks 16487 statusCode = s.statusCode || {}, 16488 16489 // Headers (they are sent all at once) 16490 requestHeaders = {}, 16491 requestHeadersNames = {}, 16492 16493 // Default abort message 16494 strAbort = "canceled", 16495 16496 // Fake xhr 16497 jqXHR = { 16498 readyState: 0, 16499 16500 // Builds headers hashtable if needed 16501 getResponseHeader: function( key ) { 16502 var match; 16503 if ( completed ) { 16504 if ( !responseHeaders ) { 16505 responseHeaders = {}; 16506 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 16507 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 16508 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 16509 .concat( match[ 2 ] ); 16510 } 16511 } 16512 match = responseHeaders[ key.toLowerCase() + " " ]; 16513 } 16514 return match == null ? null : match.join( ", " ); 16515 }, 16516 16517 // Raw string 16518 getAllResponseHeaders: function() { 16519 return completed ? responseHeadersString : null; 16520 }, 16521 16522 // Caches the header 16523 setRequestHeader: function( name, value ) { 16524 if ( completed == null ) { 16525 name = requestHeadersNames[ name.toLowerCase() ] = 16526 requestHeadersNames[ name.toLowerCase() ] || name; 16527 requestHeaders[ name ] = value; 16528 } 16529 return this; 16530 }, 16531 16532 // Overrides response content-type header 16533 overrideMimeType: function( type ) { 16534 if ( completed == null ) { 16535 s.mimeType = type; 16536 } 16537 return this; 16538 }, 16539 16540 // Status-dependent callbacks 16541 statusCode: function( map ) { 16542 var code; 16543 if ( map ) { 16544 if ( completed ) { 16545 16546 // Execute the appropriate callbacks 16547 jqXHR.always( map[ jqXHR.status ] ); 16548 } else { 16549 16550 // Lazy-add the new callbacks in a way that preserves old ones 16551 for ( code in map ) { 16552 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 16553 } 16554 } 16555 } 16556 return this; 16557 }, 16558 16559 // Cancel the request 16560 abort: function( statusText ) { 16561 var finalText = statusText || strAbort; 16562 if ( transport ) { 16563 transport.abort( finalText ); 16564 } 16565 done( 0, finalText ); 16566 return this; 16567 } 16568 }; 16569 16570 // Attach deferreds 16571 deferred.promise( jqXHR ); 16572 16573 // Add protocol if not provided (prefilters might expect it) 16574 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 16575 // We also use the url parameter if available 16576 s.url = ( ( url || s.url || location.href ) + "" ) 16577 .replace( rprotocol, location.protocol + "//" ); 16578 16579 // Alias method option to type as per ticket trac-12004 16580 s.type = options.method || options.type || s.method || s.type; 16581 16582 // Extract dataTypes list 16583 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 16584 16585 // A cross-domain request is in order when the origin doesn't match the current origin. 16586 if ( s.crossDomain == null ) { 16587 urlAnchor = document.createElement( "a" ); 16588 16589 // Support: IE <=8 - 11, Edge 12 - 15 16590 // IE throws exception on accessing the href property if url is malformed, 16591 // e.g. http://example.com:80x/ 16592 try { 16593 urlAnchor.href = s.url; 16594 16595 // Support: IE <=8 - 11 only 16596 // Anchor's host property isn't correctly set when s.url is relative 16597 urlAnchor.href = urlAnchor.href; 16598 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 16599 urlAnchor.protocol + "//" + urlAnchor.host; 16600 } catch ( e ) { 16601 16602 // If there is an error parsing the URL, assume it is crossDomain, 16603 // it can be rejected by the transport if it is invalid 16604 s.crossDomain = true; 16605 } 16606 } 16607 16608 // Convert data if not already a string 16609 if ( s.data && s.processData && typeof s.data !== "string" ) { 16610 s.data = jQuery.param( s.data, s.traditional ); 16611 } 16612 16613 // Apply prefilters 16614 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 16615 16616 // If request was aborted inside a prefilter, stop there 16617 if ( completed ) { 16618 return jqXHR; 16619 } 16620 16621 // We can fire global events as of now if asked to 16622 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 16623 fireGlobals = jQuery.event && s.global; 16624 16625 // Watch for a new set of requests 16626 if ( fireGlobals && jQuery.active++ === 0 ) { 16627 jQuery.event.trigger( "ajaxStart" ); 16628 } 16629 16630 // Uppercase the type 16631 s.type = s.type.toUpperCase(); 16632 16633 // Determine if request has content 16634 s.hasContent = !rnoContent.test( s.type ); 16635 16636 // Save the URL in case we're toying with the If-Modified-Since 16637 // and/or If-None-Match header later on 16638 // Remove hash to simplify url manipulation 16639 cacheURL = s.url.replace( rhash, "" ); 16640 16641 // More options handling for requests with no content 16642 if ( !s.hasContent ) { 16643 16644 // Remember the hash so we can put it back 16645 uncached = s.url.slice( cacheURL.length ); 16646 16647 // If data is available and should be processed, append data to url 16648 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 16649 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 16650 16651 // trac-9682: remove data so that it's not used in an eventual retry 16652 delete s.data; 16653 } 16654 16655 // Add or update anti-cache param if needed 16656 if ( s.cache === false ) { 16657 cacheURL = cacheURL.replace( rantiCache, "$1" ); 16658 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 16659 uncached; 16660 } 16661 16662 // Put hash and anti-cache on the URL that will be requested (gh-1732) 16663 s.url = cacheURL + uncached; 16664 16665 // Change '%20' to '+' if this is encoded form body content (gh-2658) 16666 } else if ( s.data && s.processData && 16667 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 16668 s.data = s.data.replace( r20, "+" ); 16669 } 16670 16671 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 16672 if ( s.ifModified ) { 16673 if ( jQuery.lastModified[ cacheURL ] ) { 16674 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 16675 } 16676 if ( jQuery.etag[ cacheURL ] ) { 16677 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 16678 } 16679 } 16680 16681 // Set the correct header, if data is being sent 16682 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 16683 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 16684 } 16685 16686 // Set the Accepts header for the server, depending on the dataType 16687 jqXHR.setRequestHeader( 16688 "Accept", 16689 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 16690 s.accepts[ s.dataTypes[ 0 ] ] + 16691 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 16692 s.accepts[ "*" ] 16693 ); 16694 16695 // Check for headers option 16696 for ( i in s.headers ) { 16697 jqXHR.setRequestHeader( i, s.headers[ i ] ); 16698 } 16699 16700 // Allow custom headers/mimetypes and early abort 16701 if ( s.beforeSend && 16702 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 16703 16704 // Abort if not done already and return 16705 return jqXHR.abort(); 16706 } 16707 16708 // Aborting is no longer a cancellation 16709 strAbort = "abort"; 16710 16711 // Install callbacks on deferreds 16712 completeDeferred.add( s.complete ); 16713 jqXHR.done( s.success ); 16714 jqXHR.fail( s.error ); 16715 16716 // Get transport 16717 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 16718 16719 // If no transport, we auto-abort 16720 if ( !transport ) { 16721 done( -1, "No Transport" ); 16722 } else { 16723 jqXHR.readyState = 1; 16724 16725 // Send global event 16726 if ( fireGlobals ) { 16727 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 16728 } 16729 16730 // If request was aborted inside ajaxSend, stop there 16731 if ( completed ) { 16732 return jqXHR; 16733 } 16734 16735 // Timeout 16736 if ( s.async && s.timeout > 0 ) { 16737 timeoutTimer = window.setTimeout( function() { 16738 jqXHR.abort( "timeout" ); 16739 }, s.timeout ); 16740 } 16741 16742 try { 16743 completed = false; 16744 transport.send( requestHeaders, done ); 16745 } catch ( e ) { 16746 16747 // Rethrow post-completion exceptions 16748 if ( completed ) { 16749 throw e; 16750 } 16751 16752 // Propagate others as results 16753 done( -1, e ); 16754 } 16755 } 16756 16757 // Callback for when everything is done 16758 function done( status, nativeStatusText, responses, headers ) { 16759 var isSuccess, success, error, response, modified, 16760 statusText = nativeStatusText; 16761 16762 // Ignore repeat invocations 16763 if ( completed ) { 16764 return; 16765 } 16766 16767 completed = true; 16768 16769 // Clear timeout if it exists 16770 if ( timeoutTimer ) { 16771 window.clearTimeout( timeoutTimer ); 16772 } 16773 16774 // Dereference transport for early garbage collection 16775 // (no matter how long the jqXHR object will be used) 16776 transport = undefined; 16777 16778 // Cache response headers 16779 responseHeadersString = headers || ""; 16780 16781 // Set readyState 16782 jqXHR.readyState = status > 0 ? 4 : 0; 16783 16784 // Determine if successful 16785 isSuccess = status >= 200 && status < 300 || status === 304; 16786 16787 // Get response data 16788 if ( responses ) { 16789 response = ajaxHandleResponses( s, jqXHR, responses ); 16790 } 16791 16792 // Use a noop converter for missing script but not if jsonp 16793 if ( !isSuccess && 16794 jQuery.inArray( "script", s.dataTypes ) > -1 && 16795 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 16796 s.converters[ "text script" ] = function() {}; 16797 } 16798 16799 // Convert no matter what (that way responseXXX fields are always set) 16800 response = ajaxConvert( s, response, jqXHR, isSuccess ); 16801 16802 // If successful, handle type chaining 16803 if ( isSuccess ) { 16804 16805 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 16806 if ( s.ifModified ) { 16807 modified = jqXHR.getResponseHeader( "Last-Modified" ); 16808 if ( modified ) { 16809 jQuery.lastModified[ cacheURL ] = modified; 16810 } 16811 modified = jqXHR.getResponseHeader( "etag" ); 16812 if ( modified ) { 16813 jQuery.etag[ cacheURL ] = modified; 16814 } 16815 } 16816 16817 // if no content 16818 if ( status === 204 || s.type === "HEAD" ) { 16819 statusText = "nocontent"; 16820 16821 // if not modified 16822 } else if ( status === 304 ) { 16823 statusText = "notmodified"; 16824 16825 // If we have data, let's convert it 16826 } else { 16827 statusText = response.state; 16828 success = response.data; 16829 error = response.error; 16830 isSuccess = !error; 16831 } 16832 } else { 16833 16834 // Extract error from statusText and normalize for non-aborts 16835 error = statusText; 16836 if ( status || !statusText ) { 16837 statusText = "error"; 16838 if ( status < 0 ) { 16839 status = 0; 16840 } 16841 } 16842 } 16843 16844 // Set data for the fake xhr object 16845 jqXHR.status = status; 16846 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 16847 16848 // Success/Error 16849 if ( isSuccess ) { 16850 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 16851 } else { 16852 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 16853 } 16854 16855 // Status-dependent callbacks 16856 jqXHR.statusCode( statusCode ); 16857 statusCode = undefined; 16858 16859 if ( fireGlobals ) { 16860 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 16861 [ jqXHR, s, isSuccess ? success : error ] ); 16862 } 16863 16864 // Complete 16865 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 16866 16867 if ( fireGlobals ) { 16868 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 16869 16870 // Handle the global AJAX counter 16871 if ( !( --jQuery.active ) ) { 16872 jQuery.event.trigger( "ajaxStop" ); 16873 } 16874 } 16875 } 16876 16877 return jqXHR; 16878 }, 16879 16880 getJSON: function( url, data, callback ) { 16881 return jQuery.get( url, data, callback, "json" ); 16882 }, 16883 16884 getScript: function( url, callback ) { 16885 return jQuery.get( url, undefined, callback, "script" ); 16886 } 16887} ); 16888 16889jQuery.each( [ "get", "post" ], function( _i, method ) { 16890 jQuery[ method ] = function( url, data, callback, type ) { 16891 16892 // Shift arguments if data argument was omitted 16893 if ( isFunction( data ) ) { 16894 type = type || callback; 16895 callback = data; 16896 data = undefined; 16897 } 16898 16899 // The url can be an options object (which then must have .url) 16900 return jQuery.ajax( jQuery.extend( { 16901 url: url, 16902 type: method, 16903 dataType: type, 16904 data: data, 16905 success: callback 16906 }, jQuery.isPlainObject( url ) && url ) ); 16907 }; 16908} ); 16909 16910jQuery.ajaxPrefilter( function( s ) { 16911 var i; 16912 for ( i in s.headers ) { 16913 if ( i.toLowerCase() === "content-type" ) { 16914 s.contentType = s.headers[ i ] || ""; 16915 } 16916 } 16917} ); 16918 16919 16920jQuery._evalUrl = function( url, options, doc ) { 16921 return jQuery.ajax( { 16922 url: url, 16923 16924 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 16925 type: "GET", 16926 dataType: "script", 16927 cache: true, 16928 async: false, 16929 global: false, 16930 16931 // Only evaluate the response if it is successful (gh-4126) 16932 // dataFilter is not invoked for failure responses, so using it instead 16933 // of the default converter is kludgy but it works. 16934 converters: { 16935 "text script": function() {} 16936 }, 16937 dataFilter: function( response ) { 16938 jQuery.globalEval( response, options, doc ); 16939 } 16940 } ); 16941}; 16942 16943 16944jQuery.fn.extend( { 16945 wrapAll: function( html ) { 16946 var wrap; 16947 16948 if ( this[ 0 ] ) { 16949 if ( isFunction( html ) ) { 16950 html = html.call( this[ 0 ] ); 16951 } 16952 16953 // The elements to wrap the target around 16954 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 16955 16956 if ( this[ 0 ].parentNode ) { 16957 wrap.insertBefore( this[ 0 ] ); 16958 } 16959 16960 wrap.map( function() { 16961 var elem = this; 16962 16963 while ( elem.firstElementChild ) { 16964 elem = elem.firstElementChild; 16965 } 16966 16967 return elem; 16968 } ).append( this ); 16969 } 16970 16971 return this; 16972 }, 16973 16974 wrapInner: function( html ) { 16975 if ( isFunction( html ) ) { 16976 return this.each( function( i ) { 16977 jQuery( this ).wrapInner( html.call( this, i ) ); 16978 } ); 16979 } 16980 16981 return this.each( function() { 16982 var self = jQuery( this ), 16983 contents = self.contents(); 16984 16985 if ( contents.length ) { 16986 contents.wrapAll( html ); 16987 16988 } else { 16989 self.append( html ); 16990 } 16991 } ); 16992 }, 16993 16994 wrap: function( html ) { 16995 var htmlIsFunction = isFunction( html ); 16996 16997 return this.each( function( i ) { 16998 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 16999 } ); 17000 }, 17001 17002 unwrap: function( selector ) { 17003 this.parent( selector ).not( "body" ).each( function() { 17004 jQuery( this ).replaceWith( this.childNodes ); 17005 } ); 17006 return this; 17007 } 17008} ); 17009 17010 17011jQuery.expr.pseudos.hidden = function( elem ) { 17012 return !jQuery.expr.pseudos.visible( elem ); 17013}; 17014jQuery.expr.pseudos.visible = function( elem ) { 17015 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 17016}; 17017 17018 17019 17020 17021jQuery.ajaxSettings.xhr = function() { 17022 try { 17023 return new window.XMLHttpRequest(); 17024 } catch ( e ) {} 17025}; 17026 17027var xhrSuccessStatus = { 17028 17029 // File protocol always yields status code 0, assume 200 17030 0: 200, 17031 17032 // Support: IE <=9 only 17033 // trac-1450: sometimes IE returns 1223 when it should be 204 17034 1223: 204 17035 }, 17036 xhrSupported = jQuery.ajaxSettings.xhr(); 17037 17038support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 17039support.ajax = xhrSupported = !!xhrSupported; 17040 17041jQuery.ajaxTransport( function( options ) { 17042 var callback, errorCallback; 17043 17044 // Cross domain only allowed if supported through XMLHttpRequest 17045 if ( support.cors || xhrSupported && !options.crossDomain ) { 17046 return { 17047 send: function( headers, complete ) { 17048 var i, 17049 xhr = options.xhr(); 17050 17051 xhr.open( 17052 options.type, 17053 options.url, 17054 options.async, 17055 options.username, 17056 options.password 17057 ); 17058 17059 // Apply custom fields if provided 17060 if ( options.xhrFields ) { 17061 for ( i in options.xhrFields ) { 17062 xhr[ i ] = options.xhrFields[ i ]; 17063 } 17064 } 17065 17066 // Override mime type if needed 17067 if ( options.mimeType && xhr.overrideMimeType ) { 17068 xhr.overrideMimeType( options.mimeType ); 17069 } 17070 17071 // X-Requested-With header 17072 // For cross-domain requests, seeing as conditions for a preflight are 17073 // akin to a jigsaw puzzle, we simply never set it to be sure. 17074 // (it can always be set on a per-request basis or even using ajaxSetup) 17075 // For same-domain requests, won't change header if already provided. 17076 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 17077 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 17078 } 17079 17080 // Set headers 17081 for ( i in headers ) { 17082 xhr.setRequestHeader( i, headers[ i ] ); 17083 } 17084 17085 // Callback 17086 callback = function( type ) { 17087 return function() { 17088 if ( callback ) { 17089 callback = errorCallback = xhr.onload = 17090 xhr.onerror = xhr.onabort = xhr.ontimeout = 17091 xhr.onreadystatechange = null; 17092 17093 if ( type === "abort" ) { 17094 xhr.abort(); 17095 } else if ( type === "error" ) { 17096 17097 // Support: IE <=9 only 17098 // On a manual native abort, IE9 throws 17099 // errors on any property access that is not readyState 17100 if ( typeof xhr.status !== "number" ) { 17101 complete( 0, "error" ); 17102 } else { 17103 complete( 17104 17105 // File: protocol always yields status 0; see trac-8605, trac-14207 17106 xhr.status, 17107 xhr.statusText 17108 ); 17109 } 17110 } else { 17111 complete( 17112 xhrSuccessStatus[ xhr.status ] || xhr.status, 17113 xhr.statusText, 17114 17115 // Support: IE <=9 only 17116 // IE9 has no XHR2 but throws on binary (trac-11426) 17117 // For XHR2 non-text, let the caller handle it (gh-2498) 17118 ( xhr.responseType || "text" ) !== "text" || 17119 typeof xhr.responseText !== "string" ? 17120 { binary: xhr.response } : 17121 { text: xhr.responseText }, 17122 xhr.getAllResponseHeaders() 17123 ); 17124 } 17125 } 17126 }; 17127 }; 17128 17129 // Listen to events 17130 xhr.onload = callback(); 17131 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 17132 17133 // Support: IE 9 only 17134 // Use onreadystatechange to replace onabort 17135 // to handle uncaught aborts 17136 if ( xhr.onabort !== undefined ) { 17137 xhr.onabort = errorCallback; 17138 } else { 17139 xhr.onreadystatechange = function() { 17140 17141 // Check readyState before timeout as it changes 17142 if ( xhr.readyState === 4 ) { 17143 17144 // Allow onerror to be called first, 17145 // but that will not handle a native abort 17146 // Also, save errorCallback to a variable 17147 // as xhr.onerror cannot be accessed 17148 window.setTimeout( function() { 17149 if ( callback ) { 17150 errorCallback(); 17151 } 17152 } ); 17153 } 17154 }; 17155 } 17156 17157 // Create the abort callback 17158 callback = callback( "abort" ); 17159 17160 try { 17161 17162 // Do send the request (this may raise an exception) 17163 xhr.send( options.hasContent && options.data || null ); 17164 } catch ( e ) { 17165 17166 // trac-14683: Only rethrow if this hasn't been notified as an error yet 17167 if ( callback ) { 17168 throw e; 17169 } 17170 } 17171 }, 17172 17173 abort: function() { 17174 if ( callback ) { 17175 callback(); 17176 } 17177 } 17178 }; 17179 } 17180} ); 17181 17182 17183 17184 17185// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 17186jQuery.ajaxPrefilter( function( s ) { 17187 if ( s.crossDomain ) { 17188 s.contents.script = false; 17189 } 17190} ); 17191 17192// Install script dataType 17193jQuery.ajaxSetup( { 17194 accepts: { 17195 script: "text/javascript, application/javascript, " + 17196 "application/ecmascript, application/x-ecmascript" 17197 }, 17198 contents: { 17199 script: /\b(?:java|ecma)script\b/ 17200 }, 17201 converters: { 17202 "text script": function( text ) { 17203 jQuery.globalEval( text ); 17204 return text; 17205 } 17206 } 17207} ); 17208 17209// Handle cache's special case and crossDomain 17210jQuery.ajaxPrefilter( "script", function( s ) { 17211 if ( s.cache === undefined ) { 17212 s.cache = false; 17213 } 17214 if ( s.crossDomain ) { 17215 s.type = "GET"; 17216 } 17217} ); 17218 17219// Bind script tag hack transport 17220jQuery.ajaxTransport( "script", function( s ) { 17221 17222 // This transport only deals with cross domain or forced-by-attrs requests 17223 if ( s.crossDomain || s.scriptAttrs ) { 17224 var script, callback; 17225 return { 17226 send: function( _, complete ) { 17227 script = jQuery( "<script>" ) 17228 .attr( s.scriptAttrs || {} ) 17229 .prop( { charset: s.scriptCharset, src: s.url } ) 17230 .on( "load error", callback = function( evt ) { 17231 script.remove(); 17232 callback = null; 17233 if ( evt ) { 17234 complete( evt.type === "error" ? 404 : 200, evt.type ); 17235 } 17236 } ); 17237 17238 // Use native DOM manipulation to avoid our domManip AJAX trickery 17239 document.head.appendChild( script[ 0 ] ); 17240 }, 17241 abort: function() { 17242 if ( callback ) { 17243 callback(); 17244 } 17245 } 17246 }; 17247 } 17248} ); 17249 17250 17251 17252 17253var oldCallbacks = [], 17254 rjsonp = /(=)\?(?=&|$)|\?\?/; 17255 17256// Default jsonp settings 17257jQuery.ajaxSetup( { 17258 jsonp: "callback", 17259 jsonpCallback: function() { 17260 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 17261 this[ callback ] = true; 17262 return callback; 17263 } 17264} ); 17265 17266// Detect, normalize options and install callbacks for jsonp requests 17267jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 17268 17269 var callbackName, overwritten, responseContainer, 17270 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 17271 "url" : 17272 typeof s.data === "string" && 17273 ( s.contentType || "" ) 17274 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 17275 rjsonp.test( s.data ) && "data" 17276 ); 17277 17278 // Handle iff the expected data type is "jsonp" or we have a parameter to set 17279 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 17280 17281 // Get callback name, remembering preexisting value associated with it 17282 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 17283 s.jsonpCallback() : 17284 s.jsonpCallback; 17285 17286 // Insert callback into url or form data 17287 if ( jsonProp ) { 17288 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 17289 } else if ( s.jsonp !== false ) { 17290 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 17291 } 17292 17293 // Use data converter to retrieve json after script execution
vendor: 8,362 bytes, lines 17294-17605
17294 s.converters[ "script json" ] = function() { 17295 if ( !responseContainer ) { 17296 jQuery.error( callbackName + " was not called" ); 17297 } 17298 return responseContainer[ 0 ]; 17299 }; 17300 17301 // Force json dataType 17302 s.dataTypes[ 0 ] = "json"; 17303 17304 // Install callback 17305 overwritten = window[ callbackName ]; 17306 window[ callbackName ] = function() { 17307 responseContainer = arguments; 17308 }; 17309 17310 // Clean-up function (fires after converters) 17311 jqXHR.always( function() { 17312 17313 // If previous value didn't exist - remove it 17314 if ( overwritten === undefined ) { 17315 jQuery( window ).removeProp( callbackName ); 17316 17317 // Otherwise restore preexisting value 17318 } else { 17319 window[ callbackName ] = overwritten; 17320 } 17321 17322 // Save back as free 17323 if ( s[ callbackName ] ) { 17324 17325 // Make sure that re-using the options doesn't screw things around 17326 s.jsonpCallback = originalSettings.jsonpCallback; 17327 17328 // Save the callback name for future use 17329 oldCallbacks.push( callbackName ); 17330 } 17331 17332 // Call if it was a function and we have a response 17333 if ( responseContainer && isFunction( overwritten ) ) { 17334 overwritten( responseContainer[ 0 ] ); 17335 } 17336 17337 responseContainer = overwritten = undefined; 17338 } ); 17339 17340 // Delegate to script 17341 return "script"; 17342 } 17343} ); 17344 17345 17346 17347 17348// Support: Safari 8 only 17349// In Safari 8 documents created via document.implementation.createHTMLDocument 17350// collapse sibling forms: the second one becomes a child of the first one. 17351// Because of that, this security measure has to be disabled in Safari 8. 17352// https://bugs.webkit.org/show_bug.cgi?id=137337 17353support.createHTMLDocument = ( function() { 17354 var body = document.implementation.createHTMLDocument( "" ).body; 17355 body.innerHTML = "<form></form><form></form>"; 17356 return body.childNodes.length === 2; 17357} )(); 17358 17359 17360// Argument "data" should be string of html 17361// context (optional): If specified, the fragment will be created in this context, 17362// defaults to document 17363// keepScripts (optional): If true, will include scripts passed in the html string 17364jQuery.parseHTML = function( data, context, keepScripts ) { 17365 if ( typeof data !== "string" ) { 17366 return []; 17367 } 17368 if ( typeof context === "boolean" ) { 17369 keepScripts = context; 17370 context = false; 17371 } 17372 17373 var base, parsed, scripts; 17374 17375 if ( !context ) { 17376 17377 // Stop scripts or inline event handlers from being executed immediately 17378 // by using document.implementation 17379 if ( support.createHTMLDocument ) { 17380 context = document.implementation.createHTMLDocument( "" ); 17381 17382 // Set the base href for the created document 17383 // so any parsed elements with URLs 17384 // are based on the document's URL (gh-2965) 17385 base = context.createElement( "base" ); 17386 base.href = document.location.href; 17387 context.head.appendChild( base ); 17388 } else { 17389 context = document; 17390 } 17391 } 17392 17393 parsed = rsingleTag.exec( data ); 17394 scripts = !keepScripts && []; 17395 17396 // Single tag 17397 if ( parsed ) { 17398 return [ context.createElement( parsed[ 1 ] ) ]; 17399 } 17400 17401 parsed = buildFragment( [ data ], context, scripts ); 17402 17403 if ( scripts && scripts.length ) { 17404 jQuery( scripts ).remove(); 17405 } 17406 17407 return jQuery.merge( [], parsed.childNodes ); 17408}; 17409 17410 17411/** 17412 * Load a url into a page 17413 */ 17414jQuery.fn.load = function( url, params, callback ) { 17415 var selector, type, response, 17416 self = this, 17417 off = url.indexOf( " " ); 17418 17419 if ( off > -1 ) { 17420 selector = stripAndCollapse( url.slice( off ) ); 17421 url = url.slice( 0, off ); 17422 } 17423 17424 // If it's a function 17425 if ( isFunction( params ) ) { 17426 17427 // We assume that it's the callback 17428 callback = params; 17429 params = undefined; 17430 17431 // Otherwise, build a param string 17432 } else if ( params && typeof params === "object" ) { 17433 type = "POST"; 17434 } 17435 17436 // If we have elements to modify, make the request 17437 if ( self.length > 0 ) { 17438 jQuery.ajax( { 17439 url: url, 17440 17441 // If "type" variable is undefined, then "GET" method will be used. 17442 // Make value of this field explicit since 17443 // user can override it through ajaxSetup method 17444 type: type || "GET", 17445 dataType: "html", 17446 data: params 17447 } ).done( function( responseText ) { 17448 17449 // Save response for use in complete callback 17450 response = arguments; 17451 17452 self.html( selector ? 17453 17454 // If a selector was specified, locate the right elements in a dummy div 17455 // Exclude scripts to avoid IE 'Permission Denied' errors 17456 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 17457 17458 // Otherwise use the full result 17459 responseText ); 17460 17461 // If the request succeeds, this function gets "data", "status", "jqXHR" 17462 // but they are ignored because response was set above. 17463 // If it fails, this function gets "jqXHR", "status", "error" 17464 } ).always( callback && function( jqXHR, status ) { 17465 self.each( function() { 17466 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 17467 } ); 17468 } ); 17469 } 17470 17471 return this; 17472}; 17473 17474 17475 17476 17477jQuery.expr.pseudos.animated = function( elem ) { 17478 return jQuery.grep( jQuery.timers, function( fn ) { 17479 return elem === fn.elem; 17480 } ).length; 17481}; 17482 17483 17484 17485 17486jQuery.offset = { 17487 setOffset: function( elem, options, i ) { 17488 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 17489 position = jQuery.css( elem, "position" ), 17490 curElem = jQuery( elem ), 17491 props = {}; 17492 17493 // Set position first, in-case top/left are set even on static elem 17494 if ( position === "static" ) { 17495 elem.style.position = "relative"; 17496 } 17497 17498 curOffset = curElem.offset(); 17499 curCSSTop = jQuery.css( elem, "top" ); 17500 curCSSLeft = jQuery.css( elem, "left" ); 17501 calculatePosition = ( position === "absolute" || position === "fixed" ) && 17502 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 17503 17504 // Need to be able to calculate position if either 17505 // top or left is auto and position is either absolute or fixed 17506 if ( calculatePosition ) { 17507 curPosition = curElem.position(); 17508 curTop = curPosition.top; 17509 curLeft = curPosition.left; 17510 17511 } else { 17512 curTop = parseFloat( curCSSTop ) || 0; 17513 curLeft = parseFloat( curCSSLeft ) || 0; 17514 } 17515 17516 if ( isFunction( options ) ) { 17517 17518 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 17519 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 17520 } 17521 17522 if ( options.top != null ) { 17523 props.top = ( options.top - curOffset.top ) + curTop; 17524 } 17525 if ( options.left != null ) { 17526 props.left = ( options.left - curOffset.left ) + curLeft; 17527 } 17528 17529 if ( "using" in options ) { 17530 options.using.call( elem, props ); 17531 17532 } else { 17533 curElem.css( props ); 17534 } 17535 } 17536}; 17537 17538jQuery.fn.extend( { 17539 17540 // offset() relates an element's border box to the document origin 17541 offset: function( options ) { 17542 17543 // Preserve chaining for setter 17544 if ( arguments.length ) { 17545 return options === undefined ? 17546 this : 17547 this.each( function( i ) { 17548 jQuery.offset.setOffset( this, options, i ); 17549 } ); 17550 } 17551 17552 var rect, win, 17553 elem = this[ 0 ]; 17554 17555 if ( !elem ) { 17556 return; 17557 } 17558 17559 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 17560 // Support: IE <=11 only 17561 // Running getBoundingClientRect on a 17562 // disconnected node in IE throws an error 17563 if ( !elem.getClientRects().length ) { 17564 return { top: 0, left: 0 }; 17565 } 17566 17567 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 17568 rect = elem.getBoundingClientRect(); 17569 win = elem.ownerDocument.defaultView; 17570 return { 17571 top: rect.top + win.pageYOffset, 17572 left: rect.left + win.pageXOffset 17573 }; 17574 }, 17575 17576 // position() relates an element's margin box to its offset parent's padding box 17577 // This corresponds to the behavior of CSS absolute positioning 17578 position: function() { 17579 if ( !this[ 0 ] ) { 17580 return; 17581 } 17582 17583 var offsetParent, offset, doc, 17584 elem = this[ 0 ], 17585 parentOffset = { top: 0, left: 0 }; 17586 17587 // position:fixed elements are offset from the viewport, which itself always has zero offset 17588 if ( jQuery.css( elem, "position" ) === "fixed" ) { 17589 17590 // Assume position:fixed implies availability of getBoundingClientRect 17591 offset = elem.getBoundingClientRect(); 17592 17593 } else { 17594 offset = this.offset(); 17595 17596 // Account for the *real* offset parent, which can be the document or its root element 17597 // when a statically positioned element is identified 17598 doc = elem.ownerDocument; 17599 offsetParent = elem.offsetParent || doc.documentElement; 17600 while ( offsetParent && 17601 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 17602 jQuery.css( offsetParent, "position" ) === "static" ) { 17603 17604 offsetParent = offsetParent.parentNode; 17605 }
vendor: 9,494 bytes, lines 17606-17937
17606 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 17607 17608 // Incorporate borders into its offset, since they are outside its content origin 17609 parentOffset = jQuery( offsetParent ).offset(); 17610 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 17611 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 17612 } 17613 } 17614 17615 // Subtract parent offsets and element margins 17616 return { 17617 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 17618 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 17619 }; 17620 }, 17621 17622 // This method will return documentElement in the following cases: 17623 // 1) For the element inside the iframe without offsetParent, this method will return 17624 // documentElement of the parent window 17625 // 2) For the hidden or detached element 17626 // 3) For body or html element, i.e. in case of the html node - it will return itself 17627 // 17628 // but those exceptions were never presented as a real life use-cases 17629 // and might be considered as more preferable results. 17630 // 17631 // This logic, however, is not guaranteed and can change at any point in the future 17632 offsetParent: function() { 17633 return this.map( function() { 17634 var offsetParent = this.offsetParent; 17635 17636 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 17637 offsetParent = offsetParent.offsetParent; 17638 } 17639 17640 return offsetParent || documentElement; 17641 } ); 17642 } 17643} ); 17644 17645// Create scrollLeft and scrollTop methods 17646jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 17647 var top = "pageYOffset" === prop; 17648 17649 jQuery.fn[ method ] = function( val ) { 17650 return access( this, function( elem, method, val ) { 17651 17652 // Coalesce documents and windows 17653 var win; 17654 if ( isWindow( elem ) ) { 17655 win = elem; 17656 } else if ( elem.nodeType === 9 ) { 17657 win = elem.defaultView; 17658 } 17659 17660 if ( val === undefined ) { 17661 return win ? win[ prop ] : elem[ method ]; 17662 } 17663 17664 if ( win ) { 17665 win.scrollTo( 17666 !top ? val : win.pageXOffset, 17667 top ? val : win.pageYOffset 17668 ); 17669 17670 } else { 17671 elem[ method ] = val; 17672 } 17673 }, method, val, arguments.length ); 17674 }; 17675} ); 17676 17677// Support: Safari <=7 - 9.1, Chrome <=37 - 49 17678// Add the top/left cssHooks using jQuery.fn.position 17679// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 17680// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 17681// getComputedStyle returns percent when specified for top/left/bottom/right; 17682// rather than make the css module depend on the offset module, just check for it here 17683jQuery.each( [ "top", "left" ], function( _i, prop ) { 17684 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 17685 function( elem, computed ) { 17686 if ( computed ) { 17687 computed = curCSS( elem, prop ); 17688 17689 // If curCSS returns percentage, fallback to offset 17690 return rnumnonpx.test( computed ) ? 17691 jQuery( elem ).position()[ prop ] + "px" : 17692 computed; 17693 } 17694 } 17695 ); 17696} ); 17697 17698 17699// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 17700jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 17701 jQuery.each( { 17702 padding: "inner" + name, 17703 content: type, 17704 "": "outer" + name 17705 }, function( defaultExtra, funcName ) { 17706 17707 // Margin is only for outerHeight, outerWidth 17708 jQuery.fn[ funcName ] = function( margin, value ) { 17709 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 17710 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 17711 17712 return access( this, function( elem, type, value ) { 17713 var doc; 17714 17715 if ( isWindow( elem ) ) { 17716 17717 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 17718 return funcName.indexOf( "outer" ) === 0 ? 17719 elem[ "inner" + name ] : 17720 elem.document.documentElement[ "client" + name ]; 17721 } 17722 17723 // Get document width or height 17724 if ( elem.nodeType === 9 ) { 17725 doc = elem.documentElement; 17726 17727 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 17728 // whichever is greatest 17729 return Math.max( 17730 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 17731 elem.body[ "offset" + name ], doc[ "offset" + name ], 17732 doc[ "client" + name ] 17733 ); 17734 } 17735 17736 return value === undefined ? 17737 17738 // Get width or height on the element, requesting but not forcing parseFloat 17739 jQuery.css( elem, type, extra ) : 17740 17741 // Set width or height on the element 17742 jQuery.style( elem, type, value, extra ); 17743 }, type, chainable ? margin : undefined, chainable ); 17744 }; 17745 } ); 17746} ); 17747 17748 17749jQuery.each( [ 17750 "ajaxStart", 17751 "ajaxStop", 17752 "ajaxComplete", 17753 "ajaxError", 17754 "ajaxSuccess", 17755 "ajaxSend" 17756], function( _i, type ) { 17757 jQuery.fn[ type ] = function( fn ) { 17758 return this.on( type, fn ); 17759 }; 17760} ); 17761 17762 17763 17764 17765jQuery.fn.extend( { 17766 17767 bind: function( types, data, fn ) { 17768 return this.on( types, null, data, fn ); 17769 }, 17770 unbind: function( types, fn ) { 17771 return this.off( types, null, fn ); 17772 }, 17773 17774 delegate: function( selector, types, data, fn ) { 17775 return this.on( types, selector, data, fn ); 17776 }, 17777 undelegate: function( selector, types, fn ) { 17778 17779 // ( namespace ) or ( selector, types [, fn] ) 17780 return arguments.length === 1 ? 17781 this.off( selector, "**" ) : 17782 this.off( types, selector || "**", fn ); 17783 }, 17784 17785 hover: function( fnOver, fnOut ) { 17786 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 17787 } 17788} ); 17789 17790jQuery.each( 17791 ( "blur focus focusin focusout resize scroll click dblclick " + 17792 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 17793 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 17794 function( _i, name ) { 17795 17796 // Handle event binding 17797 jQuery.fn[ name ] = function( data, fn ) { 17798 return arguments.length > 0 ? 17799 this.on( name, null, data, fn ) : 17800 this.trigger( name ); 17801 }; 17802 } 17803); 17804 17805 17806 17807 17808// Support: Android <=4.0 only 17809// Make sure we trim BOM and NBSP 17810// Require that the "whitespace run" starts from a non-whitespace 17811// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 17812var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 17813 17814// Bind a function to a context, optionally partially applying any 17815// arguments. 17816// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 17817// However, it is not slated for removal any time soon 17818jQuery.proxy = function( fn, context ) { 17819 var tmp, args, proxy; 17820 17821 if ( typeof context === "string" ) { 17822 tmp = fn[ context ]; 17823 context = fn; 17824 fn = tmp; 17825 } 17826 17827 // Quick check to determine if target is callable, in the spec 17828 // this throws a TypeError, but we will just return undefined. 17829 if ( !isFunction( fn ) ) { 17830 return undefined; 17831 } 17832 17833 // Simulated bind 17834 args = slice.call( arguments, 2 ); 17835 proxy = function() { 17836 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 17837 }; 17838 17839 // Set the guid of unique handler to the same of original handler, so it can be removed 17840 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 17841 17842 return proxy; 17843}; 17844 17845jQuery.holdReady = function( hold ) { 17846 if ( hold ) { 17847 jQuery.readyWait++; 17848 } else { 17849 jQuery.ready( true ); 17850 } 17851}; 17852jQuery.isArray = Array.isArray; 17853jQuery.parseJSON = JSON.parse; 17854jQuery.nodeName = nodeName; 17855jQuery.isFunction = isFunction; 17856jQuery.isWindow = isWindow; 17857jQuery.camelCase = camelCase; 17858jQuery.type = toType; 17859 17860jQuery.now = Date.now; 17861 17862jQuery.isNumeric = function( obj ) { 17863 17864 // As of jQuery 3.0, isNumeric is limited to 17865 // strings and numbers (primitives or objects) 17866 // that can be coerced to finite numbers (gh-2662) 17867 var type = jQuery.type( obj ); 17868 return ( type === "number" || type === "string" ) && 17869 17870 // parseFloat NaNs numeric-cast false positives ("") 17871 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 17872 // subtraction forces infinities to NaN 17873 !isNaN( obj - parseFloat( obj ) ); 17874}; 17875 17876jQuery.trim = function( text ) { 17877 return text == null ? 17878 "" : 17879 ( text + "" ).replace( rtrim, "$1" ); 17880}; 17881 17882 17883 17884// Register as a named AMD module, since jQuery can be concatenated with other 17885// files that may use define, but not via a proper concatenation script that 17886// understands anonymous AMD modules. A named AMD is safest and most robust 17887// way to register. Lowercase jquery is used because AMD module names are 17888// derived from file names, and jQuery is normally delivered in a lowercase 17889// file name. Do this after creating the global so that if an AMD module wants 17890// to call noConflict to hide this version of jQuery, it will work. 17891 17892// Note that for maximum portability, libraries that are not jQuery should 17893// declare themselves as anonymous modules, and avoid setting a global if an 17894// AMD loader is present. jQuery is a special case. For more information, see 17895// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 17896 17897if ( typeof define === "function" && define.amd ) { 17898 define( "jquery", [], function() { 17899 return jQuery; 17900 } ); 17901} 17902 17903 17904 17905 17906var 17907 17908 // Map over jQuery in case of overwrite 17909 _jQuery = window.jQuery, 17910 17911 // Map over the $ in case of overwrite 17912 _$ = window.$; 17913 17914jQuery.noConflict = function( deep ) { 17915 if ( window.$ === jQuery ) { 17916 window.$ = _$; 17917 } 17918 17919 if ( deep && window.jQuery === jQuery ) { 17920 window.jQuery = _jQuery; 17921 } 17922 17923 return jQuery; 17924}; 17925 17926// Expose jQuery and $ identifiers, even in AMD 17927// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 17928// and CommonJS for browser emulators (trac-13566) 17929if ( typeof noGlobal === "undefined" ) { 17930 window.jQuery = window.$ = jQuery; 17931} 17932 17933 17934 17935 17936return jQuery; 17937} );
vendor: 3,339 bytes, lines 17938-18030
17938 17939},{}],64:[function(require,module,exports){ 17940// shim for using process in browser 17941var process = module.exports = {}; 17942 17943// cached from whatever global is present so that test runners that stub it 17944// don't break things. But we need to wrap it in a try catch in case it is 17945// wrapped in strict mode code which doesn't define any globals. It's inside a 17946// function because try/catches deoptimize in certain engines. 17947 17948var cachedSetTimeout; 17949var cachedClearTimeout; 17950 17951function defaultSetTimout() { 17952 throw new Error('setTimeout has not been defined'); 17953} 17954function defaultClearTimeout () { 17955 throw new Error('clearTimeout has not been defined'); 17956} 17957(function () { 17958 try { 17959 if (typeof setTimeout === 'function') { 17960 cachedSetTimeout = setTimeout; 17961 } else { 17962 cachedSetTimeout = defaultSetTimout; 17963 } 17964 } catch (e) { 17965 cachedSetTimeout = defaultSetTimout; 17966 } 17967 try { 17968 if (typeof clearTimeout === 'function') { 17969 cachedClearTimeout = clearTimeout; 17970 } else { 17971 cachedClearTimeout = defaultClearTimeout; 17972 } 17973 } catch (e) { 17974 cachedClearTimeout = defaultClearTimeout; 17975 } 17976} ()) 17977function runTimeout(fun) { 17978 if (cachedSetTimeout === setTimeout) { 17979 //normal enviroments in sane situations 17980 return setTimeout(fun, 0); 17981 } 17982 // if setTimeout wasn't available but was latter defined 17983 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 17984 cachedSetTimeout = setTimeout; 17985 return setTimeout(fun, 0); 17986 } 17987 try { 17988 // when when somebody has screwed with setTimeout but no I.E. maddness 17989 return cachedSetTimeout(fun, 0); 17990 } catch(e){ 17991 try { 17992 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 17993 return cachedSetTimeout.call(null, fun, 0); 17994 } catch(e){ 17995 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 17996 return cachedSetTimeout.call(this, fun, 0); 17997 } 17998 } 17999 18000 18001} 18002function runClearTimeout(marker) { 18003 if (cachedClearTimeout === clearTimeout) { 18004 //normal enviroments in sane situations 18005 return clearTimeout(marker); 18006 } 18007 // if clearTimeout wasn't available but was latter defined 18008 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 18009 cachedClearTimeout = clearTimeout; 18010 return clearTimeout(marker); 18011 } 18012 try { 18013 // when when somebody has screwed with setTimeout but no I.E. maddness 18014 return cachedClearTimeout(marker); 18015 } catch (e){ 18016 try { 18017 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 18018 return cachedClearTimeout.call(null, marker); 18019 } catch (e){ 18020 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 18021 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 18022 return cachedClearTimeout.call(this, marker); 18023 } 18024 } 18025 18026 18027 18028} 18029var queue = []; 18030var draining = false;
18031var currentQueue; 18032var queueIndex = -1; 18033 18034function cleanUpNextTick() { 18035 if (!draining || !currentQueue) { 18036 return; 18037 } 18038 draining = false; 18039 if (currentQueue.length) { 18040 queue = currentQueue.concat(queue); 18041 } else { 18042 queueIndex = -1; 18043 } 18044 if (queue.length) { 18045 drainQueue(); 18046 } 18047} 18048 18049function drainQueue() { 18050 if (draining) { 18051 return; 18052 } 18053 var timeout = runTimeout(cleanUpNextTick); 18054 draining = true; 18055 18056 var len = queue.length; 18057 while(len) { 18058 currentQueue = queue; 18059 queue = []; 18060 while (++queueIndex < len) { 18061 if (currentQueue) { 18062 currentQueue[queueIndex].run(); 18063 } 18064 } 18065 queueIndex = -1; 18066 len = queue.length; 18067 } 18068 currentQueue = null; 18069 draining = false; 18070 runClearTimeout(timeout); 18071} 18072 18073process.nextTick = function (fun) { 18074 var args = new Array(arguments.length - 1); 18075 if (arguments.length > 1) { 18076 for (var i = 1; i < arguments.length; i++) { 18077 args[i - 1] = arguments[i]; 18078 } 18079 } 18080 queue.push(new Item(fun, args)); 18081 if (queue.length === 1 && !draining) { 18082 runTimeout(drainQueue); 18083 } 18084}; 18085 18086// v8 likes predictible objects 18087function Item(fun, array) { 18088 this.fun = fun; 18089 this.array = array; 18090} 18091Item.prototype.run = function () { 18092 this.fun.apply(null, this.array); 18093}; 18094process.title = 'browser'; 18095process.browser = true; 18096process.env = {}; 18097process.argv = []; 18098process.version = ''; // empty string to avoid regexp issues 18099process.versions = {}; 18100 18101function noop() {} 18102 18103process.on = noop; 18104process.addListener = noop; 18105process.once = noop; 18106process.off = noop; 18107process.removeListener = noop; 18108process.removeAllListeners = noop; 18109process.emit = noop; 18110process.prependListener = noop; 18111process.prependOnceListener = noop; 18112 18113process.listeners = function (name) { return [] } 18114 18115process.binding = function (name) { 18116 throw new Error('process.binding is not supported'); 18117}; 18118 18119process.cwd = function () { return '/' }; 18120process.chdir = function (dir) { 18121 throw new Error('process.chdir is not supported'); 18122}; 18123process.umask = function() { return 0; }; 18124 18125},{}],65:[function(require,module,exports){ 18126"use strict"; 18127 18128var _jquery = _interopRequireDefault(require("jquery")); 18129function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 18130window.jQuery = _jquery.default; 18131window.$ = _jquery.default; 18132require("jquery.cookie"); 18133const bootstrap = window.bootstrap = require('bootstrap'); 18134(0, _jquery.default)(document).ready(function () { 18135 console.log("Ninja is ready, mam jquery=", _jquery.default, "mam bootstrap=", bootstrap); 18136 Ninja.init({ 18137 debug: true 18138 }); 18139 (0, _jquery.default)('.pb-autoaccordion .md-accordion-header').each(function () { 18140 (0, _jquery.default)(this).on('click', function () { 18141 (0, _jquery.default)(this).parent().toggleClass('open'); 18142 (0, _jquery.default)(this).parent().siblings().children().next().slideUp(); 18143 (0, _jquery.default)(this).parent().siblings().removeClass('open'); 18144 (0, _jquery.default)(this).next().slideToggle(); 18145 }); 18146 }); 18147 if ((0, _jquery.default)('.md-tabs .tab-content .tab-pane').length > 0) { 18148 (0, _jquery.default)('.md-tabs .tab-content .tab-pane').each(function (i) { 18149 (0, _jquery.default)(this).attr('data-position', i); 18150 }); 18151 } 18152 if ((0, _jquery.default)('.pb-autotabs .nav-item').length > 0) { 18153 (0, _jquery.default)('.pb-autotabs .nav-item').each(function (i) { 18154 (0, _jquery.default)(this).find('.nav-link').attr('data-position', i); 18155 (0, _jquery.default)(this).find('.nav-link').on('click', function () { 18156 var tabContentElement = (0, _jquery.default)(this).closest('.tabsBox').next().find('[data-position=' + (0, _jquery.default)(this).data('position') + ']'); 18157 (0, _jquery.default)(this).parent().siblings().find('.nav-link').removeClass('active show'); 18158 (0, _jquery.default)(this).parent().siblings().removeClass('active'); 18159 (0, _jquery.default)(this).addClass('active show'); 18160 (0, _jquery.default)(this).parent().addClass('active'); 18161 (0, _jquery.default)(this).closest('.tabsBox').next().find('.tab-pane').removeClass('active show'); 18162 tabContentElement.addClass('show active'); 18163 return false;
18164 }); 18165 }); 18166 } 18167 (0, _jquery.default)(document).on('click', '.pb-autotabs .nav-item .nav-link', function () { 18168 var tabHref = (0, _jquery.default)(this).attr('href'); 18169 (0, _jquery.default)(this).parent().siblings().removeClass('active'); 18170 (0, _jquery.default)(this).parent().siblings().find('.nav-link').removeClass('active show'); 18171 (0, _jquery.default)(this).addClass('active show'); 18172 (0, _jquery.default)(this).parent().addClass('active'); 18173 (0, _jquery.default)(this).closest('.tabsBox').next().find('.tab-pane').removeClass('active show'); 18174 (0, _jquery.default)(this).closest('.tabsBox').next().find(tabHref).addClass('active show'); 18175 return false; 18176 }); 18177 (0, _jquery.default)(window).on("scroll", function () { 18178 if ((0, _jquery.default)("header .navbar-collapse").length) { 18179 var navbarTop = (0, _jquery.default)("header .navbar-collapse").offset(); 18180 var windowScrollTop = (0, _jquery.default)(window).scrollTop(); 18181 var navbarHeight = (0, _jquery.default)("header .navbar-collapse").height(); 18182 (0, _jquery.default)(".dropdown-onion.level-1").css("top", navbarTop.top + navbarHeight - windowScrollTop + "px"); 18183 } 18184 }); 18185 if ((0, _jquery.default)("header .navbar-collapse").length) { 18186 var navbarTop = (0, _jquery.default)("header .navbar-collapse").offset(); 18187 var windowScrollTop = (0, _jquery.default)(window).scrollTop(); 18188 var navbarHeight = (0, _jquery.default)("header .navbar-collapse").height(); 18189 (0, _jquery.default)(".dropdown-onion.level-1").css("top", navbarTop.top + navbarHeight - windowScrollTop + "px"); 18190 } 18191}); 18192 18193//var menuType = 'scroll'; 18194var menuType = 'fixed'; 18195var initialHeaderHeight = 0; 18196(0, _jquery.default)(function () { 18197 initialHeaderHeight = (0, _jquery.default)('header').outerHeight(true); 18198 18199 // scroll hide/show menu 18200 if (menuType == 'scroll') { 18201 (0, _jquery.default)(function () { 18202 (0, _jquery.default)('body').css('padding-top', (0, _jquery.default)('header').outerHeight() + 'px'); 18203 18204 // detect scroll top or down 18205 if ((0, _jquery.default)('header').length > 0) { 18206 // check if element exists 18207 var last_scroll_top = 0; 18208 (0, _jquery.default)(window).on('scroll', function () { 18209 var scroll_top = (0, _jquery.default)(this).scrollTop(); 18210 if (scroll_top < last_scroll_top || scroll_top <= 0) { 18211 (0, _jquery.default)('header').removeClass('scrolled-down').addClass('scrolled-up'); 18212 } else { 18213 (0, _jquery.default)('header').removeClass('scrolled-up').addClass('scrolled-down'); 18214 } 18215 last_scroll_top = scroll_top; 18216 }); 18217 } 18218 }); 18219 } 18220 18221 // fixed menu 18222 if (menuType == 'fixed') { 18223 (0, _jquery.default)(window).on("scroll", function () { 18224 if ((0, _jquery.default)(window).scrollTop() > initialHeaderHeight) { 18225 (0, _jquery.default)("header").addClass("transitioning").delay(300).queue(function () { 18226 if ((0, _jquery.default)(window).scrollTop() > initialHeaderHeight) { 18227 (0, _jquery.default)(this).addClass("fixed").removeClass("transitioning").dequeue(); 18228 (0, _jquery.default)("header.fixed + main").css("margin-top", initialHeaderHeight + "px"); 18229 } else { 18230 (0, _jquery.default)(this).removeClass("fixed").removeClass("transitioning").dequeue(); 18231 (0, _jquery.default)("header + main").css("margin-top", "0px"); 18232 } 18233 }); 18234 } else { 18235 //$("header").addClass("transitioning").delay(300).queue(function(){ 18236 // $(this).removeClass("fixed").removeClass("transitioning").dequeue(); 18237 //}); 18238 (0, _jquery.default)("header").removeClass("fixed"); 18239 (0, _jquery.default)("header + main").css("margin-top", "0px"); 18240 } 18241 }); 18242 } 18243}); 18244(0, _jquery.default)(function () { 18245 if ((0, _jquery.default)('[data-toggle="tooltip"]')) { 18246 (0, _jquery.default)('[data-toggle="tooltip"][data-placement="bottom"]').each(function () { 18247 (0, _jquery.default)(this).attr("data-bs-toggle", "tooltip").attr("data-bs-placement", "bottom"); 18248 }); 18249 } 18250 if ((0, _jquery.default)('[data-bs-toggle="tooltip"]')) { 18251 const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"], [data-toggle="tooltip"]'); 18252 const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); 18253 } 18254 (0, _jquery.default)('.plus-box-link').click(function () { 18255 var spn = (0, _jquery.default)(this).find("span"); 18256 if (spn.hasClass("glyphicon-plus")) { 18257 spn.removeClass("glyphicon-plus").addClass("glyphicon-minus"); 18258 } else { 18259 spn.removeClass("glyphicon-minus").addClass("glyphicon-plus"); 18260 } 18261 }); 18262}); 18263(0, _jquery.default)(function () { 18264 (0, _jquery.default)('#header-menu-mobile .navbar-toggler').click(function () {
18265 var $nav = (0, _jquery.default)('.navbar-nav'); 18266 if (!(0, _jquery.default)(this).is('[aria-expanded="true"]')) { 18267 // use the timeout to make sure it works after the navbar is expanded by the BS JS 18268 setTimeout(function () { 18269 $nav.smartmenus('itemActivate', $nav.find('li.current a').eq(-1)); 18270 }, 1); 18271 } else { 18272 $nav.smartmenus('menuHideAll'); 18273 } 18274 }); 18275}); 18276function resizeTitleNews() { 18277 if ((0, _jquery.default)("#main-news").length) { 18278 var cumulatedHeight = 0; 18279 var minHeight = 400; 18280 var maxHeight = minHeight; 18281 if ((0, _jquery.default)("#main-news .news").length) { 18282 maxHeight = (0, _jquery.default)("#main-news .news")[0].scrollHeight; 18283 if (maxHeight < minHeight) maxHeight = minHeight; 18284 } 18285 var counter = 0; 18286 var offset = 30 + 24; 18287 (0, _jquery.default)("#secondary-news .row").each(function () { 18288 if ((0, _jquery.default)(this).outerHeight(true) + cumulatedHeight + offset > maxHeight) { 18289 (0, _jquery.default)(this).hide(); 18290 } else { 18291 cumulatedHeight += (0, _jquery.default)(this).outerHeight(true); 18292 } 18293 counter++; 18294 }); 18295 } 18296} 18297(0, _jquery.default)(function () { 18298 var day = new Date(); 18299 var dayNum = day.getDay(); 18300 //if (dayNum == 0 || dayNum == 7) dayNum = 1; 18301 (0, _jquery.default)("#footer .uredni-hodiny .uh-row").each(function () { 18302 if ((0, _jquery.default)(this).hasClass("uh-row-" + dayNum)) { 18303 (0, _jquery.default)(this).show(); 18304 } else { 18305 (0, _jquery.default)(this).hide(); 18306 } 18307 }); 18308 resizeTitleNews(); 18309}); 18310(0, _jquery.default)(window).resize(function () { 18311 (0, _jquery.default)("#secondary-news .row").show(); 18312 resizeTitleNews(); 18313}); 18314(0, _jquery.default)(function () { 18315 (0, _jquery.default)(window).scroll(function () { 18316 var aTop = 1000; 18317 if ((0, _jquery.default)(window).width() <= 767) { 18318 aTop = 500; 18319 } 18320 if ((0, _jquery.default)(this).scrollTop() >= aTop) { 18321 (0, _jquery.default)("#skip-top").css("right", "0px"); 18322 } else { 18323 (0, _jquery.default)("#skip-top").css("right", "-100px"); 18324 } 18325 }); 18326}); 18327 18328},{"bootstrap":61,"jquery":63,"jquery.cookie":62}]},{},[65]); 18329 18330 18331/* =========================================================================== */ 18332/* /templates/2022/js/global-functions.js */ 18333/* =========================================================================== */ 18334var Ninja = (function(){ 18335 18336 var debugInfo = { 18337 allow: false 18338 }; 18339 18340 function createDebugInfo() { 18341 18342 if($(".md-debug-info").length) { 18343 18344 var setDebugInfo = { 18345 allow: $(".md-debug-info").length > 0, 18346 blockDeviceSize: $(".md-debug-info").find(".device-size"), 18347 blockClasses: $(".html-class-list"), 18348 blockNewSize: $(".device-resize-new-size"), 18349 blockWidthInfo: $(".device-resize-w-info"), 18350 blockHeightInfo: $(".device-resize-h-info"), 18351 blockDeviceType: $(".device-type-from-css"), 18352 classesList: $('html').attr('class').split(/\s+/), 18353 windowInfo: $(window).width() + " x " + $(window).height() 18354 } 18355 18356 debugInfo = $.extend({}, debugInfo, setDebugInfo); 18357 18358 setTimeout(function () { 18359 var classes = ""; 18360 $.each(debugInfo.classesList, function (index, item) { 18361 classes += item + "<br>"; 18362 }); 18363 debugInfo.blockClasses.html("").append(classes); 18364 debugInfo.blockDeviceSize.html(debugInfo.windowInfo); 18365 }, 1000); 18366 } 18367 } 18368 18369 var defaults = { 18370 fireTime:200, 18371 debug:false, 18372 18373 onDinosaur: function() {}, 18374 onDinosaurBlink: function() {}, 18375 onDinosaurUp: function() {}, 18376 onDinosaurUpBlink: function() {}, 18377 18378 onMobile: function() {}, 18379 onMobileBlink: function() {}, 18380 onMobileUp: function() {}, 18381 onMobileUpBlink: function() {}, 18382 onMobileDown: function() {}, 18383 onMobileDownBlink: function() {}, 18384 18385 onTablet: function() {}, 18386 onTabletBlink: function() {}, 18387 onTabletUp: function() {}, 18388 onTabletUpBlink: function() {}, 18389 onTabletDown: function() {}, 18390 onTabletDownBlink: function() {}, 18391 18392 onLaptop: function() {}, 18393 onLaptopBlink: function() {}, 18394 onLaptopUp: function() {}, 18395 onLaptopUpBlink: function() {}, 18396 onLaptopDown: function() {}, 18397 onLaptopDownBlink: function() {}, 18398 18399 onDesktop: function() {}, 18400 onDesktopBlink: function() {}, 18401 onDesktopDown: function() {}, 18402 onDesktopDownBlink: function() {}, 18403 18404 onResize: function() {}, 18405 onResizeWidth: function() {}, 18406 onResizeHeight: function() {} 18407 } 18408 18409 function bindEvents() { 18410 18411 var isNew, 18412 lastWidth = $(window).width(), 18413 lastHeight = $(window).height(); 18414 18415 $(window).on("orientationchange resize", function() { 18416 18417 function isNewWidth(){ 18418 isNew = false;
18419 if($(window).width()!=lastWidth){ 18420 lastWidth = $(window).width(); 18421 isNew = true; 18422 } 18423 return isNew; 18424 } 18425 18426 function isNewHeight(){ 18427 isNew = false; 18428 if($(window).height()!=lastHeight){ 18429 lastHeight = $(window).height(); 18430 isNew = true; 18431 } 18432 return isNew; 18433 } 18434 18435 waitForFinalEvent(function(){ 18436 defaults.onResize(); 18437 if(debugInfo.allow){ 18438 debugInfo.blockNewSize.html(" / " + $(window).width() + " x " + $(window).height()); 18439 } 18440 if(isNewWidth()) { 18441 defaults.onResizeWidth(); 18442 bp.storeLastValue(); 18443 callFuncByScreenSize(); 18444 if(debugInfo.allow){ 18445 debugInfo.blockWidthInfo.html("true"); 18446 } 18447 } 18448 if(isNewHeight()) { 18449 defaults.onResizeHeight(); 18450 if(debugInfo.allow){ 18451 debugInfo.blockHeightInfo.html("true"); 18452 } 18453 } 18454 }, defaults.fireTime); 18455 18456 }); 18457 } 18458 18459 var bp = { 18460 deviceType: [ 18461 "onChange_dinosaur", 18462 "onChange_mobile", 18463 "onChange_tablet", 18464 "onChange_laptop", 18465 "onChange_desktop", 18466 "onChangeUp_dinosaur", 18467 "onChangeUp_mobile", 18468 "onChangeUp_tablet", 18469 "onChangeUp_laptop", 18470 "onChangeDown_mobile", 18471 "onChangeDown_tablet", 18472 "onChangeDown_laptop", 18473 "onChangeDown_desktop" 18474 ], 18475 deviceValue: [], 18476 deviceLastValue: [], 18477 deviceState: [], 18478 deviceFunctions: { 18479 "onChange_dinosaur": function() { defaults.onDinosaur(); if(debugInfo.allow){ debugInfo.blockDeviceType.html("onDinosaur"); } }, 18480 "onChange_mobile": function() { defaults.onMobile(); if(debugInfo.allow){ debugInfo.blockDeviceType.html("onMobile"); } }, 18481 "onChange_tablet": function() { defaults.onTablet(); if(debugInfo.allow){ debugInfo.blockDeviceType.html("onTablet"); } }, 18482 "onChange_laptop": function() { defaults.onLaptop(); if(debugInfo.allow){ debugInfo.blockDeviceType.html("onLaptop"); } }, 18483 "onChange_desktop": function() { defaults.onDesktop(); if(debugInfo.allow){ debugInfo.blockDeviceType.html("onDesktop"); } }, 18484 "onChangeUp_dinosaur": function() { defaults.onDinosaurUp(); }, 18485 "onChangeUp_mobile": function() { defaults.onMobileUp(); }, 18486 "onChangeUp_tablet": function() { defaults.onTabletUp(); }, 18487 "onChangeUp_laptop": function() { defaults.onLaptopUp(); }, 18488 "onChangeDown_mobile": function() { defaults.onMobileDown(); }, 18489 "onChangeDown_tablet": function() { defaults.onTabletDown(); }, 18490 "onChangeDown_laptop": function() { defaults.onLaptopDown(); }, 18491 "onChangeDown_desktop": function() { defaults.onDesktopDown(); } 18492 }, 18493 deviceFunctionsBlink: { 18494 "onChange_dinosaur": function() { defaults.onDinosaurBlink(); }, 18495 "onChange_mobile": function() { defaults.onMobileBlink(); }, 18496 "onChange_tablet": function() { defaults.onTabletBlink(); }, 18497 "onChange_laptop": function() { defaults.onLaptopBlink(); }, 18498 "onChange_desktop": function() { defaults.onDesktopBlink(); }, 18499 "onChangeUp_dinosaur": function() { defaults.onDinosaurUpBlink(); }, 18500 "onChangeUp_mobile": function() { defaults.onMobileUpBlink(); }, 18501 "onChangeUp_tablet": function() { defaults.onTabletUpBlink(); }, 18502 "onChangeUp_laptop": function() { defaults.onLaptopUpBlink(); }, 18503 "onChangeDown_mobile": function() { defaults.onMobileDownBlink(); }, 18504 "onChangeDown_tablet": function() { defaults.onTabletDownBlink(); }, 18505 "onChangeDown_laptop": function() { defaults.onLaptopDownBlink(); }, 18506 "onChangeDown_desktop": function() { defaults.onDesktopDownBlink(); } 18507 }, 18508 refreshValue: function() { 18509 var self = this; 18510 $.each(self.deviceType, function (index, item) { 18511 self.deviceValue[item] = self.getElementValue('.'+item+''); 18512 }); 18513 this.setBreakpointState(); 18514 }, 18515 storeLastValue: function() { 18516 var self = this; 18517 $.each(self.deviceType, function (index, item) { 18518 self.deviceLastValue[item] = self.deviceValue[item]; 18519 }); 18520 }, 18521 setBreakpointState: function() { 18522 var self = this; 18523 $.each(self.deviceType, function (index, item) { 18524 self.deviceState[item] = self.isStateTrue(item); 18525 }); 18526 }, 18527 isStateTrue: function(item) { 18528 if(this.deviceValue[item] == "true") { 18529 return true; 18530 } else { 18531 return false;
18532 } 18533 }, 18534 getElementValue: function(selector) { 18535 var value = window.getComputedStyle( 18536 document.querySelector(selector), ':before' 18537 ).getPropertyValue('content').replace(/\"/g, ''); 18538 return value; 18539 } 18540 }; 18541 18542 function createQueryHolders() { 18543 var device = ""; 18544 $.each(bp.deviceType, function (index, item) { 18545 device += '<span class="'+item+'"></span>'; 18546 }); 18547 $('body').append('<div class="queryHolders">'+device+'</div>'); 18548 } 18549 18550 function callFuncByScreenSize() { 18551 bp.refreshValue(); 18552 $.each(bp.deviceType, function (index, item) { 18553 if(bp.deviceLastValue[item] != bp.deviceValue[item]) { 18554 if (bp.deviceState[item]) { bp.deviceFunctions[item](); } 18555 } else { 18556 if (bp.deviceState[item]) { bp.deviceFunctionsBlink[item](); } 18557 } 18558 }); 18559 bp.storeLastValue(); 18560 } 18561 18562 var waitForFinalEvent = (function() { 18563 var timers = {}; 18564 return function(callback, ms, uniqueId) { 18565 if (!uniqueId) { 18566 uniqueId = "Don't call this twice without a uniqueId"; 18567 } 18568 if (timers[uniqueId]) { 18569 clearTimeout(timers[uniqueId]); 18570 } 18571 timers[uniqueId] = setTimeout(callback, ms); 18572 }; 18573 })(); 18574 18575 function NinjaLog(param) { 18576 if(defaults.debug || debugInfo.allow) { 18577 console.warn(param); 18578 } 18579 } 18580 18581 function NinjaTouchDevice() { 18582 var isTouchDevice = false, 18583 supportsTouch = false; 18584 if ( ('ontouchstart' in window) || (window.navigator.msPointerEnabled) || ('ontouchstart' in document.documentElement) ) { 18585 supportsTouch = true; 18586 } 18587 isTouchDevice = Modernizr.touchevents || supportsTouch; 18588 return isTouchDevice; 18589 } 18590 18591 return { 18592 init: function(config) { 18593 if ($('html').hasClass('ninja-initialized')) { 18594 return; 18595 } 18596 $('html').addClass('ninja-initialized'); 18597 defaults = $.extend({}, defaults, config); 18598 createDebugInfo(); 18599 createQueryHolders(); 18600 bindEvents(); 18601 callFuncByScreenSize(); 18602 }, 18603 log: function(param) { 18604 NinjaLog(param); 18605 }, 18606 isTouchDevice: function () { 18607 return NinjaTouchDevice(); 18608 } 18609 } 18610}()); 18611 18612 18613 18614 18615 18616 18617 18618 18619 18620function decodeEmailImpl(encodeEmail) 18621{ 18622 var email = encodeEmail; 18623 if (email.indexOf("~") > -1) 18624 email = email.replace(/~/gi, '@'); 18625 if(email.indexOf("!") > -1) 18626 email = email.replace(/!/gi, '.'); 18627 18628 18629 var newEmail = new Array(email.length); 18630 for (i = 0; i < email.length; i++) 18631 { 18632 newEmail[i] = email.charAt(email.length - i - 1); 18633 } 18634 email = newEmail.join(""); 18635 return email; 18636} 18637function decodeEmail(encodeEmail) 18638{ 18639 window.location.href="mailto:"+decodeEmailImpl(encodeEmail); 18640} 18641function writeEmailToPage(encodeEmail) 18642{ 18643 document.write(decodeEmailImpl(encodeEmail)); 18644} 18645function openTargetBlank(link, event) 18646{ 18647 var href = link.href; 18648 18649 if (href.indexOf("javascript:")==0) return true; 18650 18651 window.open(href,'_blank'); 18652 event.returnValue = false; 18653 event.stopPropagation(); 18654 return false; 18655} 18656function wjPopup(url, width, height) 18657{ 18658 var options = "toolbar=no,scrollbars=yes,resizable=yes,width="+width+",height="+height+";" 18659 popupWindow=window.open(url,"_blank",options); 18660} 18661 18662 18663$(document).ready(function() 18664{ 18665 try 18666 { 18667 if ($("a[rel='wjimageviewer']").length > 0) 18668 { 18669 var head = document.getElementsByTagName('HEAD')[0]; 18670 18671 if ($("#photoswipe1").length <= 0) { 18672 var link = document.createElement("script"); 18673 link.src = "/components/gallery/photoswipe/js/photoswipe.js"; 18674 link.id = "photoswipe1"; 18675 head.appendChild(link); 18676 } 18677 if ($("#photoswipe2").length <= 0) { 18678 var link = document.createElement("script"); 18679 link.src = "/components/gallery/photoswipe/js/photoswipe-ui-default.js"; 18680 link.id = "photoswipe2"; 18681 head.appendChild(link); 18682 } 18683 if ($("#photoswipe3").length <= 0) { 18684 var link = document.createElement("script"); 18685 link.src = "/components/gallery/photoswipe/photoswipe.jsp"; 18686 link.id = "photoswipe3"; 18687 head.appendChild(link); 18688 } 18689 } 18690 18691 } catch (e) {} 18692}); 18693 18694 18695 $(document).ready(function() 18696 { 18697 try { 18698 if ("Odkaz se otevÅe v novém oknÄ"!="") 18699 { 18700 //console.log("Doplnam target blank"); 18701 $('a[onclick*="return openTargetBlank"]').each(function() 18702 { 18703 var href = $(this).attr("href"); 18704 18705 //console.log(href); 18706 18707 if (href != null) 18708 { 18709 var actualTitle = $(this).attr("title"); 18710 if (actualTitle!=null && actualTitle!="") $(this).attr("title", actualTitle+" (Odkaz se otevÅe v novém oknÄ)"); 18711 else $(this).attr("title", "Odkaz se otevÅe v novém oknÄ"); 18712 } 18713 }); 18714 } 18715 } 18716 catch (e) {} 18717 }); 18718 18719var checkFormLoaded = true; 18720 18721 18722 18723 18724//event_attacher.js
18725 function addEventCheckForm(obj, evType, fn) 18726 { 18727 if (navigator.userAgent.indexOf("Opera")!=-1) 18728 { 18729 //opera je tupa, cez addEventListener to nefunguje 18730 eval("obj.on"+evType+"=fn"); 18731 return; 18732 } 18733 18734 if (obj.addEventListener) 18735 { 18736 obj.addEventListener(evType, fn, true); 18737 return true; 18738 } 18739 else if (obj.attachEvent) 18740 { 18741 var r = obj.attachEvent("on"+evType, fn); 18742 return r; 18743 } 18744 else 18745 { 18746 return false; 18747 } 18748 } 18749 18750//fix for Internet Explorer event model 18751 function fixECheckForm(e) { 18752 if (!e && window.event) e = window.event; 18753 if (!e.target) e.target = e.srcElement; 18754 return e; 18755 } 18756 18757//class magic 18758 var classMagic = {}; 18759 18760//prida objektu novy class 18761 classMagic.add = function (elm, newCl) { 18762 if (elm && newCl) { 18763 elm = this.fixElm(elm); 18764 for (var i = 0; i < elm.length; i++) { 18765 // ak uz dany objekt ma dany class, nepridame ho 18766 if (!classMagic.has(elm[i], newCl)) 18767 { 18768 elm[i].className += (this.get(elm[i])) ? " " + newCl : newCl; 18769 } 18770 try 18771 { 18772 if (("required"==newCl || "invalid"==newCl) && (elm[i].type=="radio" || elm[i].type=="checkbox")) 18773 { 18774 var newcl2 = newCl+elm[i].type; 18775 if (!classMagic.has(elm[i], newcl2)) 18776 { 18777 elm[i].className += (this.get(elm[i])) ? " " + newcl2 : newcl2; 18778 } 18779 } 18780 } 18781 catch (e) { } 18782 } 18783 return true; 18784 } 18785 return false; 18786 }; 18787 18788//zisti, ci dany objekt ma priradeny dany class 18789 classMagic.has = function (elm, cl) { 18790 if (elm && cl) { 18791 if (actCl = this.get(elm)) { 18792 for (var i = 0; i < actCl.length; i++) { 18793 if (actCl[i] == cl) { 18794 return true; 18795 } 18796 } 18797 } 18798 } 18799 return false; 18800 } 18801 18802//nahradi class(-y) objektu novym classom 18803 classMagic.set = function (elm, newCl) { 18804 if (elm && newCl) { 18805 elm = this.fixElm(elm); 18806 for (var i = 0; i < elm.length; i++) { 18807 elm[i].className = newCl; 18808 } 18809 return true; 18810 } 18811 return false; 18812 }; 18813 18814//nahradi stary class objektu novym classom 18815 classMagic.replace = function (elm, newCl, oldCl) { 18816 if (elm && newCl && oldCl) { 18817 elm = this.fixElm(elm); 18818 for (var i = 0; i < elm.length; i++) { 18819 var cl; 18820 var replCl = ""; 18821 if (cl = this.get(elm[i])) { 18822 for (var j = 0; j < cl.length; j++) { 18823 replCl += (j > 0) ? " " : ""; 18824 replCl += (cl[j] == oldCl) ? newCl : cl[j]; 18825 } 18826 elm[i].className = replCl; 18827 } 18828 } 18829 return true; 18830 } 18831 return false; 18832 }; 18833 18834//odstrani stary class 18835 classMagic.remove = function (elm, oldCl) { 18836 if (elm && oldCl) { 18837 elm = this.fixElm(elm); 18838 for (var i = 0; i < elm.length; i++) { 18839 var cl; 18840 var replCl = ""; 18841 if (cl = this.get(elm[i])) { 18842 for (var j = 0; j < cl.length; j++) { 18843 replCl += (j > 0) ? " " : ""; 18844 replCl += (cl[j] == oldCl) ? "" : cl[j]; 18845 } 18846 elm[i].className = replCl; 18847 } 18848 18849 try 18850 { 18851 if (("required"==oldCl || "invalid"==oldCl) && (elm[i].type=="radio" || elm[i].type=="checkbox")) 18852 { 18853 var oldcl2 = oldCl+elm[i].type; 18854 this.remove(elm[i], oldcl2); 18855 } 18856 } 18857 catch (e) { } 18858 } 18859 return true; 18860 } 18861 return false; 18862 }; 18863 18864//vrati pole vsetkych classov, ktore objekt ma 18865//(toto je pomocna funkcia, ktoru vyuzivaju dalsie funkcie, ale moze sa pouzit aj samostatne) 18866 classMagic.get = function (elm) { 18867 if (elm) { 18868 return (elm.className == "") ? false : elm.className.split(" "); 18869 } 18870 return false; 18871 }; 18872 18873//pomocna funkcia, ktore prevedie samostatny element na pole 18874 classMagic.fixElm = function (elm) { 18875 if (elm) { 18876 if (!elm.sort) { 18877 elm = [elm]; 18878 } 18879 return elm; 18880 } 18881 return false; 18882 } 18883 18884 18885 18886 function checkNaN(value) 18887 { 18888 if (isNaN(value)) 18889 { 18890 return(0); 18891 } 18892 18893 value = (""+value.toFixed(2)).replace(".", ","); 18894 return(value); 18895 } 18896 18897//Excel funkcie 18898 function rounddown(n, nd) 18899 { 18900 if(isFinite(n) && isFinite(nd)) 18901 { 18902 var sign_n = (n<0)?-1:1; 18903 var abs_n=Math.abs(n); 18904 var factor=Math.pow(10,nd); 18905 return sign_n*Math.floor(abs_n*factor)/factor; 18906 } 18907 else 18908 { 18909 return NaN; 18910 } 18911 } 18912 18913 function round2(fltValue) 18914 { 18915 return Math.round(fltValue * 100) / 100; 18916 } 18917 18918 function getFloat(value) 18919 { 18920 value = value.replace(/,/gi, "."); 18921 return(parseFloat(value)); 18922 } 18923 18924 function onlyPositive(value) 18925 { 18926 if (value < 0) return 0; 18927 return value; 18928 } 18929 18930 function smallerNumber(value1, value2) 18931 { 18932 if (value1 < value2) return value1; 18933 return value2; 18934 } 18935 18936 function biggerNumber(value1, value2) 18937 { 18938 if (value1 > value2) return value1; 18939 return value2; 18940 } 18941 18942 function ifCondition(condition, value1, value2) 18943 { 18944 if (condition) return value1; 18945 return value2; 18946 } 18947 18948 var REQCOND1 = "no"; 18949 var REQCOND2 = "no"; 18950 var REQCOND3 = "no"; 18951 var REQCOND4 = "no"; 18952 var REQCOND5 = "no"; 18953 var REQCOND6 = "no"; 18954 18955 /* 18956 checkForm by Riki "Fczbkk" Fridrich, 2002 18957 ver 2.0 18958 http://www.fczbkk.com/ 18959 mailto:[email protected] 18960 You should find latest version of this script and documentation at 18961 http://www.fczbkk.sk/com/check_form/ 18962 */ 18963 18964 18965 18966 /* 18967 This is second version of my script for automatic checking of forms. It should
18968 work in in all standards-compliant browsers (Mozilla, Internet Explorer 5+), it 18969 downgrades OK in older browsers. No, it's not working in Opera (I said it works 18970 in standards-compliant browsers only). 18971 18972 It requires additional functions and libraries: 18973 - event_attacher.js 18974 http://www.fczbkk.com/js/event_attacher/ 18975 - fix_e.js 18976 http://www.fczbkk.com/js/fix_e/ 18977 - class_magic.js 18978 http://www.fczbkk.com/js/class_magic/ 18979 18980 ATTENTION!!! Additional libraries and functions must be placed/linked before 18981 checkForm. 18982 18983 All used scripts and libraries are writen by me, except "Event Attacher", which 18984 was writen by Scott Andrew (http://www.scottandrew.com/). Feel free to use 18985 and/or modify them (as far as I know, "Event Attacher" is free to use too), just 18986 please let me know where you used it if possible (I want to see it in action). 18987 Any suggestions, comments, bugreports, modifications or functionality 18988 enhancements are wellcome. 18989 */ 18990 18991 /* 18992 Formatting of the fields (e.g. highlighting of "required" or "invalid" fields) 18993 is defined in external CSS file "check_field.css". These definitions can be 18994 modified to fit your layout and they can be moved anywhere into your CSS 18995 definitions. 18996 */ 18997 18998// object holding all other functions and variables 18999 var checkForm = {}; 19000 19001 /* 19002 Regular expression builder, used for simplier adding or editing of character 19003 groups. 19004 */ 19005 19006 checkForm.buildRegExp = function(str) { 19007 if (str) {return new RegExp("^[" + str + "]{1,}$");} 19008 return false; 19009 } 19010 19011 /* -------------- customizations start here -------------- */ 19012 19013 /* 19014 Message, which will be displayed in the alert, when user tries to submit 19015 incomplete or invalid form. 19016 */ 19017 19018 checkForm.invalidMsg = "PromiÅte, ale formuláŠnenà vyplnÄný správnÄ.\nNÄkterá pole obsahujà nesprávné údaje, nebo nejsou vyplnÄna. ProsÃm opravte vÅ¡echna zvýraznÄná pole."; 19019 checkForm.allreadySendingMsg = "FormuláŠje odesÃlán, Äekejte prosÃm"; 19020 19021//toto sa pouziva v custom onSubmit funkciach, ak vracaju false, musia toto nastavit na false 19022 checkForm.isInvalidForm = false; 19023 19024//ak chceme zobrazit klasicku error hlasku hore a nie vedla inputov daj true 19025 checkForm.showClassicErrorMessage = false; 19026 19027 /* 19028 Acceptable characters or regular expressions defining valid content of checked 19029 classes. 19030 */ 19031 19032 checkForm.fieldType = new Array(); 19033 checkForm.title = new Array(); 19034 19035 checkForm.trimRegexp = new RegExp("^[ \f\n\r\t\v]+|[ \f\n\r\t\v]+$", "i"); 19036 19037 19038 checkForm.fieldType["alphabet"] = new RegExp("^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZľÄÅ¡ÄťŞýáÃéúůÅťóÄäôöüĽÄÅ ÄŤÅŽÃÃÃÃÃÅ®ÅŤÃÄÃÃÃà ]{1,}$", "i"); 19039 checkForm.title["alphabet"] = "povoleny pÃsmena"; 19040 19041 checkForm.fieldType["alphabetLowercase"] = new RegExp("^[abcdefghijklmnopqrstuvwxyzľÄÅ¡ÄťŞýáÃéúůÅťóÄäô ]{1,}$", "i"); 19042 checkForm.title["alphabetLowercase"] = "povolena pouze malá pÃsmena"; 19043 19044 checkForm.fieldType["alphabetUppercase"] = new RegExp("^[ABCDEFGHIJKLMNOPQRSTUVWXYZĽÄÅ ÄŤÅŽÃÃÃÃÃÅ®ÅŤÃÄÃà ]{1,}$", "i"); 19045 checkForm.title["alphabetUppercase"] = "povolena pouze velká pÃsmena"; 19046 19047 checkForm.fieldType["alphanumeric"] = new RegExp("^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ľÄÅ¡ÄťŞýáÃéúůÅťóÄäôĽÄÅ ÄŤÅŽÃÃÃÃÃÅ®ÅŤÃÄÃà ]{1,}$", "i"); 19048 checkForm.title["alphanumeric"] = "povoleny ÄÃslice a pÃsmena"; 19049 19050 checkForm.fieldType["date"] = new RegExp("^(([0]?[123456789])|([12][0-9])|(3[01]))[.]((0?[123456789])|(1[012]))[.][0-9]{4}$", "i"); 19051 checkForm.title["date"] = "datum ve formátu dd.mm.rrrr"; 19052 19053 checkForm.fieldType["datetime"] = new RegExp("^[0-9]{1,2}[.][0-9]{1,2}[.][0-9]{4}.[0-9]{1,2}[:][0-9]{1,2}[:][0-9]{1,2}$", "i"); 19054 checkForm.title["datetime"] = "datum a Äas ve formátu dd.mm.rrrr hh:mm:ss"; 19055 19056 checkForm.fieldType["email"] = new RegExp("^[a-zA-Z0-9]+[a-zA-Z0-9\._+=#$%&-]*[a-zA-Z0-9]+@[a-zA-Z0-9]+[a-zA-Z0-9\._-]*[a-zA-Z0-9]+\\.[a-zA-Z]{2,16}$", "i"); 19057 checkForm.title["email"] = "e-mailová adresa ve formátu [email protected]"; 19058 19059 checkForm.fieldType["fixedPhone"] = new RegExp("(^[0-9]{2,3}[\/][0-9]{3,12}$)|(^[+][0-9]{1,3}
19059[\/][0-9]{1,2}[\/][0-9]{3,12}$)", "i"); 19060 checkForm.title["fixedPhone"] = "telefonnà ÄÃslo pevné linky ve formátu xxx(x)/yyy(yyyyyyyyy)"; 19061 19062 checkForm.fieldType["integer"] = new RegExp("^[-]?[0-9]+$", "i"); 19063 checkForm.title["integer"] = "Celé ÄÃslo"; 19064 19065 checkForm.fieldType["loginChars"] = new RegExp("^[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.]{1,}$", "i"); 19066 checkForm.title["loginChars"] = "povoleny ÄÃslice a pÃsmena (bez diakritiky)"; 19067 19068 checkForm.fieldType["minLen16"] = new RegExp(".................*", "i"); 19069 checkForm.title["minLen16"] = "minimálnÄ 16 znaků"; 19070 19071 checkForm.fieldType["minLen2"] = new RegExp("...*", "i"); 19072 checkForm.title["minLen2"] = "minimálnÄ 2 znaky"; 19073 19074 checkForm.fieldType["minLen3"] = new RegExp("....*", "i"); 19075 checkForm.title["minLen3"] = "minimálnÄ 3 znaky"; 19076 19077 checkForm.fieldType["minLen4"] = new RegExp(".....*", "i"); 19078 checkForm.title["minLen4"] = "minimálnÄ 4 znaky"; 19079 19080 checkForm.fieldType["minLen5"] = new RegExp("......*", "i"); 19081 checkForm.title["minLen5"] = "minimálnÄ 5 znaků"; 19082 19083 checkForm.fieldType["minLen6"] = new RegExp(".......*", "i"); 19084 checkForm.title["minLen6"] = "minimálnÄ 6 znaků"; 19085 19086 checkForm.fieldType["minLen8"] = new RegExp(".........*", "i"); 19087 checkForm.title["minLen8"] = "minimálnÄ 8 znaků"; 19088 19089 checkForm.fieldType["mobilePhone"] = new RegExp("(^[0-9]{4}[\/][0-9]{6}$)|(^[+][0-9]{1,3}[\/][0-9]{3}[\/][0-9]{6}$)", "i"); 19090 checkForm.title["mobilePhone"] = "mobilnà telefonnà ÄÃslo ve formátu xxxx/yyyzzz"; 19091 19092 checkForm.fieldType["numbers"] = new RegExp("^[-]?[0-9]+([,.][0-9]+)?$", "i"); 19093 checkForm.title["numbers"] = "povoleny ÄÃslice"; 19094 19095 checkForm.fieldType["postalCode"] = new RegExp("^(([0-9]{5})|([0-9]{3} [0-9]{2})|([0-9]{2} [0-9]{3}))$", "i"); 19096 checkForm.title["postalCode"] = "PSÄ"; 19097 19098 checkForm.fieldType["safeChars"] = new RegExp("^[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ]{1,}$", "i"); 19099 checkForm.title["safeChars"] = "povoleny ÄÃslice a pÃsmena (bez diakritiky)"; 19100 19101 checkForm.fieldType["time"] = new RegExp("^[0-9]{1,2}[:][0-9]{1,2}$", "i"); 19102 checkForm.title["time"] = "Äas ve formátu hh:mm"; 19103 19104 checkForm.fieldType["trim"] = new RegExp("^[^ \f\n\r\t\v]+[.]*", "i"); 19105 checkForm.title["trim"] = "Prázdný znak"; 19106 19107 checkForm.fieldType["url"] = new RegExp("^http[s]?:\/\/[a-zA-Z0-9]+([-_\.]?[a-zA-Z0-9])*\.[a-zA-Z]{2,4}([:0-9]*)(\/{1}[%-_~&=\?\.:a-z0-9]*)*$", "i"); 19108 checkForm.title["url"] = "adresa web stránky ve formátu http://www.example.com"; 19109 19110 checkForm.fieldType["phone"] = new RegExp("^([+]?[s0-9]+)?(d{3}|[(]?[0-9]+[)])?([-]?[s]?[0-9])+$", "i"); 19111 checkForm.title["phone"] = "telefonnà ÄÃslo ve formátu (+)1234567890"; 19112 19113 /* 19114 Default values for classes. These will be displayed, if form field with given 19115 class is focused and empty. 19116 */ 19117 19118 checkForm.defaultValue = new Array(); 19119 checkForm.defaultValue["url"] = "http://www."; 19120 checkForm.defaultValue["email"] = "@"; 19121 19122 checkForm.formula = new Array(); 19123 19124 /* -------------- customizations end here -------------- */ 19125 19126 /* 19127 Initialisation of checkForm when document is loaded. It finds all forms and 19128 fields, checks them and adds events to them. 19129 */ 19130 19131 checkForm.allreadyInitialized = false; 19132 19133 checkForm.init = function() { 19134 19135 if (checkForm.allreadyInitialized == true) return; 19136 checkForm.allreadyInitialized = true; 19137 19138 var forms = document.getElementsByTagName("form"); 19139 for (var i = 0; i < forms.length; i++) 19140 { 19141 if(classMagic.has(forms[i], 'noCheckForm')) { 19142 continue; 19143 } 19144 addEventCheckForm(forms[i], "submit", checkForm.check); 19145 addEventCheckForm(forms[i], "reset", checkForm.resetClick); 19146 if (classMagic.has(forms[i], "checkFormClassicMessage")) checkForm.showClassicErrorMessage = true; 19147 } 19148 19149 var fields = checkForm.findInputs(); 19150 for (var i = 0; i < fields.length; i++) 19151 { 19152 if (fields[i].value && fields[i].value.indexOf("=")==0 && fields[i].form.name!="") 19153 { 19154 //window.alert("value="+fields[i].value); 19155 fnc = fields[i].value.replace(/]/gi, ".value)"); 19156 fnc = fnc.replace(/\[/gi, "getFloat(document."+fields[i].form.name+"."); 19157 fnc = fnc.replace(/=/gi, "=checkNaN("); 19158 fnc = fnc + ")"; 19159 fnc = "document."+fields[i].form.name+"." + fields[i].name + ".value"+ fnc + ";"; 19160 //window.alert("fnc: " + fnc); 19161 checkForm.formula[checkForm.formula.length] = fnc; 19162 //window.alert("size: " + checkForm.formula.length); 19163 } 19164 19165 if (fields[i].type.toLowerCase().indexOf("select")!=-1) 19166 { 19167 //pre select box nemozu byt ostatne eventy lebo to v IE blblo 19168 addEventCheckForm(fields[i], "change", checkForm.checkField); 19169 } 19170 else 19171 { 19172 checkForm.fillTitles(fields[i]); 19173 19174 //ak je vypnuta validacia pri inicializacii tak nevaliduj 19175 if(false) 19176 { 19177 checkForm.checkField(fields[i]); 19178 } 19179 else 19180 { 19181 //vypnuta validacia pri inicializacii -> nevalidovat len ak je pole prazdne 19182 if(!isEmpty(fields[i].value)) 19183 checkForm.checkField(fields[i]); 19184 } 19185 19186 addEventCheckForm(fields[i], "blur", checkForm.checkImplBlur); 19187 addEventCheckForm(fields[i], "focus", checkForm.checkField);
19188 if (classMagic.has(fields[i], "noEnterSubmit")) 19189 { 19190 addEventCheckForm(fields[i], "keydown", checkForm.checkFieldEnter); 19191 } 19192 addEventCheckForm(fields[i], "keyup", checkForm.checkField); 19193 19194 addEventCheckForm(fields[i], "click", checkForm.checkField); 19195 19196 if ($(fields[i]).is(":checkbox")) { 19197 addEventCheckForm(fields[i], "change", checkForm.checkImplBlur); 19198 } 19199 else { 19200 addEventCheckForm(fields[i], "change", checkForm.checkField); 19201 } 19202 19203 //pridaj mu classu, aby sa to dalo rozumnejsie stylovat 19204 classMagic.add(fields[i], "input"+fields[i].type.toLowerCase()); 19205 19206 //pridaj requiredradio pre required radia 19207 if (fields[i].type=="radio" || fields[i].type=="checkbox") 19208 { 19209 if (classMagic.has(fields[i], "required")) 19210 { 19211 var newcl = "required"+fields[i].type; 19212 classMagic.add(fields[i], newcl); 19213 } 19214 } 19215 } 19216 } 19217 } 19218 19219 function isEmpty(obj) { 19220 if (typeof obj == 'undefined' || obj == null || obj == '' || obj == '@') return true; 19221 if (typeof obj == 'number' && isNaN(obj)) return true; 19222 if (obj instanceof Date && isNaN(Number(obj))) return true; 19223 return false; 19224 } 19225 19226 checkForm.resetClickLastE = null; 19227 checkForm.resetClick = function(e) 19228 { 19229 var formResultDiv = document.getElementById("ajaxFormResultContainer"); 19230 if (formResultDiv != null) 19231 { 19232 formResultDiv.style.display = "none"; 19233 formResultDiv.innerHTML = ""; 19234 } 19235 checkForm.resetClickLastE = e; 19236 window.setTimeout(checkForm.resetClickRecheck, 100); 19237 } 19238 checkForm.resetClickRecheck = function() 19239 { 19240 if (checkForm.resetClickLastE != null) checkForm.recheck(checkForm.resetClickLastE); 19241 } 19242 19243 /* 19244 Helper functions, which finds all fields in given element and returns them in 19245 an array. If no element is specified, all fields in document are returned. 19246 */ 19247 19248 checkForm.findInputs = function(elm) { 19249 var fields = new Array(); 19250 if (!elm) {elm = document;} 19251 19252 var selects = elm.getElementsByTagName("select"); 19253 var textareas = elm.getElementsByTagName("textarea"); 19254 var inputs = elm.getElementsByTagName("input"); 19255 19256 for (var i = 0; i < inputs.length; i++) { 19257 if ((inputs[i].type == "text") || (inputs[i].type == "email") || (inputs[i].type == "tel") || (inputs[i].type == "date") || (inputs[i].type == "number") || (inputs[i].type == "password") || (inputs[i].type == "file") || (inputs[i].type == "radio") || (inputs[i].type == "checkbox")) { 19258 fields[fields.length] = inputs[i]; 19259 } 19260 } 19261 19262 for (var i = 0; i < textareas.length; i++) { 19263 fields[fields.length] = textareas[i]; 19264 } 19265 19266 for (var i = 0; i < selects.length; i++) { 19267 fields[fields.length] = selects[i]; 19268 } 19269 19270 return fields; 19271 } 19272 19273 /* 19274 Checking the form before submitting. To be sure, we will check all fields of 19275 given form once more and cancel the submit action if some fields are invalid. 19276 */ 19277 checkForm.allreadySending = false; 19278 19279 checkForm.check = function(e) 19280 { 19281 if (checkForm.isInvalidForm==true) 19282 { 19283 return false; 19284 } 19285 19286 e = fixECheckForm(e); 19287 var obj = e.target; 19288 while (obj.tagName != "FORM") { 19289 obj = obj.parentNode; 19290 } 19291 19292 var isSubmit = (e.type == "submit"); 19293 if (checkForm.checkImpl(obj, isSubmit, e)==false) 19294 { 19295 return false; 19296 } 19297 19298 if (checkForm.allreadySending == true) 19299 { 19300 alert(checkForm.allreadySendingMsg); 19301 e.preventDefault(); 19302 return false; 19303 } 19304 if (e.type == "submit") 19305 {
19306 checkForm.allreadySending = true; 19307 } 19308 checkForm.hideAutocompleteOff(obj); 19309 return true; 19310 } 19311 19312 checkForm.checkImpl = function(obj, isSubmit, e) 19313 { 19314 var fields = checkForm.findInputs(obj); 19315 var isSubmitError = false; 19316 var errorMessage = checkForm.invalidMsg+"\n"; 19317 var errorMessageHtml = '<div class="ajaxError">ProsÃm, opravte následujÃcà chyby:</div><ol>'; 19318 for (var i = 0; i < fields.length; i++) 19319 { 19320 //sprav trim (ak treba) 19321 checkForm.trimField(fields[i]); 19322 //skontroluj 19323 var status = checkForm.checkField(fields[i]); 19324 var errorBlock = []; 19325 var isExistErrorBlock = false; 19326 try 19327 { 19328 errorBlock = checkForm.getErrorBlock(fields[i]); 19329 19330 if (errorBlock.length == 0) { 19331 var id = fields[i].id != null ? fields[i].id : fields[i].name; 19332 if (id != '') { 19333 errorBlock = $("#" + id).parent().find(".cs-error"); 19334 if (errorBlock.length<1) errorBlock = checkForm.getErrorBlock(fields[i]); 19335 } 19336 else { 19337 errorBlock = $(); 19338 } 19339 } 19340 isExistErrorBlock = errorBlock.length > 0; 19341 } catch (e) { console.log(e); } 19342 19343 if (status == "invalid") 19344 { 19345 if (isSubmit) 19346 { 19347 isSubmitError = true; 19348 var msg = checkForm.markAndGetLabelText(fields[i], true); 19349 if (errorMessage.indexOf("- "+msg)==-1) 19350 { 19351 if(!isExistErrorBlock) 19352 { 19353 errorMessage = errorMessage + "\n- " + msg; 19354 errorMessageHtml = errorMessageHtml + "\n<li>" + msg; 19355 if (fields[i].title != null && fields[i].title != undefined && fields[i].title!="") { 19356 errorMessageHtml += " - " + fields[i].title 19357 } 19358 errorMessageHtml += "</li>"; 19359 19360 if(typeof $(fields[i]).attr("rel") != "undefined") 19361 { 19362 msg = $(fields[i]).attr("rel"); 19363 } 19364 else { 19365 msg += " " + fields[i].title; 19366 } 19367 19368 if (checkForm.showClassicErrorMessage==false) { 19369 var el; 19370 var id = fields[i].id != null ? fields[i].id : fields[i].name; 19371 if (id != '') { 19372 el = $("#" + id).next(".cs-error"); 19373 } 19374 else { 19375 el = $(); 19376 } 19377 el.parent().append('<div class="help-block cs-error cs-error-'+obj.id+'">'+msg+'</div>').show(); 19378 } 19379 } 19380 else { 19381 if (errorBlock.html() == "") { 19382 errorBlock.html(msg +' - ' + fields[i].title); 19383 } 19384 errorBlock.show(); 19385 } 19386 } 19387 } 19388 else 19389 { 19390 return false; 19391 } 19392 } 19393 else 19394 { 19395 //odznac label, ze je zle vyplneny 19396 checkForm.markAndGetLabelText(fields[i], false); 19397 } 19398 } 19399 19400 if (isSubmitError) 19401 { 19402 checkForm.printAlertMessage(errorMessageHtml, errorMessage, e, obj); 19403 19404 if (e!=null && e.preventDefault) 19405 { 19406 e.preventDefault(); 19407 } 19408 19409 return false; 19410 } 19411 } 19412 19413 checkForm.checkImplBlur = function(e) 19414 {
19415 var errorMessage = checkForm.invalidMsg+"\n"; 19416 var errorMessageHtml = '<div class="ajaxError">ProsÃm, opravte následujÃcà chyby:</div><ol>'; 19417 var obj; 19418 if (e && e.tagName) { 19419 obj = e; 19420 } else { 19421 e = fixECheckForm(e); 19422 obj = e.target; 19423 } 19424 //window.alert(fields[i]); 19425 isSubmit = true; 19426 //sprav trim (ak treba) 19427 checkForm.trimField(obj); 19428 //skontroluj 19429 var status = checkForm.checkField(obj); 19430 var errorBlock = checkForm.getErrorBlock(obj); 19431 if (errorBlock.length == 0) { 19432 var id = obj.id != null ? obj.id : obj.name; 19433 if (id != '') { 19434 errorBlock = $("#" + id).next(".cs-error"); 19435 } 19436 else { 19437 errorBlock = $(); 19438 } 19439 } 19440 var isExistErrorBlock = errorBlock.length > 0; 19441 19442 if (status == "invalid") 19443 { 19444 var msg = checkForm.markAndGetLabelText(obj, true); 19445 19446 if (errorMessage.indexOf("- "+msg)==-1) 19447 { 19448 if(!isExistErrorBlock){ 19449 if($(obj).attr("rel") != undefined ){ 19450 msg = $(obj).attr("rel"); 19451 19452 }else{ 19453 msg += " " + obj.title; 19454 } 19455 if (checkForm.showClassicErrorMessage==false) { 19456 var el; 19457 var id = obj.id != null ? obj.id : obj.name; 19458 if (id != '') { 19459 el = $("#"+obj.id); 19460 } 19461 else { 19462 el = $(); 19463 } 19464 el.parent().append('<div class="help-block cs-error cs-error-'+obj.id+'">'+msg+'</div>'); 19465 } 19466 }else{ 19467 if (errorBlock.html() == "") { 19468 errorBlock.html(msg +' - ' + obj.title); 19469 } 19470 errorBlock.show(); 19471 } 19472 } 19473 } 19474 else 19475 { 19476 if(isExistErrorBlock) { 19477 errorBlock.hide(); 19478 } 19479 19480 //odznac label, ze je zle vyplneny 19481 checkForm.markAndGetLabelText(obj, false); 19482 } 19483 } 19484 19485 checkForm.getErrorBlock = function(obj) { 19486 var id = obj.id != null ? obj.id : obj.name; 19487 if (id != '') { 19488 return $(".cs-error-" + obj.id); 19489 } 19490 return $(); 19491 } 19492 19493 checkForm.printAlertMessage = function(errorMessageHtml, errorMessage, e, obj) 19494 { 19495 try 19496 { 19497 if (errorMessageHtml == null) errorMessageHtml="<div class='ajaxError'>"+errorMessage+"</div>"; 19498 19499 var errorDivElement = document.getElementById("checkFormAlertDiv"); 19500 if (errorDivElement == null) errorDivElement = document.getElementById("ajaxFormResultContainer"); 19501 if (errorDivElement == null && ($('.cs-error').length == 0 || checkForm.showClassicErrorMessage==true)) 19502 { 19503 //console.log("Vytvaram error div message"); 19504 //vytvor ho 19505 var form = null; 19506 if (obj != null && obj != undefined) form = $(obj) 19507 else form = $("form[name=formMailForm]"); 19508 form.prepend("<div id='formResult'><div id='ajaxFormResultContainer'></div></div>"); 19509 errorDivElement = document.getElementById("ajaxFormResultContainer"); 19510 } 19511 19512 if (errorDivElement != null) { 19513 //console.log("Zobrazujem, html="+$(errorDivElement).html()+"; length=", $(errorDivElement).html().length); 19514 if ($(errorDivElement).html().length < 5) $(errorDivElement).html(checkForm.invalidMsg); 19515 $(errorDivElement).addClass("alert alert-danger"); 19516 $(errorDivElement).removeClass("alert-success"); 19517 } 19518 19519 if ($('.cs-error').length > 0 && checkForm.showClassicErrorMessage==false) { 19520 var csError = $('.cs-error:visible').first(); 19521 if (csError.length > 0) { 19522 $("html,body").animate({ scrollTop: (csError.offset().top - 100) }, { duration: 'fast', easing: 'linear'}); 19523 } 19524 } 19525 else if (errorDivElement != null) 19526 { 19527 try 19528 { 19529 //console.log("Zobrazujem error hlasenie, div=", errorDivElement, "message=", errorMessageHtml); 19530 $(errorDivElement).html(errorMessageHtml+"</ol>").show("slow"); 19531 //div.tab-pane pridane pre tabovany content (usredit) 19532 $("html,body,div.tab-pane").animate({ scrollTop: ($(errorDivElement).offset().top - 100) }, { duration: 'fast', easing: 'linear'}); 19533 } 19534 catch (e) { 19535 alert(errorMessage); 19536 } 19537 } 19538 else { 19539 alert(errorMessage); 19540 } 19541 19542 if (e!=null && e.preventDefault) 19543 { 19544 e.preventDefault(); 19545 } 19546 } 19547 catch (e) 19548 { 19549 alert(errorMessage); 19550 } 19551 } 19552 19553 checkForm.markAndGetLabelText = function(field, isInvalid) 19554 { 19555 //najskor skus najst label pre dany field 19556 var id = field.id; 19557 if (id == "") id = field.name; 19558 19559 var text = null; 19560 if (id != null) 19561 { 19562 //skus najst label pre dane pole 19563 var labelElm = checkForm.formGetLabel(id); 19564 if (labelElm != null) 19565 { 19566 if (isInvalid) 19567 { 19568 $("form").removeClass("sending"); 19569 if (field.type == "radio" || field.type == "checkbox") 19570 { 19571 var leftLabelElm = checkForm.formGetLabel(field.name); 19572 if (leftLabelElm != null) text = checkForm.getInnerText(leftLabelElm); 19573 } 19574 if (text == null || text == "") text = checkForm.getInnerText(labelElm); 19575 19576 if (!classMagic.has(field, "noCheckForm")) { 19577 classMagic.add(labelElm, "invalidLabel"); 19578 } 19579 } 19580 else 19581 { 19582 if (!classMagic.has(field, "noCheckForm")) { 19583 classMagic.remove(labelElm, "invalidLabel"); 19584 } 19585 } 19586 } 19587 } 19588 19589 if (text==null && id.indexOf("wjcaptcha")!=-1) { 19590 text = "Text na obrázku"; 19591 } 19592 19593 if (text == null) { 19594 text = id; 19595 } 19596 19597 if (text == null) { 19598 text = $(field).prop('name'); 19599 } 19600 19601 var dataName = $(field).data('name'); 19602 if (typeof dataName != "undefined" && dataName != "") { 19603 text = dataName; 19604 } 19605 19606 return text; 19607 } 19608 19609 checkForm.getInnerText = function(elem) 19610 { 19611 var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false; 19612 if(!hasInnerText) 19613 { 19614 return elem.textContent; 19615 } 19616 return elem.innerText; 19617 } 19618 19619 checkForm.formGetLabel = function(forField) 19620 { 19621 if (forField == null || forField == "") return null 19622 19623 var labels = document.getElementsByTagName("LABEL"); 19624 for (i=0; i < labels.length; i++) 19625 { 19626 if (labels[i].htmlFor == forField) return labels[i]; 19627 } 19628 return null; 19629 } 19630 19631 19632 checkForm.hideAutocompleteOff = function(obj) 19633 { 19634 var fields = obj.elements; 19635 for (var i = 0; i < fields.length; i++) 19636 { 19637 var classes = classMagic.get(fields[i]); 19638 //taketo pole nastavim na hidden aby si FF nepamatal heslo 19639 if (classMagic.has(fields[i], "autocompleteoff")) 19640 { 19641 fields[i].setAttribute("type", "hidden"); 19642 } 19643 } 19644 } 19645 19646 checkForm.showAutocompleteOff = function(obj) 19647 { 19648 19649 var fields = obj.elements; 19650 for (var i = 0; i < fields.length; i++) 19651 { 19652 var classes = classMagic.get(fields[i]); 19653 //taketo pole nastavim na hidden aby si FF nepamatal heslo 19654 if (classMagic.has(fields[i], "autocompleteoff")) 19655 { 19656 fields[i].setAttribute("type", "password"); 19657 } 19658 } 19659 } 19660 19661 checkForm.btnSubmit = function(obj) 19662 { 19663 if (checkForm.isInvalidForm==true) 19664 { 19665 return false; 19666 } 19667 19668 var fields = checkForm.findInputs(obj); 19669 for (var i = 0; i < fields.length; i++) 19670 { 19671 //window.alert(fields[i]); 19672 19673 //sprav trim (ak treba) 19674 checkForm.trimField(fields[i]); 19675 //skontroluj 19676 var status = checkForm.checkField(fields[i]);
19677 if (status == "invalid") 19678 { 19679 alert(checkForm.invalidMsg); 19680 return false; 19681 } 19682 } 19683 if (checkForm.allreadySending == true) 19684 { 19685 alert(checkForm.allreadySendingMsg); 19686 return false; 19687 } 19688 checkForm.allreadySending = true; 19689 checkForm.hideAutocompleteOff(obj); 19690 obj.submit(); 19691 return true; 19692 } 19693 19694 /* 19695 Prekontroluje polia, ale nespravi ziadny alert, potrebne po zmene REQCOND 19696 */ 19697 checkForm.recheck = function(e) 19698 { 19699 var valid = true 19700 var fields = checkForm.findInputs(); 19701 for (var i = 0; i < fields.length; i++) 19702 { 19703 status = checkForm.checkField(fields[i]); 19704 if (valid && status == "invalid" || status == "required") 19705 valid = false 19706 } 19707 return valid 19708 } 19709 19710 checkForm.recheckAjax = function(form) 19711 { 19712 return checkForm.checkImpl(form, true, null); 19713 } 19714 19715 /* 19716 checks one field, prints message if not valid 19717 */ 19718 checkForm.recheckFieldAjax = function(element) 19719 { 19720 var status = checkForm.checkField(element); 19721 var errorMessage = checkForm.invalidMsg+"\n"; 19722 var errorMessageHtml = '<div class="ajaxError">ProsÃm, opravte následujÃcà chyby:</div><ol>'; 19723 if (status == "invalid") 19724 { 19725 //TODO: mark the input 19726 19727 var msg = checkForm.markAndGetLabelText(element, true); 19728 if (errorMessage.indexOf("- "+msg)==-1) 19729 { 19730 errorMessage = errorMessage + "\n- " + msg; 19731 errorMessageHtml = errorMessageHtml + "\n<li>" + msg; 19732 if (element.title != null && element.title != undefined && element.title!="") errorMessageHtml += " - " + element.title 19733 errorMessageHtml += "</li>"; 19734 } 19735 checkForm.printAlertMessage(errorMessageHtml, errorMessage, null, element.form); 19736 return false; 19737 } 19738 return true; 19739 } 19740 19741 /* 19742 checks more fields, prints messages if at least one not valid 19743 */ 19744 checkForm.recheckFieldsAjax = function(fields) 19745 { 19746 var ret =true; 19747 var errorMessage = checkForm.invalidMsg+"\n"; 19748 var errorMessageHtml = '<div class="ajaxError">ProsÃm, opravte následujÃcà chyby:</div><ol>'; 19749 var form = fields[0].form; 19750 for (var i = 0; i < fields.length; i++) 19751 { 19752 checkForm.trimField(fields[i]); 19753 var status = checkForm.checkField(fields[i]); 19754 if (status == "invalid") 19755 { 19756 ret = false; 19757 var msg = checkForm.markAndGetLabelText(fields[i], true); 19758 if (errorMessage.indexOf("- "+msg)==-1) 19759 { 19760 errorMessage = errorMessage + "\n- " + msg; 19761 errorMessageHtml = errorMessageHtml + "\n<li>" + msg; 19762 if (fields[i].title != null && fields[i].title != undefined && fields[i].title!="")errorMessageHtml += " - " + fields[i].title 19763 errorMessageHtml += "</li>"; 19764 } 19765 } 19766 else 19767 { 19768 //odznac label, ze je zle vyplneny 19769 checkForm.markAndGetLabelText(fields[i], false); 19770 } 19771 } 19772 if(!ret) checkForm.printAlertMessage(errorMessageHtml, errorMessage, null, form); 19773 return ret; 19774 } 19775 19776 19777 19778 /* 19779 Checking the form field. 19780 */ 19781 checkForm.checkFieldEnter = function(e) 19782 { 19783 if (e.keyCode && e.keyCode==13) 19784 { 19785 window.alert("Formulár nie je možné odoslaÅ¥ klávesou enter, kliknite prosÃm na prÃsluÅ¡né tlaÄÃtko pre odoslanie formuláru."); 19786 if (e.preventDefault) { 19787 e.preventDefault(); 19788 } 19789 return false; 19790 } 19791 return true; 19792 } 19793 19794 checkForm.trimField = function(e) 19795 { 19796 var obj; 19797 if (e && e.tagName) { 19798 obj = e; 19799 } else { 19800 e = fixECheckForm(e); 19801 obj = e.target; 19802 } 19803 19804 //tieto nebudeme kontrolovat 19805 if (classMagic.has(obj, "trim")==false) return; 19806
19807 //2x je to tu lebo to netrimovalo spravne konce 19808 obj.value = obj.value.replace(checkForm.trimRegexp, ""); 19809 obj.value = obj.value.replace(checkForm.trimRegexp, ""); 19810 } 19811 19812 19813 var checkFormSetCursorObj = null; 19814 var checkFormSetCursorPos = 0; 19815 checkForm.setCursorAsync = function() 19816 { 19817 var node = checkFormSetCursorObj; 19818 var pos = checkFormSetCursorPos; 19819 try 19820 { 19821 var node = (typeof node == "string" || node instanceof String) ? document.getElementById(node) : node; 19822 19823 if(!node) 19824 { 19825 return false; 19826 } 19827 else if(node.createTextRange) 19828 { 19829 var textRange = node.createTextRange(); 19830 textRange.collapse(true); 19831 textRange.moveEnd(pos); 19832 textRange.moveStart(pos); 19833 textRange.select(); 19834 return true; 19835 } 19836 else if(node.setSelectionRange) 19837 { 19838 node.setSelectionRange(pos,pos); 19839 return true; 19840 } 19841 } 19842 catch (e) { } 19843 19844 return false; 19845 } 19846 checkForm.setCursor = function(node,pos) 19847 { 19848 checkFormSetCursorObj = node; 19849 checkFormSetCursorPos = pos; 19850 setTimeout(checkForm.setCursorAsync, 50); 19851 } 19852 19853 checkForm.checkField = function(e) 19854 { 19855 var obj; 19856 if (e && e.tagName) { 19857 obj = e; 19858 } else { 19859 e = fixECheckForm(e); 19860 obj = e.target; 19861 } 19862 19863 //recalculate values 19864 try 19865 { 19866 if (checkForm.formula.length>0) 19867 { 19868 for (i=0; i< checkForm.formula.length; i++) 19869 { 19870 try 19871 { 19872 //window.alert("vypocitavam: "+checkForm.formula[i]); 19873 eval(checkForm.formula[i]); 19874 } 19875 catch (e2) 19876 { 19877 window.status= "chyba vypoctu 2: "+e2+" fnc: "+checkForm.formula[i]; 19878 } 19879 } 19880 } 19881 } 19882 catch (e) 19883 { 19884 window.status= "chyba vypoctu: "+e; 19885 } 19886 19887 var fieldOK = true; 19888 var classes = classMagic.get(obj); 19889 19890 //tieto nebudeme kontrolovat 19891 if (classMagic.has(obj, "noCheckForm")) return; 19892 19893 if (classMagic.has(obj, "captcha")) 19894 { 19895 var actualStatus = "invalid"; 19896 if (classMagic.has(obj, "invalid")==false) actualStatus = "valid"; 19897 19898 checkForm.checkCaptcha(obj); 19899 19900 return actualStatus; 19901 } 19902 19903 classMagic.add(obj, "invalid"); 19904 19905 // conditional required field 19906 if (classMagic.has(obj, "reqcond1")) 19907 { 19908 if ("yes"==REQCOND1) 19909 { 19910 classMagic.remove(obj, "invalid"); 19911 classMagic.remove(obj, "required"); 19912 return("valid"); 19913 } 19914 else 19915 { 19916 classMagic.add(obj, "invalid"); 19917 classMagic.add(obj, "required"); 19918 } 19919 } 19920 19921 if (classMagic.has(obj, "reqcond2")) 19922 { 19923 if ("yes"==REQCOND2) 19924 { 19925 classMagic.remove(obj, "invalid"); 19926 classMagic.remove(obj, "required"); 19927 return("valid"); 19928 } 19929 else 19930 { 19931 classMagic.add(obj, "invalid") 19932 classMagic.add(obj, "required") 19933 } 19934 } 19935 19936 if (classMagic.has(obj, "reqcond3")) 19937 { 19938 if ("yes"==REQCOND3) 19939 { 19940 classMagic.remove(obj, "invalid"); 19941 classMagic.remove(obj, "required"); 19942 return("valid"); 19943 } 19944 else 19945 { 19946 classMagic.add(obj, "invalid"); 19947 classMagic.add(obj, "required"); 19948 } 19949 } 19950 19951 if (classMagic.has(obj, "reqcond4")) 19952 { 19953 if ("yes"==REQCOND4) 19954 { 19955 classMagic.remove(obj, "invalid"); 19956 classMagic.remove(obj, "required"); 19957 return("valid"); 19958 } 19959 else 19960 { 19961 classMagic.add(obj, "invalid") 19962 classMagic.add(obj, "required") 19963 } 19964 } 19965 19966 if (classMagic.has(obj, "reqcond5")) 19967 { 19968 if ("yes"==REQCOND5) 19969 { 19970 classMagic.remove(obj, "invalid"); 19971 classMagic.remove(obj, "required"); 19972 return("valid"); 19973 } 19974 else 19975 { 19976 classMagic.add(obj, "invalid") 19977 classMagic.add(obj, "required") 19978 } 19979 } 19980 19981 if (classMagic.has(obj, "reqcond6")) 19982 { 19983 if ("yes"==REQCOND6) 19984 { 19985 classMagic.remove(obj, "invalid"); 19986 classMagic.remove(obj, "required"); 19987 return("valid"); 19988 } 19989 else 19990 { 19991 classMagic.add(obj, "invalid") 19992 classMagic.add(obj, "required") 19993 } 19994 } 19995 19996 var i = 0; 19997 // required field can't be empty 19998 if (classMagic.has(obj, "required")) 19999 { 20000 if (obj.type == "radio" || obj.type == "checkbox") 20001 { 20002 fieldOK = checkForm.isRadioSelected(obj); 20003 } 20004 else 20005 { 20006 i = 0; 20007 while (i < classes.length) 20008 { 20009 if ((e.type == "blur") && (obj.value == checkForm.defaultValue[classes[i]])) { 20010 obj.value = ""; 20011 } 20012 i++; 20013 } 20014 20015 fieldOK = (checkForm.isBlank(obj.value)) ? false : true; 20016 } 20017 } 20018 20019 // find classes of given field and check, if there are any rules for it 20020 i = 0; 20021 while (i < classes.length) 20022 { 20023 if (checkForm.defaultValue[classes[i]]) { 20024 if ((e.type == "focus") && checkForm.isBlank(obj.value)) 20025 { 20026 obj.value = checkForm.defaultValue[classes[i]]; 20027 checkForm.setCursor(obj, 0); 20028 } 20029 20030 if ((e.type == "blur") && (obj.value == checkForm.defaultValue[classes[i]])) { 20031 obj.value = ""; 20032 } 20033 } 20034 20035 if (fieldOK && obj.type!="checkbox" && obj.type!="radio") 20036 { 20037 if (checkForm.fieldType[classes[i]]) 20038 { 20039 fieldOK = (!checkForm.isBlank(obj.value) && checkForm.checkChars(obj.value, checkForm.fieldType[classes[i]])) ? false : true; 20040 i = classes.length; 20041 } 20042 } 20043 i++; 20044 } 20045 20046 //password2 check 20047 //console.log("Pass 2 check, name=", obj.name); 20048 if ("password2"===obj.name && typeof obj.form["usr.password"] != "undefined") { 20049 var pass2 = obj.value; 20050 var pass1 = obj.form["usr.password"].value; 20051 //console.log("pass1=", pass1, "pass2=", pass2); 20052 if (pass1 != pass2) fieldOK = false; 20053 } 20054 20055 fieldOK = fieldOK || obj.type == 'hidden'; 20056 20057 // if content of the field is not OK, highlight it as invali
20057d 20058 (fieldOK) ? classMagic.remove(obj, "invalid") : classMagic.add(obj, "invalid"); 20059 20060 /* 20061 Function like this should return "true" or "false". But this would be 20062 blocking of keyboard input in case of incomplete content of the field 20063 (e.g. URL). That's why this function returns "valid" or "invalid". 20064 */ 20065 return (fieldOK) ? "valid" : "invalid"; 20066 } 20067 20068 checkForm.fillTitles = function(obj) 20069 { 20070 try 20071 { 20072 if (obj.title!="") return; 20073 20074 if (classMagic.has(obj, "required")) 20075 { 20076 obj.title = "povinná pole"; 20077 } 20078 20079 var classes = classMagic.get(obj); 20080 var i = 0; 20081 for (i=0; i < classes.length; i++) 20082 { 20083 var text = checkForm.title[classes[i]]; 20084 if (text != null && text!=undefined && text != "") 20085 { 20086 if (obj.title != "") obj.title = obj.title+", "+text; 20087 else obj.title = obj.title+" "+text; 20088 } 20089 } 20090 } catch (e) {} 20091 } 20092 20093 /* 20094 Checks if given string contains given pattern (regullar expression). 20095 */ 20096 20097 checkForm.checkChars = function(str, re) { 20098 if (str && re) { 20099 return (str.search(re) == -1) ? true : false; 20100 } 20101 return true; 20102 } 20103 20104 /* 20105 Checks, if given string is blank or not. 20106 */ 20107 20108 checkForm.isBlank = function(str) 20109 { 20110 str = str.replace(checkForm.trimRegexp, ""); 20111 str = str.replace(checkForm.trimRegexp, ""); 20112 return (str == "" || str == " ") ? true : false; 20113 } 20114 20115 /* 20116 WebJET: skontroluje, ci je zvolene aspon jedno radio/checkbox z danej skupiny 20117 */ 20118 checkForm.isRadioSelected = function(obj) 20119 { 20120 try 20121 { 20122 var radioForm = obj.form; 20123 var radios = radioForm.elements[obj.name]; 20124 20125 if (radios.length==undefined) 20126 { 20127 //mame jedno radio 20128 if (obj.checked) 20129 { 20130 classMagic.remove(obj, "invalid"); 20131 if (obj.type=="radio") classMagic.remove(obj, "required"); 20132 } 20133 else 20134 { 20135 classMagic.add(obj, "invalid"); 20136 } 20137 return obj.checked; 20138 } 20139 20140 var someChecked = false; 20141 var checkedCount = 0; 20142 for (i=0; i< radios.length; i++) 20143 { 20144 if (radios[i].checked) 20145 { 20146 someChecked = true; 20147 checkedCount++; 20148 } 20149 } 20150 20151 //skontroluj hodnoty pre min a max len 20152 try 20153 { 20154 var classes = classMagic.get(obj); 20155 if (classes && classes.length) 20156 { 20157 for (i=0; i< classes.length; i++) 20158 { 20159 if (classes[i].indexOf("countCond-")==0) 20160 { 20161 var data = classes[i].split("-"); 20162 if (data && data.length==3) 20163 { 20164 if (checkedCount < data[1]) someChecked = false; 20165 if (checkedCount > data[2]) someChecked = false; 20166 } 20167 } 20168 } 20169 } 20170 } 20171 catch (ex2) {} 20172 20173 for (i=0; i< radios.length; i++) 20174 { 20175 if (someChecked == false) 20176 { 20177 classMagic.add(radios[i], "invalid"); 20178 20179 //najdi prislusny label a nastav aj tomu 20180 var elmId = radios[i].id; 20181 var label = $("label[for="+elmId+"]").addClass("invalidLabel"); 20182 } 20183 else 20184 { 20185 //cb sa uz neda odselectnut, mozeme removnut aj required aby sa to ako tak odstylovalo 20186 classMagic.remove(radios[i], "invalid"); 20187 20188 //najdi prislusny label a nastav aj tomu 20189 var elmId = radios[i].id; 20190 var label = $("label[for="+elmId+"]").removeClass("invalidLabel"); 20191 20192 } 20193 } 20194 20195 return someChecked; 20196 } 20197 catch (ex) 20198 { 20199 //alert(ex); 20200 } 20201 return true; 20202 } 20203 20204 /* 20205 WebJET - kontrola captcha kodu 20206 */ 20207 checkForm.xmlhttp = null; 20208 checkForm.captchaObj = null; 20209 checkForm.checkCaptcha = function(obj) 20210 { 20211 var value = obj.value; 20212 checkForm.xmlhttp=null; 20213 if (window.XMLHttpRequest) 20214 { 20215 // code for IE7+, Firefox, Chrome, Opera, Safari 20216 checkForm.xmlhttp=new XMLHttpRequest(); 20217 } 20218 else 20219 { 20220 // code for IE6, IE5 20221 checkForm.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 20222 } 20223 20224 classMagic.add(obj, "invalid"); 20225 checkForm.captchaObj = obj;
20226 20227 checkForm.xmlhttp.onreadystatechange=checkForm.checkCaptchaChange; 20228 checkForm.xmlhttp.open("GET", "/components/form/catpcha_ajax.jsp?v="+value, true); 20229 checkForm.xmlhttp.send(null); 20230 } 20231 20232 checkForm.checkCaptchaChange = function() 20233 { 20234 try 20235 { 20236 if (checkForm.captchaObj != null) 20237 { 20238 if (checkForm.xmlhttp.readyState==4) 20239 { 20240 // 4 = "loaded" 20241 if (checkForm.xmlhttp.status==200) 20242 { 20243 // 200 = "OK" 20244 classMagic.remove(checkForm.captchaObj, "invalid"); 20245 } 20246 else 20247 { 20248 classMagic.add(checkForm.captchaObj, "invalid"); 20249 } 20250 } 20251 } 20252 } catch (e) {} 20253 } 20254 20255 /* 20256 Initialize script when document is loaded. 20257 */ 20258 addEventCheckForm(window, "load", checkForm.init); 20259//failsafe, ak uz sa nahodou okno loadlo a horny event nenastane 20260 window.setTimeout(checkForm.init, 2000); 20261 20262 /* schova dany element ak checkbox nie je zaskrtnuty */ 20263 function formShowHide(checkbox, elementNamesShow, elementNamesHide) 20264 { 20265 if (checkbox.checked == false) return; 20266 20267 var elements = elementNamesShow.split(","); 20268 for (i=0; i< elements.length; i++) 20269 { 20270 var element = document.getElementById(elements[i]); 20271 if (element != null) element.style.display="block"; 20272 } 20273 elements = elementNamesHide.split(","); 20274 for (i=0; i< elements.length; i++) 20275 { 20276 var element = document.getElementById(elements[i]); 20277 if (element != null) element.style.display="none"; 20278 } 20279 } 20280 20281//alert na odoslanie formularu 20282 if (location.href.indexOf("formsend=true")!=-1) 20283 { 20284 if (location.href.indexOf("DoubleOptIn")!=-1) { 20285 checkForm.printAlertMessage(null, "FormuláŠbyl odeslán, na váš email jsme odeslali zprávu, ve které je tÅeba potvrdit odeslánà kliknutÃm na odkaz.", null); 20286 } else { 20287 checkForm.printAlertMessage(null, "FormuláŠbyl úspÄÅ¡nÄ odeslán", null); 20288 } 20289 } 20290 20291 if (location.href.indexOf("formfail=formIsAllreadySubmitted")!=-1) 20292 { 20293 checkForm.printAlertMessage(null, "FormuláŠuž jste jednou odeslali, nenà možné ho odeslat znovu.", null); 20294 } 20295 else if (location.href.indexOf("formfail=javascript")!=-1) 20296 { 20297 checkForm.printAlertMessage(null, "<strong><span style='color: red;'>UPOZORNÄNÃ:</span> Pro odeslánà formuláÅe musÃte mÃt povolen JavaScript. Pokud váš prohlÞeÄ JavaScript nepodporuje můžete <a href='/components/form/spamprotectiondisable.jsp?backurl=null'>deaktivovat ochranu formuláÅů</a>.</strong>", null); 20298 } 20299 else if (location.href.indexOf("formfail=probablySpamBot")!=-1) 20300 { 20301 checkForm.printAlertMessage(null, "FormuláŠbyl detekován jako SPAM (nevyžádaná poÅ¡ta). Pro správné odeslánà formuláÅe musÃte mÃt standardnà nastavenà prohlÞeÄe, mezi jednotlivými odeslánÃmi poÄkat 10 sekund a neodesÃlat vÃc než 50 formuláÅů za hodinu.", null); 20302 } 20303 else if (location.href.indexOf("formfail=requiredFields")!=-1) 20304 { 20305 checkForm.printAlertMessage(null, "Ve formuláÅi jste nevyplnili vÅ¡echna povinná pole, nebo pole nemajà správné hodnoty. Zkontrolujte jednotlivá pole formuláÅe a zkúste ho znovu odeslat.", null); 20306 } 20307 else if (location.href.indexOf("formfail=bad_file")!=-1) 20308 { 20309 checkForm.printAlertMessage(null, "Vámi zaslaný soubor nevyhovuje požadavkům, formuláŠnebyl odeslán", null); 20310 } 20311 else if (location.href.indexOf("formfail=captcha")!=-1) 20312 { 20313 checkForm.printAlertMessage(null, "BezpeÄnostnà ovÄÅenà (captcha) nebylo úspÄÅ¡né. Zkuste to znovu.", null); 20314 } 20315 else if (location.href.indexOf("formfail=emailNotSend")!=-1) 20316 { 20317 window.alert("FormuláŠse nepodaÅilo odeslat na email! Zkuste ho znovu odeslat pozdÄji."); 20318 } 20319 else if (location.href.indexOf("formfail=")!=-1) 20320 { 20321 checkForm.printAlertMessage(null, "FormuláŠse nepodaÅilo odeslat! Zkuste ho znovu odeslat pozdÄji.", null); 20322 } 20323 20324 20325 20326var defaultStripesExenstion = ".x"; 20327var ajaxStripesExenstion = ".ajax"; 20328 20329/* 20330* Function that uses jQuery to invoke an action of a form. Slurps the values 20331* from the form using prototype's 'form.serialize()' method, and then submits 20332* them to the server using prototype's 'jQuery.post' which transmits the request 20333* and then renders the resposne text into the named container. 20334* 20335* @param formDiv reference to the form object being submitted 20336* @param resultDivthe name of the HTML container to insert the result into 20337* @param event the name of the event to be triggered, or null 20338*/ 20339 20340function invokeWJAjax(formDiv, resultDiv, event, action, callMyFunction) 20341{ 20342 try 20343 { 20344 var form = null; 20345 20346 $("form[name="+formDiv+"]").addClass("sending"); 20347 20348 //"formMailForm"==formDiv 20349 if (formDiv.indexOf("formMailForm") > -1) 20350 { 20351 20352 form = $("form[name="+formDiv+"]"); 20353 form.attr("id", formDiv); 20354 } 20355 var formByIds = null; 20356 if (form == null) formByIds = $("#" + formDiv + " form"); 20357 if (form == null && formByIds != null && formByIds.length!=0) 20358 { 20359 if(formByIds.length > 1) 20360 { 20361 form = $(formByIds[1]); //zoberiem druhy formular - prvy je webjetObfuscateForm 20362 } 20363 else 20364 { 20365 form = $(formByIds[0]); 20366 } 20367 } 20368 20369 try 20370 { 20371 if ("multipart/form-data" == form.attr("enctype")) 20372 { 20373 return true; 20374 } 20375 } 20376 catch (ex1) {alert("1:" + ex1)} 20377 20378 $("#formResult").remove();// vymaze form result 20379 $("input, textarea, select").removeClass("invalid");
20379// vymaze vsetky classy invalid 20380 20381 if ($("#" + resultDiv).length==0) 20382 { 20383 form.prepend("<div id=\"formResult\"><div id='"+resultDiv+"'></div></div>"); 20384 } 20385 20386 try 20387 { 20388 //checkform test 20389 if (checkForm) 20390 { 20391 var check = checkForm.recheckAjax(document.getElementById(formDiv)); 20392 if (check==false) 20393 { 20394 20395 try 20396 { 20397 if (typeof callMyFunction != 'undefined') callMyFunction(check); 20398 } 20399 catch (e) { } 20400 20401 //prevent default 20402 return false; 20403 } 20404 } 20405 } 20406 catch (ex2) { window.alert("7" + ex2); console.log(ex2); } 20407 20408 20409 var extIndex = action.indexOf(defaultStripesExenstion); 20410 //compose ajax url from original form action replacing original stripes script extension 20411 //with stripes ajax extension configured in web.xml 20412 var url = action; 20413 20414 //"formMailForm"==formDiv 20415 if (formDiv.indexOf("formMailForm") > -1) 20416 { 20417 url = form.attr("action").replace(/\/formmail\.do/gi, "/FormMailAjax.action"); 20418 } 20419 20420 //create params from serializing form inputs and add param simulating button click in order to 20421 //Stripes could find actionBean event handler 20422 20423 var formSubmitCallback = function() { 20424 var params = form.serialize(); 20425 if(event != null) params = event + '&' + params; 20426 //hide errors if visible 20427 $("#" + resultDiv).hide(); 20428 //fire ajax request 20429 20430 var callback = function(dataFromServer) { 20431 wjAjaxOnFormResult(formDiv, resultDiv, dataFromServer, callMyFunction); 20432 }; 20433 //set up what to do if AJAX request fails 20434 $("").ajaxError(wjAjaxOnServerError); 20435 20436 20437 $.post(url, params, callback, "text"); 20438 //return false to button to stop standard submit of the form 20439 } 20440 //pre re-captcha v3 potrebujeme najskor volat validate 20441 if (typeof window.wjFormSubmit == "function") { 20442 window.wjFormSubmit(form, formSubmitCallback); 20443 } else { 20444 formSubmitCallback(); 20445 } 20446 20447 return false; 20448 } 20449 catch(ex) 20450 { 20451 window.alert("Error 2: " + ex); 20452 return true; 20453 } 20454} 20455 20456/* 20457* Method is executed when server returns exception. 20458*/ 20459function wjAjaxOnServerError(event, request, settings, error){ 20460 alert("Server returned an error, form was not probably processed by the server."); 20461} 20462 20463/* 20464* Method is called when server returns non JSON data. 20465*/ 20466function wjAjaxOnServerDataError(data){ 20467 alert("Server has returned data in unknown format."); 20468} 20469 20470/* 20471* Method is called when server returns reply to ajax call. 20472* 20473* @param data contains reply from the server 20474*/ 20475function wjAjaxOnFormResult(formDiv, resultDiv, data, callMyFunction) { 20476 try 20477 { 20478 var result = eval(data); 20479 } catch (ex) { 20480 wjAjaxOnServerDataError(data); 20481 return; 20482 } 20483 20484 try 20485 { 20486 if (typeof callMyFunction != 'undefined') callMyFunction(result); 20487 } 20488 catch (e) { } 20489 20490 if (result.ok) 20491 { 20492 wjAjaxOnSuccess(formDiv, resultDiv, result, callMyFunction); 20493 } else { 20494 wjAjaxOnError(formDiv, resultDiv, result); 20495 } 20496 try { 20497 const wjEvent = new CustomEvent("WJ.formSubmit", { 20498 detail: { 20499 success: result.ok, 20500 result: result, 20501 formDiv: formDiv, 20502 resultDiv: resultDiv 20503 } 20504 }); 20505 //console.log("Dispatching event: ", wjEvent); 20506 window.dispatchEvent(wjEvent); 20507 } catch (e) { console.log(e); } 20508} 20509 20510/* 20511* Method is executed, when form was submited with success. 20512*/ 20513function wjAjaxOnSuccess(formDiv, resultDiv, result) 20514{ 20515 $("#" + formDiv).queue(function() 20516 { 20517 //console.log(formDiv+"/"+resultDiv+"/"+result); 20518 $("#" + resultDiv).parent().addClass("alert alert-ajax alert-success"); 20519 $("#" + resultDiv).parent().removeClass("alert-danger"); 20520 formAfterSend(); 20521 $("#" + resultDiv).html("<div class=\"overlay\"></div><div class=\"form-dialog\">"+result.okResult).fadeIn(); 20522 $("html,body").animate({ scrollTop: ($("#" + resultDiv).offset().top - 100) }, { duration: 'fast', easing: 'linear'}); 20523 $(this).dequeue(); 20524 20525 window.setTimeout(wjAjaxResetForm.bind(null, formDiv), 500); 20526 window.setTimeout(function(){ 20527 var div = $("#" + resultDiv), 20528 formResult = div.closest('#formResult'); 20529 20530 if (formResult.length > 0) { 20531 formResult.fadeOut("slow"); 20532 } 20533 else { 20534 div.fadeOut("slow"); 20535 } 20536 }, 4000); 20537 20538 wjAjaxSetToken(formDiv, result.token); 20539 }); 20540} 20541 20542function formAfterSend() { 20543} 20544 20545function wjAjaxResetForm(formDiv) 20546{ 20547 try 20548 { 20549 var form = $('form[name="' + formDiv + '"]') 20550 if (formDiv.length > 0) 20551 { 20552 20553 form.find('input[type=text], input[type=email], input[type=tel], input[type=date], input[type=checkbox], input[type=radio], textarea').each(function(){ 20554 var el = $(this); 20555 20556 $("form[name="+formDiv+"]").removeClass("sending"); 20557 20558 if (el.is(':checkbox') || el.is(':radio')) { 20559 el.prop('checked', el[0].defaultValue).trigger('change'); 20560 } 20561 else { 20562 el.val('').trigger('change'); 20563 } 20564 20565 if (el.hasClass('selectmenu')) { 20566 setTimeout(function(){ 20567 el.val('').selectmenu('refresh'); 20568 }); 20569 } 20570 }); 20571 20572 form.find('select').each(function() { 20573 this.selectedIndex = 0; 20574 }); 20575 20576 form.find(".dropzone").each(function() { 20577 Dropzone.forElement(this).removeAllFiles(); 20578 }); 20579 } 20580 } catch (e) { 20581 console.log(e); 20582 } 20583} 20584 20585function wjAjaxSetToken(formDiv, token) 20586{ 20587 try 20588 { 20589 if (token != undefined && token != null && token!="") 20590 { 20591 $("form[name="+formDiv+"]").find("input[name=__token]").val(token); 20592 } 20593 } catch (e) {} 20594} 20595 20596/* 20597* Method is executed, when form was submitted and server returned error. 20598*/ 20599function wjAjaxOnError(formDiv, resultDiv, result) { 20600 $("#" + resultDiv).html(result.errorResult).show("slow"); 20601 $("#" + formDiv).queue(function () 20602 { 20603 var callback = function() 20604 { 20605 wjAjaxColorizeLabel(this, result); 20606 }; 20607 $("#" + formDiv + " label").each(callback); 20608 $("#wjcaptchaImg1").click(); 20609 $("#wjcaptcha1").addClass("invalid"); 20610 $("#" + resultDiv).parent().addClass("alert alert-ajax alert-danger"); 20611 $("html,body").animate({ scrollTop: ($("#" + resultDiv).offset().top - 100) }, { duration: 'fast', easing: 'linear'}); 20612 $("form").removeClass("sending"); 20613 $(this).dequeue(); 20614 20615 wjAjaxSetToken(formDiv, result.token); 20616 }); 20617} 20618 20619/* 20620* Method will add class "error" to each label, whose input was found in validationErrors object. 20621* In the oposite way, it removes any possible "error" class from any labes, that currently is not in error. 20622*/ 20623function wjAjaxColorizeLabel(label, result) { 20624 var error = result.validationErrors[label.htmlFor]; 20625 var errorIndex = -1; 20626 if (label.className != null) errorIndex = label.className.indexOf('error'); 20627 if (error != null && errorIndex == -1) { 20628 label.className = label.className + " error"; 20629 } 20630 if (error == null && errorIndex > -1) { 20631 label.className = label.className.substring(0, errorIndex) 20632 + label.className.substring(errorIndex + 5, label.className.length); 20633 } 20634} 20635 20636 20637 20638(function() { 20639 var method; 20640 var noop = function () {}; 20641 var methods = [ 20642 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 20643 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 20644 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 20645 'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn' 20646 ]; 20647 var length = methods.length; 20648 var console = (window.console = window.console || {}); 20649 20650 while (length--) { 20651 method = methods[length]; 20652 20653 20654 if (!console[method]) { 20655 console[method] = noop; 20656 } 20657 } 20658}()); 20659 20660 20661
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.