vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ "./
4app_prime1studio_ec/cartridges/app_prime1studio_ec/cartridge/client/default/js/jquery.magnific-popup.min.js": 5/*!*********************************************************************************************************************!*\ 6 !*** ./app_prime1studio_ec/cartridges/app_prime1studio_ec/cartridge/client/default/js/jquery.magnific-popup.min.js ***! 7 \*********************************************************************************************************************/ 8/***/ ((module, exports, __webpack_require__) => { 9 10var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 11/*! Magnific Popup - v1.1.0 - 2016-02-20 12* http://dimsemenov.com/plugins/magnific-popup/ 13* Copyright (c) 2016 Dmitry Semenov; */ 14!function (a) { 15 true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (a), 16 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 17 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 18 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0; 19}(function (a) { 20 var b; 21 var c; 22 var d; 23 var e; 24 var f; 25 var g; 26 var h = 'Close'; 27 var i = 'BeforeClose'; 28 var j = 'AfterClose'; 29 var k = 'BeforeAppend'; 30 var l = 'MarkupParse'; 31 var m = 'Open'; 32 var n = 'Change'; 33 var o = 'mfp'; 34 var p = ".".concat(o); 35 var q = 'mfp-ready'; 36 var r = 'mfp-removing'; 37 var s = 'mfp-prevent-close'; 38 var t = function t() {}; 39 var u = !!window.jQuery; 40 var v = a(window); 41 var w = function w(a, c) { 42 b.ev.on(o + a + p, c); 43 }; 44 var x = function x(b, c, d, e) { 45 var f = document.createElement('div'); 46 return f.className = "mfp-".concat(b), d && (f.innerHTML = d), e ? c && c.appendChild(f) : (f = a(f), c && f.appendTo(c)), f; 47 }; 48 var y = function y(c, d) { 49 b.ev.triggerHandler(o + c, d), b.st.callbacks && (c = c.charAt(0).toLowerCase() + c.slice(1), b.st.callbacks[c] && b.st.callbacks[c].apply(b, a.isArray(d) ? d : [d])); 50 }; 51 var z = function z(c) { 52 return c === g && b.currTemplate.closeBtn || (b.currTemplate.closeBtn = a(b.st.closeMarkup.replace('%title%', b.st.tClose)), g = c), b.currTemplate.closeBtn; 53 }; 54 var A = function A() { 55 a.magnificPopup.instance || (b = new t(), b.init(), a.magnificPopup.instance = b); 56 }; 57 var B = function B() { 58 var a = document.createElement('p').style; 59 var b = ['ms', 'O', 'Moz', 'Webkit']; 60 if (void 0 !== a.transition) return !0; 61 for (; b.length;) if ("".concat(b.pop(), "Transition") in a) return !0; 62 return !1; 63 }; 64 t.prototype = { 65 constructor: t, 66 init: function init() { 67 var c = navigator.appVersion; 68 b.isLowIE = b.isIE8 = document.all && !document.addEventListener, b.isAndroid = /android/gi.test(c), b.isIOS = /iphone|ipad|ipod/gi.test(c), b.supportsTransition = B(), b.probablyMobile = b.isAndroid || b.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent), d = a(document), b.popupsCache = {}; 69 }, 70 open: function open(c) { 71 var e; 72 if (c.isObj === !1) { 73 b.items = c.items.toArray(), b.index = 0; 74 var _g; 75 var _h = c.items; 76 for (e = 0; e < _h.length; e++) if (_g = _h[e], _g.parsed && (_g = _g.el[0]), _g === c.el[0]) { 77 b.index = e; 78 break; 79 } 80 } else b.items = a.isArray(c.items) ? c.items : [c.items], b.index = c.index || 0; 81 if (b.isOpen) return void b.updateItemHTML(); 82 b.types = [], f = '', c.mainEl && c.mainEl.length ? b.ev = c.mainEl.eq(0) : b.ev = d, c.key ? (b.popupsCache[c.key] || (b.popupsCache[c.key] = {}), b.currTemplate = b.popupsCache[c.key]) : b.currTemplate = {}, b.st = a.extend(!0, {}, a.magnificPopup.defaults, c), b.fixedContentPos = b.st.fixedContentPos === 'auto' ? !b.probablyMobile : b.st.fixedContentPos, b.st.modal && (b.st.closeOnContentClick = !1, b.st.closeOnBgClick = !1, b.st.showCloseBtn = !1, b.st.enableEscapeKey = !1), b.bgOverlay || (b.bgOverlay = x('bg').on("click".concat(p), function () { 83 b.close(); 84 }), b.wrap = x('wrap').attr('tabindex', -1).on("click".concat(p), function (a) { 85 b._checkIfClose(a.target) && b.close(); 86 }), b.container = x('container', b.wrap)), b.contentContainer = x('content'), b.st.preloader && (b.preloader = x('preloader', b.container, b.st.tLoading)); 87 var i = a.magnificPopup.modules; 88 for (e = 0; e < i.length; e++) { 89 var _j = i[e]; 90 _j = _j.charAt(0).toUpperCase() + _j.slice(1), b["init".concat(_j)].call(b); 91 } 92 y('BeforeOpen'), b.st.showCloseBtn && (b.st.closeBtnInside ? (w(l, function (a, b, c, d) { 93 c.close_replaceWith = z(d.type); 94 }), f += ' mfp-close-btn-in') : b.wrap.append(z())), b.st.alignTop && (f += ' mfp-align-top'), b.fixedContentPos ? b.wrap.css({ 95 overflow: b.st.overflowY, 96 overflowX: 'hidden', 97 overflowY: b.st.overflowY 98 }) : b.wrap.css({ 99 top: v.scrollTop(), 100 position: 'absolute' 101 }), (b.st.fixedBgPos === !1 || b.st.fixedBgPos === 'auto' && !b.fixedContentPos) && b.bgOverlay.css({ 102 height: d.height(), 103 position: 'absolute' 104 }), b.st.enableEscapeKey && d.on("keyup".concat(p), function (a) { 105 a.keyCode === 27 && b.close(); 106 }), v.on("resize".concat(p), function () { 107 b.updateSize(); 108 }), b.st.closeOnContentClick || (f += ' mfp-auto-cursor'), f && b.wrap.addClass(f); 109 var k = b.wH = v.height(); 110 var n = {}; 111 if (b.fixedContentPos && b._hasScrollBar(k)) { 112 var _o = b._getScrollbarSize(); 113 _o && (n.marginRight = _o); 114 } 115 b.fixedContentPos && (b.isIE7 ? a('body, html').css('overflow', 'hidden') : n.overflow = 'hidden'); 116 var r = b.st.mainClass; 117 return b.isIE7 && (r += ' mfp-ie7'), r && b._addClassToMFP(r), b.updateItemHTML(), y('BuildControls'), a('html').css(n), b.bgOverlay.add(b.
117wrap).prependTo(b.st.prependTo || a(document.body)), b._lastFocusedEl = document.activeElement, setTimeout(function () { 118 b.content ? (b._addClassToMFP(q), b._setFocus()) : b.bgOverlay.addClass(q), d.on("focusin".concat(p), b._onFocusIn); 119 }, 16), b.isOpen = !0, b.updateSize(k), y(m), c; 120 }, 121 close: function close() { 122 b.isOpen && (y(i), b.isOpen = !1, b.st.removalDelay && !b.isLowIE && b.supportsTransition ? (b._addClassToMFP(r), setTimeout(function () { 123 b._close(); 124 }, b.st.removalDelay)) : b._close()); 125 }, 126 _close: function _close() { 127 y(h); 128 var c = "".concat(r, " ").concat(q, " "); 129 if (b.bgOverlay.detach(), b.wrap.detach(), b.container.empty(), b.st.mainClass && (c += "".concat(b.st.mainClass, " ")), b._removeClassFromMFP(c), b.fixedContentPos) { 130 var _e = { 131 marginRight: '' 132 }; 133 b.isIE7 ? a('body, html').css('overflow', '') : _e.overflow = '', a('html').css(_e); 134 } 135 d.off("keyup".concat(p, " focusin").concat(p)), b.ev.off(p), b.wrap.attr('class', 'mfp-wrap').removeAttr('style'), b.bgOverlay.attr('class', 'mfp-bg'), b.container.attr('class', 'mfp-container'), !b.st.showCloseBtn || b.st.closeBtnInside && b.currTemplate[b.currItem.type] !== !0 || b.currTemplate.closeBtn && b.currTemplate.closeBtn.detach(), b.st.autoFocusLast && b._lastFocusedEl && a(b._lastFocusedEl).focus(), b.currItem = null, b.content = null, b.currTemplate = null, b.prevHeight = 0, y(j); 136 }, 137 updateSize: function updateSize(a) { 138 if (b.isIOS) { 139 var _c = document.documentElement.clientWidth / window.innerWidth; 140 var _d = window.innerHeight * _c; 141 b.wrap.css('height', _d), b.wH = _d; 142 } else b.wH = a || v.height(); 143 b.fixedContentPos || b.wrap.css('height', b.wH), y('Resize'); 144 }, 145 updateItemHTML: function updateItemHTML() { 146 var c = b.items[b.index]; 147 b.contentContainer.detach(), b.content && b.content.detach(), c.parsed || (c = b.parseEl(b.index)); 148 var d = c.type; 149 if (y('BeforeChange', [b.currItem ? b.currItem.type : '', d]), b.currItem = c, !b.currTemplate[d]) { 150 var _f = b.st[d] ? b.st[d].markup : !1; 151 y('FirstMarkupParse', _f), _f ? b.currTemplate[d] = a(_f) : b.currTemplate[d] = !0; 152 } 153 e && e !== c.type && b.container.removeClass("mfp-".concat(e, "-holder")); 154 var g = b["get".concat(d.charAt(0).toUpperCase()).concat(d.slice(1))](c, b.currTemplate[d]); 155 b.appendContent(g, d), c.preloaded = !0, y(n, c), e = c.type, b.container.prepend(b.contentContainer), y('AfterChange'); 156 }, 157 appendContent: function appendContent(a, c) { 158 b.content = a, a ? b.st.showCloseBtn && b.st.closeBtnInside && b.currTemplate[c] === !0 ? b.content.find('.mfp-close').length || b.content.append(z()) : b.content = a : b.content = '', y(k), b.container.addClass("mfp-".concat(c, "-holder")), b.contentContainer.append(b.content); 159 }, 160 parseEl: function parseEl(c) { 161 var d; 162 var e = b.items[c]; 163 if (e.tagName ? e = { 164 el: a(e) 165 } : (d = e.type, e = { 166 data: e, 167 src: e.src 168 }), e.el) { 169 for (var _f2 = b.types, _g2 = 0; _g2 < _f2.length; _g2++) if (e.el.hasClass("mfp-".concat(_f2[_g2]))) { 170 d = _f2[_g2]; 171 break; 172 } 173 e.src = e.el.attr('data-mfp-src'), e.src || (e.src = e.el.attr('href')); 174 } 175 return e.type = d || b.st.type || 'inline', e.index = c, e.parsed = !0, b.items[c] = e, y('ElementParse', e), b.items[c]; 176 }, 177 addGroup: function addGroup(a, c) { 178 var d = function d(_d2) { 179 _d2.mfpEl = this, b._openClick(_d2, a, c); 180 }; 181 c || (c = {}); 182 var e = 'click.magnificPopup'; 183 c.mainEl = a, c.items ? (c.isObj = !0, a.off(e).on(e, d)) : (c.isObj = !1, c.delegate ? a.off(e).on(e, c.delegate, d) : (c.items = a, a.off(e).on(e, d))); 184 }, 185 _openClick: function _openClick(c, d, e) { 186 var f = void 0 !== e.midClick ? e.midClick : a.magnificPopup.defaults.midClick; 187 if (f || !(c.which === 2 || c.ctrlKey || c.metaKey || c.altKey || c.shift
187Key)) { 188 var _g3 = void 0 !== e.disableOn ? e.disableOn : a.magnificPopup.defaults.disableOn; 189 if (_g3) if (a.isFunction(_g3)) { 190 if (!_g3.call(b)) return !0; 191 } else if (v.width() < _g3) return !0; 192 c.type && (c.preventDefault(), b.isOpen && c.stopPropagation()), e.el = a(c.mfpEl), e.delegate && (e.items = d.find(e.delegate)), b.open(e); 193 } 194 }, 195 updateStatus: function updateStatus(a, d) { 196 if (b.preloader) { 197 c !== a && b.container.removeClass("mfp-s-".concat(c)), d || a !== 'loading' || (d = b.st.tLoading); 198 var _e2 = { 199 status: a, 200 text: d 201 }; 202 y('UpdateStatus', _e2), a = _e2.status, d = _e2.text, b.preloader.html(d), b.preloader.find('a').on('click', function (a) { 203 a.stopImmediatePropagation(); 204 }), b.container.addClass("mfp-s-".concat(a)), c = a; 205 } 206 }, 207 _checkIfClose: function _checkIfClose(c) { 208 if (!a(c).hasClass(s)) { 209 var _d3 = b.st.closeOnContentClick; 210 var _e3 = b.st.closeOnBgClick; 211 if (_d3 && _e3) return !0; 212 if (!b.content || a(c).hasClass('mfp-close') || b.preloader && c === b.preloader[0]) return !0; 213 if (c === b.content[0] || a.contains(b.content[0], c)) { 214 if (_d3) return !0; 215 } else if (_e3 && a.contains(document, c)) return !0; 216 return !1; 217 } 218 }, 219 _addClassToMFP: function _addClassToMFP(a) { 220 b.bgOverlay.addClass(a), b.wrap.addClass(a); 221 }, 222 _removeClassFromMFP: function _removeClassFromMFP(a) { 223 this.bgOverlay.removeClass(a), b.wrap.removeClass(a); 224 }, 225 _hasScrollBar: function _hasScrollBar(a) { 226 return (b.isIE7 ? d.height() : document.body.scrollHeight) > (a || v.height()); 227 }, 228 _setFocus: function _setFocus() { 229 (b.st.focus ? b.content.find(b.st.focus).eq(0) : b.wrap).focus(); 230 }, 231 _onFocusIn: function _onFocusIn(c) { 232 return c.target === b.wrap[0] || a.contains(b.wrap[0], c.target) ? void 0 : (b._setFocus(), !1); 233 }, 234 _parseMarkup: function _parseMarkup(b, c, d) { 235 var e; 236 d.data && (c = a.extend(d.data, c)), y(l, [b, c, d]), a.each(c, function (c, d) { 237 if (void 0 === d || d === !1) return !0; 238 if (e = c.split('_'), e.length > 1) { 239 var _f3 = b.find("".concat(p, "-").concat(e[0])); 240 if (_f3.length > 0) { 241 var _g4 = e[1]; 242 _g4 === 'replaceWith' ? _f3[0] !== d[0] && _f3.replaceWith(d) : _g4 === 'img' ? _f3.is('img') ? _f3.attr('src', d) : _f3.replaceWith(a('<img>').attr('src', d).attr('class', _f3.attr('class'))) : _f3.attr(e[1], d); 243 } 244 } else b.find("".concat(p, "-").concat(c)).html(d); 245 }); 246 }, 247 _getScrollbarSize: function _getScrollbarSize() { 248 if (void 0 === b.scrollbarSize) { 249 var _a = document.createElement('div'); 250 _a.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;', document.body.appendChild(_a), b.scrollbarSize = _a.offsetWidth - _a.clientWidth, document.body.removeChild(_a); 251 } 252 return b.scrollbarSize; 253 } 254 }, a.magnificPopup = { 255 instance: null, 256 proto: t.prototype, 257 modules: [], 258 open: function open(b, c) { 259 return A(), b = b ? a.extend(!0, {}, b) : {}, b.isObj = !0, b.index = c || 0, this.instance.open(b); 260 }, 261 close: function close() { 262 return a.magnificPopup.instance && a.magnificPopup.instance.close(); 263 }, 264 registerModule: function registerModule(b, c) { 265 c.options && (a.magnificPopup.defaults[b] = c.options), a.extend(this.proto, c.proto), this.modules.push(b); 266 }, 267 defaults: { 268 disableOn: 0, 269 key: null, 270 midClick: !1, 271 mainClass: '', 272 preloader: !0, 273 focus: '', 274 closeOnContentClick: !1, 275 closeOnBgClick: !0, 276 closeBtnInside: !0, 277 showCloseBtn: !0, 278 enableEscapeKey: !0, 279 modal: !1, 280 alignTop: !1, 281 removalDelay: 0, 282 prependTo: null, 283 fixedContentPos: 'auto', 284 fixedBgPos: 'auto', 285 overflowY: 'auto', 286 closeMarkup: '<button title="%title%" type="button" class="mfp-close">×</button>', 287 tClose: 'Close (Esc)', 288 tLoading: 'Loading...', 289 autoFocusLast: !0 290 } 291 }, a.fn.magnificPopup = function (c) { 292 A(); 293 var d = a(this); 294 if (typeof c === 'string') { 295 if (c === 'open') { 296 var _e4; 297 var _f4 = u ? d.data('magnificPopup') : d[0].magnificPopup; 298 var _g5 = parseInt(arguments[1], 10) || 0; 299 _f4.items ? _e4 = _f4.items[_g5] : (_e4 = d, _f4.delegate && (_e4 = _e4.find(_f4.delegate)), _e4 = _e4.eq(_g5)), b._openClick({ 300 mfpEl: _e4 301 }, d, _f4); 302 } else b.isOpen && b[c].apply(b, Array.prototype.slice.call(arguments, 1)); 303 } else c = a.extend(!0, {}, c), u ? d.data('magnificPopup', c) : d[0].magnificPopup = c, b.addGroup(d, c); 304 return d; 305 }; 306 var C; 307 var D; 308 var E; 309 var F = 'inline'; 310 var G = function G() { 311 E && (D.after(E.addClass(C)).detach(), E = null); 312 }; 313 a.magnificPopup.registerModule(F, { 314 options: { 315 hiddenClass: 'hide', 316 markup: '', 317 tNotFound: 'Content not found' 318 }, 319 proto: { 320 initInline: function initInline() { 321 b.types.push(F), w("".concat(h, ".").concat(F), function () { 322 G(); 323 }); 324 }, 325 getInline: function getInline(c, d) { 326 if (G(), c.src) { 327 var _e5 = b.st.inline; 328 var _f5 = a(c.src); 329 if (_f5.length) { 330 var _g6 = _f5[0].parentNode; 331 _g6 && _g6.tagName && (D || (C = _e5.hiddenClass, D = x(C), C = "mfp-".concat(C)), E = _f5.after(D).detach().removeClass(C)), b.updateStatus('ready'); 332 } else b.updateStatus('error', _e5.tNotFound), _f5 = a('<div>'); 333 return c.inlineElement = _f5, _f5; 334 } 335 return b.updateStatus('ready'), b._parseMarkup(d, {}, c), d; 336 } 337 } 338 }); 339 var H; 340 var I = 'ajax'; 341 var J = function J() { 342 H && a(document.body).removeClass(H); 343 }; 344 var K = function K() {
345 J(), b.req && b.req.abort(); 346 }; 347 a.magnificPopup.registerModule(I, { 348 options: { 349 settings: null, 350 cursor: 'mfp-ajax-cur', 351 tError: '<a href="%url%">The content</a> could not be loaded.' 352 }, 353 proto: { 354 initAjax: function initAjax() { 355 b.types.push(I), H = b.st.ajax.cursor, w("".concat(h, ".").concat(I), K), w("BeforeChange.".concat(I), K); 356 }, 357 getAjax: function getAjax(c) { 358 H && a(document.body).addClass(H), b.updateStatus('loading'); 359 var d = a.extend({ 360 url: c.src, 361 success: function success(d, e, f) { 362 var g = { 363 data: d, 364 xhr: f 365 }; 366 y('ParseAjax', g), b.appendContent(a(g.data), I), c.finished = !0, J(), b._setFocus(), setTimeout(function () { 367 b.wrap.addClass(q); 368 }, 16), b.updateStatus('ready'), y('AjaxContentAdded'); 369 }, 370 error: function error() { 371 J(), c.finished = c.loadError = !0, b.updateStatus('error', b.st.ajax.tError.replace('%url%', c.src)); 372 } 373 }, b.st.ajax.settings); 374 return b.req = a.ajax(d), ''; 375 } 376 } 377 }); 378 var L; 379 var M = function M(c) { 380 if (c.data && void 0 !== c.data.title) return c.data.title; 381 var d = b.st.image.titleSrc; 382 if (d) { 383 if (a.isFunction(d)) return d.call(b, c); 384 if (c.el) return c.el.attr(d) || ''; 385 } 386 return ''; 387 }; 388 a.magnificPopup.registerModule('image', { 389 options: { 390 markup: '<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>', 391 cursor: 'mfp-zoom-out-cur', 392 titleSrc: 'title', 393 verticalFit: !0, 394 tError: '<a href="%url%">The image</a> could not be loaded.' 395 }, 396 proto: { 397 initImage: function initImage() { 398 var c = b.st.image; 399 var d = '.image'; 400 b.types.push('image'), w(m + d, function () { 401 b.currItem.type === 'image' && c.cursor && a(document.body).addClass(c.cursor); 402 }), w(h + d, function () { 403 c.cursor && a(document.body).removeClass(c.cursor), v.off("resize".concat(p)); 404 }), w("Resize".concat(d), b.resizeImage), b.isLowIE && w('AfterChange', b.resizeImage); 405 }, 406 resizeImage: function resizeImage() { 407 var a = b.currItem; 408 if (a && a.img && b.st.image.verticalFit) { 409 var _c2 = 0; 410 b.isLowIE && (_c2 = parseInt(a.img.css('padding-top'), 10) + parseInt(a.img.css('padding-bottom'), 10)), a.img.css('max-height', b.wH - _c2); 411 } 412 }, 413 _onImageHasSize: function _onImageHasSize(a) { 414 a.img && (a.hasSize = !0, L && clearInterval(L), a.isCheckingImgSize = !1, y('ImageHasSize', a), a.imgHidden && (b.content && b.content.removeClass('mfp-loading'), a.imgHidden = !1)); 415 }, 416 findImageSize: function findImageSize(a) { 417 var c = 0; 418 var d = a.img[0]; 419 var _e6 = function e(f) { 420 L && clearInterval(L), L = setInterval(function () { 421 return d.naturalWidth > 0 ? void b._onImageHasSize(a) : (c > 200 && clearInterval(L), c++, void (c === 3 ? _e6(10) : c === 40 ? _e6(50) : c === 100 && _e6(500))); 422 }, f); 423 }; 424 _e6(1); 425 }, 426 getImage: function getImage(c, d) { 427 var e = 0; 428 var _f6 = function f() { 429 c && (c.img[0].complete ? (c.img.off('.mfploader'), c === b.currItem && (b._onImageHasSize(c), b.updateStatus('ready')), c.hasSize = !0, c.loaded = !0, y('ImageLoadComplete')) : (e++, e < 200 ? setTimeout(_f6, 100) : g())); 430 }; 431 var g = function g() { 432 c && (c.img.off('.mfploader'), c === b.currItem && (b._onImageHasSize(c), b.updateStatus('error', h.tError.replace('%url%', c.src))), c.hasSize = !0, c.loaded = !0, c.loadError = !0); 433 }; 434 var h = b.st.image; 435 var i = d.find('.mfp-img'); 436 if (i.length) { 437 var _j2 = document.createElement('img'); 438 _j2.className = 'mfp-img', c.el && c.el.find('img').length && (_j2.alt = c.el.find('img').attr('alt')), c.img = a(_j2).on('load.mfploader', _f6).on('error.mfploader', g), _j2.src = c.src, i.is('img') && (c.img = c.img.clone()), _j2 = c.img[0], _j2.naturalWi
438dth > 0 ? c.hasSize = !0 : _j2.width || (c.hasSize = !1); 439 } 440 return b._parseMarkup(d, { 441 title: M(c), 442 img_replaceWith: c.img 443 }, c), b.resizeImage(), c.hasSize ? (L && clearInterval(L), c.loadError ? (d.addClass('mfp-loading'), b.updateStatus('error', h.tError.replace('%url%', c.src))) : (d.removeClass('mfp-loading'), b.updateStatus('ready')), d) : (b.updateStatus('loading'), c.loading = !0, c.hasSize || (c.imgHidden = !0, d.addClass('mfp-loading'), b.findImageSize(c)), d); 444 } 445 } 446 }); 447 var N; 448 var O = function O() { 449 return void 0 === N && (N = void 0 !== document.createElement('p').style.MozTransform), N; 450 }; 451 a.magnificPopup.registerModule('zoom', { 452 options: { 453 enabled: !1, 454 easing: 'ease-in-out', 455 duration: 300, 456 opener: function opener(a) { 457 return a.is('img') ? a : a.find('img'); 458 } 459 }, 460 proto: { 461 initZoom: function initZoom() { 462 var a; 463 var c = b.st.zoom; 464 var d = '.zoom'; 465 if (c.enabled && b.supportsTransition) { 466 var _e7; 467 var _f7; 468 var _g7 = c.duration; 469 var _j3 = function _j3(a) { 470 var b = a.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'); 471 var d = "all ".concat(c.duration / 1e3, "s ").concat(c.easing); 472 var e = { 473 position: 'fixed', 474 zIndex: 9999, 475 left: 0, 476 top: 0, 477 '-webkit-backface-visibility': 'hidden' 478 }; 479 var f = 'transition'; 480 return e["-webkit-".concat(f)] = e["-moz-".concat(f)] = e["-o-".concat(f)] = e[f] = d, b.css(e), b; 481 }; 482 var _k = function _k() { 483 b.content.css('visibility', 'visible'); 484 }; 485 w("BuildControls".concat(d), function () { 486 if (b._allowZoom()) { 487 if (clearTimeout(_e7), b.content.css('visibility', 'hidden'), a = b._getItemToZoom(), !a) return void _k(); 488 _f7 = _j3(a), _f7.css(b._getOffset()), b.wrap.append(_f7), _e7 = setTimeout(function () { 489 _f7.css(b._getOffset(!0)), _e7 = setTimeout(function () { 490 _k(), setTimeout(function () { 491 _f7.remove(), a = _f7 = null, y('ZoomAnimationEnded'); 492 }, 16); 493 }, _g7); 494 }, 16); 495 } 496 }), w(i + d, function () { 497 if (b._allowZoom()) { 498 if (clearTimeout(_e7), b.st.removalDelay = _g7, !a) { 499 if (a = b._getItemToZoom(), !a) return; 500 _f7 = _j3(a); 501 } 502 _f7.css(b._getOffset(!0)), b.wrap.append(_f7), b.content.css('visibility', 'hidden'), setTimeout(function () { 503 _f7.css(b._getOffset()); 504 }, 16); 505 } 506 }), w(h + d, function () { 507 b._allowZoom() && (_k(), _f7 && _f7.remove(), a = null); 508 }); 509 } 510 }, 511 _allowZoom: function _allowZoom() { 512 return b.currItem.type === 'image'; 513 }, 514 _getItemToZoom: function _getItemToZoom() { 515 return b.currItem.hasSize ? b.currItem.img : !1; 516 }, 517 _getOffset: function _getOffset(c) { 518 var d; 519 d = c ? b.currItem.img : b.st.zoom.opener(b.currItem.el || b.currItem); 520 var e = d.offset(); 521 var f = parseInt(d.css('padding-top'), 10); 522 var g = parseInt(d.css('padding-bottom'), 10); 523 e.top -= a(window).scrollTop() - f; 524 var h = { 525 width: d.width(), 526 height: (u ? d.innerHeight() : d[0].offsetHeight) - g - f 527 }; 528 return O() ? h['-moz-transform'] = h.transform = "translate(".concat(e.left, "px,").concat(e.top, "px)") : (h.left = e.left, h.top = e.top), h; 529 } 530 } 531 }); 532 var P = 'iframe'; 533 var Q = '//about:blank'; 534 var R = function R(a) { 535 if (b.currTemplate[P]) { 536 var _c3 = b.currTemplate[P].find('iframe'); 537 _c3.length && (a || (_c3[0].src = Q), b.isIE8 && _c3.css('display', a ? 'block' : 'none')); 538 } 539 }; 540 a.magnificPopup.registerModule(P, { 541 options: { 542 markup: '<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>', 543 srcAction: 'iframe_src', 544 patterns: { 545 youtube: { 546 index: 'youtube.com', 547 id: 'v=', 548 src: '//www.youtube.com/embed/%id%?autoplay=1' 549 }, 550 vimeo: { 551 index: 'vimeo.com/', 552 id: '/', 553 src: '//player.vimeo.com/video/%id%?autoplay=1' 554 }, 555 gmaps: { 556 index: '//maps.google.', 557 src: '%id%&output=embed' 558 } 559 } 560 }, 561 proto: { 562 initIframe: function initIframe() { 563 b.types.push(P), w('BeforeChange', function (a, b, c) { 564 b !== c && (b === P ? R() : c === P && R(!0)); 565 }), w("".concat(h, ".").concat(P), function () { 566 R(); 567 }); 568 }, 569 getIframe: function getIframe(c, d) { 570 var e = c.src; 571 var f = b.st.iframe; 572 a.each(f.patterns, function () { 573 return e.indexOf(this.index) > -1 ? (this.id && (e = typeof this.id === 'string' ? e.substr(e.lastIndexOf(this.id
573) + this.id.length, e.length) : this.id.call(this, e)), e = this.src.replace('%id%', e), !1) : void 0; 574 }); 575 var g = {}; 576 return f.srcAction && (g[f.srcAction] = e), b._parseMarkup(d, g, c), b.updateStatus('ready'), d; 577 } 578 } 579 }); 580 var S = function S(a) { 581 var c = b.items.length; 582 return a > c - 1 ? a - c : a < 0 ? c + a : a; 583 }; 584 var T = function T(a, b, c) { 585 return a.replace(/%curr%/gi, b + 1).replace(/%total%/gi, c); 586 }; 587 a.magnificPopup.registerModule('gallery', { 588 options: { 589 enabled: !1, 590 arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>', 591 preload: [0, 2], 592 navigateByImgClick: !0, 593 arrows: !0, 594 tPrev: 'Previous (Left arrow key)', 595 tNext: 'Next (Right arrow key)', 596 tCounter: '%curr% of %total%' 597 }, 598 proto: { 599 initGallery: function initGallery() { 600 var c = b.st.gallery; 601 var e = '.mfp-gallery'; 602 return b.direction = !0, c && c.enabled ? (f += ' mfp-gallery', w(m + e, function () { 603 c.navigateByImgClick && b.wrap.on("click".concat(e), '.mfp-img', function () { 604 return b.items.length > 1 ? (b.next(), !1) : void 0; 605 }), d.on("keydown".concat(e), function (a) { 606 a.keyCode === 37 ? b.prev() : a.keyCode === 39 && b.next(); 607 }); 608 }), w("UpdateStatus".concat(e), function (a, c) { 609 c.text && (c.text = T(c.text, b.currItem.index, b.items.length)); 610 }), w(l + e, function (a, d, e, f) { 611 var g = b.items.length; 612 e.counter = g > 1 ? T(c.tCounter, f.index, g) : ''; 613 }), w("BuildControls".concat(e), function () { 614 if (b.items.length > 1 && c.arrows && !b.arrowLeft) { 615 var _d4 = c.arrowMarkup; 616 var _e8 = b.arrowLeft = a(_d4.replace(/%title%/gi, c.tPrev).replace(/%dir%/gi, 'left')).addClass(s); 617 var _f8 = b.arrowRight = a(_d4.replace(/%title%/gi, c.tNext).replace(/%dir%/gi, 'right')).addClass(s); 618 _e8.click(function () { 619 b.prev(); 620 }), _f8.click(function () { 621 b.next(); 622 }), b.container.append(_e8.add(_f8)); 623 } 624 }), w(n + e, function () { 625 b._preloadTimeout && clearTimeout(b._preloadTimeout), b._preloadTimeout = setTimeout(function () { 626 b.preloadNearbyImages(), b._preloadTimeout = null; 627 }, 16); 628 }), void w(h + e, function () { 629 d.off(e), b.wrap.off("click".concat(e)), b.arrowRight = b.arrowLeft = null; 630 })) : !1; 631 }, 632 next: function next() { 633 b.direction = !0, b.index = S(b.index + 1), b.updateItemHTML(); 634 }, 635 prev: function prev() { 636 b.direction = !1, b.index = S(b.index - 1), b.updateItemHTML(); 637 }, 638 goTo: function goTo(a) { 639 b.direction = a >= b.index, b.index = a, b.updateItemHTML(); 640 }, 641 preloadNearbyImages: function preloadNearbyImages() { 642 var a; 643 var c = b.st.gallery.preload; 644 var d = Math.min(c[0], b.items.length); 645 var e = Math.min(c[1], b.items.length); 646 for (a = 1; a <= (b.direction ? e : d); a++) b._preloadItem(b.index + a); 647 for (a = 1; a <= (b.direction ? d : e); a++) b._preloadItem(b.index - a); 648 }, 649 _preloadItem: function _preloadItem(c) { 650 if (c = S(c), !b.items[c].preloaded) { 651 var _d5 = b.items[c]; 652 _d5.parsed || (_d5 = b.parseEl(c)), y('LazyLoad', _d5), _d5.type === 'image' && (_d5.img = a('<img class="mfp-img" />').on('load.mfploader', function () { 653 _d5.hasSize = !0; 654 }).on('error.mfploader', function () { 655 _d5.hasSize = !0, _d5.loadError = !0, y('LazyLoadError', _d5); 656 }).attr('src', _d5.src)), _d5.preloaded = !0; 657 } 658 } 659 } 660 }); 661 var U = 'retina'; 662 a.magnificPopup.registerModule(U, { 663 options: { 664 replaceSrc: function replaceSrc(a) { 665 return a.src.replace(/\.\w+$/, function (a) { 666 return "@2x".concat(a); 667 }); 668 }, 669 ratio: 1 670 }, 671 proto: { 672 initRetina: function initRetina() { 673 if (window.devicePixelRatio > 1) { 674 var _a2 = b.st.retina; 675 var _c4 = _a2.ratio; 676 _c4 = isNaN(_c4) ? _c4() : _c4, _c4 > 1 && (w("ImageHasSize.".concat(U), function (a, b) { 677 b.img.css({
678 'max-width': b.img[0].naturalWidth / _c4, 679 width: '100%' 680 }); 681 }), w("ElementParse.".concat(U), function (b, d) { 682 d.src = _a2.replaceSrc(d, _c4); 683 })); 684 } 685 } 686 } 687 }), A(); 688}); 689 690/***/ }), 691
vendor: 319,038 bytes, lines 692-9701
692/***/ "./node_modules/jquery/dist/jquery.js": 693/*!********************************************!*\ 694 !*** ./node_modules/jquery/dist/jquery.js ***! 695 \********************************************/ 696/***/ (function(module, exports, __webpack_require__) { 697 698/* module decorator */ module = __webpack_require__.nmd(module); 699var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 700/*! 701 * jQuery JavaScript Library v3.7.1 702 * https://jquery.com/ 703 * 704 * Copyright OpenJS Foundation and other contributors 705 * Released under the MIT license 706 * https://jquery.org/license 707 * 708 * Date: 2023-08-28T13:37Z 709 */ 710(function (global, factory) { 711 "use strict"; 712 713 if (( false ? 0 : _typeof(module)) === "object" && _typeof(module.exports) === "object") { 714 // For CommonJS and CommonJS-like environments where a proper `window` 715 // is present, execute the factory and get jQuery. 716 // For environments that do not have a `window` with a `document` 717 // (such as Node.js), expose a factory as module.exports. 718 // This accentuates the need for the creation of a real `window`. 719 // e.g. var jQuery = require("jquery")(window); 720 // See ticket trac-14549 for more info. 721 module.exports = global.document ? factory(global, true) : function (w) { 722 if (!w.document) { 723 throw new Error("jQuery requires a window with a document"); 724 } 725 return factory(w); 726 }; 727 } else { 728 factory(global); 729 } 730 731 // Pass this if window is not defined yet 732})(typeof window !== "undefined" ? window : this, function (window, noGlobal) { 733 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 734 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 735 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 736 // enough that all such attempts are guarded in a try block. 737 "use strict"; 738 739 var arr = []; 740 var getProto = Object.getPrototypeOf; 741 var _slice = arr.slice; 742 var flat = arr.flat ? function (array) { 743 return arr.flat.call(array); 744 } : function (array) { 745 return arr.concat.apply([], array); 746 }; 747 var push = arr.push; 748 var indexOf = arr.indexOf; 749 var class2type = {}; 750 var toString = class2type.toString; 751 var hasOwn = class2type.hasOwnProperty; 752 var fnToString = hasOwn.toString; 753 var ObjectFunctionString = fnToString.call(Object); 754 var support = {}; 755 var isFunction = function isFunction(obj) { 756 // Support: Chrome <=57, Firefox <=52 757 // In some browsers, typeof returns "function" for HTML <object> elements 758 // (i.e., `typeof document.createElement( "object" ) === "function"`). 759 // We don't want to classify *any* DOM node as a function. 760 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 761 // Plus for old WebKit, typeof returns "function" for HTML collections 762 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 763 return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function"; 764 }; 765 var isWindow = function isWindow(obj) { 766 return obj != null && obj === obj.window; 767 }; 768 var document = window.document; 769 var preservedScriptAttributes = { 770 type: true, 771 src: true, 772 nonce: true, 773 noModule: true 774 }; 775 function DOMEval(code, node, doc) { 776 doc = doc || document; 777 var i, 778 val, 779 script = doc.createElement("script"); 780 script.text = code; 781 if (node) { 782 for (i in preservedScriptAttributes) { 783 // Support: Firefox 64+, Edge 18+ 784 // Some browsers don't support the "nonce" property on scripts. 785 // On the other hand, just using `getAttribute` is not enough as 786 // the `nonce` attribute is reset to an empty string whenever it 787 // becomes browsing-context connected. 788 // See https://github.com/whatwg/html/issues/2369 789 // See https://html.spec.whatwg.org/#nonce-attributes 790 // The `node.getAttribute` check was added for the sake of 791 // `jQuery.globalEval` so that it can fake a nonce-containing node 792 // via an object. 793 val = node[i] || node.getAttribute && node.getAttribute(i); 794 if (val) { 795 script.setAttribute(i, val); 796 } 797 } 798 } 799 doc.head.appendChild(script).parentNode.removeChild(script); 800 } 801 function toType(obj) { 802 if (obj == null) { 803 return obj + ""; 804 } 805 806 // Support: Android <=2.3 only (functionish RegExp) 807 return _typeof(obj) === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : _typeof(obj); 808 } 809 /* global Symbol */ 810 // Defining this global in .eslintrc.json would create a danger of using the global 811 // unguarded in another place, it seems safer to define global only for this module 812 813 var version = "3.7.1", 814 rhtmlSuffix = /HTML$/i, 815 // Define a local copy of jQuery 816 _jQuery2 = function jQuery(selector, context) { 817 // The jQuery object is actually just the init constructor 'enhanced' 818 // Need init if jQuery is called (just allow error to be thrown if not included) 819 return new _jQuery2.fn.init(selector, context); 820 }; 821 _jQuery2.fn = _jQuery2.prototype = { 822 // The current version of jQuery being used 823 jquery: version, 824 constructor: _jQuery2, 825 // The default length of a jQuery object is 0 826 length: 0, 827 toArray: function toArray() { 828 return _slice.call(this); 829 }, 830 // Get the Nth element in the matched element set OR 831 // Get the whole matched element set as a clean array 832 get: function get(num) { 833 // Return all the elements in a clean array 834 if (num == null) { 835 return _slice.call(this); 836 } 837 838 // Return just the one element from the set 839 return num < 0 ? this[num + this.length] : this[num]; 840 }, 841 // Take an array of elements and push it onto the stack 842 // (returning the new matched element set) 843 pushStack: function pushStack(elems) { 844 // Build a new jQuery matched element set 845 var ret = _jQuery2.merge(this.constructor(), elems); 846 847 // Add the old object onto the stack (as a reference) 848 ret.prevObject = this; 849 850 // Return the newly-formed element set 851 return ret; 852 }, 853 // Execute a callback for every element in the matched set. 854 each: function each(callback) { 855 return _jQuery2.each(this, callback); 856 }, 857 map: function map(callback) { 858 return this.pushStack(_jQuery2.map(this, function (elem, i) { 859 return callback.call(elem, i, elem); 860 })); 861 }, 862 slice: function slice() { 863 return this.pushStack(_slice.apply(this, arguments)); 864 }, 865 first: function first() { 866 return this.eq(0); 867 }, 868 last: function last() { 869 return this.eq(-1); 870 }, 871 even: function even() { 872 return this.pushStack(_jQuery2.grep(this, function (_elem, i) { 873 return (i + 1) % 2; 874 })); 875 }, 876 odd: function odd() { 877 return this.pushStack(_jQuery2.grep(this, function (_elem, i) { 878 return i % 2; 879 })); 880 }, 881 eq: function eq(i) { 882 var len = this.length, 883 j = +i + (i < 0 ? len : 0); 884 return this.pushStack(j >= 0 && j < len ? [this[j]] : []); 885 }, 886 end: function end() { 887 return this.prevObject || this.constructor(); 888 }, 889 // For internal use only. 890 // Behaves like an Array's method, not like a jQuery method. 891 push: push, 892 sort: arr.sort, 893 splice: arr.splice 894 }; 895 _jQuery2.extend = _jQuery2.fn.extend = function () { 896 var options, 897 name, 898 src, 899 copy, 900 copyIsArray, 901 clone, 902 target = arguments[0] || {}, 903 i = 1, 904 length = arguments.length, 905 deep = false; 906 907 // Handle a deep copy situation 908 if (typeof target === "boolean") { 909 deep = target; 910 911 // Skip the boolean and the target 912 target = arguments[i] || {}; 913 i++; 914 } 915 916 // Handle case when target is a string or something (possible in deep copy) 917 if (_typeof(target) !== "object" && !isFunction(target)) { 918 target = {}; 919 } 920 921 // Extend jQuery itself if only one argument is passed 922 if (i === length) { 923 target = this; 924 i--; 925 } 926 for (; i < length; i++) { 927 // Only deal with non-null/undefined values 928 if ((options = arguments[i]) != null) { 929 // Extend the base object 930 for (name in options) { 931 copy = options[name]; 932 933 // Prevent Object.prototype pollution 934 // Prevent never-ending loop 935 if (name === "__proto__" || target === copy) { 936 continue; 937 } 938 939 // Recurse if we're merging plain objects or arrays 940 if (deep && copy && (_jQuery2.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) { 941 src = target[name]; 942 943 // Ensure proper type for the source value 944 if (copyIsArray && !Array.isArray(src)) { 945 clone = []; 946 } else if (!copyIsArray && !_jQuery2.isPlainObject(src)) { 947 clone = {}; 948 } else { 949 clone = src; 950 } 951 copyIsArray = false; 952 953 // Never move original objects, clone them 954 target[name] = _jQuery2.extend(deep, clone, copy); 955 956 // Don't bring in undefined values 957 } else if (copy !== undefined) { 958 target[name] = copy; 959 } 960 } 961 } 962 } 963 964 // Return the modified object 965 return target; 966 }; 967 _jQuery2.extend({ 968 // Unique for each copy of jQuery on the page 969 expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""), 970 // Assume jQuery is ready without the ready module 971 isReady: true, 972 error: function error(msg) { 973 throw new Error(msg); 974 }, 975 noop: function noop() {}, 976 isPlainObject: function isPlainObject(obj) { 977 var proto, Ctor; 978 979 // Detect obvious negatives 980 // Use toString instead of jQuery.type to catch host objects 981 if (!obj || toString.call(obj) !== "[object Object]") { 982 return false; 983 } 984 proto = getProto(obj); 985 986 // Objects with no prototype (e.g., `Object.create( null )`) are plain 987 if (!proto) { 988 return true; 989 } 990 991 // Objects with prototype are plain iff they were constructed by a global Object function 992 Ctor = hasOwn.call(proto, "constructor") && proto.constructor; 993 return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString; 994 }, 995 isEmptyObject: function isEmptyObject(obj) { 996 var name; 997 for (name in obj) { 998 return false; 999 } 1000 return true; 1001 }, 1002 // Evaluates a script in a provided context; falls back to the global one 1003 // if not specified. 1004 globalEval: function globalEval(code, options, doc) { 1005 DOMEval(code, { 1006 nonce: options && options.nonce 1007 }, doc); 1008 }, 1009 each: function each(obj, callback) { 1010 var length, 1011 i = 0; 1012 if (isArrayLike(obj)) { 1013 length = obj.length; 1014 for (; i < length; i++) { 1015 if (callback.call(obj[i], i, obj[i]) === false) { 1016 break; 1017 } 1018 } 1019 } else { 1020 for (i in obj) { 1021 if (callback.call(obj[i], i, obj[i]) === false) { 1022 break; 1023 } 1024 } 1025 } 1026 return obj; 1027 }, 1028 // Retrieve the text value of an array of DOM nodes 1029 text: function text(elem) { 1030 var node, 1031 ret = "", 1032 i = 0, 1033 nodeType = elem.nodeType; 1034 if (!nodeType) { 1035 // If no nodeType, this is expected to be an array 1036 while (node = elem[i++]) { 1037 // Do not traverse comment nodes 1038 ret += _jQuery2.text(node); 1039 } 1040 } 1041 if (nodeType === 1 || nodeType === 11) { 1042 return elem.textContent; 1043 } 1044 if (nodeType === 9) { 1045 return elem.documentElement.textContent; 1046 } 1047 if (nodeType === 3 || nodeType === 4) { 1048 return elem.nodeValue; 1049 } 1050 1051 // Do not include comment or processing instruction nodes 1052 1053 return ret; 1054 }, 1055 // results is for internal usage only 1056 makeArray: function makeArray(arr, results) { 1057 var ret = results || []; 1058 if (arr != null) { 1059 if (isArrayLike(Object(arr))) { 1060 _jQuery2.merge(ret, typeof arr === "string" ? [arr] : arr); 1061 } else { 1062 push.call(ret, arr); 1063 } 1064 } 1065 return ret; 1066 }, 1067 inArray: function inArray(elem, arr, i) { 1068 return arr == null ? -1 : indexOf.call(arr, elem, i); 1069 }, 1070 isXMLDoc: function isXMLDoc(elem) { 1071 var namespace = elem && elem.namespaceURI, 1072 docElem = elem && (elem.ownerDocument || elem).documentElement; 1073 1074 // Assume HTML when documentElement doesn't yet exist, such as inside 1075 // document fragments. 1076 return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML"); 1077 }, 1078 // Support: Android <=4.0 only, PhantomJS 1 only 1079 // push.apply(_, arraylike) throws on ancient WebKit 1080 merge: function merge(first, second) { 1081 var len = +second.length, 1082 j = 0, 1083 i = first.length; 1084 for (; j < len; j++) { 1085 first[i++] = second[j]; 1086 } 1087 first.length = i; 1088 return first; 1089 }, 1090 grep: function grep(elems, callback, invert) { 1091 var callbackInverse, 1092 matches = [], 1093 i = 0, 1094 length = elems.length, 1095 callbackExpect = !invert; 1096 1097 // Go through the array, only saving the items 1098 // that pass the validator function 1099 for (; i < length; i++) { 1100 callbackInverse = !callback(elems[i], i); 1101 if (callbackInverse !== callbackExpect) { 1102 matches.push(elems[i]); 1103 } 1104 } 1105 return matches; 1106 }, 1107 // arg is for internal usage only 1108 map: function map(elems, callback, arg) { 1109 var length, 1110 value, 1111 i = 0, 1112 ret = []; 1113 1114 // Go through the array, translating each of the items to their new values 1115 if (isArrayLike(elems)) { 1116 length = elems.length; 1117 for (; i < length; i++) { 1118 value = callback(elems[i], i, arg); 1119 if (value != null) { 1120 ret.push(value); 1121 } 1122 } 1123 1124 // Go through every key on the object, 1125 } else { 1126 for (i in elems) { 1127 value = callback(elems[i], i, arg); 1128 if (value != null) { 1129 ret.push(value); 1130 } 1131 } 1132 } 1133 1134 // Flatten any nested arrays 1135 return flat(ret); 1136 }, 1137 // A global GUID counter for objects 1138 guid: 1, 1139 // jQuery.support is not used in Core but other projects attach their 1140 // properties to it so it needs to exist. 1141 support: support 1142 }); 1143 if (typeof Symbol === "function") { 1144 _jQuery2.fn[Symbol.iterator] = arr[Symbol.iterator]; 1145 } 1146 1147 // Populate the class2type map 1148 _jQuery2.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (_i, name) { 1149 class2type["[object " + name + "]"] = name.toLowerCase(); 1150 }); 1151 function isArrayLike(obj) { 1152 // Support: real iOS 8.2 only (not reproducible in simulator) 1153 // `in` check used to prevent JIT error (gh-2145) 1154 // hasOwn isn't used here due to false negatives 1155 // regarding Nodelist length in IE 1156 var length = !!obj && "length" in obj && obj.length, 1157 type = toType(obj); 1158 if (isFunction(obj) || isWindow(obj)) { 1159 return false; 1160 } 1161 return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj; 1162 } 1163 function nodeName(elem, name) { 1164 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 1165 } 1166 var pop = arr.pop; 1167 var sort = arr.sort; 1168 var splice = arr.splice; 1169 var whitespace = "[\\x20\\t\\r\\n\\f]"; 1170 var rtrimCSS = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"); 1171 1172 // Note: an element does not contain itself 1173 _jQuery2.contains = function (a, b) { 1174 var bup = b && b.parentNode; 1175 return a === bup || !!(bup && bup.nodeType === 1 && ( 1176 // Support: IE 9 - 11+ 1177 // IE doesn't have `contains` on SVG. 1178 a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)); 1179 }; 1180 1181 // CSS string/identifier serialization 1182 // https://drafts.csswg.org/cssom/#common-serializing-idioms 1183 var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 1184 function fcssescape(ch, asCodePoint) { 1185 if (asCodePoint) { 1186 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 1187 if (ch === "\0") { 1188 return "\uFFFD"; 1189 } 1190 1191 // Control characters and (dependent upon position) numbers get escaped as code points 1192 return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " "; 1193 } 1194 1195 // Other potentially-special ASCII characters get backslash-escaped 1196 return "\\" + ch; 1197 } 1198 _jQuery2.escapeSelector = function (sel) { 1199 return (sel + "").replace(rcssescape, fcssescape); 1200 }; 1201 var preferredDoc = document, 1202 pushNative = push; 1203 (function () { 1204 var i, 1205 Expr, 1206 outermostContext, 1207 sortInput, 1208 hasDuplicate, 1209 push = pushNative, 1210 // Local document vars 1211 document, 1212 documentElement, 1213 documentIsHTML, 1214 rbuggyQSA, 1215 matches, 1216 // Instance-specific data 1217 expando = _jQuery2.expando, 1218 dirruns = 0, 1219 done = 0, 1220 classCache = createCache(), 1221 tokenCache = createCache(), 1222 compilerCache = createCache(), 1223 nonnativeSelectorCache = createCache(), 1224 sortOrder = function sortOrder(a, b) { 1225 if (a === b) { 1226 hasDuplicate = true; 1227 } 1228 return 0; 1229 }, 1230 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + "loop|multiple|open|readonly|required|scoped", 1231 // Regular expressions 1232 1233 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 1234 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 1235 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 1236 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 1237 // Operator (capture 2) 1238 "*([*^$|!~]?=)" + whitespace + 1239 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 1240 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", 1241 pseudos = ":(" + identifier + ")(?:\\((" + 1242 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 1243 // 1. quoted (capture 3; capture 4 or capture 5) 1244 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 1245 // 2. simple (capture 6) 1246 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 1247 // 3. anything else (capture 2) 1248 ".*" + ")\\)|)", 1249 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 1250 rwhitespace = new RegExp(whitespace + "+", "g"), 1251 rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), 1252 rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), 1253 rdescend = new RegExp(whitespace + "|>"), 1254 rpseudo = new RegExp(pseudos), 1255 ridentifier = new RegExp("^" + identifier + "$"), 1256 matchExpr = { 1257 ID: new RegExp("^#(" + identifier + ")"), 1258 CLASS: new RegExp("^\\.(" + identifier + ")"), 1259 TAG: new RegExp("^(" + identifier + "|[*])"), 1260 ATTR: new RegExp("^" + attributes), 1261 PSEUDO: new RegExp("^" + pseudos), 1262 CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"), 1263 bool: new RegExp("^(?:" + booleans + ")$", "i"), 1264 // For use in libraries implementing .is() 1265 // We use this for POS matching in `select` 1266 needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i") 1267 }, 1268 rinputs = /^(?:input|select|textarea|button)$/i, 1269 rheader = /^h\d$/i, 1270 // Easily-parseable/retrievable ID or TAG or CLASS selectors 1271 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 1272 rsibling = /[+~]/, 1273 // CSS escapes 1274 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 1275 runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), 1276 funescape = function funescape(escape, nonHex) { 1277 var high = "0x" + escape.slice(1) - 0x10000; 1278 if (nonHex) { 1279 // Strip the backslash prefix from a non-hex escape sequence 1280 return nonHex; 1281 } 1282 1283 // Replace a hexadecimal escape sequence with the encoded Unicode code point 1284 // Support: IE <=11+ 1285 // For values outside the Basic Multilingual Plane (BMP), manually construct a 1286 // surrogate pair 1287 return high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00); 1288 }, 1289 // Used for iframes; see `setDocument`. 1290 // Support: IE 9 - 11+, Edge 12 - 18+ 1291 // Removing the function wrapper causes a "Permission Denied" 1292 // error in IE/Edge. 1293 unloadHandler = function unloadHandler() { 1294 setDocument(); 1295 }, 1296 inDisabledFieldset = addCombinator(function (elem) { 1297 return elem.disabled === true && nodeName(elem, "fieldset"); 1298 }, { 1299 dir: "parentNode", 1300 next: "legend" 1301 }); 1302 1303 // Support: IE <=9 only 1304 // Accessing document.activeElement can throw unexpectedly 1305 // https://bugs.jquery.com/ticket/13393 1306 function safeActiveElement() { 1307 try { 1308 return document.activeElement; 1309 } catch (err) {} 1310 } 1311 1312 // Optimize for push.apply( _, NodeList ) 1313 try { 1314 push.apply(arr = _slice.call(preferredDoc.childNodes), preferredDoc.childNodes); 1315 1316 // Support: Android <=4.0 1317 // Detect silently failing push.apply 1318 // eslint-disable-next-line no-unused-expressions 1319 arr[preferredDoc.childNodes.length].nodeType; 1320 } catch (e) { 1321 push = { 1322 apply: function apply(target, els) { 1323 pushNative.apply(target, _slice.call(els)); 1324 }, 1325 call: function call(target) { 1326 pushNative.apply(target, _slice.call(arguments, 1)); 1327 } 1328 }; 1329 } 1330 function find(selector, context, results, seed) { 1331 var m, 1332 i, 1333 elem, 1334 nid, 1335 match, 1336 groups, 1337 newSelector, 1338 newContext = context && context.ownerDocument, 1339 // nodeType defaults to 9, since context defaults to document 1340 nodeType = context ? context.nodeType : 9; 1341 results = results || []; 1342 1343 // Return early from calls with invalid selector or context 1344 if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) { 1345 return results; 1346 } 1347 1348 // Try to shortcut find operations (as opposed to filters) in HTML documents 1349 if (!seed) { 1350 setDocument(context); 1351 context = context || document; 1352 if (documentIsHTML) { 1353 // If the selector is sufficiently simple, try using a "get*By*" DOM method 1354 // (excepting DocumentFragment context, where the methods don't exist) 1355 if (nodeType !== 11 && (match = rquickExpr.exec(selector))) { 1356 // ID selector 1357 if (m = match[1]) { 1358 // Document context 1359 if (nodeType === 9) { 1360 if (elem = context.getElementById(m)) { 1361 // Support: IE 9 only 1362 // getElementById can match elements by name instead of ID 1363 if (elem.id === m) { 1364 push.call(results, elem); 1365 return results; 1366 } 1367 } else { 1368 return results; 1369 } 1370 1371 // Element context 1372 } else { 1373 // Support: IE 9 only 1374 // getElementById can match elements by name instead of ID 1375 if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) { 1376 push.call(results, elem); 1377 return results; 1378 } 1379 } 1380 1381 // Type selector 1382 } else if (match[2]) { 1383 push.apply(results, context.getElementsByTagName(selector)); 1384 return results; 1385 1386 // Class selector 1387 } else if ((m = match[3]) && context.getElementsByClassName) { 1388 push.apply(results, context.getElementsByClassName(m)); 1389 return results; 1390 } 1391 } 1392 1393 // Take advantage of querySelectorAll 1394 if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) { 1395 newSelector = selector; 1396 newContext = context; 1397 1398 // qSA considers elements outside a scoping root when evaluating child or 1399 // descendant combinators, which is not what we want. 1400 // In such cases, we work around the behavior by prefixing every selector in the 1401 // list with an ID selector referencing the scope context. 1402 // The technique has to be used as well when a leading combinator is used 1403 // as such selectors are not recognized by querySelectorAll. 1404 // Thanks to Andrew Dupont for this technique. 1405 if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) { 1406 // Expand context for sibling selectors 1407 newContext = rsibling.test(selector) && testContext(context.parentNode) || context; 1408 1409 // We can use :scope instead of the ID hack if the browser 1410 // supports it & if we're not changing the context. 1411 // Support: IE 11+, Edge 17 - 18+ 1412 // IE/Edge sometimes throw a "Permission denied" error when 1413 // strict-comparing two documents; shallow comparisons work. 1414 // eslint-disable-next-line eqeqeq 1415 if (newContext != context || !support.scope) { 1416 // Capture the context ID, setting it first if necessary 1417 if (nid = context.getAttribute("id")) { 1418 nid = _jQuery2.escapeSelector(nid); 1419 } else { 1420 context.setAttribute("id", nid = expando); 1421 } 1422 } 1423 1424 // Prefix every selector in the list 1425 groups = tokenize(selector); 1426 i = groups.length; 1427 while (i--) { 1428 groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]); 1429 } 1430 newSelector = groups.join(","); 1431 } 1432 try { 1433 push.apply(results, newContext.querySelectorAll(newSelector)); 1434 return results; 1435 } catch (qsaError) { 1436 nonnativeSelectorCache(selector, true); 1437 } finally { 1438 if (nid === expando) { 1439 context.removeAttribute("id"); 1440 } 1441 } 1442 } 1443 } 1444 } 1445 1446 // All others 1447 return select(selector.replace(rtrimCSS, "$1"), context, results, seed); 1448 } 1449 1450 /** 1451 * Create key-value caches of limited size 1452 * @returns {function(string, object)} Returns the Object data after storing it on itself with 1453 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 1454 * deleting the oldest entry 1455 */ 1456 function createCache() { 1457 var keys = []; 1458 function cache(key, value) { 1459 // Use (key + " ") to avoid collision with native prototype properties 1460 // (see https://github.com/jquery/sizzle/issues/157) 1461 if (keys.push(key + " ") > Expr.cacheLength) { 1462 // Only keep the most recent entries 1463 delete cache[keys.shift()]; 1464 } 1465 return cache[key + " "] = value; 1466 } 1467 return cache; 1468 } 1469 1470 /** 1471 * Mark a function for special use by jQuery selector module 1472 * @param {Function} fn The function to mark 1473 */ 1474 function markFunction(fn) { 1475 fn[expando] = true; 1476 return fn; 1477 } 1478 1479 /** 1480 * Support testing using an element 1481 * @param {Function} fn Passed the created element and returns a boolean result 1482 */ 1483 function assert(fn) { 1484 var el = document.createElement("fieldset"); 1485 try { 1486 return !!fn(el); 1487 } catch (e) { 1488 return false; 1489 } finally { 1490 // Remove from its parent by default 1491 if (el.parentNode) { 1492 el.parentNode.removeChild(el); 1493 } 1494 1495 // release memory in IE 1496 el = null; 1497 } 1498 } 1499 1500 /** 1501 * Returns a function to use in pseudos for input types 1502 * @param {String} type 1503 */ 1504 function createInputPseudo(type) { 1505 return function (elem) { 1506 return nodeName(elem, "input") && elem.type === type; 1507 }; 1508 } 1509 1510 /** 1511 * Returns a function to use in pseudos for buttons 1512 * @param {String} type 1513 */ 1514 function createButtonPseudo(type) { 1515 return function (elem) { 1516 return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type; 1517 }; 1518 } 1519 1520 /** 1521 * Returns a function to use in pseudos for :enabled/:disabled 1522 * @param {Boolean} disabled true for :disabled; false for :enabled 1523 */ 1524 function createDisabledPseudo(disabled) { 1525 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 1526 return function (elem) { 1527 // Only certain elements can match :enabled or :disabled 1528 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 1529 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 1530 if ("form" in elem) { 1531 // Check for inherited disabledness on relevant non-disabled elements: 1532 // * listed form-associated elements in a disabled fieldset 1533 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 1534 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 1535 // * option elements in a disabled optgroup 1536 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 1537 // All such elements have a "form" property. 1538 if (elem.parentNode && elem.disabled === false) { 1539 // Option elements defer to a parent optgroup if present 1540 if ("label" in elem) { 1541 if ("label" in elem.parentNode) { 1542 return elem.parentNode.disabled === disabled; 1543 } else { 1544 return elem.disabled === disabled; 1545 } 1546 } 1547 1548 // Support: IE 6 - 11+ 1549 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 1550 return elem.isDisabled === disabled || 1551 // Where there is no isDisabled, check manually 1552 elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled; 1553 } 1554 return elem.disabled === disabled; 1555 1556 // Try to winnow out elements that can't be disabled before trusting the disabled property. 1557 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 1558 // even exist on them, let alone have a boolean value. 1559 } else if ("label" in elem) { 1560 return elem.disabled === disabled; 1561 } 1562 1563 // Remaining elements are neither :enabled nor :disabled 1564 return false; 1565 }; 1566 } 1567 1568 /** 1569 * Returns a function to use in pseudos for positionals 1570 * @param {Function} fn 1571 */ 1572 function createPositionalPseudo(fn) { 1573 return markFunction(function (argument) { 1574 argument = +argument; 1575 return markFunction(function (seed, matches) { 1576 var j, 1577 matchIndexes = fn([], seed.length, argument), 1578 i = matchIndexes.length; 1579 1580 // Match elements found at the specified indexes 1581 while (i--) { 1582 if (seed[j = matchIndexes[i]]) { 1583 seed[j] = !(matches[j] = seed[j]); 1584 } 1585 } 1586 }); 1587 }); 1588 } 1589 1590 /** 1591 * Checks a node for validity as a jQuery selector context 1592 * @param {Element|Object=} context 1593 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1594 */ 1595 function testContext(context) { 1596 return context && typeof context.getElementsByTagName !== "undefined" && context; 1597 } 1598 1599 /** 1600 * Sets document-related variables once based on the current document 1601 * @param {Element|Object} [node] An element or document object to use to set the document 1602 * @returns {Object} Returns the current document 1603 */ 1604 function setDocument(node) { 1605 var subWindow, 1606 doc = node ? node.ownerDocument || node : preferredDoc; 1607 1608 // Return early if doc is invalid or already selected 1609 // Support: IE 11+, Edge 17 - 18+ 1610 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1611 // two documents; shallow comparisons work. 1612 // eslint-disable-next-line eqeqeq 1613 if (doc == document || doc.nodeType !== 9 || !doc.documentElement) { 1614 return document; 1615 } 1616 1617 // Update global variables 1618 document = doc; 1619 documentElement = document.documentElement; 1620 documentIsHTML = !_jQuery2.isXMLDoc(document); 1621 1622 // Support: iOS 7 only, IE 9 - 11+ 1623 // Older browsers didn't support unprefixed `matches`. 1624 matches = documentElement.matches || documentElement.webkitMatchesSelector || documentElement.msMatchesSelector; 1625 1626 // Support: IE 9 - 11+, Edge 12 - 18+ 1627 // Accessing iframe documents after unload throws "permission denied" errors 1628 // (see trac-13936). 1629 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 1630 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 1631 if (documentElement.msMatchesSelector && 1632 // Support: IE 11+, Edge 17 - 18+ 1633 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1634 // two documents; shallow comparisons work. 1635 // eslint-disable-next-line eqeqeq 1636 preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) { 1637 // Support: IE 9 - 11+, Edge 12 - 18+ 1638 subWindow.addEventListener("unload", unloadHandler); 1639 } 1640 1641 // Support: IE <10 1642 // Check if getElementById returns elements by name 1643 // The broken getElementById methods don't pick up programmatically-set names, 1644 // so use a roundabout getElementsByName test 1645 support.getById = assert(function (el) { 1646 documentElement.appendChild(el).id = _jQuery2.expando; 1647 return !document.getElementsByName || !document.getElementsByName(_jQuery2.expando).length; 1648 }); 1649 1650 // Support: IE 9 only 1651 // Check to see if it's possible to do matchesSelector 1652 // on a disconnected node. 1653 support.disconnectedMatch = assert(function (el) { 1654 return matches.call(el, "*"); 1655 }); 1656 1657 // Support: IE 9 - 11+, Edge 12 - 18+ 1658 // IE/Edge don't support the :scope pseudo-class. 1659 support.scope = assert(function () { 1660 return document.querySelectorAll(":scope"); 1661 }); 1662 1663 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 1664 // Make sure the `:has()` argument is parsed unforgivingly. 1665 // We include `*` in the test to detect buggy implementations that are 1666 // _selectively_ forgiving (specifically when the list includes at least 1667 // one valid selector). 1668 // Note that we treat complete lack of support for `:has()` as if it were 1669 // spec-compliant support, which is fine because use of `:has()` in such 1670 // environments will fail in the qSA path and fall back to jQuery traversal 1671 // anyway. 1672 support.cssHas = assert(function () { 1673 try { 1674 document.querySelector(":has(*,:jqfake)"); 1675 return false; 1676 } catch (e) { 1677 return true; 1678 } 1679 }); 1680 1681 // ID filter and find 1682 if (support.getById) { 1683 Expr.filter.ID = function (id) { 1684 var attrId = id.replace(runescape, funescape); 1685 return function (elem) { 1686 return elem.getAttribute("id") === attrId; 1687 }; 1688 }; 1689 Expr.find.ID = function (id, context) { 1690 if (typeof context.getElementById !== "undefined" && documentIsHTML) { 1691 var elem = context.getElementById(id); 1692 return elem ? [elem] : []; 1693 } 1694 }; 1695 } else { 1696 Expr.filter.ID = function (id) { 1697 var attrId = id.replace(runescape, funescape); 1698 return function (elem) { 1699 var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); 1700 return node && node.value === attrId; 1701 }; 1702 }; 1703 1704 // Support: IE 6 - 7 only 1705 // getElementById is not reliable as a find shortcut 1706 Expr.find.ID = function (id, context) { 1707 if (typeof context.getElementById !== "undefined" && documentIsHTML) { 1708 var node, 1709 i, 1710 elems, 1711 elem = context.getElementById(id); 1712 if (elem) { 1713 // Verify the id attribute 1714 node = elem.getAttributeNode("id"); 1715 if (node && node.value === id) { 1716 return [elem]; 1717 } 1718 1719 // Fall back on getElementsByName 1720 elems = context.getElementsByName(id); 1721 i = 0; 1722 while (elem = elems[i++]) { 1723 node = elem.getAttributeNode("id"); 1724 if (node && node.value === id) { 1725 return [elem]; 1726 } 1727 } 1728 } 1729 return []; 1730 } 1731 }; 1732 } 1733 1734 // Tag 1735 Expr.find.TAG = function (tag, context) { 1736 if (typeof context.getElementsByTagName !== "undefined") { 1737 return context.getElementsByTagName(tag); 1738 1739 // DocumentFragment nodes don't have gEBTN 1740 } else { 1741 return context.querySelectorAll(tag); 1742 } 1743 }; 1744 1745 // Class 1746 Expr.find.CLASS = function (className, context) { 1747 if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) { 1748 return context.getElementsByClassName(className); 1749 } 1750 }; 1751 1752 /* QSA/matchesSelector 1753 ---------------------------------------------------------------------- */ 1754 1755 // QSA and matchesSelector support 1756 1757 rbuggyQSA = []; 1758 1759 // Build QSA regex 1760 // Regex strategy adopted from Diego Perini 1761 assert(function (el) { 1762 var input; 1763 documentElement.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a>" + "<select id='" + expando + "-\r\\' disabled='disabled'>" + "<option selected=''></option></select>"; 1764 1765 // Support: iOS <=7 - 8 only 1766 // Boolean attributes and "value" are not treated correctly in some XML documents 1767 if (!el.querySelectorAll("[selected]").length) { 1768 rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")"); 1769 } 1770 1771 // Support: iOS <=7 - 8 only 1772 if (!el.querySelectorAll("[id~=" + expando + "-]").length) { 1773 rbuggyQSA.push("~="); 1774 } 1775 1776 // Support: iOS 8 only 1777 // https://bugs.webkit.org/show_bug.cgi?id=136851 1778 // In-page `selector#id sibling-combinator selector` fails 1779 if (!el.querySelectorAll("a#" + expando + "+*").length) { 1780 rbuggyQSA.push(".#.+[+~]"); 1781 } 1782 1783 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 1784 // In some of the document kinds, these selectors wouldn't work natively. 1785 // This is probably OK but for backwards compatibility we want to maintain 1786 // handling them through jQuery traversal in jQuery 3.x. 1787 if (!el.querySelectorAll(":checked").length) { 1788 rbuggyQSA.push(":checked"); 1789 } 1790 1791 // Support: Windows 8 Native Apps 1792 // The type and name attributes are restricted during .innerHTML assignment 1793 input = document.createElement("input"); 1794 input.setAttribute("type", "hidden"); 1795 el.appendChild(input).setAttribute("name", "D"); 1796 1797 // Support: IE 9 - 11+ 1798 // IE's :disabled selector does not pick up the children of disabled fieldsets 1799 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 1800 // In some of the document kinds, these selectors wouldn't work natively. 1801 // This is probably OK but for backwards compatibility we want to maintain 1802 // handling them through jQuery traversal in jQuery 3.x. 1803 documentElement.appendChild(el).disabled = true; 1804 if (el.querySelectorAll(":disabled").length !== 2) { 1805 rbuggyQSA.push(":enabled", ":disabled"); 1806 } 1807 1808 // Support: IE 11+, Edge 15 - 18+ 1809 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 1810 // Adding a temporary attribute to the document before the selection works 1811 // around the issue. 1812 // Interestingly, IE 10 & older don't seem to have the issue. 1813 input = document.createElement("input"); 1814 input.setAttribute("name", ""); 1815 el.appendChild(input); 1816 if (!el.querySelectorAll("[name='']").length) { 1817 rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")"); 1818 } 1819 }); 1820 if (!support.cssHas) { 1821 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 1822 // Our regular `try-catch` mechanism fails to detect natively-unsupported 1823 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 1824 // in browsers that parse the `:has()` argument as a forgiving selector list. 1825 // https://drafts.csswg.org/selectors/#relational now requires the argument 1826 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 1827 rbuggyQSA.push(":has"); 1828 } 1829 rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|")); 1830 1831 /* Sorting 1832 ---------------------------------------------------------------------- */ 1833 1834 // Document order sorting 1835 sortOrder = function sortOrder(a, b) { 1836 // Flag for duplicate removal 1837 if (a === b) { 1838 hasDuplicate = true; 1839 return 0; 1840 } 1841 1842 // Sort on method existence if only one input has compareDocumentPosition 1843 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1844 if (compare) { 1845 return compare; 1846 } 1847 1848 // Calculate position if both inputs belong to the same document 1849 // Support: IE 11+, Edge 17 - 18+ 1850 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1851 // two documents; shallow comparisons work. 1852 // eslint-disable-next-line eqeqeq 1853 compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1854 // Otherwise we know they are disconnected 1855 1; 1856 1857 // Disconnected nodes 1858 if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) { 1859 // Choose the first element that is related to our preferred document 1860 // Support: IE 11+, Edge 17 - 18+ 1861 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1862 // two documents; shallow comparisons work. 1863 // eslint-disable-next-line eqeqeq 1864 if (a === document || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) { 1865 return -1; 1866 } 1867 1868 // Support: IE 11+, Edge 17 - 18+ 1869 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1870 // two documents; shallow comparisons work. 1871 // eslint-disable-next-line eqeqeq 1872 if (b === document || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) { 1873 return 1; 1874 } 1875 1876 // Maintain original order 1877 return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0; 1878 } 1879 return compare & 4 ? -1 : 1; 1880 }; 1881 return document; 1882 } 1883 find.matches = function (expr, elements) { 1884 return find(expr, null, null, elements); 1885 }; 1886 find.matchesSelector = function (elem, expr) { 1887 setDocument(elem); 1888 if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) { 1889 try { 1890 var ret = matches.call(elem, expr); 1891 1892 // IE 9's matchesSelector returns false on disconnected nodes 1893 if (ret || support.disconnectedMatch || 1894 // As well, disconnected nodes are said to be in a document 1895 // fragment in IE 9 1896 elem.document && elem.document.nodeType !== 11) { 1897 return ret; 1898 } 1899 } catch (e) { 1900 nonnativeSelectorCache(expr, true); 1901 } 1902 } 1903 return find(expr, document, null, [elem]).length > 0; 1904 }; 1905 find.contains = function (context, elem) { 1906 // Set document vars if needed 1907 // Support: IE 11+, Edge 17 - 18+ 1908 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1909 // two documents; shallow comparisons work. 1910 // eslint-disable-next-line eqeqeq 1911 if ((context.ownerDocument || context) != document) { 1912 setDocument(context); 1913 } 1914 return _jQuery2.contains(context, elem); 1915 }; 1916 find.attr = function (elem, name) { 1917 // Set document vars if needed 1918 // Support: IE 11+, Edge 17 - 18+ 1919 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1920 // two documents; shallow comparisons work. 1921 // eslint-disable-next-line eqeqeq 1922 if ((elem.ownerDocument || elem) != document) { 1923 setDocument(elem); 1924 } 1925 var fn = Expr.attrHandle[name.toLowerCase()], 1926 // Don't get fooled by Object.prototype properties (see trac-13807) 1927 val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined; 1928 if (val !== undefined) { 1929 return val; 1930 } 1931 return elem.getAttribute(name); 1932 }; 1933 find.error = function (msg) { 1934 throw new Error("Syntax error, unrecognized expression: " + msg); 1935 }; 1936 1937 /** 1938 * Document sorting and removing duplicates 1939 * @param {ArrayLike} results 1940 */ 1941 _jQuery2.uniqueSort = function (results) { 1942 var elem, 1943 duplicates = [], 1944 j = 0, 1945 i = 0; 1946 1947 // Unless we *know* we can detect duplicates, assume their presence 1948 // 1949 // Support: Android <=4.0+ 1950 // Testing for detecting duplicates is unpredictable so instead assume we can't 1951 // depend on duplicate detection in all browsers without a stable sort. 1952 hasDuplicate = !support.sortStable; 1953 sortInput = !support.sortStable && _slice.call(results, 0); 1954 sort.call(results, sortOrder); 1955 if (hasDuplicate) { 1956 while (elem = results[i++]) { 1957 if (elem === results[i]) { 1958 j = duplicates.push(i); 1959 } 1960 } 1961 while (j--) { 1962 splice.call(results, duplicates[j], 1); 1963 } 1964 } 1965 1966 // Clear input after sorting to release objects 1967 // See https://github.com/jquery/sizzle/pull/225 1968 sortInput = null; 1969 return results; 1970 }; 1971 _jQuery2.fn.uniqueSort = function () { 1972 return this.pushStack(_jQuery2.uniqueSort(_slice.apply(this))); 1973 }; 1974 Expr = _jQuery2.expr = { 1975 // Can be adjusted by the user 1976 cacheLength: 50, 1977 createPseudo: markFunction, 1978 match: matchExpr, 1979 attrHandle: {}, 1980 find: {}, 1981 relative: { 1982 ">": { 1983 dir: "parentNode", 1984 first: true 1985 }, 1986 " ": { 1987 dir: "parentNode" 1988 }, 1989 "+": { 1990 dir: "previousSibling", 1991 first: true 1992 }, 1993 "~": { 1994 dir: "previousSibling" 1995 } 1996 }, 1997 preFilter: { 1998 ATTR: function ATTR(match) { 1999 match[1] = match[1].replace(runescape, funescape); 2000 2001 // Move the given value to match[3] whether quoted or unquoted 2002 match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape); 2003 if (match[2] === "~=") { 2004 match[3] = " " + match[3] + " "; 2005 } 2006 return match.slice(0, 4); 2007 }, 2008 CHILD: function CHILD(match) { 2009 /* matches from matchExpr["CHILD"] 2010 1 type (only|nth|...) 2011 2 what (child|of-type) 2012 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 2013 4 xn-component of xn+y argument ([+-]?\d*n|) 2014 5 sign of xn-component 2015 6 x of xn-component 2016 7 sign of y-component 2017 8 y of y-component 2018 */ 2019 match[1] = match[1].toLowerCase(); 2020 if (match[1].slice(0, 3) === "nth") { 2021 // nth-* requires argument 2022 if (!match[3]) { 2023 find.error(match[0]); 2024 } 2025 2026 // numeric x and y parameters for Expr.filter.CHILD 2027 // remember that false/true cast respectively to 0/1 2028 match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd")); 2029 match[5] = +(match[7] + match[8] || match[3] === "odd"); 2030 2031 // other types prohibit arguments 2032 } else if (match[3]) { 2033 find.error(match[0]); 2034 } 2035 return match; 2036 }, 2037 PSEUDO: function PSEUDO(match) { 2038 var excess, 2039 unquoted = !match[6] && match[2]; 2040 if (matchExpr.CHILD.test(match[0])) { 2041 return null; 2042 } 2043 2044 // Accept quoted arguments as-is 2045 if (match[3]) { 2046 match[2] = match[4] || match[5] || ""; 2047 2048 // Strip excess characters from unquoted arguments 2049 } else if (unquoted && rpseudo.test(unquoted) && ( 2050 // Get excess from tokenize (recursively) 2051 excess = tokenize(unquoted, true)) && ( 2052 // advance to the next closing parenthesis 2053 excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) { 2054 // excess is a negative index 2055 match[0] = match[0].slice(0, excess); 2056 match[2] = unquoted.slice(0, excess); 2057 } 2058 2059 // Return only captures needed by the pseudo filter method (type and argument) 2060 return match.slice(0, 3); 2061 } 2062 }, 2063 filter: { 2064 TAG: function TAG(nodeNameSelector) { 2065 var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase(); 2066 return nodeNameSelector === "*" ? function () { 2067 return true; 2068 } : function (elem) { 2069 return nodeName(elem, expectedNodeName); 2070 }; 2071 }, 2072 CLASS: function CLASS(className) { 2073 var pattern = classCache[className + " "]; 2074 return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function (elem) { 2075 return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""); 2076 }); 2077 }, 2078 ATTR: function ATTR(name, operator, check) { 2079 return function (elem) { 2080 var result = find.attr(elem, name); 2081 if (result == null) { 2082 return operator === "!="; 2083 } 2084 if (!operator) { 2085 return true; 2086 } 2087 result += ""; 2088 if (operator === "=") { 2089 return result === check; 2090 } 2091 if (operator === "!=") { 2092 return result !== check; 2093 } 2094 if (operator === "^=") { 2095 return check && result.indexOf(check) === 0; 2096 } 2097 if (operator === "*=") { 2098 return check && result.indexOf(check) > -1; 2099 } 2100 if (operator === "$=") { 2101 return check && result.slice(-check.length) === check; 2102 } 2103 if (operator === "~=") { 2104 return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1; 2105 } 2106 if (operator === "|=") { 2107 return result === check || result.slice(0, check.length + 1) === check + "-"; 2108 } 2109 return false; 2110 }; 2111 }, 2112 CHILD: function CHILD(type, what, _argument, first, last) { 2113 var simple = type.slice(0, 3) !== "nth", 2114 forward = type.slice(-4) !== "last", 2115 ofType = what === "of-type"; 2116 return first === 1 && last === 0 ? 2117 // Shortcut for :nth-*(n) 2118 function (elem) { 2119 return !!elem.parentNode; 2120 } : function (elem, _context, xml) { 2121 var cache, 2122 outerCache, 2123 node, 2124 nodeIndex, 2125 start, 2126 dir = simple !== forward ? "nextSibling" : "previousSibling", 2127 parent = elem.parentNode, 2128 name = ofType && elem.nodeName.toLowerCase(), 2129 useCache = !xml && !ofType, 2130 diff = false; 2131 if (parent) { 2132 // :(first|last|only)-(child|of-type) 2133 if (simple) { 2134 while (dir) { 2135 node = elem; 2136 while (node = node[dir]) { 2137 if (ofType ? nodeName(node, name) : node.nodeType === 1) { 2138 return false; 2139 } 2140 } 2141 2142 // Reverse direction for :only-* (if we haven't yet done so) 2143 start = dir = type === "only" && !start && "nextSibling"; 2144 } 2145 return true; 2146 } 2147 start = [forward ? parent.firstChild : parent.lastChild]; 2148 2149 // non-xml :nth-child(...) stores cache data on `parent` 2150 if (forward && useCache) { 2151 // Seek `elem` from a previously-cached index 2152 outerCache = parent[expando] || (parent[expando] = {}); 2153 cache = outerCache[type] || []; 2154 nodeIndex = cache[0] === dirruns && cache[1]; 2155 diff = nodeIndex && cache[2]; 2156 node = nodeIndex && parent.childNodes[nodeIndex]; 2157 while (node = ++nodeIndex && node && node[dir] || ( 2158 // Fallback to seeking `elem` from the start 2159 diff = nodeIndex = 0) || start.pop()) { 2160 // When found, cache indexes on `parent` and break 2161 if (node.nodeType === 1 && ++diff && node === elem) { 2162 outerCache[type] = [dirruns, nodeIndex, diff]; 2163 break; 2164 } 2165 } 2166 } else { 2167 // Use previously-cached element index if available 2168 if (useCache) { 2169 outerCache = elem[expando] || (elem[expando] = {}); 2170 cache = outerCache[type] || []; 2171 nodeIndex = cache[0] === dirruns && cache[1]; 2172 diff = nodeIndex; 2173 } 2174 2175 // xml :nth-child(...) 2176 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 2177 if (diff === false) { 2178 // Use the same loop as above to seek `elem` from the start 2179 while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) { 2180 if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) { 2181 // Cache the index of each encountered element 2182 if (useCache) { 2183 outerCache = node[expando] || (node[expando] = {}); 2184 outerCache[type] = [dirruns, diff]; 2185 } 2186 if (node === elem) { 2187 break; 2188 } 2189 } 2190 } 2191 } 2192 } 2193 2194 // Incorporate the offset, then check against cycle size 2195 diff -= last; 2196 return diff === first || diff % first === 0 && diff / first >= 0; 2197 } 2198 }; 2199 }, 2200 PSEUDO: function PSEUDO(pseudo, argument) { 2201 // pseudo-class names are case-insensitive 2202 // https://www.w3.org/TR/selectors/#pseudo-classes 2203 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 2204 // Remember that setFilters inherits from pseudos 2205 var args, 2206 fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo); 2207 2208 // The user may use createPseudo to indicate that 2209 // arguments are needed to create the filter function 2210 // just as jQuery does 2211 if (fn[expando]) { 2212 return fn(argument); 2213 } 2214 2215 // But maintain support for old signatures 2216 if (fn.length > 1) { 2217 args = [pseudo, pseudo, "", argument]; 2218 return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) { 2219 var idx, 2220 matched = fn(seed, argument), 2221 i = matched.length; 2222 while (i--) { 2223 idx = indexOf.call(seed, matched[i]); 2224 seed[idx] = !(matches[idx] = matched[i]); 2225 } 2226 }) : function (elem) { 2227 return fn(elem, 0, args); 2228 }; 2229 } 2230 return fn; 2231 } 2232 }, 2233 pseudos: { 2234 // Potentially complex pseudos 2235 not: markFunction(function (selector) { 2236 // Trim the selector passed to compile 2237 // to avoid treating leading and trailing 2238 // spaces as combinators 2239 var input = [], 2240 results = [], 2241 matcher = compile(selector.replace(rtrimCSS, "$1")); 2242 return matcher[expando] ? markFunction(function (seed, matches, _context, xml) { 2243 var elem, 2244 unmatched = matcher(seed, null, xml, []), 2245 i = seed.length; 2246 2247 // Match elements unmatched by `matcher` 2248 while (i--) { 2249 if (elem = unmatched[i]) { 2250 seed[i] = !(matches[i] = elem); 2251 } 2252 } 2253 }) : function (elem, _context, xml) { 2254 input[0] = elem; 2255 matcher(input, null, xml, results); 2256 2257 // Don't keep the element 2258 // (see https://github.com/jquery/sizzle/issues/299) 2259 input[0] = null; 2260 return !results.pop(); 2261 }; 2262 }), 2263 has: markFunction(function (selector) { 2264 return function (elem) { 2265 return find(selector, elem).length > 0; 2266 }; 2267 }), 2268 contains: markFunction(function (text) { 2269 text = text.replace(runescape, funescape); 2270 return function (elem) { 2271 return (elem.textContent || _jQuery2.text(elem)).indexOf(text) > -1; 2272 }; 2273 }), 2274 // "Whether an element is represented by a :lang() selector 2275 // is based solely on the element's language value 2276 // being equal to the identifier C, 2277 // or beginning with the identifier C immediately followed by "-". 2278 // The matching of C against the element's language value is performed case-insensitively. 2279 // The identifier C does not have to be a valid language name." 2280 // https://www.w3.org/TR/selectors/#lang-pseudo 2281 lang: markFunction(function (lang) { 2282 // lang value must be a valid identifier 2283 if (!ridentifier.test(lang || "")) { 2284 find.error("unsupported lang: " + lang); 2285 } 2286 lang = lang.replace(runescape, funescape).toLowerCase(); 2287 return function (elem) { 2288 var elemLang; 2289 do { 2290 if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) { 2291 elemLang = elemLang.toLowerCase(); 2292 return elemLang === lang || elemLang.indexOf(lang + "-") === 0; 2293 } 2294 } while ((elem = elem.parentNode) && elem.nodeType === 1); 2295 return false; 2296 }; 2297 }), 2298 // Miscellaneous 2299 target: function target(elem) { 2300 var hash = window.location && window.location.hash; 2301 return hash && hash.slice(1) === elem.id; 2302 }, 2303 root: function root(elem) { 2304 return elem === documentElement; 2305 }, 2306 focus: function focus(elem) { 2307 return elem === safeActiveElement() && document.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex); 2308 }, 2309 // Boolean properties 2310 enabled: createDisabledPseudo(false), 2311 disabled: createDisabledPseudo(true), 2312 checked: function checked(elem) { 2313 // In CSS3, :checked should return both checked and selected elements 2314 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 2315 return nodeName(elem, "input") && !!elem.checked || nodeName(elem, "option") && !!elem.selected; 2316 }, 2317 selected: function selected(elem) { 2318 // Support: IE <=11+ 2319 // Accessing the selectedIndex property 2320 // forces the browser to treat the default option as 2321 // selected when in an optgroup. 2322 if (elem.parentNode) { 2323 // eslint-disable-next-line no-unused-expressions 2324 elem.parentNode.selectedIndex; 2325 } 2326 return elem.selected === true; 2327 }, 2328 // Contents 2329 empty: function empty(elem) { 2330 // https://www.w3.org/TR/selectors/#empty-pseudo 2331 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 2332 // but not by others (comment: 8; processing instruction: 7; etc.) 2333 // nodeType < 6 works because attributes (2) do not appear as children 2334 for (elem = elem.firstChild; elem; elem = elem.nextSibling) { 2335 if (elem.nodeType < 6) { 2336 return false; 2337 } 2338 } 2339 return true; 2340 }, 2341 parent: function parent(elem) { 2342 return !Expr.pseudos.empty(elem); 2343 }, 2344 // Element/input types 2345 header: function header(elem) { 2346 return rheader.test(elem.nodeName); 2347 }, 2348 input: function input(elem) { 2349 return rinputs.test(elem.nodeName); 2350 }, 2351 button: function button(elem) { 2352 return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button"); 2353 }, 2354 text: function text(elem) { 2355 var attr; 2356 return nodeName(elem, "input") && elem.type === "text" && ( 2357 // Support: IE <10 only 2358 // New HTML5 attribute values (e.g., "search") appear 2359 // with elem.type === "text" 2360 (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text"); 2361 }, 2362 // Position-in-collection 2363 first: createPositionalPseudo(function () { 2364 return [0]; 2365 }), 2366 last: createPositionalPseudo(function (_matchIndexes, length) { 2367 return [length - 1]; 2368 }), 2369 eq: createPositionalPseudo(function (_matchIndexes, length, argument) { 2370 return [argument < 0 ? argument + length : argument]; 2371 }), 2372 even: createPositionalPseudo(function (matchIndexes, length) { 2373 var i = 0; 2374 for (; i < length; i += 2) { 2375 matchIndexes.push(i); 2376 } 2377 return matchIndexes; 2378 }), 2379 odd: createPositionalPseudo(function (matchIndexes, length) { 2380 var i = 1; 2381 for (; i < length; i += 2) { 2382 matchIndexes.push(i); 2383 } 2384 return matchIndexes; 2385 }), 2386 lt: createPositionalPseudo(function (matchIndexes, length, argument) { 2387 var i; 2388 if (argument < 0) { 2389 i = argument + length; 2390 } else if (argument > length) { 2391 i = length; 2392 } else { 2393 i = argument; 2394 } 2395 for (; --i >= 0;) { 2396 matchIndexes.push(i); 2397 } 2398 return matchIndexes; 2399 }), 2400 gt: createPositionalPseudo(function (matchIndexes, length, argument) { 2401 var i = argument < 0 ? argument + length : argument; 2402 for (; ++i < length;) { 2403 matchIndexes.push(i); 2404 } 2405 return matchIndexes; 2406 }) 2407 } 2408 }; 2409 Expr.pseudos.nth = Expr.pseudos.eq; 2410 2411 // Add button/input type pseudos 2412 for (i in { 2413 radio: true, 2414 checkbox: true, 2415 file: true, 2416 password: true, 2417 image: true 2418 }) { 2419 Expr.pseudos[i] = createInputPseudo(i); 2420 } 2421 for (i in { 2422 submit: true, 2423 reset: true 2424 }) { 2425 Expr.pseudos[i] = createButtonPseudo(i); 2426 } 2427 2428 // Easy API for creating new setFilters 2429 function setFilters() {} 2430 setFilters.prototype = Expr.filters = Expr.pseudos; 2431 Expr.setFilters = new setFilters(); 2432 function tokenize(selector, parseOnly) { 2433 var matched, 2434 match, 2435 tokens, 2436 type, 2437 soFar, 2438 groups, 2439 preFilters, 2440 cached = tokenCache[selector + " "]; 2441 if (cached) { 2442 return parseOnly ? 0 : cached.slice(0); 2443 } 2444 soFar = selector; 2445 groups = []; 2446 preFilters = Expr.preFilter; 2447 while (soFar) { 2448 // Comma and first run 2449 if (!matched || (match = rcomma.exec(soFar))) { 2450 if (match) { 2451 // Don't consume trailing commas as valid 2452 soFar = soFar.slice(match[0].length) || soFar; 2453 } 2454 groups.push(tokens = []); 2455 } 2456 matched = false; 2457 2458 // Combinators 2459 if (match = rleadingCombinator.exec(soFar)) { 2460 matched = match.shift(); 2461 tokens.push({ 2462 value: matched, 2463 // Cast descendant combinators to space 2464 type: match[0].replace(rtrimCSS, " ") 2465 }); 2466 soFar = soFar.slice(matched.length); 2467 } 2468 2469 // Filters 2470 for (type in Expr.filter) { 2471 if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) { 2472 matched = match.shift(); 2473 tokens.push({ 2474 value: matched, 2475 type: type, 2476 matches: match 2477 }); 2478 soFar = soFar.slice(matched.length); 2479 } 2480 } 2481 if (!matched) { 2482 break; 2483 } 2484 } 2485 2486 // Return the length of the invalid excess 2487 // if we're just parsing 2488 // Otherwise, throw an error or return tokens 2489 if (parseOnly) { 2490 return soFar.length; 2491 } 2492 return soFar ? find.error(selector) : 2493 // Cache the tokens 2494 tokenCache(selector, groups).slice(0); 2495 } 2496 function toSelector(tokens) { 2497 var i = 0, 2498 len = tokens.length, 2499 selector = ""; 2500 for (; i < len; i++) { 2501 selector += tokens[i].value; 2502 } 2503 return selector; 2504 } 2505 function addCombinator(matcher, combinator, base) { 2506 var dir = combinator.dir, 2507 skip = combinator.next, 2508 key = skip || dir, 2509 checkNonElements = base && key === "parentNode", 2510 doneName = done++; 2511 return combinator.first ? 2512 // Check against closest ancestor/preceding element 2513 function (elem, context, xml) { 2514 while (elem = elem[dir]) { 2515 if (elem.nodeType === 1 || checkNonElements) { 2516 return matcher(elem, context, xml); 2517 } 2518 } 2519 return false; 2520 } : 2521 // Check against all ancestor/preceding elements 2522 function (elem, context, xml) { 2523 var oldCache, 2524 outerCache, 2525 newCache = [dirruns, doneName]; 2526 2527 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2528 if (xml) { 2529 while (elem = elem[dir]) { 2530 if (elem.nodeType === 1 || checkNonElements) { 2531 if (matcher(elem, context, xml)) { 2532 return true; 2533 } 2534 } 2535 } 2536 } else { 2537 while (elem = elem[dir]) { 2538 if (elem.nodeType === 1 || checkNonElements) { 2539 outerCache = elem[expando] || (elem[expando] = {}); 2540 if (skip && nodeName(elem, skip)) { 2541 elem = elem[dir] || elem; 2542 } else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) { 2543 // Assign to newCache so results back-propagate to previous elements 2544 return newCache[2] = oldCache[2]; 2545 } else { 2546 // Reuse newcache so results back-propagate to previous elements 2547 outerCache[key] = newCache; 2548 2549 // A match means we're done; a fail means we have to keep checking 2550 if (newCache[2] = matcher(elem, context, xml)) { 2551 return true; 2552 } 2553 } 2554 } 2555 } 2556 } 2557 return false; 2558 }; 2559 } 2560 function elementMatcher(matchers) { 2561 return matchers.length > 1 ? function (elem, context, xml) { 2562 var i = matchers.length; 2563 while (i--) { 2564 if (!matchers[i](elem, context, xml)) { 2565 return false; 2566 } 2567 } 2568 return true; 2569 } : matchers[0]; 2570 } 2571 function multipleContexts(selector, contexts, results) { 2572 var i = 0, 2573 len = contexts.length; 2574 for (; i < len; i++) { 2575 find(selector, contexts[i], results); 2576 } 2577 return results; 2578 } 2579 function condense(unmatched, map, filter, context, xml) { 2580 var elem, 2581 newUnmatched = [], 2582 i = 0, 2583 len = unmatched.length, 2584 mapped = map != null; 2585 for (; i < len; i++) { 2586 if (elem = unmatched[i]) { 2587 if (!filter || filter(elem, context, xml)) { 2588 newUnmatched.push(elem); 2589 if (mapped) { 2590 map.push(i); 2591 } 2592 } 2593 } 2594 } 2595 return newUnmatched; 2596 } 2597 function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) { 2598 if (postFilter && !postFilter[expando]) { 2599 postFilter = setMatcher(postFilter); 2600 } 2601 if (postFinder && !postFinder[expando]) { 2602 postFinder = setMatcher(postFinder, postSelector); 2603 } 2604 return markFunction(function (seed, results, context, xml) { 2605 var temp, 2606 i, 2607 elem, 2608 matcherOut, 2609 preMap = [], 2610 postMap = [], 2611 preexisting = results.length, 2612 // Get initial elements from seed or context 2613 elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []), 2614 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2615 matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems; 2616 if (matcher) { 2617 // If we have a postFinder, or filtered seed, or non-seed postFilter 2618 // or preexisting results, 2619 matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? 2620 // ...intermediate processing is necessary 2621 [] : 2622 // ...otherwise use results directly 2623 results; 2624 2625 // Find primary matches 2626 matcher(matcherIn, matcherOut, context, xml); 2627 } else { 2628 matcherOut = matcherIn; 2629 } 2630 2631 // Apply postFilter 2632 if (postFilter) { 2633 temp = condense(matcherOut, postMap); 2634 postFilter(temp, [], context, xml); 2635 2636 // Un-match failing elements by moving them back to matcherIn 2637 i = temp.length; 2638 while (i--) { 2639 if (elem = temp[i]) { 2640 matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem); 2641 } 2642 } 2643 } 2644 if (seed) { 2645 if (postFinder || preFilter) { 2646 if (postFinder) { 2647 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2648 temp = []; 2649 i = matcherOut.length; 2650 while (i--) { 2651 if (elem = matcherOut[i]) { 2652 // Restore matcherIn since elem is not yet a final match 2653 temp.push(matcherIn[i] = elem); 2654 } 2655 } 2656 postFinder(null, matcherOut = [], temp, xml); 2657 } 2658 2659 // Move matched elements from seed to results to keep them synchronized 2660 i = matcherOut.length; 2661 while (i--) { 2662 if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) { 2663 seed[temp] = !(results[temp] = elem); 2664 } 2665 } 2666 } 2667 2668 // Add elements to results, through postFinder if defined 2669 } else { 2670 matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut); 2671 if (postFinder) { 2672 postFinder(null, results, matcherOut, xml); 2673 } else { 2674 push.apply(results, matcherOut); 2675 } 2676 } 2677 }); 2678 } 2679 function matcherFromTokens(tokens) { 2680 var checkContext, 2681 matcher, 2682 j, 2683 len = tokens.length, 2684 leadingRelative = Expr.relative[tokens[0].type], 2685 implicitRelative = leadingRelative || Expr.relative[" "], 2686 i = leadingRelative ? 1 : 0, 2687 // The foundational matcher ensures that elements are reachable from top-level context(s) 2688 matchContext = addCombinator(function (elem) { 2689 return elem === checkContext; 2690 }, implicitRelative, true), 2691 matchAnyContext = addCombinator(function (elem) { 2692 return indexOf.call(checkContext, elem) > -1; 2693 }, implicitRelative, true), 2694 matchers = [function (elem, context, xml) { 2695 // Support: IE 11+, Edge 17 - 18+ 2696 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2697 // two documents; shallow comparisons work. 2698 // eslint-disable-next-line eqeqeq 2699 var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); 2700 2701 // Avoid hanging onto element 2702 // (see https://github.com/jquery/sizzle/issues/299) 2703 checkContext = null; 2704 return ret; 2705 }]; 2706 for (; i < len; i++) { 2707 if (matcher = Expr.relative[tokens[i].type]) { 2708 matchers = [addCombinator(elementMatcher(matchers), matcher)]; 2709 } else { 2710 matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); 2711 2712 // Return special upon seeing a positional matcher 2713 if (matcher[expando]) { 2714 // Find the next relative operator (if any) for proper handling 2715 j = ++i; 2716 for (; j < len; j++) { 2717 if (Expr.relative[tokens[j].type]) { 2718 break; 2719 } 2720 } 2721 return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( 2722 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 2723 tokens.slice(0, i - 1).concat({ 2724 value: tokens[i - 2].type === " " ? "*" : "" 2725 })).replace(rtrimCSS, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens)); 2726 } 2727 matchers.push(matcher); 2728 } 2729 } 2730 return elementMatcher(matchers); 2731 } 2732 function matcherFromGroupMatchers(elementMatchers, setMatchers) { 2733 var bySet = setMatchers.length > 0, 2734 byElement = elementMatchers.length > 0, 2735 superMatcher = function superMatcher(seed, context, xml, results, outermost) { 2736 var elem, 2737 j, 2738 matcher, 2739 matchedCount = 0, 2740 i = "0", 2741 unmatched = seed && [], 2742 setMatched = [], 2743 contextBackup = outermostContext, 2744 // We must always have either seed elements or outermost context 2745 elems = seed || byElement && Expr.find.TAG("*", outermost), 2746 // Use integer dirruns iff this is the outermost matcher 2747 dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, 2748 len = elems.length; 2749 if (outermost) { 2750 // Support: IE 11+, Edge 17 - 18+ 2751 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2752 // two documents; shallow comparisons work. 2753 // eslint-disable-next-line eqeqeq 2754 outermostContext = context == document || context || outermost; 2755 } 2756 2757 // Add elements passing elementMatchers directly to results 2758 // Support: iOS <=7 - 9 only 2759 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 2760 // elements by id. (see trac-14142) 2761 for (; i !== len && (elem = elems[i]) != null; i++) { 2762 if (byElement && elem) { 2763 j = 0; 2764 2765 // Support: IE 11+, Edge 17 - 18+ 2766 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2767 // two documents; shallow comparisons work. 2768 // eslint-disable-next-line eqeqeq 2769 if (!context && elem.ownerDocument != document) { 2770 setDocument(elem); 2771 xml = !documentIsHTML; 2772 } 2773 while (matcher = elementMatchers[j++]) { 2774 if (matcher(elem, context || document, xml)) { 2775 push.call(results, elem); 2776 break; 2777 } 2778 } 2779 if (outermost) { 2780 dirruns = dirrunsUnique; 2781 } 2782 } 2783 2784 // Track unmatched elements for set filters 2785 if (bySet) { 2786 // They will have gone through all possible matchers 2787 if (elem = !matcher && elem) { 2788 matchedCount--; 2789 } 2790 2791 // Lengthen the array for every element, matched or not 2792 if (seed) { 2793 unmatched.push(elem); 2794 } 2795 } 2796 } 2797 2798 // `i` is now the count of elements visited above, and adding it to `matchedCount` 2799 // makes the latter nonnegative. 2800 matchedCount += i; 2801 2802 // Apply set filters to unmatched elements 2803 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 2804 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 2805 // no element matchers and no seed. 2806 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 2807 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 2808 // numerically zero. 2809 if (bySet && i !== matchedCount) { 2810 j = 0; 2811 while (matcher = setMatchers[j++]) { 2812 matcher(unmatched, setMatched, context, xml); 2813 } 2814 if (seed) { 2815 // Reintegrate element matches to eliminate the need for sorting 2816 if (matchedCount > 0) { 2817 while (i--) { 2818 if (!(unmatched[i] || setMatched[i])) { 2819 setMatched[i] = pop.call(results); 2820 } 2821 } 2822 } 2823 2824 // Discard index placeholder values to get only actual matches 2825 setMatched = condense(setMatched); 2826 } 2827 2828 // Add matches to results 2829 push.apply(results, setMatched); 2830 2831 // Seedless set matches succeeding multiple successful matchers stipulate sorting 2832 if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) { 2833 _jQuery2.uniqueSort(results); 2834 } 2835 } 2836 2837 // Override manipulation of globals by nested matchers 2838 if (outermost) { 2839 dirruns = dirrunsUnique; 2840 outermostContext = contextBackup; 2841 } 2842 return unmatched; 2843 }; 2844 return bySet ? markFunction(superMatcher) : superMatcher; 2845 } 2846 function compile(selector, match /* Internal Use Only */) { 2847 var i, 2848 setMatchers = [], 2849 elementMatchers = [], 2850 cached = compilerCache[selector + " "]; 2851 if (!cached) { 2852 // Generate a function of recursive functions that can be used to check each element 2853 if (!match) { 2854 match = tokenize(selector); 2855 } 2856 i = match.length; 2857 while (i--) { 2858 cached = matcherFromTokens(match[i]); 2859 if (cached[expando]) { 2860 setMatchers.push(cached); 2861 } else { 2862 elementMatchers.push(cached); 2863 } 2864 } 2865 2866 // Cache the compiled function 2867 cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); 2868 2869 // Save selector and tokenization 2870 cached.selector = selector; 2871 } 2872 return cached; 2873 } 2874 2875 /** 2876 * A low-level selection function that works with jQuery's compiled 2877 * selector functions 2878 * @param {String|Function} selector A selector or a pre-compiled 2879 * selector function built with jQuery selector compile 2880 * @param {Element} context 2881 * @param {Array} [results] 2882 * @param {Array} [seed] A set of elements to match against 2883 */ 2884 function select(selector, context, results, seed) { 2885 var i, 2886 tokens, 2887 token, 2888 type, 2889 find, 2890 compiled = typeof selector === "function" && selector, 2891 match = !seed && tokenize(selector = compiled.selector || selector); 2892 results = results || []; 2893 2894 // Try to minimize operations if there is only one selector in the list and no seed 2895 // (the latter of which guarantees us context) 2896 if (match.length === 1) { 2897 // Reduce context if the leading compound selector is an ID 2898 tokens = match[0] = match[0].slice(0); 2899 if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) { 2900 context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0]; 2901 if (!context) { 2902 return results; 2903 2904 // Precompiled matchers will still verify ancestry, so step up a level 2905 } else if (compiled) { 2906 context = context.parentNode; 2907 } 2908 selector = selector.slice(tokens.shift().value.length); 2909 } 2910 2911 // Fetch a seed set for right-to-left matching 2912 i = matchExpr.needsContext.test(selector) ? 0 : tokens.length; 2913 while (i--) { 2914 token = tokens[i]; 2915 2916 // Abort if we hit a combinator 2917 if (Expr.relative[type = token.type]) { 2918 break; 2919 } 2920 if (find = Expr.find[type]) { 2921 // Search, expanding context for leading sibling combinators 2922 if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) { 2923 // If seed is empty or no tokens remain, we can return early 2924 tokens.splice(i, 1); 2925 selector = seed.length && toSelector(tokens); 2926 if (!selector) { 2927 push.apply(results, seed); 2928 return results; 2929 } 2930 break; 2931 } 2932 } 2933 } 2934 } 2935 2936 // Compile and execute a filtering function if one is not provided 2937 // Provide `match` to avoid retokenization if we modified the selector above 2938 (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context); 2939 return results; 2940 } 2941 2942 // One-time assignments 2943 2944 // Support: Android <=4.0 - 4.1+ 2945 // Sort stability 2946 support.sortStable = expando.split("").sort(sortOrder).join("") === expando; 2947 2948 // Initialize against the default document 2949 setDocument(); 2950 2951 // Support: Android <=4.0 - 4.1+ 2952 // Detached nodes confoundingly follow *each other* 2953 support.sortDetached = assert(function (el) { 2954 // Should return 1, but returns 4 (following) 2955 return el.compareDocumentPosition(document.createElement("fieldset")) & 1; 2956 }); 2957 _jQuery2.find = find; 2958 2959 // Deprecated 2960 _jQuery2.expr[":"] = _jQuery2.expr.pseudos; 2961 _jQuery2.unique = _jQuery2.uniqueSort; 2962 2963 // These have always been private, but they used to be documented as part of 2964 // Sizzle so let's maintain them for now for backwards compatibility purposes. 2965 find.compile = compile; 2966 find.select = select; 2967 find.setDocument = setDocument; 2968 find.tokenize = tokenize; 2969 find.escape = _jQuery2.escapeSelector; 2970 find.getText = _jQuery2.text; 2971 find.isXML = _jQuery2.isXMLDoc; 2972 find.selectors = _jQuery2.expr; 2973 find.support = _jQuery2.support; 2974 find.uniqueSort = _jQuery2.uniqueSort; 2975 2976 /* eslint-enable */ 2977 })(); 2978 var dir = function dir(elem, _dir, until) { 2979 var matched = [], 2980 truncate = until !== undefined; 2981 while ((elem = elem[_dir]) && elem.nodeType !== 9) { 2982 if (elem.nodeType === 1) { 2983 if (truncate && _jQuery2(elem).is(until)) { 2984 break; 2985 } 2986 matched.push(elem); 2987 } 2988 } 2989 return matched; 2990 }; 2991 var _siblings = function siblings(n, elem) { 2992 var matched = []; 2993 for (; n; n = n.nextSibling) { 2994 if (n.nodeType === 1 && n !== elem) { 2995 matched.push(n); 2996 } 2997 } 2998 return matched; 2999 }; 3000 var rneedsContext = _jQuery2.expr.match.needsContext; 3001 var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; 3002 3003 // Implement the identical functionality for filter and not 3004 function winnow(elements, qualifier, not) { 3005 if (isFunction(qualifier)) { 3006 return _jQuery2.grep(elements, function (elem, i) { 3007 return !!qualifier.call(elem, i, elem) !== not; 3008 }); 3009 } 3010 3011 // Single element 3012 if (qualifier.nodeType) { 3013 return _jQuery2.grep(elements, function (elem) { 3014 return elem === qualifier !== not; 3015 }); 3016 } 3017 3018 // Arraylike of elements (jQuery, arguments, Array) 3019 if (typeof qualifier !== "string") { 3020 return _jQuery2.grep(elements, function (elem) { 3021 return indexOf.call(qualifier, elem) > -1 !== not; 3022 }); 3023 } 3024 3025 // Filtered directly for both simple and complex selectors 3026 return _jQuery2.filter(qualifier, elements, not); 3027 } 3028 _jQuery2.filter = function (expr, elems, not) { 3029 var elem = elems[0]; 3030 if (not) { 3031 expr = ":not(" + expr + ")"; 3032 } 3033 if (elems.length === 1 && elem.nodeType === 1) { 3034 return _jQuery2.find.matchesSelector(elem, expr) ? [elem] : []; 3035 } 3036 return _jQuery2.find.matches(expr, _jQuery2.grep(elems, function (elem) { 3037 return elem.nodeType === 1; 3038 })); 3039 }; 3040 _jQuery2.fn.extend({ 3041 find: function find(selector) { 3042 var i, 3043 ret, 3044 len = this.length, 3045 self = this; 3046 if (typeof selector !== "string") { 3047 return this.pushStack(_jQuery2(selector).filter(function () { 3048 for (i = 0; i < len; i++) { 3049 if (_jQuery2.contains(self[i], this)) { 3050 return true; 3051 } 3052 } 3053 })); 3054 } 3055 ret = this.pushStack([]); 3056 for (i = 0; i < len; i++) { 3057 _jQuery2.find(selector, self[i], ret); 3058 } 3059 return len > 1 ? _jQuery2.uniqueSort(ret) : ret; 3060 }, 3061 filter: function filter(selector) { 3062 return this.pushStack(winnow(this, selector || [], false)); 3063 }, 3064 not: function not(selector) { 3065 return this.pushStack(winnow(this, selector || [], true)); 3066 }, 3067 is: function is(selector) { 3068 return !!winnow(this, 3069 // If this is a positional/relative selector, check membership in the returned set 3070 // so $("p:first").is("p:last") won't return true for a doc with two "p". 3071 typeof selector === "string" && rneedsContext.test(selector) ? _jQuery2(selector) : selector || [], false).length; 3072 } 3073 }); 3074 3075 // Initialize a jQuery object 3076 3077 // A central reference to the root jQuery(document) 3078 var rootjQuery, 3079 // A simple way to check for HTML strings 3080 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 3081 // Strict HTML recognition (trac-11290: must start with <) 3082 // Shortcut simple #id case for speed 3083 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 3084 init = _jQuery2.fn.init = function (selector, context, root) { 3085 var match, elem; 3086 3087 // HANDLE: $(""), $(null), $(undefined), $(false) 3088 if (!selector) { 3089 return this; 3090 } 3091 3092 // Method init() accepts an alternate rootjQuery 3093 // so migrate can support jQuery.sub (gh-2101) 3094 root = root || rootjQuery; 3095 3096 // Handle HTML strings 3097 if (typeof selector === "string") { 3098 if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) { 3099 // Assume that strings that start and end with <> are HTML and skip the regex check 3100 match = [null, selector, null]; 3101 } else { 3102 match = rquickExpr.exec(selector); 3103 } 3104 3105 // Match html or make sure no context is specified for #id 3106 if (match && (match[1] || !context)) { 3107 // HANDLE: $(html) -> $(array) 3108 if (match[1]) { 3109 context = context instanceof _jQuery2 ? context[0] : context; 3110 3111 // Option to run scripts is true for back-compat 3112 // Intentionally let the error be thrown if parseHTML is not present 3113 _jQuery2.merge(this, _jQuery2.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); 3114 3115 // HANDLE: $(html, props) 3116 if (rsingleTag.test(match[1]) && _jQuery2.isPlainObject(context)) { 3117 for (match in context) { 3118 // Properties of context are called as methods if possible 3119 if (isFunction(this[match])) { 3120 this[match](context[match]); 3121 3122 // ...and otherwise set as attributes 3123 } else { 3124 this.attr(match, context[match]); 3125 } 3126 } 3127 } 3128 return this; 3129 3130 // HANDLE: $(#id) 3131 } else { 3132 elem = document.getElementById(match[2]); 3133 if (elem) { 3134 // Inject the element directly into the jQuery object 3135 this[0] = elem; 3136 this.length = 1; 3137 } 3138 return this; 3139 } 3140 3141 // HANDLE: $(expr, $(...)) 3142 } else if (!context || context.jquery) { 3143 return (context || root).find(selector); 3144 3145 // HANDLE: $(expr, context) 3146 // (which is just equivalent to: $(context).find(expr) 3147 } else { 3148 return this.constructor(context).find(selector); 3149 } 3150 3151 // HANDLE: $(DOMElement) 3152 } else if (selector.nodeType) { 3153 this[0] = selector; 3154 this.length = 1; 3155 return this; 3156 3157 // HANDLE: $(function) 3158 // Shortcut for document ready 3159 } else if (isFunction(selector)) { 3160 return root.ready !== undefined ? root.ready(selector) : 3161 // Execute immediately if ready is not present 3162 selector(_jQuery2); 3163 } 3164 return _jQuery2.makeArray(selector, this); 3165 }; 3166 3167 // Give the init function the jQuery prototype for later instantiation 3168 init.prototype = _jQuery2.fn; 3169 3170 // Initialize central reference 3171 rootjQuery = _jQuery2(document); 3172 var rparentsprev = /^(?:parents|prev(?:Until|All))/, 3173 // Methods guaranteed to produce a unique set when starting from a unique set 3174 guaranteedUnique = { 3175 children: true, 3176 contents: true, 3177 next: true, 3178 prev: true 3179 }; 3180 _jQuery2.fn.extend({ 3181 has: function has(target) { 3182 var targets = _jQuery2(target, this), 3183 l = targets.length; 3184 return this.filter(function () { 3185 var i = 0; 3186 for (; i < l; i++) { 3187 if (_jQuery2.contains(this, targets[i])) { 3188 return true; 3189 } 3190 } 3191 }); 3192 }, 3193 closest: function closest(selectors, context) { 3194 var cur, 3195 i = 0, 3196 l = this.length, 3197 matched = [], 3198 targets = typeof selectors !== "string" && _jQuery2(selectors); 3199 3200 // Positional selectors never match, since there's no _selection_ context 3201 if (!rneedsContext.test(selectors)) { 3202 for (; i < l; i++) { 3203 for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) { 3204 // Always skip document fragments 3205 if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : 3206 // Don't pass non-elements to jQuery#find 3207 cur.nodeType === 1 && _jQuery2.find.matchesSelector(cur, selectors))) { 3208 matched.push(cur); 3209 break; 3210 } 3211 } 3212 } 3213 } 3214 return this.pushStack(matched.length > 1 ? _jQuery2.uniqueSort(matched) : matched); 3215 }, 3216 // Determine the position of an element within the set 3217 index: function index(elem) { 3218 // No argument, return index in parent 3219 if (!elem) { 3220 return this[0] && this[0].parentNode ? this.first().prevAll().length : -1; 3221 } 3222 3223 // Index in selector 3224 if (typeof elem === "string") { 3225 return indexOf.call(_jQuery2(elem), this[0]); 3226 } 3227 3228 // Locate the position of the desired element 3229 return indexOf.call(this, 3230 // If it receives a jQuery object, the first element is used 3231 elem.jquery ? elem[0] : elem); 3232 }, 3233 add: function add(selector, context) { 3234 return this.pushStack(_jQuery2.uniqueSort(_jQuery2.merge(this.get(), _jQuery2(selector, context)))); 3235 }, 3236 addBack: function addBack(selector) { 3237 return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector)); 3238 } 3239 }); 3240 function sibling(cur, dir) { 3241 while ((cur = cur[dir]) && cur.nodeType !== 1) {} 3242 return cur; 3243 } 3244 _jQuery2.each({ 3245 parent: function parent(elem) { 3246 var parent = elem.parentNode; 3247 return parent && parent.nodeType !== 11 ? parent : null; 3248 }, 3249 parents: function parents(elem) { 3250 return dir(elem, "parentNode"); 3251 }, 3252 parentsUntil: function parentsUntil(elem, _i, until) { 3253 return dir(elem, "parentNode", until); 3254 }, 3255 next: function next(elem) { 3256 return sibling(elem, "nextSibling"); 3257 }, 3258 prev: function prev(elem) { 3259 return sibling(elem, "previousSibling"); 3260 }, 3261 nextAll: function nextAll(elem) { 3262 return dir(elem, "nextSibling"); 3263 }, 3264 prevAll: function prevAll(elem) { 3265 return dir(elem, "previousSibling"); 3266 }, 3267 nextUntil: function nextUntil(elem, _i, until) { 3268 return dir(elem, "nextSibling", until); 3269 }, 3270 prevUntil: function prevUntil(elem, _i, until) { 3271 return dir(elem, "previousSibling", until); 3272 }, 3273 siblings: function siblings(elem) { 3274 return _siblings((elem.parentNode || {}).firstChild, elem); 3275 }, 3276 children: function children(elem) { 3277 return _siblings(elem.firstChild); 3278 }, 3279 contents: function contents(elem) { 3280 if (elem.contentDocument != null && 3281 // Support: IE 11+ 3282 // <object> elements with no `data` attribute has an object 3283 // `contentDocument` with a `null` prototype. 3284 getProto(elem.contentDocument)) { 3285 return elem.contentDocument; 3286 } 3287 3288 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 3289 // Treat the template element as a regular one in browsers that 3290 // don't support it. 3291 if (nodeName(elem, "template")) { 3292 elem = elem.content || elem; 3293 } 3294 return _jQuery2.merge([], elem.childNodes); 3295 } 3296 }, function (name, fn) { 3297 _jQuery2.fn[name] = function (until, selector) { 3298 var matched = _jQuery2.map(this, fn, until); 3299 if (name.slice(-5) !== "Until") { 3300 selector = until; 3301 } 3302 if (selector && typeof selector === "string") { 3303 matched = _jQuery2.filter(selector, matched); 3304 } 3305 if (this.length > 1) { 3306 // Remove duplicates 3307 if (!guaranteedUnique[name]) { 3308 _jQuery2.uniqueSort(matched); 3309 } 3310 3311 // Reverse order for parents* and prev-derivatives 3312 if (rparentsprev.test(name)) { 3313 matched.reverse(); 3314 } 3315 } 3316 return this.pushStack(matched); 3317 }; 3318 }); 3319 var rnothtmlwhite = /[^\x20\t\r\n\f]+/g; 3320 3321 // Convert String-formatted options into Object-formatted ones 3322 function createOptions(options) { 3323 var object = {}; 3324 _jQuery2.each(options.match(rnothtmlwhite) || [], function (_, flag) { 3325 object[flag] = true; 3326 }); 3327 return object; 3328 } 3329 3330 /* 3331 * Create a callback list using the following parameters: 3332 * 3333 * options: an optional list of space-separated options that will change how 3334 * the callback list behaves or a more traditional option object 3335 * 3336 * By default a callback list will act like an event callback list and can be 3337 * "fired" multiple times. 3338 * 3339 * Possible options: 3340 * 3341 * once: will ensure the callback list can only be fired once (like a Deferred) 3342 * 3343 * memory: will keep track of previous values and will call any callback added 3344 * after the list has been fired right away with the latest "memorized" 3345 * values (like a Deferred) 3346 * 3347 * unique: will ensure a callback can only be added once (no duplicate in the list) 3348 * 3349 * stopOnFalse: interrupt callings when a callback returns false 3350 * 3351 */ 3352 _jQuery2.Callbacks = function (options) { 3353 // Convert options from String-formatted to Object-formatted if needed 3354 // (we check in cache first) 3355 options = typeof options === "string" ? createOptions(options) : _jQuery2.extend({}, options); 3356 var 3357 // Flag to know if list is currently firing 3358 firing, 3359 // Last fire value for non-forgettable lists 3360 memory, 3361 // Flag to know if list was already fired 3362 _fired, 3363 // Flag to prevent firing 3364 _locked, 3365 // Actual callback list 3366 list = [], 3367 // Queue of execution data for repeatable lists 3368 queue = [], 3369 // Index of currently firing callback (modified by add/remove as needed) 3370 firingIndex = -1, 3371 // Fire callbacks 3372 fire = function fire() { 3373 // Enforce single-firing 3374 _locked = _locked || options.once; 3375 3376 // Execute callbacks for all pending executions, 3377 // respecting firingIndex overrides and runtime changes 3378 _fired = firing = true; 3379 for (; queue.length; firingIndex = -1) { 3380 memory = queue.shift(); 3381 while (++firingIndex < list.length) { 3382 // Run callback and check for early termination 3383 if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) { 3384 // Jump to end and forget the data so .add doesn't re-fire 3385 firingIndex = list.length; 3386 memory = false; 3387 } 3388 } 3389 } 3390 3391 // Forget the data if we're done with it 3392 if (!options.memory) { 3393 memory = false; 3394 } 3395 firing = false; 3396 3397 // Clean up if we're done firing for good 3398 if (_locked) { 3399 // Keep an empty list if we have data for future add calls 3400 if (memory) { 3401 list = []; 3402 3403 // Otherwise, this object is spent 3404 } else { 3405 list = ""; 3406 } 3407 } 3408 }, 3409 // Actual Callbacks object 3410 self = { 3411 // Add a callback or a collection of callbacks to the list 3412 add: function add() { 3413 if (list) { 3414 // If we have memory from a past run, we should fire after adding 3415 if (memory && !firing) { 3416 firingIndex = list.length - 1; 3417 queue.push(memory); 3418 } 3419 (function add(args) { 3420 _jQuery2.each(args, function (_, arg) { 3421 if (isFunction(arg)) { 3422 if (!options.unique || !self.has(arg)) { 3423 list.push(arg); 3424 } 3425 } else if (arg && arg.length && toType(arg) !== "string") { 3426 // Inspect recursively 3427 add(arg); 3428 } 3429 }); 3430 })(arguments); 3431 if (memory && !firing) { 3432 fire(); 3433 } 3434 } 3435 return this; 3436 }, 3437 // Remove a callback from the list 3438 remove: function remove() { 3439 _jQuery2.each(arguments, function (_, arg) { 3440 var index; 3441 while ((index = _jQuery2.inArray(arg, list, index)) > -1) { 3442 list.splice(index, 1); 3443 3444 // Handle firing indexes 3445 if (index <= firingIndex) { 3446 firingIndex--; 3447 } 3448 } 3449 }); 3450 return this; 3451 }, 3452 // Check if a given callback is in the list. 3453 // If no argument is given, return whether or not list has callbacks attached. 3454 has: function has(fn) { 3455 return fn ? _jQuery2.inArray(fn, list) > -1 : list.length > 0; 3456 }, 3457 // Remove all callbacks from the list 3458 empty: function empty() { 3459 if (list) { 3460 list = []; 3461 } 3462 return this; 3463 }, 3464 // Disable .fire and .add 3465 // Abort any current/pending executions 3466 // Clear all callbacks and values 3467 disable: function disable() { 3468 _locked = queue = []; 3469 list = memory = ""; 3470 return this; 3471 }, 3472 disabled: function disabled() { 3473 return !list; 3474 }, 3475 // Disable .fire 3476 // Also disable .add unless we have memory (since it would have no effect) 3477 // Abort any pending executions 3478 lock: function lock() { 3479 _locked = queue = []; 3480 if (!memory && !firing) { 3481 list = memory = ""; 3482 } 3483 return this; 3484 }, 3485 locked: function locked() { 3486 return !!_locked; 3487 }, 3488 // Call all callbacks with the given context and arguments 3489 fireWith: function fireWith(context, args) { 3490 if (!_locked) { 3491 args = args || []; 3492 args = [context, args.slice ? args.slice() : args]; 3493 queue.push(args); 3494 if (!firing) { 3495 fire(); 3496 } 3497 } 3498 return this; 3499 }, 3500 // Call all the callbacks with the given arguments 3501 fire: function fire() { 3502 self.fireWith(this, arguments); 3503 return this; 3504 }, 3505 // To know if the callbacks have already been called at least once 3506 fired: function fired() { 3507 return !!_fired; 3508 } 3509 }; 3510 return self; 3511 }; 3512 function Identity(v) { 3513 return v; 3514 } 3515 function Thrower(ex) { 3516 throw ex; 3517 } 3518 function adoptValue(value, resolve, reject, noValue) { 3519 var method; 3520 try { 3521 // Check for promise aspect first to privilege synchronous behavior 3522 if (value && isFunction(method = value.promise)) { 3523 method.call(value).done(resolve).fail(reject); 3524 3525 // Other thenables 3526 } else if (value && isFunction(method = value.then)) { 3527 method.call(value, resolve, reject); 3528 3529 // Other non-thenables 3530 } else { 3531 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 3532 // * false: [ value ].slice( 0 ) => resolve( value ) 3533 // * true: [ value ].slice( 1 ) => resolve() 3534 resolve.apply(undefined, [value].slice(noValue)); 3535 } 3536 3537 // For Promises/A+, convert exceptions into rejections 3538 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 3539 // Deferred#then to conditionally suppress rejection. 3540 } catch (value) { 3541 // Support: Android 4.0 only 3542 // Strict mode functions invoked without .call/.apply get global-object context 3543 reject.apply(undefined, [value]); 3544 } 3545 } 3546 _jQuery2.extend({ 3547 Deferred: function Deferred(func) { 3548 var tuples = [ 3549 // action, add listener, callbacks, 3550 // ... .then handlers, argument index, [final state] 3551 ["notify", "progress", _jQuery2.Callbacks("memory"), _jQuery2.Callbacks("memory"), 2], ["resolve", "done", _jQuery2.Callbacks("once memory"), _jQuery2.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", _jQuery2.Callbacks("once memory"), _jQuery2.Callbacks("once memory"), 1, "rejected"]], 3552 _state = "pending", 3553 _promise = { 3554 state: function state() { 3555 return _state; 3556 }, 3557 always: function always() { 3558 deferred.done(arguments).fail(arguments); 3559 return this; 3560 }, 3561 "catch": function _catch(fn) { 3562 return _promise.then(null, fn); 3563 }, 3564 // Keep pipe for back-compat 3565 pipe: function pipe(/* fnDone, fnFail, fnProgress */ 3566 ) { 3567 var fns = arguments; 3568 return _jQuery2.Deferred(function (newDefer) { 3569 _jQuery2.each(tuples, function (_i, tuple) { 3570 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 3571 var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; 3572 3573 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 3574 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 3575 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 3576 deferred[tuple[1]](function () { 3577 var returned = fn && fn.apply(this, arguments); 3578 if (returned && isFunction(returned.promise)) { 3579 returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject); 3580 } else { 3581 newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments); 3582 } 3583 }); 3584 }); 3585 fns = null; 3586 }).promise(); 3587 }, 3588 then: function then(onFulfilled, onRejected, onProgress) { 3589 var maxDepth = 0; 3590 function resolve(depth, deferred, handler, special) { 3591 return function () { 3592 var that = this, 3593 args = arguments, 3594 mightThrow = function mightThrow() { 3595 var returned, then; 3596 3597 // Support: Promises/A+ section 2.3.3.3.3 3598 // https://promisesaplus.com/#point-59 3599 // Ignore double-resolution attempts 3600 if (depth < maxDepth) { 3601 return; 3602 } 3603 returned = handler.apply(that, args); 3604 3605 // Support: Promises/A+ section 2.3.1 3606 // https://promisesaplus.com/#point-48 3607 if (returned === deferred.promise()) { 3608 throw new TypeError("Thenable self-resolution"); 3609 } 3610 3611 // Support: Promises/A+ sections 2.3.3.1, 3.5 3612 // https://promisesaplus.com/#point-54 3613 // https://promisesaplus.com/#point-75 3614 // Retrieve `then` only once 3615 then = returned && ( 3616 // Support: Promises/A+ section 2.3.4 3617 // https://promisesaplus.com/#point-64 3618 // Only check objects and functions for thenability 3619 _typeof(returned) === "object" || typeof returned === "function") && returned.then; 3620 3621 // Handle a returned thenable 3622 if (isFunction(then)) { 3623 // Special processors (notify) just wait for resolution 3624 if (special) { 3625 then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); 3626 3627 // Normal processors (resolve) also hook into progress 3628 } else { 3629 // ...and disregard older resolution values 3630 maxDepth++; 3631 then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith)); 3632 } 3633 3634 // Handle all other returned values 3635 } else { 3636 // Only substitute handlers pass on context 3637 // and multiple values (non-spec behavior) 3638 if (handler !== Identity) { 3639 that = undefined; 3640 args = [returned]; 3641 } 3642 3643 // Process the value(s) 3644 // Default process is resolve 3645 (special || deferred.resolveWith)(that, args); 3646 } 3647 }, 3648 // Only normal processors (resolve) catch and reject exceptions 3649 process = special ? mightThrow : function () { 3650 try { 3651 mightThrow(); 3652 } catch (e) { 3653 if (_jQuery2.Deferred.exceptionHook) { 3654 _jQuery2.Deferred.exceptionHook(e, process.error); 3655 } 3656 3657 // Support: Promises/A+ section 2.3.3.3.4.1 3658 // https://promisesaplus.com/#point-61 3659 // Ignore post-resolution exceptions 3660 if (depth + 1 >= maxDepth) { 3661 // Only substitute handlers pass on context 3662 // and multiple values (non-spec behavior) 3663 if (handler !== Thrower) { 3664 that = undefined; 3665 args = [e]; 3666 } 3667 deferred.rejectWith(that, args); 3668 } 3669 } 3670 }; 3671 3672 // Support: Promises/A+ section 2.3.3.3.1 3673 // https://promisesaplus.com/#point-57 3674 // Re-resolve promises immediately to dodge false rejection from 3675 // subsequent errors 3676 if (depth) { 3677 process(); 3678 } else { 3679 // Call an optional hook to record the error, in case of exception 3680 // since it's otherwise lost when execution goes async 3681 if (_jQuery2.Deferred.getErrorHook) { 3682 process.error = _jQuery2.Deferred.getErrorHook(); 3683 3684 // The deprecated alias of the above. While the name suggests 3685 // returning the stack, not an error instance, jQuery just passes 3686 // it directly to `console.warn` so both will work; an instance 3687 // just better cooperates with source maps. 3688 } else if (_jQuery2.Deferred.getStackHook) { 3689 process.error = _jQuery2.Deferred.getStackHook(); 3690 } 3691 window.setTimeout(process); 3692 } 3693 }; 3694 } 3695 return _jQuery2.Deferred(function (newDefer) { 3696 // progress_handlers.add( ... ) 3697 tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); 3698 3699 // fulfilled_handlers.add( ... ) 3700 tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); 3701 3702 // rejected_handlers.add( ... ) 3703 tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower)); 3704 }).promise(); 3705 }, 3706 // Get a promise for this deferred 3707 // If obj is provided, the promise aspect is added to the object 3708 promise: function promise(obj) { 3709 return obj != null ? _jQuery2.extend(obj, _promise) : _promise; 3710 } 3711 }, 3712 deferred = {}; 3713 3714 // Add list-specific methods 3715 _jQuery2.each(tuples, function (i, tuple) { 3716 var list = tuple[2], 3717 stateString = tuple[5]; 3718 3719 // promise.progress = list.add 3720 // promise.done = list.add 3721 // promise.fail = list.add 3722 _promise[tuple[1]] = list.add; 3723 3724 // Handle state 3725 if (stateString) { 3726 list.add(function () { 3727 // state = "resolved" (i.e., fulfilled) 3728 // state = "rejected" 3729 _state = stateString; 3730 }, 3731 // rejected_callbacks.disable 3732 // fulfilled_callbacks.disable 3733 tuples[3 - i][2].disable, 3734 // rejected_handlers.disable 3735 // fulfilled_handlers.disable 3736 tuples[3 - i][3].disable, 3737 // progress_callbacks.lock 3738 tuples[0][2].lock, 3739 // progress_handlers.lock 3740 tuples[0][3].lock); 3741 } 3742 3743 // progress_handlers.fire 3744 // fulfilled_handlers.fire 3745 // rejected_handlers.fire 3746 list.add(tuple[3].fire); 3747 3748 // deferred.notify = function() { deferred.notifyWith(...) } 3749 // deferred.resolve = function() { deferred.resolveWith(...) } 3750 // deferred.reject = function() { deferred.rejectWith(...) } 3751 deferred[tuple[0]] = function () { 3752 deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments); 3753 return this; 3754 }; 3755 3756 // deferred.notifyWith = list.fireWith 3757 // deferred.resolveWith = list.fireWith 3758 // deferred.rejectWith = list.fireWith 3759 deferred[tuple[0] + "With"] = list.fireWith; 3760 }); 3761 3762 // Make the deferred a promise 3763 _promise.promise(deferred); 3764 3765 // Call given func if any 3766 if (func) { 3767 func.call(deferred, deferred); 3768 } 3769 3770 // All done! 3771 return deferred; 3772 }, 3773 // Deferred helper 3774 when: function when(singleValue) { 3775 var 3776 // count of uncompleted subordinates 3777 remaining = arguments.length, 3778 // count of unprocessed arguments 3779 i = remaining, 3780 // subordinate fulfillment data 3781 resolveContexts = Array(i), 3782 resolveValues = _slice.call(arguments), 3783 // the primary Deferred 3784 primary = _jQuery2.Deferred(), 3785 // subordinate callback factory 3786 updateFunc = function updateFunc(i) { 3787 return function (value) { 3788 resolveContexts[i] = this; 3789 resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value; 3790 if (! --remaining) { 3791 primary.resolveWith(resolveContexts, resolveValues); 3792 } 3793 }; 3794 }; 3795 3796 // Single- and empty arguments are adopted like Promise.resolve 3797 if (remaining <= 1) { 3798 adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining); 3799 3800 // Use .then() to unwrap secondary thenables (cf. gh-3000) 3801 if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) { 3802 return primary.then(); 3803 } 3804 } 3805 3806 // Multiple arguments are aggregated like Promise.all array elements 3807 while (i--) { 3808 adoptValue(resolveValues[i], updateFunc(i), primary.reject); 3809 } 3810 return primary.promise(); 3811 } 3812 }); 3813 3814 // These usually indicate a programmer mistake during development, 3815 // warn about them ASAP rather than swallowing them by default. 3816 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 3817 3818 // If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 3819 // captured before the async barrier to get the original error cause 3820 // which may otherwise be hidden. 3821 _jQuery2.Deferred.exceptionHook = function (error, asyncError) { 3822 // Support: IE 8 - 9 only 3823 // Console exists when dev tools are open, which can happen at any time 3824 if (window.console && window.console.warn && error && rerrorNames.test(error.name)) { 3825 window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, asyncError); 3826 } 3827 }; 3828 _jQuery2.readyException = function (error) { 3829 window.setTimeout(function () { 3830 throw error; 3831 }); 3832 }; 3833 3834 // The deferred used on DOM ready 3835 var readyList = _jQuery2.Deferred(); 3836 _jQuery2.fn.ready = function (fn) { 3837 readyList.then(fn) 3838 3839 // Wrap jQuery.readyException in a function so that the lookup 3840 // happens at the time of error handling instead of callback 3841 // registration. 3842 ["catch"](function (error) { 3843 _jQuery2.readyException(error); 3844 }); 3845 return this; 3846 }; 3847 _jQuery2.extend({ 3848 // Is the DOM ready to be used? Set to true once it occurs. 3849 isReady: false, 3850 // A counter to track how many items to wait for before 3851 // the ready event fires. See trac-6781 3852 readyWait: 1, 3853 // Handle when the DOM is ready 3854 ready: function ready(wait) { 3855 // Abort if there are pending holds or we're already ready 3856 if (wait === true ? --_jQuery2.readyWait : _jQuery2.isReady) { 3857 return; 3858 } 3859 3860 // Remember that the DOM is ready 3861 _jQuery2.isReady = true; 3862 3863 // If a normal DOM Ready event fired, decrement, and wait if need be 3864 if (wait !== true && --_jQuery2.readyWait > 0) { 3865 return; 3866 } 3867 3868 // If there are functions bound, to execute 3869 readyList.resolveWith(document, [_jQuery2]); 3870 } 3871 }); 3872 _jQuery2.ready.then = readyList.then; 3873 3874 // The ready event handler and self cleanup method 3875 function completed() { 3876 document.removeEventListener("DOMContentLoaded", completed); 3877 window.removeEventListener("load", completed); 3878 _jQuery2.ready(); 3879 } 3880 3881 // Catch cases where $(document).ready() is called 3882 // after the browser event has already occurred. 3883 // Support: IE <=9 - 10 only 3884 // Older IE sometimes signals "interactive" too soon 3885 if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) { 3886 // Handle it asynchronously to allow scripts the opportunity to delay ready 3887 window.setTimeout(_jQuery2.ready); 3888 } else { 3889 // Use the handy event callback 3890 document.addEventListener("DOMContentLoaded", completed); 3891 3892 // A fallback to window.onload, that will always work 3893 window.addEventListener("load", completed); 3894 } 3895 3896 // Multifunctional method to get and set values of a collection 3897 // The value/s can optionally be executed if it's a function 3898 var _access = function access(elems, fn, key, value, chainable, emptyGet, raw) { 3899 var i = 0, 3900 len = elems.length, 3901 bulk = key == null; 3902 3903 // Sets many values 3904 if (toType(key) === "object") { 3905 chainable = true; 3906 for (i in key) { 3907 _access(elems, fn, i, key[i], true, emptyGet, raw); 3908 } 3909 3910 // Sets one value 3911 } else if (value !== undefined) { 3912 chainable = true; 3913 if (!isFunction(value)) { 3914 raw = true; 3915 } 3916 if (bulk) { 3917 // Bulk operations run against the entire set 3918 if (raw) { 3919 fn.call(elems, value); 3920 fn = null; 3921 3922 // ...except when executing function values 3923 } else { 3924 bulk = fn; 3925 fn = function fn(elem, _key, value) { 3926 return bulk.call(_jQuery2(elem), value); 3927 }; 3928 } 3929 } 3930 if (fn) { 3931 for (; i < len; i++) { 3932 fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key))); 3933 } 3934 } 3935 } 3936 if (chainable) { 3937 return elems; 3938 } 3939 3940 // Gets 3941 if (bulk) { 3942 return fn.call(elems); 3943 } 3944 return len ? fn(elems[0], key) : emptyGet; 3945 }; 3946 3947 // Matches dashed string for camelizing 3948 var rmsPrefix = /^-ms-/, 3949 rdashAlpha = /-([a-z])/g; 3950 3951 // Used by camelCase as callback to replace() 3952 function fcamelCase(_all, letter) { 3953 return letter.toUpperCase(); 3954 } 3955 3956 // Convert dashed to camelCase; used by the css and data modules 3957 // Support: IE <=9 - 11, Edge 12 - 15 3958 // Microsoft forgot to hump their vendor prefix (trac-9572) 3959 function camelCase(string) { 3960 return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); 3961 } 3962 var acceptData = function acceptData(owner) { 3963 // Accepts only: 3964 // - Node 3965 // - Node.ELEMENT_NODE 3966 // - Node.DOCUMENT_NODE 3967 // - Object 3968 // - Any 3969 return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType; 3970 }; 3971 function Data() { 3972 this.expando = _jQuery2.expando + Data.uid++; 3973 } 3974 Data.uid = 1; 3975 Data.prototype = { 3976 cache: function cache(owner) { 3977 // Check if the owner object already has a cache 3978 var value = owner[this.expando]; 3979 3980 // If not, create one 3981 if (!value) { 3982 value = {}; 3983 3984 // We can accept data for non-element nodes in modern browsers, 3985 // but we should not, see trac-8335. 3986 // Always return an empty object. 3987 if (acceptData(owner)) { 3988 // If it is a node unlikely to be stringify-ed or looped over 3989 // use plain assignment 3990 if (owner.nodeType) { 3991 owner[this.expando] = value; 3992 3993 // Otherwise secure it in a non-enumerable property 3994 // configurable must be true to allow the property to be 3995 // deleted when data is removed 3996 } else { 3997 Object.defineProperty(owner, this.expando, { 3998 value: value, 3999 configurable: true 4000 }); 4001 } 4002 } 4003 } 4004 return value; 4005 }, 4006 set: function set(owner, data, value) { 4007 var prop, 4008 cache = this.cache(owner); 4009 4010 // Handle: [ owner, key, value ] args 4011 // Always use camelCase key (gh-2257) 4012 if (typeof data === "string") { 4013 cache[camelCase(data)] = value; 4014 4015 // Handle: [ owner, { properties } ] args 4016 } else { 4017 // Copy the properties one-by-one to the cache object 4018 for (prop in data) { 4019 cache[camelCase(prop)] = data[prop]; 4020 } 4021 } 4022 return cache; 4023 }, 4024 get: function get(owner, key) { 4025 return key === undefined ? this.cache(owner) : 4026 // Always use camelCase key (gh-2257) 4027 owner[this.expando] && owner[this.expando][camelCase(key)]; 4028 }, 4029 access: function access(owner, key, value) { 4030 // In cases where either: 4031 // 4032 // 1. No key was specified 4033 // 2. A string key was specified, but no value provided 4034 // 4035 // Take the "read" path and allow the get method to determine 4036 // which value to return, respectively either: 4037 // 4038 // 1. The entire cache object 4039 // 2. The data stored at the key 4040 // 4041 if (key === undefined || key && typeof key === "string" && value === undefined) { 4042 return this.get(owner, key); 4043 } 4044 4045 // When the key is not a string, or both a key and value 4046 // are specified, set or extend (existing objects) with either: 4047 // 4048 // 1. An object of properties 4049 // 2. A key and value 4050 // 4051 this.set(owner, key, value); 4052 4053 // Since the "set" path can have two possible entry points 4054 // return the expected data based on which path was taken[*] 4055 return value !== undefined ? value : key; 4056 }, 4057 remove: function remove(owner, key) { 4058 var i, 4059 cache = owner[this.expando]; 4060 if (cache === undefined) { 4061 return; 4062 } 4063 if (key !== undefined) { 4064 // Support array or space separated string of keys 4065 if (Array.isArray(key)) { 4066 // If key is an array of keys... 4067 // We always set camelCase keys, so remove that. 4068 key = key.map(camelCase); 4069 } else { 4070 key = camelCase(key); 4071 4072 // If a key with the spaces exists, use it. 4073 // Otherwise, create an array by matching non-whitespace 4074 key = key in cache ? [key] : key.match(rnothtmlwhite) || []; 4075 } 4076 i = key.length; 4077 while (i--) { 4078 delete cache[key[i]]; 4079 } 4080 } 4081 4082 // Remove the expando if there's no more data 4083 if (key === undefined || _jQuery2.isEmptyObject(cache)) { 4084 // Support: Chrome <=35 - 45 4085 // Webkit & Blink performance suffers when deleting properties 4086 // from DOM nodes, so set to undefined instead 4087 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 4088 if (owner.nodeType) { 4089 owner[this.expando] = undefined; 4090 } else { 4091 delete owner[this.expando]; 4092 } 4093 } 4094 }, 4095 hasData: function hasData(owner) { 4096 var cache = owner[this.expando]; 4097 return cache !== undefined && !_jQuery2.isEmptyObject(cache); 4098 } 4099 }; 4100 var dataPriv = new Data(); 4101 var dataUser = new Data(); 4102 4103 // Implementation Summary 4104 // 4105 // 1. Enforce API surface and semantic compatibility with 1.9.x branch 4106 // 2. Improve the module's maintainability by reducing the storage 4107 // paths to a single mechanism. 4108 // 3. Use the same single mechanism to support "private" and "user" data. 4109 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 4110 // 5. Avoid exposing implementation details on user objects (eg. expando properties) 4111 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 4112 4113 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4114 rmultiDash = /[A-Z]/g; 4115 function getData(data) { 4116 if (data === "true") { 4117 return true; 4118 } 4119 if (data === "false") { 4120 return false; 4121 } 4122 if (data === "null") { 4123 return null; 4124 } 4125 4126 // Only convert to a number if it doesn't change the string 4127 if (data === +data + "") { 4128 return +data; 4129 } 4130 if (rbrace.test(data)) { 4131 return JSON.parse(data); 4132 } 4133 return data; 4134 } 4135 function dataAttr(elem, key, data) { 4136 var name; 4137 4138 // If nothing was found internally, try to fetch any 4139 // data from the HTML5 data-* attribute 4140 if (data === undefined && elem.nodeType === 1) { 4141 name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase(); 4142 data = elem.getAttribute(name); 4143 if (typeof data === "string") { 4144 try { 4145 data = getData(data); 4146 } catch (e) {} 4147 4148 // Make sure we set the data so it isn't changed later 4149 dataUser.set(elem, key, data); 4150 } else { 4151 data = undefined; 4152 } 4153 } 4154 return data; 4155 } 4156 _jQuery2.extend({ 4157 hasData: function hasData(elem) { 4158 return dataUser.hasData(elem) || dataPriv.hasData(elem); 4159 }, 4160 data: function data(elem, name, _data) { 4161 return dataUser.access(elem, name, _data); 4162 }, 4163 removeData: function removeData(elem, name) { 4164 dataUser.remove(elem, name); 4165 }, 4166 // TODO: Now that all calls to _data and _removeData have been replaced 4167 // with direct calls to dataPriv methods, these can be deprecated. 4168 _data: function _data(elem, name, data) { 4169 return dataPriv.access(elem, name, data); 4170 }, 4171 _removeData: function _removeData(elem, name) { 4172 dataPriv.remove(elem, name); 4173 } 4174 }); 4175 _jQuery2.fn.extend({ 4176 data: function data(key, value) { 4177 var i, 4178 name, 4179 data, 4180 elem = this[0], 4181 attrs = elem && elem.attributes; 4182 4183 // Gets all values 4184 if (key === undefined) { 4185 if (this.length) { 4186 data = dataUser.get(elem); 4187 if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) { 4188 i = attrs.length; 4189 while (i--) { 4190 // Support: IE 11 only 4191 // The attrs elements can be null (trac-14894) 4192 if (attrs[i]) { 4193 name = attrs[i].name; 4194 if (name.indexOf("data-") === 0) { 4195 name = camelCase(name.slice(5)); 4196 dataAttr(elem, name, data[name]); 4197 } 4198 } 4199 } 4200 dataPriv.set(elem, "hasDataAttrs", true); 4201 } 4202 } 4203 return data; 4204 } 4205 4206 // Sets multiple values 4207 if (_typeof(key) === "object") { 4208 return this.each(function () { 4209 dataUser.set(this, key); 4210 }); 4211 } 4212 return _access(this, function (value) { 4213 var data; 4214 4215 // The calling jQuery object (element matches) is not empty 4216 // (and therefore has an element appears at this[ 0 ]) and the 4217 // `value` parameter was not undefined. An empty jQuery object 4218 // will result in `undefined` for elem = this[ 0 ] which will 4219 // throw an exception if an attempt to read a data cache is made. 4220 if (elem && value === undefined) { 4221 // Attempt to get data from the cache 4222 // The key will always be camelCased in Data 4223 data = dataUser.get(elem, key); 4224 if (data !== undefined) { 4225 return data; 4226 } 4227 4228 // Attempt to "discover" the data in 4229 // HTML5 custom data-* attrs 4230 data = dataAttr(elem, key); 4231 if (data !== undefined) { 4232 return data; 4233 } 4234 4235 // We tried really hard, but the data doesn't exist. 4236 return; 4237 } 4238 4239 // Set the data... 4240 this.each(function () { 4241 // We always store the camelCased key 4242 dataUser.set(this, key, value); 4243 }); 4244 }, null, value, arguments.length > 1, null, true); 4245 }, 4246 removeData: function removeData(key) { 4247 return this.each(function () { 4248 dataUser.remove(this, key); 4249 }); 4250 } 4251 }); 4252 _jQuery2.extend({ 4253 queue: function queue(elem, type, data) { 4254 var queue; 4255 if (elem) { 4256 type = (type || "fx") + "queue"; 4257 queue = dataPriv.get(elem, type); 4258 4259 // Speed up dequeue by getting out quickly if this is just a lookup 4260 if (data) { 4261 if (!queue || Array.isArray(data)) { 4262 queue = dataPriv.access(elem, type, _jQuery2.makeArray(data)); 4263 } else { 4264 queue.push(data); 4265 } 4266 } 4267 return queue || []; 4268 } 4269 }, 4270 dequeue: function dequeue(elem, type) { 4271 type = type || "fx"; 4272 var queue = _jQuery2.queue(elem, type), 4273 startLength = queue.length, 4274 fn = queue.shift(), 4275 hooks = _jQuery2._queueHooks(elem, type), 4276 next = function next() { 4277 _jQuery2.dequeue(elem, type); 4278 }; 4279 4280 // If the fx queue is dequeued, always remove the progress sentinel 4281 if (fn === "inprogress") { 4282 fn = queue.shift(); 4283 startLength--; 4284 } 4285 if (fn) { 4286 // Add a progress sentinel to prevent the fx queue from being 4287 // automatically dequeued 4288 if (type === "fx") { 4289 queue.unshift("inprogress"); 4290 } 4291 4292 // Clear up the last queue stop function 4293 delete hooks.stop; 4294 fn.call(elem, next, hooks); 4295 } 4296 if (!startLength && hooks) { 4297 hooks.empty.fire(); 4298 } 4299 }, 4300 // Not public - generate a queueHooks object, or return the current one 4301 _queueHooks: function _queueHooks(elem, type) { 4302 var key = type + "queueHooks"; 4303 return dataPriv.get(elem, key) || dataPriv.access(elem, key, { 4304 empty: _jQuery2.Callbacks("once memory").add(function () { 4305 dataPriv.remove(elem, [type + "queue", key]); 4306 }) 4307 }); 4308 } 4309 }); 4310 _jQuery2.fn.extend({ 4311 queue: function queue(type, data) { 4312 var setter = 2; 4313 if (typeof type !== "string") { 4314 data = type; 4315 type = "fx"; 4316 setter--; 4317 } 4318 if (arguments.length < setter) { 4319 return _jQuery2.queue(this[0], type); 4320 } 4321 return data === undefined ? this : this.each(function () { 4322 var queue = _jQuery2.queue(this, type, data); 4323 4324 // Ensure a hooks for this queue 4325 _jQuery2._queueHooks(this, type); 4326 if (type === "fx" && queue[0] !== "inprogress") { 4327 _jQuery2.dequeue(this, type); 4328 } 4329 }); 4330 }, 4331 dequeue: function dequeue(type) { 4332 return this.each(function () { 4333 _jQuery2.dequeue(this, type); 4334 }); 4335 }, 4336 clearQueue: function clearQueue(type) { 4337 return this.queue(type || "fx", []); 4338 }, 4339 // Get a promise resolved when queues of a certain type 4340 // are emptied (fx is the type by default) 4341 promise: function promise(type, obj) { 4342 var tmp, 4343 count = 1, 4344 defer = _jQuery2.Deferred(), 4345 elements = this, 4346 i = this.length, 4347 resolve = function resolve() { 4348 if (! --count) { 4349 defer.resolveWith(elements, [elements]); 4350 } 4351 }; 4352 if (typeof type !== "string") { 4353 obj = type; 4354 type = undefined; 4355 } 4356 type = type || "fx"; 4357 while (i--) { 4358 tmp = dataPriv.get(elements[i], type + "queueHooks"); 4359 if (tmp && tmp.empty) { 4360 count++; 4361 tmp.empty.add(resolve); 4362 } 4363 } 4364 resolve(); 4365 return defer.promise(obj); 4366 } 4367 }); 4368 var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source; 4369 var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i"); 4370 var cssExpand = ["Top", "Right", "Bottom", "Left"]; 4371 var documentElement = document.documentElement; 4372 var isAttached = function isAttached(elem) { 4373 return _jQuery2.contains(elem.ownerDocument, elem); 4374 }, 4375 composed = { 4376 composed: true 4377 }; 4378 4379 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 4380 // Check attachment across shadow DOM boundaries when possible (gh-3504) 4381 // Support: iOS 10.0-10.2 only 4382 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 4383 // leading to errors. We need to check for `getRootNode`. 4384 if (documentElement.getRootNode) { 4385 isAttached = function isAttached(elem) { 4386 return _jQuery2.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument; 4387 }; 4388 } 4389 var isHiddenWithinTree = function isHiddenWithinTree(elem, el) { 4390 // isHiddenWithinTree might be called from jQuery#filter function; 4391 // in that case, element will be second argument 4392 elem = el || elem; 4393 4394 // Inline style trumps all 4395 return elem.style.display === "none" || elem.style.display === "" && 4396 // Otherwise, check computed style 4397 // Support: Firefox <=43 - 45 4398 // Disconnected elements can have computed display: none, so first confirm that elem is 4399 // in the document. 4400 isAttached(elem) && _jQuery2.css(elem, "display") === "none"; 4401 }; 4402 function adjustCSS(elem, prop, valueParts, tween) { 4403 var adjusted, 4404 scale, 4405 maxIterations = 20, 4406 currentValue = tween ? function () { 4407 return tween.cur(); 4408 } : function () { 4409 return _jQuery2.css(elem, prop, ""); 4410 }, 4411 initial = currentValue(), 4412 unit = valueParts && valueParts[3] || (_jQuery2.cssNumber[prop] ? "" : "px"), 4413 // Starting value computation is required for potential unit mismatches 4414 initialInUnit = elem.nodeType && (_jQuery2.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(_jQuery2.css(elem, prop)); 4415 if (initialInUnit && initialInUnit[3] !== unit) { 4416 // Support: Firefox <=54 4417 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 4418 initial = initial / 2; 4419 4420 // Trust units reported by jQuery.css 4421 unit = unit || initialInUnit[3]; 4422 4423 // Iteratively approximate from a nonzero starting point 4424 initialInUnit = +initial || 1; 4425 while (maxIterations--) { 4426 // Evaluate and update our best guess (doubling guesses that zero out). 4427 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 4428 _jQuery2.style(elem, prop, initialInUnit + unit); 4429 if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) { 4430 maxIterations = 0; 4431 } 4432 initialInUnit = initialInUnit / scale; 4433 } 4434 initialInUnit = initialInUnit * 2; 4435 _jQuery2.style(elem, prop, initialInUnit + unit); 4436 4437 // Make sure we update the tween properties later on 4438 valueParts = valueParts || []; 4439 } 4440 if (valueParts) { 4441 initialInUnit = +initialInUnit || +initial || 0; 4442 4443 // Apply relative offset (+=/-=) if specified 4444 adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2]; 4445 if (tween) { 4446 tween.unit = unit; 4447 tween.start = initialInUnit; 4448 tween.end = adjusted; 4449 } 4450 } 4451 return adjusted; 4452 } 4453 var defaultDisplayMap = {}; 4454 function getDefaultDisplay(elem) { 4455 var temp, 4456 doc = elem.ownerDocument, 4457 nodeName = elem.nodeName, 4458 display = defaultDisplayMap[nodeName]; 4459 if (display) { 4460 return display; 4461 } 4462 temp = doc.body.appendChild(doc.createElement(nodeName)); 4463 display = _jQuery2.css(temp, "display"); 4464 temp.parentNode.removeChild(temp); 4465 if (display === "none") { 4466 display = "block"; 4467 } 4468 defaultDisplayMap[nodeName] = display; 4469 return display; 4470 } 4471 function showHide(elements, show) { 4472 var display, 4473 elem, 4474 values = [], 4475 index = 0, 4476 length = elements.length; 4477 4478 // Determine new display value for elements that need to change 4479 for (; index < length; index++) { 4480 elem = elements[index]; 4481 if (!elem.style) { 4482 continue; 4483 } 4484 display = elem.style.display; 4485 if (show) { 4486 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 4487 // check is required in this first loop unless we have a nonempty display value (either 4488 // inline or about-to-be-restored) 4489 if (display === "none") { 4490 values[index] = dataPriv.get(elem, "display") || null; 4491 if (!values[index]) { 4492 elem.style.display = ""; 4493 } 4494 } 4495 if (elem.style.display === "" && isHiddenWithinTree(elem)) { 4496 values[index] = getDefaultDisplay(elem); 4497 } 4498 } else { 4499 if (display !== "none") { 4500 values[index] = "none"; 4501 4502 // Remember what we're overwriting 4503 dataPriv.set(elem, "display", display); 4504 } 4505 } 4506 } 4507 4508 // Set the display of the elements in a second loop to avoid constant reflow 4509 for (index = 0; index < length; index++) { 4510 if (values[index] != null) { 4511 elements[index].style.display = values[index]; 4512 } 4513 } 4514 return elements; 4515 } 4516 _jQuery2.fn.extend({ 4517 show: function show() { 4518 return showHide(this, true); 4519 }, 4520 hide: function hide() { 4521 return showHide(this); 4522 }, 4523 toggle: function toggle(state) { 4524 if (typeof state === "boolean") { 4525 return state ? this.show() : this.hide(); 4526 } 4527 return this.each(function () { 4528 if (isHiddenWithinTree(this)) { 4529 _jQuery2(this).show(); 4530 } else { 4531 _jQuery2(this).hide(); 4532 } 4533 }); 4534 } 4535 }); 4536 var rcheckableType = /^(?:checkbox|radio)$/i; 4537 var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i; 4538 var rscriptType = /^$|^module$|\/(?:java|ecma)script/i; 4539 (function () { 4540 var fragment = document.createDocumentFragment(), 4541 div = fragment.appendChild(document.createElement("div")), 4542 input = document.createElement("input"); 4543 4544 // Support: Android 4.0 - 4.3 only 4545 // Check state lost if the name is set (trac-11217) 4546 // Support: Windows Web Apps (WWA) 4547 // `name` and `type` must use .setAttribute for WWA (trac-14901) 4548 input.setAttribute("type", "radio"); 4549 input.setAttribute("checked", "checked"); 4550 input.setAttribute("name", "t"); 4551 div.appendChild(input); 4552 4553 // Support: Android <=4.1 only 4554 // Older WebKit doesn't clone checked state correctly in fragments 4555 support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; 4556 4557 // Support: IE <=11 only 4558 // Make sure textarea (and checkbox) defaultValue is properly cloned 4559 div.innerHTML = "<textarea>x</textarea>"; 4560 support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; 4561 4562 // Support: IE <=9 only 4563 // IE <=9 replaces <option> tags with their contents when inserted outside of 4564 // the select element. 4565 div.innerHTML = "<option></option>"; 4566 support.option = !!div.lastChild; 4567 })(); 4568 4569 // We have to close these tags to support XHTML (trac-13200) 4570 var wrapMap = { 4571 // XHTML parsers do not magically insert elements in the 4572 // same way that tag soup parsers do. So we cannot shorten 4573 // this by omitting <tbody> or other required elements. 4574 thead: [1, "<table>", "</table>"], 4575 col: [2, "<table><colgroup>", "</colgroup></table>"], 4576 tr: [2, "<table><tbody>", "</tbody></table>"], 4577 td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], 4578 _default: [0, "", ""] 4579 }; 4580 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 4581 wrapMap.th = wrapMap.td; 4582 4583 // Support: IE <=9 only 4584 if (!support.option) { 4585 wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"]; 4586 } 4587 function getAll(context, tag) { 4588 // Support: IE <=9 - 11 only 4589 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 4590 var ret; 4591 if (typeof context.getElementsByTagName !== "undefined") { 4592 ret = context.getElementsByTagName(tag || "*"); 4593 } else if (typeof context.querySelectorAll !== "undefined") { 4594 ret = context.querySelectorAll(tag || "*"); 4595 } else { 4596 ret = []; 4597 } 4598 if (tag === undefined || tag && nodeName(context, tag)) { 4599 return _jQuery2.merge([context], ret); 4600 } 4601 return ret; 4602 } 4603 4604 // Mark scripts as having already been evaluated 4605 function setGlobalEval(elems, refElements) { 4606 var i = 0, 4607 l = elems.length; 4608 for (; i < l; i++) { 4609 dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval")); 4610 } 4611 } 4612 var rhtml = /<|&#?\w+;/; 4613 function buildFragment(elems, context, scripts, selection, ignored) { 4614 var elem, 4615 tmp, 4616 tag, 4617 wrap, 4618 attached, 4619 j, 4620 fragment = context.createDocumentFragment(), 4621 nodes = [], 4622 i = 0, 4623 l = elems.length; 4624 for (; i < l; i++) { 4625 elem = elems[i]; 4626 if (elem || elem === 0) { 4627 // Add nodes directly 4628 if (toType(elem) === "object") { 4629 // Support: Android <=4.0 only, PhantomJS 1 only 4630 // push.apply(_, arraylike) throws on ancient WebKit 4631 _jQuery2.merge(nodes, elem.nodeType ? [elem] : elem); 4632 4633 // Convert non-html into a text node 4634 } else if (!rhtml.test(elem)) { 4635 nodes.push(context.createTextNode(elem)); 4636 4637 // Convert html into DOM nodes 4638 } else { 4639 tmp = tmp || fragment.appendChild(context.createElement("div")); 4640 4641 // Deserialize a standard representation 4642 tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase(); 4643 wrap = wrapMap[tag] || wrapMap._default; 4644 tmp.innerHTML = wrap[1] + _jQuery2.htmlPrefilter(elem) + wrap[2]; 4645 4646 // Descend through wrappers to the right content 4647 j = wrap[0]; 4648 while (j--) { 4649 tmp = tmp.lastChild; 4650 } 4651 4652 // Support: Android <=4.0 only, PhantomJS 1 only 4653 // push.apply(_, arraylike) throws on ancient WebKit 4654 _jQuery2.merge(nodes, tmp.childNodes); 4655 4656 // Remember the top-level container 4657 tmp = fragment.firstChild; 4658 4659 // Ensure the created nodes are orphaned (trac-12392) 4660 tmp.textContent = ""; 4661 } 4662 } 4663 } 4664 4665 // Remove wrapper from fragment 4666 fragment.textContent = ""; 4667 i = 0; 4668 while (elem = nodes[i++]) { 4669 // Skip elements already in the context collection (trac-4087) 4670 if (selection && _jQuery2.inArray(elem, selection) > -1) { 4671 if (ignored) { 4672 ignored.push(elem); 4673 } 4674 continue; 4675 } 4676 attached = isAttached(elem); 4677 4678 // Append to fragment 4679 tmp = getAll(fragment.appendChild(elem), "script"); 4680 4681 // Preserve script evaluation history 4682 if (attached) { 4683 setGlobalEval(tmp); 4684 } 4685 4686 // Capture executables 4687 if (scripts) { 4688 j = 0; 4689 while (elem = tmp[j++]) { 4690 if (rscriptType.test(elem.type || "")) { 4691 scripts.push(elem); 4692 } 4693 } 4694 } 4695 } 4696 return fragment; 4697 } 4698 var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 4699 function returnTrue() { 4700 return true; 4701 } 4702 function returnFalse() { 4703 return false; 4704 } 4705 function _on(elem, types, selector, data, fn, one) { 4706 var origFn, type; 4707 4708 // Types can be a map of types/handlers 4709 if (_typeof(types) === "object") { 4710 // ( types-Object, selector, data ) 4711 if (typeof selector !== "string") { 4712 // ( types-Object, data ) 4713 data = data || selector; 4714 selector = undefined; 4715 } 4716 for (type in types) { 4717 _on(elem, type, selector, data, types[type], one); 4718 } 4719 return elem; 4720 } 4721 if (data == null && fn == null) { 4722 // ( types, fn ) 4723 fn = selector; 4724 data = selector = undefined; 4725 } else if (fn == null) { 4726 if (typeof selector === "string") { 4727 // ( types, selector, fn ) 4728 fn = data; 4729 data = undefined; 4730 } else { 4731 // ( types, data, fn ) 4732 fn = data; 4733 data = selector; 4734 selector = undefined; 4735 } 4736 } 4737 if (fn === false) { 4738 fn = returnFalse; 4739 } else if (!fn) { 4740 return elem; 4741 } 4742 if (one === 1) { 4743 origFn = fn; 4744 fn = function fn(event) { 4745 // Can use an empty set, since event contains the info 4746 _jQuery2().off(event); 4747 return origFn.apply(this, arguments); 4748 }; 4749 4750 // Use same guid so caller can remove using origFn 4751 fn.guid = origFn.guid || (origFn.guid = _jQuery2.guid++); 4752 } 4753 return elem.each(function () { 4754 _jQuery2.event.add(this, types, fn, data, selector); 4755 }); 4756 } 4757 4758 /* 4759 * Helper functions for managing events -- not part of the public interface. 4760 * Props to Dean Edwards' addEvent library for many of the ideas. 4761 */ 4762 _jQuery2.event = { 4763 global: {}, 4764 add: function add(elem, types, handler, data, selector) { 4765 var handleObjIn, 4766 eventHandle, 4767 tmp, 4768 events, 4769 t, 4770 handleObj, 4771 special, 4772 handlers, 4773 type, 4774 namespaces, 4775 origType, 4776 elemData = dataPriv.get(elem); 4777 4778 // Only attach events to objects that accept data 4779 if (!acceptData(elem)) { 4780 return; 4781 } 4782 4783 // Caller can pass in an object of custom data in lieu of the handler 4784 if (handler.handler) { 4785 handleObjIn = handler; 4786 handler = handleObjIn.handler; 4787 selector = handleObjIn.selector; 4788 } 4789 4790 // Ensure that invalid selectors throw exceptions at attach time 4791 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 4792 if (selector) { 4793 _jQuery2.find.matchesSelector(documentElement, selector); 4794 } 4795 4796 // Make sure that the handler has a unique ID, used to find/remove it later 4797 if (!handler.guid) { 4798 handler.guid = _jQuery2.guid++; 4799 } 4800 4801 // Init the element's event structure and main handler, if this is the first 4802 if (!(events = elemData.events)) { 4803 events = elemData.events = Object.create(null); 4804 } 4805 if (!(eventHandle = elemData.handle)) { 4806 eventHandle = elemData.handle = function (e) { 4807 // Discard the second event of a jQuery.event.trigger() and 4808 // when an event is called after a page has unloaded 4809 return typeof _jQuery2 !== "undefined" && _jQuery2.event.triggered !== e.type ? _jQuery2.event.dispatch.apply(elem, arguments) : undefined; 4810 }; 4811 } 4812 4813 // Handle multiple events separated by a space 4814 types = (types || "").match(rnothtmlwhite) || [""]; 4815 t = types.length; 4816 while (t--) { 4817 tmp = rtypenamespace.exec(types[t]) || []; 4818 type = origType = tmp[1]; 4819 namespaces = (tmp[2] || "").split(".").sort(); 4820 4821 // There *must* be a type, no attaching namespace-only handlers 4822 if (!type) { 4823 continue; 4824 } 4825 4826 // If event changes its type, use the special event handlers for the changed type 4827 special = _jQuery2.event.special[type] || {}; 4828 4829 // If selector defined, determine special event api type, otherwise given type 4830 type = (selector ? special.delegateType : special.bindType) || type; 4831 4832 // Update special based on newly reset type 4833 special = _jQuery2.event.special[type] || {}; 4834 4835 // handleObj is passed to all event handlers 4836 handleObj = _jQuery2.extend({ 4837 type: type, 4838 origType: origType, 4839 data: data, 4840 handler: handler, 4841 guid: handler.guid, 4842 selector: selector, 4843 needsContext: selector && _jQuery2.expr.match.needsContext.test(selector), 4844 namespace: namespaces.join(".") 4845 }, handleObjIn); 4846 4847 // Init the event handler queue if we're the first 4848 if (!(handlers = events[type])) { 4849 handlers = events[type] = []; 4850 handlers.delegateCount = 0; 4851 4852 // Only use addEventListener if the special events handler returns false 4853 if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) { 4854 if (elem.addEventListener) { 4855 elem.addEventListener(type, eventHandle); 4856 } 4857 } 4858 } 4859 if (special.add) { 4860 special.add.call(elem, handleObj); 4861 if (!handleObj.handler.guid) { 4862 handleObj.handler.guid = handler.guid; 4863 } 4864 } 4865 4866 // Add to the element's handler list, delegates in front 4867 if (selector) { 4868 handlers.splice(handlers.delegateCount++, 0, handleObj); 4869 } else { 4870 handlers.push(handleObj); 4871 } 4872 4873 // Keep track of which events have ever been used, for event optimization 4874 _jQuery2.event.global[type] = true; 4875 } 4876 }, 4877 // Detach an event or set of events from an element 4878 remove: function remove(elem, types, handler, selector, mappedTypes) { 4879 var j, 4880 origCount, 4881 tmp, 4882 events, 4883 t, 4884 handleObj, 4885 special, 4886 handlers, 4887 type, 4888 namespaces, 4889 origType, 4890 elemData = dataPriv.hasData(elem) && dataPriv.get(elem); 4891 if (!elemData || !(events = elemData.events)) { 4892 return; 4893 } 4894 4895 // Once for each type.namespace in types; type may be omitted 4896 types = (types || "").match(rnothtmlwhite) || [""]; 4897 t = types.length; 4898 while (t--) { 4899 tmp = rtypenamespace.exec(types[t]) || []; 4900 type = origType = tmp[1]; 4901 namespaces = (tmp[2] || "").split(".").sort(); 4902 4903 // Unbind all events (on this namespace, if provided) for the element 4904 if (!type) { 4905 for (type in events) { 4906 _jQuery2.event.remove(elem, type + types[t], handler, selector, true); 4907 } 4908 continue; 4909 } 4910 special = _jQuery2.event.special[type] || {}; 4911 type = (selector ? special.delegateType : special.bindType) || type; 4912 handlers = events[type] || []; 4913 tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"); 4914 4915 // Remove matching events 4916 origCount = j = handlers.length; 4917 while (j--) { 4918 handleObj = handlers[j]; 4919 if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) { 4920 handlers.splice(j, 1); 4921 if (handleObj.selector) { 4922 handlers.delegateCount--; 4923 } 4924 if (special.remove) { 4925 special.remove.call(elem, handleObj); 4926 } 4927 } 4928 } 4929 4930 // Remove generic event handler if we removed something and no more handlers exist 4931 // (avoids potential for endless recursion during removal of special event handlers) 4932 if (origCount && !handlers.length) { 4933 if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) { 4934 _jQuery2.removeEvent(elem, type, elemData.handle); 4935 } 4936 delete events[type]; 4937 } 4938 } 4939 4940 // Remove data and the expando if it's no longer used 4941 if (_jQuery2.isEmptyObject(events)) { 4942 dataPriv.remove(elem, "handle events"); 4943 } 4944 }, 4945 dispatch: function dispatch(nativeEvent) { 4946 var i, 4947 j, 4948 ret, 4949 matched, 4950 handleObj, 4951 handlerQueue, 4952 args = new Array(arguments.length), 4953 // Make a writable jQuery.Event from the native event object 4954 event = _jQuery2.event.fix(nativeEvent), 4955 handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [], 4956 special = _jQuery2.event.special[event.type] || {}; 4957 4958 // Use the fix-ed jQuery.Event rather than the (read-only) native event 4959 args[0] = event; 4960 for (i = 1; i < arguments.length; i++) { 4961 args[i] = arguments[i]; 4962 } 4963 event.delegateTarget = this; 4964 4965 // Call the preDispatch hook for the mapped type, and let it bail if desired 4966 if (special.preDispatch && special.preDispatch.call(this, event) === false) { 4967 return; 4968 } 4969 4970 // Determine handlers 4971 handlerQueue = _jQuery2.event.handlers.call(this, event, handlers); 4972 4973 // Run delegates first; they may want to stop propagation beneath us 4974 i = 0; 4975 while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) { 4976 event.currentTarget = matched.elem; 4977 j = 0; 4978 while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) { 4979 // If the event is namespaced, then each handler is only invoked if it is 4980 // specially universal or its namespaces are a superset of the event's. 4981 if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) { 4982 event.handleObj = handleObj; 4983 event.data = handleObj.data; 4984 ret = ((_jQuery2.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args); 4985 if (ret !== undefined) { 4986 if ((event.result = ret) === false) { 4987 event.preventDefault(); 4988 event.stopPropagation(); 4989 } 4990 } 4991 } 4992 } 4993 } 4994 4995 // Call the postDispatch hook for the mapped type 4996 if (special.postDispatch) { 4997 special.postDispatch.call(this, event); 4998 } 4999 return event.result; 5000 }, 5001 handlers: function handlers(event, _handlers) { 5002 var i, 5003 handleObj, 5004 sel, 5005 matchedHandlers, 5006 matchedSelectors, 5007 handlerQueue = [], 5008 delegateCount = _handlers.delegateCount, 5009 cur = event.target; 5010 5011 // Find delegate handlers 5012 if (delegateCount && 5013 // Support: IE <=9 5014 // Black-hole SVG <use> instance trees (trac-13180) 5015 cur.nodeType && 5016 // Support: Firefox <=42 5017 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 5018 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 5019 // Support: IE 11 only 5020 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 5021 !(event.type === "click" && event.button >= 1)) { 5022 for (; cur !== this; cur = cur.parentNode || this) { 5023 // Don't check non-elements (trac-13208) 5024 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 5025 if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) { 5026 matchedHandlers = []; 5027 matchedSelectors = {}; 5028 for (i = 0; i < delegateCount; i++) { 5029 handleObj = _handlers[i]; 5030 5031 // Don't conflict with Object.prototype properties (trac-13203) 5032 sel = handleObj.selector + " "; 5033 if (matchedSelectors[sel] === undefined) { 5034 matchedSelectors[sel] = handleObj.needsContext ? _jQuery2(sel, this).index(cur) > -1 : _jQuery2.find(sel, this, null, [cur]).length; 5035 } 5036 if (matchedSelectors[sel]) { 5037 matchedHandlers.push(handleObj); 5038 } 5039 } 5040 if (matchedHandlers.length) { 5041 handlerQueue.push({ 5042 elem: cur, 5043 handlers: matchedHandlers 5044 }); 5045 } 5046 } 5047 } 5048 } 5049 5050 // Add the remaining (directly-bound) handlers 5051 cur = this; 5052 if (delegateCount < _handlers.length) { 5053 handlerQueue.push({ 5054 elem: cur, 5055 handlers: _handlers.slice(delegateCount) 5056 }); 5057 } 5058 return handlerQueue; 5059 }, 5060 addProp: function addProp(name, hook) { 5061 Object.defineProperty(_jQuery2.Event.prototype, name, { 5062 enumerable: true, 5063 configurable: true, 5064 get: isFunction(hook) ? function () { 5065 if (this.originalEvent) { 5066 return hook(this.originalEvent); 5067 } 5068 } : function () { 5069 if (this.originalEvent) { 5070 return this.originalEvent[name]; 5071 } 5072 }, 5073 set: function set(value) { 5074 Object.defineProperty(this, name, { 5075 enumerable: true, 5076 configurable: true, 5077 writable: true, 5078 value: value 5079 }); 5080 } 5081 }); 5082 }, 5083 fix: function fix(originalEvent) { 5084 return originalEvent[_jQuery2.expando] ? originalEvent : new _jQuery2.Event(originalEvent); 5085 }, 5086 special: { 5087 load: { 5088 // Prevent triggered image.load events from bubbling to window.load 5089 noBubble: true 5090 }, 5091 click: { 5092 // Utilize native event to ensure correct state for checkable inputs 5093 setup: function setup(data) { 5094 // For mutual compressibility with _default, replace `this` access with a local var. 5095 // `|| data` is dead code meant only to preserve the variable through minification. 5096 var el = this || data; 5097 5098 // Claim the first handler 5099 if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) { 5100 // dataPriv.set( el, "click", ... ) 5101 leverageNative(el, "click", true); 5102 } 5103 5104 // Return false to allow normal processing in the caller 5105 return false; 5106 }, 5107 trigger: function trigger(data) { 5108 // For mutual compressibility with _default, replace `this` access with a local var. 5109 // `|| data` is dead code meant only to preserve the variable through minification. 5110 var el = this || data; 5111 5112 // Force setup before triggering a click 5113 if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) { 5114 leverageNative(el, "click"); 5115 } 5116 5117 // Return non-false to allow normal event-path propagation 5118 return true; 5119 }, 5120 // For cross-browser consistency, suppress native .click() on links 5121 // Also prevent it if we're currently inside a leveraged native-event stack 5122 _default: function _default(event) { 5123 var target = event.target; 5124 return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a"); 5125 } 5126 }, 5127 beforeunload: { 5128 postDispatch: function postDispatch(event) { 5129 // Support: Firefox 20+ 5130 // Firefox doesn't alert if the returnValue field is not set. 5131 if (event.result !== undefined && event.originalEvent) { 5132 event.originalEvent.returnValue = event.result; 5133 } 5134 } 5135 } 5136 } 5137 }; 5138 5139 // Ensure the presence of an event listener that handles manually-triggered 5140 // synthetic events by interrupting progress until reinvoked in response to 5141 // *native* events that it fires directly, ensuring that state changes have 5142 // already occurred before other listeners are invoked. 5143 function leverageNative(el, type, isSetup) { 5144 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 5145 if (!isSetup) { 5146 if (dataPriv.get(el, type) === undefined) { 5147 _jQuery2.event.add(el, type, returnTrue); 5148 } 5149 return; 5150 } 5151 5152 // Register the controller as a special universal handler for all event namespaces 5153 dataPriv.set(el, type, false); 5154 _jQuery2.event.add(el, type, { 5155 namespace: false, 5156 handler: function handler(event) { 5157 var result, 5158 saved = dataPriv.get(this, type); 5159 if (event.isTrigger & 1 && this[type]) { 5160 // Interrupt processing of the outer synthetic .trigger()ed event 5161 if (!saved) { 5162 // Store arguments for use when handling the inner native event 5163 // There will always be at least one argument (an event object), so this array 5164 // will not be confused with a leftover capture object. 5165 saved = _slice.call(arguments); 5166 dataPriv.set(this, type, saved); 5167 5168 // Trigger the native event and capture its result 5169 this[type](); 5170 result = dataPriv.get(this, type); 5171 dataPriv.set(this, type, false); 5172 if (saved !== result) { 5173 // Cancel the outer synthetic event 5174 event.stopImmediatePropagation(); 5175 event.preventDefault(); 5176 return result; 5177 } 5178 5179 // If this is an inner synthetic event for an event with a bubbling surrogate 5180 // (focus or blur), assume that the surrogate already propagated from triggering 5181 // the native event and prevent that from happening again here. 5182 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 5183 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 5184 // less bad than duplication. 5185 } else if ((_jQuery2.event.special[type] || {}).delegateType) { 5186 event.stopPropagation(); 5187 } 5188 5189 // If this is a native event triggered above, everything is now in order 5190 // Fire an inner synthetic event with the original arguments 5191 } else if (saved) { 5192 // ...and capture the result 5193 dataPriv.set(this, type, _jQuery2.event.trigger(saved[0], saved.slice(1), this)); 5194 5195 // Abort handling of the native event by all jQuery handlers while allowing 5196 // native handlers on the same element to run. On target, this is achieved 5197 // by stopping immediate propagation just on the jQuery event. However, 5198 // the native event is re-wrapped by a jQuery one on each level of the 5199 // propagation so the only way to stop it for jQuery is to stop it for 5200 // everyone via native `stopPropagation()`. This is not a problem for 5201 // focus/blur which don't bubble, but it does also stop click on checkboxes 5202 // and radios. We accept this limitation. 5203 event.stopPropagation(); 5204 event.isImmediatePropagationStopped = returnTrue; 5205 } 5206 } 5207 }); 5208 } 5209 _jQuery2.removeEvent = function (elem, type, handle) { 5210 // This "if" is needed for plain objects 5211 if (elem.removeEventListener) { 5212 elem.removeEventListener(type, handle); 5213 } 5214 }; 5215 _jQuery2.Event = function (src, props) { 5216 // Allow instantiation without the 'new' keyword 5217 if (!(this instanceof _jQuery2.Event)) { 5218 return new _jQuery2.Event(src, props); 5219 } 5220 5221 // Event object 5222 if (src && src.type) { 5223 this.originalEvent = src; 5224 this.type = src.type; 5225 5226 // Events bubbling up the document may have been marked as prevented 5227 // by a handler lower down the tree; reflect the correct value. 5228 this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && 5229 // Support: Android <=2.3 only 5230 src.returnValue === false ? returnTrue : returnFalse; 5231 5232 // Create target properties 5233 // Support: Safari <=6 - 7 only 5234 // Target should not be a text node (trac-504, trac-13143) 5235 this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target; 5236 this.currentTarget = src.currentTarget; 5237 this.relatedTarget = src.relatedTarget; 5238 5239 // Event type 5240 } else { 5241 this.type = src; 5242 } 5243 5244 // Put explicitly provided properties onto the event object 5245 if (props) { 5246 _jQuery2.extend(this, props); 5247 } 5248 5249 // Create a timestamp if incoming event doesn't have one 5250 this.timeStamp = src && src.timeStamp || Date.now(); 5251 5252 // Mark it as fixed 5253 this[_jQuery2.expando] = true; 5254 }; 5255 5256 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 5257 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 5258 _jQuery2.Event.prototype = { 5259 constructor: _jQuery2.Event, 5260 isDefaultPrevented: returnFalse, 5261 isPropagationStopped: returnFalse, 5262 isImmediatePropagationStopped: returnFalse, 5263 isSimulated: false, 5264 preventDefault: function preventDefault() { 5265 var e = this.originalEvent; 5266 this.isDefaultPrevented = returnTrue; 5267 if (e && !this.isSimulated) { 5268 e.preventDefault(); 5269 } 5270 }, 5271 stopPropagation: function stopPropagation() { 5272 var e = this.originalEvent; 5273 this.isPropagationStopped = returnTrue; 5274 if (e && !this.isSimulated) { 5275 e.stopPropagation(); 5276 } 5277 }, 5278 stopImmediatePropagation: function stopImmediatePropagation() { 5279 var e = this.originalEvent; 5280 this.isImmediatePropagationStopped = returnTrue; 5281 if (e && !this.isSimulated) { 5282 e.stopImmediatePropagation(); 5283 } 5284 this.stopPropagation(); 5285 } 5286 }; 5287 5288 // Includes all common event props including KeyEvent and MouseEvent specific props 5289 _jQuery2.each({ 5290 altKey: true, 5291 bubbles: true, 5292 cancelable: true, 5293 changedTouches: true, 5294 ctrlKey: true, 5295 detail: true, 5296 eventPhase: true, 5297 metaKey: true, 5298 pageX: true, 5299 pageY: true, 5300 shiftKey: true, 5301 view: true, 5302 "char": true, 5303 code: true, 5304 charCode: true, 5305 key: true, 5306 keyCode: true, 5307 button: true, 5308 buttons: true, 5309 clientX: true, 5310 clientY: true, 5311 offsetX: true, 5312 offsetY: true, 5313 pointerId: true, 5314 pointerType: true, 5315 screenX: true, 5316 screenY: true, 5317 targetTouches: true, 5318 toElement: true, 5319 touches: true, 5320 which: true 5321 }, _jQuery2.event.addProp); 5322 _jQuery2.each({ 5323 focus: "focusin", 5324 blur: "focusout" 5325 }, function (type, delegateType) { 5326 function focusMappedHandler(nativeEvent) { 5327 if (document.documentMode) { 5328 // Support: IE 11+ 5329 // Attach a single focusin/focusout handler on the document while someone wants 5330 // focus/blur. This is because the former are synchronous in IE while the latter 5331 // are async. In other browsers, all those handlers are invoked synchronously. 5332 5333 // `handle` from private data would already wrap the event, but we need 5334 // to change the `type` here. 5335 var handle = dataPriv.get(this, "handle"), 5336 event = _jQuery2.event.fix(nativeEvent); 5337 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 5338 event.isSimulated = true; 5339 5340 // First, handle focusin/focusout 5341 handle(nativeEvent); 5342 5343 // ...then, handle focus/blur 5344 // 5345 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 5346 // invoking the handler at the lower level. 5347 if (event.target === event.currentTarget) { 5348 // The setup part calls `leverageNative`, which, in turn, calls 5349 // `jQuery.event.add`, so event handle will already have been set 5350 // by this point. 5351 handle(event); 5352 } 5353 } else { 5354 // For non-IE browsers, attach a single capturing handler on the document 5355 // while someone wants focusin/focusout. 5356 _jQuery2.event.simulate(delegateType, nativeEvent.target, _jQuery2.event.fix(nativeEvent)); 5357 } 5358 } 5359 _jQuery2.event.special[type] = { 5360 // Utilize native event if possible so blur/focus sequence is correct 5361 setup: function setup() { 5362 var attaches; 5363 5364 // Claim the first handler 5365 // dataPriv.set( this, "focus", ... ) 5366 // dataPriv.set( this, "blur", ... ) 5367 leverageNative(this, type, true); 5368 if (document.documentMode) { 5369 // Support: IE 9 - 11+ 5370 // We use the same native handler for focusin & focus (and focusout & blur) 5371 // so we need to coordinate setup & teardown parts between those events. 5372 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 5373 attaches = dataPriv.get(this, delegateType); 5374 if (!attaches) { 5375 this.addEventListener(delegateType, focusMappedHandler); 5376 } 5377 dataPriv.set(this, delegateType, (attaches || 0) + 1); 5378 } else { 5379 // Return false to allow normal processing in the caller 5380 return false; 5381 } 5382 }, 5383 trigger: function trigger() { 5384 // Force setup before trigger 5385 leverageNative(this, type); 5386 5387 // Return non-false to allow normal event-path propagation 5388 return true; 5389 }, 5390 teardown: function teardown() { 5391 var attaches; 5392 if (document.documentMode) { 5393 attaches = dataPriv.get(this, delegateType) - 1; 5394 if (!attaches) { 5395 this.removeEventListener(delegateType, focusMappedHandler); 5396 dataPriv.remove(this, delegateType); 5397 } else { 5398 dataPriv.set(this, delegateType, attaches); 5399 } 5400 } else { 5401 // Return false to indicate standard teardown should be applied 5402 return false; 5403 } 5404 }, 5405 // Suppress native focus or blur if we're currently inside 5406 // a leveraged native-event stack 5407 _default: function _default(event) { 5408 return dataPriv.get(event.target, type); 5409 }, 5410 delegateType: delegateType 5411 }; 5412 5413 // Support: Firefox <=44 5414 // Firefox doesn't have focus(in | out) events 5415 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 5416 // 5417 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 5418 // focus(in | out) events fire after focus & blur events, 5419 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 5420 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 5421 // 5422 // Support: IE 9 - 11+ 5423 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 5424 // attach a single handler for both events in IE. 5425 _jQuery2.event.special[delegateType] = { 5426 setup: function setup() { 5427 // Handle: regular nodes (via `this.ownerDocument`), window 5428 // (via `this.document`) & document (via `this`). 5429 var doc = this.ownerDocument || this.document || this, 5430 dataHolder = document.documentMode ? this : doc, 5431 attaches = dataPriv.get(dataHolder, delegateType); 5432 5433 // Support: IE 9 - 11+ 5434 // We use the same native handler for focusin & focus (and focusout & blur) 5435 // so we need to coordinate setup & teardown parts between those events. 5436 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 5437 if (!attaches) { 5438 if (document.documentMode) { 5439 this.addEventListener(delegateType, focusMappedHandler); 5440 } else { 5441 doc.addEventListener(type, focusMappedHandler, true); 5442 } 5443 } 5444 dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1); 5445 }, 5446 teardown: function teardown() { 5447 var doc = this.ownerDocument || this.document || this, 5448 dataHolder = document.documentMode ? this : doc, 5449 attaches = dataPriv.get(dataHolder, delegateType) - 1; 5450 if (!attaches) { 5451 if (document.documentMode) { 5452 this.removeEventListener(delegateType, focusMappedHandler); 5453 } else { 5454 doc.removeEventListener(type, focusMappedHandler, true); 5455 } 5456 dataPriv.remove(dataHolder, delegateType); 5457 } else { 5458 dataPriv.set(dataHolder, delegateType, attaches); 5459 } 5460 } 5461 }; 5462 }); 5463 5464 // Create mouseenter/leave events using mouseover/out and event-time checks 5465 // so that event delegation works in jQuery. 5466 // Do the same for pointerenter/pointerleave and pointerover/pointerout 5467 // 5468 // Support: Safari 7 only 5469 // Safari sends mouseenter too often; see: 5470 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258 5471 // for the description of the bug (it existed in older Chrome versions as well). 5472 _jQuery2.each({ 5473 mouseenter: "mouseover", 5474 mouseleave: "mouseout", 5475 pointerenter: "pointerover", 5476 pointerleave: "pointerout" 5477 }, function (orig, fix) { 5478 _jQuery2.event.special[orig] = { 5479 delegateType: fix, 5480 bindType: fix, 5481 handle: function handle(event) { 5482 var ret, 5483 target = this, 5484 related = event.relatedTarget, 5485 handleObj = event.handleObj; 5486 5487 // For mouseenter/leave call the handler if related is outside the target. 5488 // NB: No relatedTarget if the mouse left/entered the browser window 5489 if (!related || related !== target && !_jQuery2.contains(target, related)) { 5490 event.type = handleObj.origType; 5491 ret = handleObj.handler.apply(this, arguments); 5492 event.type = fix; 5493 } 5494 return ret; 5495 } 5496 }; 5497 }); 5498 _jQuery2.fn.extend({ 5499 on: function on(types, selector, data, fn) { 5500 return _on(this, types, selector, data, fn); 5501 }, 5502 one: function one(types, selector, data, fn) { 5503 return _on(this, types, selector, data, fn, 1); 5504 }, 5505 off: function off(types, selector, fn) { 5506 var handleObj, type; 5507 if (types && types.preventDefault && types.handleObj) { 5508 // ( event ) dispatched jQuery.Event 5509 handleObj = types.handleObj; 5510 _jQuery2(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler); 5511 return this; 5512 } 5513 if (_typeof(types) === "object") { 5514 // ( types-object [, selector] ) 5515 for (type in types) { 5516 this.off(type, selector, types[type]); 5517 } 5518 return this; 5519 } 5520 if (selector === false || typeof selector === "function") { 5521 // ( types [, fn] ) 5522 fn = selector; 5523 selector = undefined; 5524 } 5525 if (fn === false) { 5526 fn = returnFalse; 5527 } 5528 return this.each(function () { 5529 _jQuery2.event.remove(this, types, fn, selector); 5530 }); 5531 } 5532 }); 5533 var 5534 // Support: IE <=10 - 11, Edge 12 - 13 only 5535 // In IE/Edge using regex groups here causes severe slowdowns. 5536 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 5537 rnoInnerhtml = /<script|<style|<link/i, 5538 // checked="checked" or checked 5539 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5540 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 5541 5542 // Prefer a tbody over its parent table for containing new rows 5543 function manipulationTarget(elem, content) { 5544 if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) { 5545 return _jQuery2(elem).children("tbody")[0] || elem; 5546 } 5547 return elem; 5548 } 5549 5550 // Replace/restore the type attribute of script elements for safe DOM manipulation 5551 function disableScript(elem) { 5552 elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; 5553 return elem; 5554 } 5555 function restoreScript(elem) { 5556 if ((elem.type || "").slice(0, 5) === "true/") { 5557 elem.type = elem.type.slice(5); 5558 } else { 5559 elem.removeAttribute("type"); 5560 } 5561 return elem; 5562 } 5563 function cloneCopyEvent(src, dest) { 5564 var i, l, type, pdataOld, udataOld, udataCur, events; 5565 if (dest.nodeType !== 1) { 5566 return; 5567 } 5568 5569 // 1. Copy private data: events, handlers, etc. 5570 if (dataPriv.hasData(src)) { 5571 pdataOld = dataPriv.get(src); 5572 events = pdataOld.events; 5573 if (events) { 5574 dataPriv.remove(dest, "handle events"); 5575 for (type in events) { 5576 for (i = 0, l = events[type].length; i < l; i++) { 5577 _jQuery2.event.add(dest, type, events[type][i]); 5578 } 5579 } 5580 } 5581 } 5582 5583 // 2. Copy user data 5584 if (dataUser.hasData(src)) { 5585 udataOld = dataUser.access(src); 5586 udataCur = _jQuery2.extend({}, udataOld); 5587 dataUser.set(dest, udataCur); 5588 } 5589 } 5590 5591 // Fix IE bugs, see support tests 5592 function fixInput(src, dest) { 5593 var nodeName = dest.nodeName.toLowerCase(); 5594 5595 // Fails to persist the checked state of a cloned checkbox or radio button. 5596 if (nodeName === "input" && rcheckableType.test(src.type)) { 5597 dest.checked = src.checked; 5598 5599 // Fails to return the selected option to the default selected state when cloning options 5600 } else if (nodeName === "input" || nodeName === "textarea") { 5601 dest.defaultValue = src.defaultValue; 5602 } 5603 } 5604 function domManip(collection, args, callback, ignored) { 5605 // Flatten any nested arrays 5606 args = flat(args); 5607 var fragment, 5608 first, 5609 scripts, 5610 hasScripts, 5611 node, 5612 doc, 5613 i = 0, 5614 l = collection.length, 5615 iNoClone = l - 1, 5616 value = args[0], 5617 valueIsFunction = isFunction(value); 5618 5619 // We can't cloneNode fragments that contain checked, in WebKit 5620 if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) { 5621 return collection.each(function (index) { 5622 var self = collection.eq(index); 5623 if (valueIsFunction) { 5624 args[0] = value.call(this, index, self.html()); 5625 } 5626 domManip(self, args, callback, ignored); 5627 }); 5628 } 5629 if (l) { 5630 fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored); 5631 first = fragment.firstChild; 5632 if (fragment.childNodes.length === 1) { 5633 fragment = first; 5634 } 5635 5636 // Require either new content or an interest in ignored elements to invoke the callback 5637 if (first || ignored) { 5638 scripts = _jQuery2.map(getAll(fragment, "script"), disableScript); 5639 hasScripts = scripts.length; 5640 5641 // Use the original fragment for the last item 5642 // instead of the first because it can end up 5643 // being emptied incorrectly in certain situations (trac-8070). 5644 for (; i < l; i++) { 5645 node = fragment; 5646 if (i !== iNoClone) { 5647 node = _jQuery2.clone(node, true, true); 5648 5649 // Keep references to cloned scripts for later restoration 5650 if (hasScripts) { 5651 // Support: Android <=4.0 only, PhantomJS 1 only 5652 // push.apply(_, arraylike) throws on ancient WebKit 5653 _jQuery2.merge(scripts, getAll(node, "script")); 5654 } 5655 } 5656 callback.call(collection[i], node, i); 5657 } 5658 if (hasScripts) { 5659 doc = scripts[scripts.length - 1].ownerDocument; 5660 5661 // Re-enable scripts 5662 _jQuery2.map(scripts, restoreScript); 5663 5664 // Evaluate executable scripts on first document insertion 5665 for (i = 0; i < hasScripts; i++) { 5666 node = scripts[i]; 5667 if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && _jQuery2.contains(doc, node)) { 5668 if (node.src && (node.type || "").toLowerCase() !== "module") { 5669 // Optional AJAX dependency, but won't run scripts if not present 5670 if (_jQuery2._evalUrl && !node.noModule) { 5671 _jQuery2._evalUrl(node.src, { 5672 nonce: node.nonce || node.getAttribute("nonce") 5673 }, doc); 5674 } 5675 } else { 5676 // Unwrap a CDATA section containing script contents. This shouldn't be 5677 // needed as in XML documents they're already not visible when 5678 // inspecting element contents and in HTML documents they have no 5679 // meaning but we're preserving that logic for backwards compatibility. 5680 // This will be removed completely in 4.0. See gh-4904. 5681 DOMEval(node.textContent.replace(rcleanScript, ""), node, doc); 5682 } 5683 } 5684 } 5685 } 5686 } 5687 } 5688 return collection; 5689 } 5690 function _remove(elem, selector, keepData) { 5691 var node, 5692 nodes = selector ? _jQuery2.filter(selector, elem) : elem, 5693 i = 0; 5694 for (; (node = nodes[i]) != null; i++) { 5695 if (!keepData && node.nodeType === 1) { 5696 _jQuery2.cleanData(getAll(node)); 5697 } 5698 if (node.parentNode) { 5699 if (keepData && isAttached(node)) { 5700 setGlobalEval(getAll(node, "script")); 5701 } 5702 node.parentNode.removeChild(node); 5703 } 5704 } 5705 return elem; 5706 } 5707 _jQuery2.extend({ 5708 htmlPrefilter: function htmlPrefilter(html) { 5709 return html; 5710 }, 5711 clone: function clone(elem, dataAndEvents, deepDataAndEvents) { 5712 var i, 5713 l, 5714 srcElements, 5715 destElements, 5716 clone = elem.cloneNode(true), 5717 inPage = isAttached(elem); 5718 5719 // Fix IE cloning issues 5720 if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !_jQuery2.isXMLDoc(elem)) { 5721 // We eschew jQuery#find here for performance reasons: 5722 // https://jsperf.com/getall-vs-sizzle/2 5723 destElements = getAll(clone); 5724 srcElements = getAll(elem); 5725 for (i = 0, l = srcElements.length; i < l; i++) { 5726 fixInput(srcElements[i], destElements[i]); 5727 } 5728 } 5729 5730 // Copy the events from the original to the clone 5731 if (dataAndEvents) { 5732 if (deepDataAndEvents) { 5733 srcElements = srcElements || getAll(elem); 5734 destElements = destElements || getAll(clone); 5735 for (i = 0, l = srcElements.length; i < l; i++) { 5736 cloneCopyEvent(srcElements[i], destElements[i]); 5737 } 5738 } else { 5739 cloneCopyEvent(elem, clone); 5740 } 5741 } 5742 5743 // Preserve script evaluation history 5744 destElements = getAll(clone, "script"); 5745 if (destElements.length > 0) { 5746 setGlobalEval(destElements, !inPage && getAll(elem, "script")); 5747 } 5748 5749 // Return the cloned set 5750 return clone; 5751 }, 5752 cleanData: function cleanData(elems) { 5753 var data, 5754 elem, 5755 type, 5756 special = _jQuery2.event.special, 5757 i = 0; 5758 for (; (elem = elems[i]) !== undefined; i++) { 5759 if (acceptData(elem)) { 5760 if (data = elem[dataPriv.expando]) { 5761 if (data.events) { 5762 for (type in data.events) { 5763 if (special[type]) { 5764 _jQuery2.event.remove(elem, type); 5765 5766 // This is a shortcut to avoid jQuery.event.remove's overhead 5767 } else { 5768 _jQuery2.removeEvent(elem, type, data.handle); 5769 } 5770 } 5771 } 5772 5773 // Support: Chrome <=35 - 45+ 5774 // Assign undefined instead of using delete, see Data#remove 5775 elem[dataPriv.expando] = undefined; 5776 } 5777 if (elem[dataUser.expando]) { 5778 // Support: Chrome <=35 - 45+ 5779 // Assign undefined instead of using delete, see Data#remove 5780 elem[dataUser.expando] = undefined; 5781 } 5782 } 5783 } 5784 } 5785 }); 5786 _jQuery2.fn.extend({ 5787 detach: function detach(selector) { 5788 return _remove(this, selector, true); 5789 }, 5790 remove: function remove(selector) { 5791 return _remove(this, selector); 5792 }, 5793 text: function text(value) { 5794 return _access(this, function (value) { 5795 return value === undefined ? _jQuery2.text(this) : this.empty().each(function () { 5796 if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { 5797 this.textContent = value; 5798 } 5799 }); 5800 }, null, value, arguments.length); 5801 }, 5802 append: function append() { 5803 return domManip(this, arguments, function (elem) { 5804 if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { 5805 var target = manipulationTarget(this, elem); 5806 target.appendChild(elem); 5807 } 5808 }); 5809 }, 5810 prepend: function prepend() { 5811 return domManip(this, arguments, function (elem) { 5812 if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { 5813 var target = manipulationTarget(this, elem); 5814 target.insertBefore(elem, target.firstChild); 5815 } 5816 }); 5817 }, 5818 before: function before() { 5819 return domManip(this, arguments, function (elem) { 5820 if (this.parentNode) { 5821 this.parentNode.insertBefore(elem, this); 5822 } 5823 }); 5824 }, 5825 after: function after() { 5826 return domManip(this, arguments, function (elem) { 5827 if (this.parentNode) { 5828 this.parentNode.insertBefore(elem, this.nextSibling); 5829 } 5830 }); 5831 }, 5832 empty: function empty() { 5833 var elem, 5834 i = 0; 5835 for (; (elem = this[i]) != null; i++) { 5836 if (elem.nodeType === 1) { 5837 // Prevent memory leaks 5838 _jQuery2.cleanData(getAll(elem, false)); 5839 5840 // Remove any remaining nodes 5841 elem.textContent = ""; 5842 } 5843 } 5844 return this; 5845 }, 5846 clone: function clone(dataAndEvents, deepDataAndEvents) { 5847 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 5848 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 5849 return this.map(function () { 5850 return _jQuery2.clone(this, dataAndEvents, deepDataAndEvents); 5851 }); 5852 }, 5853 html: function html(value) { 5854 return _access(this, function (value) { 5855 var elem = this[0] || {}, 5856 i = 0, 5857 l = this.length; 5858 if (value === undefined && elem.nodeType === 1) { 5859 return elem.innerHTML; 5860 } 5861 5862 // See if we can take a shortcut and just use innerHTML 5863 if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { 5864 value = _jQuery2.htmlPrefilter(value); 5865 try { 5866 for (; i < l; i++) { 5867 elem = this[i] || {}; 5868 5869 // Remove element nodes and prevent memory leaks 5870 if (elem.nodeType === 1) { 5871 _jQuery2.cleanData(getAll(elem, false)); 5872 elem.innerHTML = value; 5873 } 5874 } 5875 elem = 0; 5876 5877 // If using innerHTML throws an exception, use the fallback method 5878 } catch (e) {} 5879 } 5880 if (elem) { 5881 this.empty().append(value); 5882 } 5883 }, null, value, arguments.length); 5884 }, 5885 replaceWith: function replaceWith() { 5886 var ignored = []; 5887 5888 // Make the changes, replacing each non-ignored context element with the new content 5889 return domManip(this, arguments, function (elem) { 5890 var parent = this.parentNode; 5891 if (_jQuery2.inArray(this, ignored) < 0) { 5892 _jQuery2.cleanData(getAll(this)); 5893 if (parent) { 5894 parent.replaceChild(elem, this); 5895 } 5896 } 5897 5898 // Force callback invocation 5899 }, ignored); 5900 } 5901 }); 5902 _jQuery2.each({ 5903 appendTo: "append", 5904 prependTo: "prepend", 5905 insertBefore: "before", 5906 insertAfter: "after", 5907 replaceAll: "replaceWith" 5908 }, function (name, original) { 5909 _jQuery2.fn[name] = function (selector) { 5910 var elems, 5911 ret = [], 5912 insert = _jQuery2(selector), 5913 last = insert.length - 1, 5914 i = 0; 5915 for (; i <= last; i++) { 5916 elems = i === last ? this : this.clone(true); 5917 _jQuery2(insert[i])[original](elems); 5918 5919 // Support: Android <=4.0 only, PhantomJS 1 only 5920 // .get() because push.apply(_, arraylike) throws on ancient WebKit 5921 push.apply(ret, elems.get()); 5922 } 5923 return this.pushStack(ret); 5924 }; 5925 }); 5926 var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i"); 5927 var rcustomProp = /^--/; 5928 var getStyles = function getStyles(elem) { 5929 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 5930 // IE throws on elements created in popups 5931 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 5932 var view = elem.ownerDocument.defaultView; 5933 if (!view || !view.opener) { 5934 view = window; 5935 } 5936 return view.getComputedStyle(elem); 5937 }; 5938 var swap = function swap(elem, options, callback) { 5939 var ret, 5940 name, 5941 old = {}; 5942 5943 // Remember the old values, and insert the new ones 5944 for (name in options) { 5945 old[name] = elem.style[name]; 5946 elem.style[name] = options[name]; 5947 } 5948 ret = callback.call(elem); 5949 5950 // Revert the old values 5951 for (name in options) { 5952 elem.style[name] = old[name]; 5953 } 5954 return ret; 5955 }; 5956 var rboxStyle = new RegExp(cssExpand.join("|"), "i"); 5957 (function () { 5958 // Executing both pixelPosition & boxSizingReliable tests require only one layout 5959 // so they're executed at the same time to save the second computation. 5960 function computeStyleTests() { 5961 // This is a singleton, we need to execute it only once 5962 if (!div) { 5963 return; 5964 } 5965 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0"; 5966 div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%"; 5967 documentElement.appendChild(container).appendChild(div); 5968 var divStyle = window.getComputedStyle(div); 5969 pixelPositionVal = divStyle.top !== "1%"; 5970 5971 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 5972 reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; 5973 5974 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 5975 // Some styles come back with percentage values, even though they shouldn't 5976 div.style.right = "60%"; 5977 pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; 5978 5979 // Support: IE 9 - 11 only 5980 // Detect misreporting of content dimensions for box-sizing:border-box elements 5981 boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; 5982 5983 // Support: IE 9 only 5984 // Detect overflow:scroll screwiness (gh-3699) 5985 // Support: Chrome <=64 5986 // Don't get tricked when zoom affects offsetWidth (gh-4029) 5987 div.style.position = "absolute"; 5988 scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12; 5989 documentElement.removeChild(container); 5990 5991 // Nullify the div so it wouldn't be stored in the memory and 5992 // it will also be a sign that checks already performed 5993 div = null; 5994 } 5995 function roundPixelMeasures(measure) { 5996 return Math.round(parseFloat(measure)); 5997 } 5998 var pixelPositionVal, 5999 boxSizingReliableVal, 6000 scrollboxSizeVal, 6001 pixelBoxStylesVal, 6002 reliableTrDimensionsVal, 6003 reliableMarginLeftVal, 6004 container = document.createElement("div"), 6005 div = document.createElement("div"); 6006 6007 // Finish early in limited (non-browser) environments 6008 if (!div.style) { 6009 return; 6010 } 6011 6012 // Support: IE <=9 - 11 only 6013 // Style of cloned element affects source element cloned (trac-8908) 6014 div.style.backgroundClip = "content-box"; 6015 div.cloneNode(true).style.backgroundClip = ""; 6016 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 6017 _jQuery2.extend(support, { 6018 boxSizingReliable: function boxSizingReliable() { 6019 computeStyleTests(); 6020 return boxSizingReliableVal; 6021 }, 6022 pixelBoxStyles: function pixelBoxStyles() { 6023 computeStyleTests(); 6024 return pixelBoxStylesVal; 6025 }, 6026 pixelPosition: function pixelPosition() { 6027 computeStyleTests(); 6028 return pixelPositionVal; 6029 }, 6030 reliableMarginLeft: function reliableMarginLeft() { 6031 computeStyleTests(); 6032 return reliableMarginLeftVal; 6033 }, 6034 scrollboxSize: function scrollboxSize() { 6035 computeStyleTests(); 6036 return scrollboxSizeVal; 6037 }, 6038 // Support: IE 9 - 11+, Edge 15 - 18+ 6039 // IE/Edge misreport `getComputedStyle` of table rows with width/height 6040 // set in CSS while `offset*` properties report correct values. 6041 // Behavior in IE 9 is more subtle than in newer versions & it passes 6042 // some versions of this test; make sure not to make it pass there! 6043 // 6044 // Support: Firefox 70+ 6045 // Only Firefox includes border widths 6046 // in computed dimensions. (gh-4529) 6047 reliableTrDimensions: function reliableTrDimensions() { 6048 var table, tr, trChild, trStyle; 6049 if (reliableTrDimensionsVal == null) { 6050 table = document.createElement("table"); 6051 tr = document.createElement("tr"); 6052 trChild = document.createElement("div"); 6053 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 6054 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 6055 6056 // Support: Chrome 86+ 6057 // Height set through cssText does not get applied. 6058 // Computed height then comes back as 0. 6059 tr.style.height = "1px"; 6060 trChild.style.height = "9px"; 6061 6062 // Support: Android 8 Chrome 86+ 6063 // In our bodyBackground.html iframe, 6064 // display for all div elements is set to "inline", 6065 // which causes a problem only in Android 8 Chrome 86. 6066 // Ensuring the div is `display: block` 6067 // gets around this issue. 6068 trChild.style.display = "block"; 6069 documentElement.appendChild(table).appendChild(tr).appendChild(trChild); 6070 trStyle = window.getComputedStyle(tr); 6071 reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight; 6072 documentElement.removeChild(table); 6073 } 6074 return reliableTrDimensionsVal; 6075 } 6076 }); 6077 })(); 6078 function curCSS(elem, name, computed) { 6079 var width, 6080 minWidth, 6081 maxWidth, 6082 ret, 6083 isCustomProp = rcustomProp.test(name), 6084 // Support: Firefox 51+ 6085 // Retrieving style before computed somehow 6086 // fixes an issue with getting wrong values 6087 // on detached elements 6088 style = elem.style; 6089 computed = computed || getStyles(elem); 6090 6091 // getPropertyValue is needed for: 6092 // .css('filter') (IE 9 only, trac-12537) 6093 // .css('--customProperty) (gh-3144) 6094 if (computed) { 6095 // Support: IE <=9 - 11+ 6096 // IE only supports `"float"` in `getPropertyValue`; in computed styles 6097 // it's only available as `"cssFloat"`. We no longer modify properties 6098 // sent to `.css()` apart from camelCasing, so we need to check both. 6099 // Normally, this would create difference in behavior: if 6100 // `getPropertyValue` returns an empty string, the value returned 6101 // by `.css()` would be `undefined`. This is usually the case for 6102 // disconnected elements. However, in IE even disconnected elements 6103 // with no styles return `"none"` for `getPropertyValue( "float" )` 6104 ret = computed.getPropertyValue(name) || computed[name]; 6105 if (isCustomProp && ret) { 6106 // Support: Firefox 105+, Chrome <=105+ 6107 // Spec requires trimming whitespace for custom properties (gh-4926). 6108 // Firefox only trims leading whitespace. Chrome just collapses 6109 // both leading & trailing whitespace to a single space. 6110 // 6111 // Fall back to `undefined` if empty string returned. 6112 // This collapses a missing definition with property defined 6113 // and set to an empty string but there's no standard API 6114 // allowing us to differentiate them without a performance penalty 6115 // and returning `undefined` aligns with older jQuery. 6116 // 6117 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 6118 // as whitespace while CSS does not, but this is not a problem 6119 // because CSS preprocessing replaces them with U+000A LINE FEED 6120 // (which *is* CSS whitespace) 6121 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 6122 ret = ret.replace(rtrimCSS, "$1") || undefined; 6123 } 6124 if (ret === "" && !isAttached(elem)) { 6125 ret = _jQuery2.style(elem, name); 6126 } 6127 6128 // A tribute to the "awesome hack by Dean Edwards" 6129 // Android Browser returns percentage for some values, 6130 // but width seems to be reliably pixels. 6131 // This is against the CSSOM draft spec: 6132 // https://drafts.csswg.org/cssom/#resolved-values 6133 if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) { 6134 // Remember the original values 6135 width = style.width; 6136 minWidth = style.minWidth; 6137 maxWidth = style.maxWidth; 6138 6139 // Put in the new values to get a computed value out 6140 style.minWidth = style.maxWidth = style.width = ret; 6141 ret = computed.width; 6142 6143 // Revert the changed values 6144 style.width = width; 6145 style.minWidth = minWidth; 6146 style.maxWidth = maxWidth; 6147 } 6148 } 6149 return ret !== undefined ? 6150 // Support: IE <=9 - 11 only 6151 // IE returns zIndex value as an integer. 6152 ret + "" : ret; 6153 } 6154 function addGetHookIf(conditionFn, hookFn) { 6155 // Define the hook, we'll check on the first run if it's really needed. 6156 return { 6157 get: function get() { 6158 if (conditionFn()) { 6159 // Hook not needed (or it's not possible to use it due 6160 // to missing dependency), remove it. 6161 delete this.get; 6162 return; 6163 } 6164 6165 // Hook needed; redefine it so that the support test is not executed again. 6166 return (this.get = hookFn).apply(this, arguments); 6167 } 6168 }; 6169 } 6170 var cssPrefixes = ["Webkit", "Moz", "ms"], 6171 emptyStyle = document.createElement("div").style, 6172 vendorProps = {}; 6173 6174 // Return a vendor-prefixed property or undefined 6175 function vendorPropName(name) { 6176 // Check for vendor prefixed names 6177 var capName = name[0].toUpperCase() + name.slice(1), 6178 i = cssPrefixes.length; 6179 while (i--) { 6180 name = cssPrefixes[i] + capName; 6181 if (name in emptyStyle) { 6182 return name; 6183 } 6184 } 6185 } 6186 6187 // Return a potentially-mapped jQuery.cssProps or vendor prefixed property 6188 function finalPropName(name) { 6189 var _final = _jQuery2.cssProps[name] || vendorProps[name]; 6190 if (_final) { 6191 return _final; 6192 } 6193 if (name in emptyStyle) { 6194 return name; 6195 } 6196 return vendorProps[name] = vendorPropName(name) || name; 6197 } 6198 var 6199 // Swappable if display is none or starts with table 6200 // except "table", "table-cell", or "table-caption" 6201 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 6202 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 6203 cssShow = { 6204 position: "absolute", 6205 visibility: "hidden", 6206 display: "block" 6207 }, 6208 cssNormalTransform = { 6209 letterSpacing: "0", 6210 fontWeight: "400" 6211 }; 6212 function setPositiveNumber(_elem, value, subtract) { 6213 // Any relative (+/-) values have already been 6214 // normalized at this point 6215 var matches = rcssNum.exec(value); 6216 return matches ? 6217 // Guard against undefined "subtract", e.g., when used as in cssHooks 6218 Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value; 6219 } 6220 function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) { 6221 var i = dimension === "width" ? 1 : 0, 6222 extra = 0, 6223 delta = 0, 6224 marginDelta = 0; 6225 6226 // Adjustment may not be necessary 6227 if (box === (isBorderBox ? "border" : "content")) { 6228 return 0; 6229 } 6230 for (; i < 4; i += 2) { 6231 // Both box models exclude margin 6232 // Count margin delta separately to only add it after scroll gutter adjustment. 6233 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 6234 if (box === "margin") { 6235 marginDelta += _jQuery2.css(elem, box + cssExpand[i], true, styles); 6236 } 6237 6238 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 6239 if (!isBorderBox) { 6240 // Add padding 6241 delta += _jQuery2.css(elem, "padding" + cssExpand[i], true, styles); 6242 6243 // For "border" or "margin", add border 6244 if (box !== "padding") { 6245 delta += _jQuery2.css(elem, "border" + cssExpand[i] + "Width", true, styles); 6246 6247 // But still keep track of it otherwise 6248 } else { 6249 extra += _jQuery2.css(elem, "border" + cssExpand[i] + "Width", true, styles); 6250 } 6251 6252 // If we get here with a border-box (content + padding + border), we're seeking "content" or 6253 // "padding" or "margin" 6254 } else { 6255 // For "content", subtract padding 6256 if (box === "content") { 6257 delta -= _jQuery2.css(elem, "padding" + cssExpand[i], true, styles); 6258 } 6259 6260 // For "content" or "padding", subtract border 6261 if (box !== "margin") { 6262 delta -= _jQuery2.css(elem, "border" + cssExpand[i] + "Width", true, styles); 6263 } 6264 } 6265 } 6266 6267 // Account for positive content-box scroll gutter when requested by providing computedVal 6268 if (!isBorderBox && computedVal >= 0) { 6269 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 6270 // Assuming integer scroll gutter, subtract the rest and round down 6271 delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 6272 6273 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 6274 // Use an explicit zero to avoid NaN (gh-3964) 6275 )) || 0; 6276 } 6277 return delta + marginDelta; 6278 } 6279 function getWidthOrHeight(elem, dimension, extra) { 6280 // Start with computed style 6281 var styles = getStyles(elem), 6282 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 6283 // Fake content-box until we know it's needed to know the true value. 6284 boxSizingNeeded = !support.boxSizingReliable() || extra, 6285 isBorderBox = boxSizingNeeded && _jQuery2.css(elem, "boxSizing", false, styles) === "border-box", 6286 valueIsBorderBox = isBorderBox, 6287 val = curCSS(elem, dimension, styles), 6288 offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1); 6289 6290 // Support: Firefox <=54 6291 // Return a confounding non-pixel value or feign ignorance, as appropriate. 6292 if (rnumnonpx.test(val)) { 6293 if (!extra) { 6294 return val; 6295 } 6296 val = "auto"; 6297 } 6298 6299 // Support: IE 9 - 11 only 6300 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 6301 // In those cases, the computed value can be trusted to be border-box. 6302 if ((!support.boxSizingReliable() && isBorderBox || 6303 // Support: IE 10 - 11+, Edge 15 - 18+ 6304 // IE/Edge misreport `getComputedStyle` of table rows with width/height 6305 // set in CSS while `offset*` properties report correct values. 6306 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 6307 !support.reliableTrDimensions() && nodeName(elem, "tr") || 6308 // Fall back to offsetWidth/offsetHeight when value is "auto" 6309 // This happens for inline elements with no explicit setting (gh-3571) 6310 val === "auto" || 6311 // Support: Android <=4.1 - 4.3 only 6312 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 6313 !parseFloat(val) && _jQuery2.css(elem, "display", false, styles) === "inline") && 6314 // Make sure the element is visible & connected 6315 elem.getClientRects().length) { 6316 isBorderBox = _jQuery2.css(elem, "boxSizing", false, styles) === "border-box"; 6317 6318 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 6319 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 6320 // retrieved value as a content box dimension. 6321 valueIsBorderBox = offsetProp in elem; 6322 if (valueIsBorderBox) { 6323 val = elem[offsetProp]; 6324 } 6325 } 6326 6327 // Normalize "" and auto 6328 val = parseFloat(val) || 0; 6329 6330 // Adjust for the element's box model 6331 return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, 6332 // Provide the current computed size to request scroll gutter calculation (gh-3589) 6333 val) + "px"; 6334 } 6335 _jQuery2.extend({ 6336 // Add in style property hooks for overriding the default 6337 // behavior of getting and setting a style property 6338 cssHooks: { 6339 opacity: { 6340 get: function get(elem, computed) { 6341 if (computed) { 6342 // We should always get a number back from opacity 6343 var ret = curCSS(elem, "opacity"); 6344 return ret === "" ? "1" : ret; 6345 } 6346 } 6347 } 6348 }, 6349 // Don't automatically add "px" to these possibly-unitless properties 6350 cssNumber: { 6351 animationIterationCount: true, 6352 aspectRatio: true, 6353 borderImageSlice: true, 6354 columnCount: true, 6355 flexGrow: true, 6356 flexShrink: true, 6357 fontWeight: true, 6358 gridArea: true, 6359 gridColumn: true, 6360 gridColumnEnd: true, 6361 gridColumnStart: true, 6362 gridRow: true, 6363 gridRowEnd: true, 6364 gridRowStart: true, 6365 lineHeight: true, 6366 opacity: true, 6367 order: true, 6368 orphans: true, 6369 scale: true, 6370 widows: true, 6371 zIndex: true, 6372 zoom: true, 6373 // SVG-related 6374 fillOpacity: true, 6375 floodOpacity: true, 6376 stopOpacity: true, 6377 strokeMiterlimit: true, 6378 strokeOpacity: true 6379 }, 6380 // Add in properties whose names you wish to fix before 6381 // setting or getting the value 6382 cssProps: {}, 6383 // Get and set the style property on a DOM Node 6384 style: function style(elem, name, value, extra) { 6385 // Don't set styles on text and comment nodes 6386 if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { 6387 return; 6388 } 6389 6390 // Make sure that we're working with the right name 6391 var ret, 6392 type, 6393 hooks, 6394 origName = camelCase(name), 6395 isCustomProp = rcustomProp.test(name), 6396 style = elem.style; 6397 6398 // Make sure that we're working with the right name. We don't 6399 // want to query the value if it is a CSS custom property 6400 // since they are user-defined. 6401 if (!isCustomProp) { 6402 name = finalPropName(origName); 6403 } 6404 6405 // Gets hook for the prefixed version, then unprefixed version 6406 hooks = _jQuery2.cssHooks[name] || _jQuery2.cssHooks[origName]; 6407 6408 // Check if we're setting a value 6409 if (value !== undefined) { 6410 type = _typeof(value); 6411 6412 // Convert "+=" or "-=" to relative numbers (trac-7345) 6413 if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) { 6414 value = adjustCSS(elem, name, ret); 6415 6416 // Fixes bug trac-9237 6417 type = "number"; 6418 } 6419 6420 // Make sure that null and NaN values aren't set (trac-7116) 6421 if (value == null || value !== value) { 6422 return; 6423 } 6424 6425 // If a number was passed in, add the unit (except for certain CSS properties) 6426 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 6427 // "px" to a few hardcoded values. 6428 if (type === "number" && !isCustomProp) { 6429 value += ret && ret[3] || (_jQuery2.cssNumber[origName] ? "" : "px"); 6430 } 6431 6432 // background-* props affect original clone's values 6433 if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) { 6434 style[name] = "inherit"; 6435 } 6436 6437 // If a hook was provided, use that value, otherwise just set the specified value 6438 if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) { 6439 if (isCustomProp) { 6440 style.setProperty(name, value); 6441 } else { 6442 style[name] = value; 6443 } 6444 } 6445 } else { 6446 // If a hook was provided get the non-computed value from there 6447 if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { 6448 return ret; 6449 } 6450 6451 // Otherwise just get the value from the style object 6452 return style[name]; 6453 } 6454 }, 6455 css: function css(elem, name, extra, styles) { 6456 var val, 6457 num, 6458 hooks, 6459 origName = camelCase(name), 6460 isCustomProp = rcustomProp.test(name); 6461 6462 // Make sure that we're working with the right name. We don't 6463 // want to modify the value if it is a CSS custom property 6464 // since they are user-defined. 6465 if (!isCustomProp) { 6466 name = finalPropName(origName); 6467 } 6468 6469 // Try prefixed name followed by the unprefixed name 6470 hooks = _jQuery2.cssHooks[name] || _jQuery2.cssHooks[origName]; 6471 6472 // If a hook was provided get the computed value from there 6473 if (hooks && "get" in hooks) { 6474 val = hooks.get(elem, true, extra); 6475 } 6476 6477 // Otherwise, if a way to get the computed value exists, use that 6478 if (val === undefined) { 6479 val = curCSS(elem, name, styles); 6480 } 6481 6482 // Convert "normal" to computed value 6483 if (val === "normal" && name in cssNormalTransform) { 6484 val = cssNormalTransform[name]; 6485 } 6486 6487 // Make numeric if forced or a qualifier was provided and val looks numeric 6488 if (extra === "" || extra) { 6489 num = parseFloat(val); 6490 return extra === true || isFinite(num) ? num || 0 : val; 6491 } 6492 return val; 6493 } 6494 }); 6495 _jQuery2.each(["height", "width"], function (_i, dimension) { 6496 _jQuery2.cssHooks[dimension] = { 6497 get: function get(elem, computed, extra) { 6498 if (computed) { 6499 // Certain elements can have dimension info if we invisibly show them 6500 // but it must have a current display style that would benefit 6501 return rdisplayswap.test(_jQuery2.css(elem, "display")) && ( 6502 // Support: Safari 8+ 6503 // Table columns in Safari have non-zero offsetWidth & zero 6504 // getBoundingClientRect().width unless display is changed. 6505 // Support: IE <=11 only 6506 // Running getBoundingClientRect on a disconnected node 6507 // in IE throws an error. 6508 !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () { 6509 return getWidthOrHeight(elem, dimension, extra); 6510 }) : getWidthOrHeight(elem, dimension, extra); 6511 } 6512 }, 6513 set: function set(elem, value, extra) { 6514 var matches, 6515 styles = getStyles(elem), 6516 // Only read styles.position if the test has a chance to fail 6517 // to avoid forcing a reflow. 6518 scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", 6519 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 6520 boxSizingNeeded = scrollboxSizeBuggy || extra, 6521 isBorderBox = boxSizingNeeded && _jQuery2.css(elem, "boxSizing", false, styles) === "border-box", 6522 subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; 6523 6524 // Account for unreliable border-box dimensions by comparing offset* to computed and 6525 // faking a content-box to get border and padding (gh-3699) 6526 if (isBorderBox && scrollboxSizeBuggy) { 6527 subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5); 6528 } 6529 6530 // Convert to pixels if value adjustment is needed 6531 if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") { 6532 elem.style[dimension] = value; 6533 value = _jQuery2.css(elem, dimension); 6534 } 6535 return setPositiveNumber(elem, value, subtract); 6536 } 6537 }; 6538 }); 6539 _jQuery2.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) { 6540 if (computed) { 6541 return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, { 6542 marginLeft: 0 6543 }, function () { 6544 return elem.getBoundingClientRect().left; 6545 })) + "px"; 6546 } 6547 }); 6548 6549 // These hooks are used by animate to expand properties 6550 _jQuery2.each({ 6551 margin: "", 6552 padding: "", 6553 border: "Width" 6554 }, function (prefix, suffix) { 6555 _jQuery2.cssHooks[prefix + suffix] = { 6556 expand: function expand(value) { 6557 var i = 0, 6558 expanded = {}, 6559 // Assumes a single number if not a string 6560 parts = typeof value === "string" ? value.split(" ") : [value]; 6561 for (; i < 4; i++) { 6562 expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0]; 6563 } 6564 return expanded; 6565 } 6566 }; 6567 if (prefix !== "margin") { 6568 _jQuery2.cssHooks[prefix + suffix].set = setPositiveNumber; 6569 } 6570 }); 6571 _jQuery2.fn.extend({ 6572 css: function css(name, value) { 6573 return _access(this, function (elem, name, value) { 6574 var styles, 6575 len, 6576 map = {}, 6577 i = 0; 6578 if (Array.isArray(name)) { 6579 styles = getStyles(elem); 6580 len = name.length; 6581 for (; i < len; i++) { 6582 map[name[i]] = _jQuery2.css(elem, name[i], false, styles); 6583 } 6584 return map; 6585 } 6586 return value !== undefined ? _jQuery2.style(elem, name, value) : _jQuery2.css(elem, name); 6587 }, name, value, arguments.length > 1); 6588 } 6589 }); 6590 function Tween(elem, options, prop, end, easing) { 6591 return new Tween.prototype.init(elem, options, prop, end, easing); 6592 } 6593 _jQuery2.Tween = Tween; 6594 Tween.prototype = { 6595 constructor: Tween, 6596 init: function init(elem, options, prop, end, easing, unit) { 6597 this.elem = elem; 6598 this.prop = prop; 6599 this.easing = easing || _jQuery2.easing._default; 6600 this.options = options; 6601 this.start = this.now = this.cur(); 6602 this.end = end; 6603 this.unit = unit || (_jQuery2.cssNumber[prop] ? "" : "px"); 6604 }, 6605 cur: function cur() { 6606 var hooks = Tween.propHooks[this.prop]; 6607 return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this); 6608 }, 6609 run: function run(percent) { 6610 var eased, 6611 hooks = Tween.propHooks[this.prop]; 6612 if (this.options.duration) { 6613 this.pos = eased = _jQuery2.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration); 6614 } else { 6615 this.pos = eased = percent; 6616 } 6617 this.now = (this.end - this.start) * eased + this.start; 6618 if (this.options.step) { 6619 this.options.step.call(this.elem, this.now, this); 6620 } 6621 if (hooks && hooks.set) { 6622 hooks.set(this); 6623 } else { 6624 Tween.propHooks._default.set(this); 6625 } 6626 return this; 6627 } 6628 }; 6629 Tween.prototype.init.prototype = Tween.prototype; 6630 Tween.propHooks = { 6631 _default: { 6632 get: function get(tween) { 6633 var result; 6634 6635 // Use a property on the element directly when it is not a DOM element, 6636 // or when there is no matching style property that exists. 6637 if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) { 6638 return tween.elem[tween.prop]; 6639 } 6640 6641 // Passing an empty string as a 3rd parameter to .css will automatically 6642 // attempt a parseFloat and fallback to a string if the parse fails. 6643 // Simple values such as "10px" are parsed to Float; 6644 // complex values such as "rotate(1rad)" are returned as-is. 6645 result = _jQuery2.css(tween.elem, tween.prop, ""); 6646 6647 // Empty strings, null, undefined and "auto" are converted to 0. 6648 return !result || result === "auto" ? 0 : result; 6649 }, 6650 set: function set(tween) { 6651 // Use step hook for back compat. 6652 // Use cssHook if its there. 6653 // Use .style if available and use plain properties where available. 6654 if (_jQuery2.fx.step[tween.prop]) { 6655 _jQuery2.fx.step[tween.prop](tween); 6656 } else if (tween.elem.nodeType === 1 && (_jQuery2.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) { 6657 _jQuery2.style(tween.elem, tween.prop, tween.now + tween.unit); 6658 } else { 6659 tween.elem[tween.prop] = tween.now; 6660 } 6661 } 6662 } 6663 }; 6664 6665 // Support: IE <=9 only 6666 // Panic based approach to setting things on disconnected nodes 6667 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 6668 set: function set(tween) { 6669 if (tween.elem.nodeType && tween.elem.parentNode) { 6670 tween.elem[tween.prop] = tween.now; 6671 } 6672 } 6673 }; 6674 _jQuery2.easing = { 6675 linear: function linear(p) { 6676 return p; 6677 }, 6678 swing: function swing(p) { 6679 return 0.5 - Math.cos(p * Math.PI) / 2; 6680 }, 6681 _default: "swing" 6682 }; 6683 _jQuery2.fx = Tween.prototype.init; 6684 6685 // Back compat <1.8 extension point 6686 _jQuery2.fx.step = {}; 6687 var fxNow, 6688 inProgress, 6689 rfxtypes = /^(?:toggle|show|hide)$/, 6690 rrun = /queueHooks$/; 6691 function schedule() { 6692 if (inProgress) { 6693 if (document.hidden === false && window.requestAnimationFrame) { 6694 window.requestAnimationFrame(schedule); 6695 } else { 6696 window.setTimeout(schedule, _jQuery2.fx.interval); 6697 } 6698 _jQuery2.fx.tick(); 6699 } 6700 } 6701 6702 // Animations created synchronously will run synchronously 6703 function createFxNow() { 6704 window.setTimeout(function () { 6705 fxNow = undefined; 6706 }); 6707 return fxNow = Date.now(); 6708 } 6709 6710 // Generate parameters to create a standard animation 6711 function genFx(type, includeWidth) { 6712 var which, 6713 i = 0, 6714 attrs = { 6715 height: type 6716 }; 6717 6718 // If we include width, step value is 1 to do all cssExpand values, 6719 // otherwise step value is 2 to skip over Left and Right 6720 includeWidth = includeWidth ? 1 : 0; 6721 for (; i < 4; i += 2 - includeWidth) { 6722 which = cssExpand[i]; 6723 attrs["margin" + which] = attrs["padding" + which] = type; 6724 } 6725 if (includeWidth) { 6726 attrs.opacity = attrs.width = type; 6727 } 6728 return attrs; 6729 } 6730 function createTween(value, prop, animation) { 6731 var tween, 6732 collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), 6733 index = 0, 6734 length = collection.length; 6735 for (; index < length; index++) { 6736 if (tween = collection[index].call(animation, prop, value)) { 6737 // We're done with this property 6738 return tween; 6739 } 6740 } 6741 } 6742 function defaultPrefilter(elem, props, opts) { 6743 var prop, 6744 value, 6745 toggle, 6746 hooks, 6747 oldfire, 6748 propTween, 6749 restoreDisplay, 6750 display, 6751 isBox = "width" in props || "height" in props, 6752 anim = this, 6753 orig = {}, 6754 style = elem.style, 6755 hidden = elem.nodeType && isHiddenWithinTree(elem), 6756 dataShow = dataPriv.get(elem, "fxshow"); 6757 6758 // Queue-skipping animations hijack the fx hooks 6759 if (!opts.queue) { 6760 hooks = _jQuery2._queueHooks(elem, "fx"); 6761 if (hooks.unqueued == null) { 6762 hooks.unqueued = 0; 6763 oldfire = hooks.empty.fire; 6764 hooks.empty.fire = function () { 6765 if (!hooks.unqueued) { 6766 oldfire(); 6767 } 6768 }; 6769 } 6770 hooks.unqueued++; 6771 anim.always(function () { 6772 // Ensure the complete handler is called before this completes 6773 anim.always(function () { 6774 hooks.unqueued--; 6775 if (!_jQuery2.queue(elem, "fx").length) { 6776 hooks.empty.fire(); 6777 } 6778 }); 6779 }); 6780 } 6781 6782 // Detect show/hide animations 6783 for (prop in props) { 6784 value = props[prop]; 6785 if (rfxtypes.test(value)) { 6786 delete props[prop]; 6787 toggle = toggle || value === "toggle"; 6788 if (value === (hidden ? "hide" : "show")) { 6789 // Pretend to be hidden if this is a "show" and 6790 // there is still data from a stopped show/hide 6791 if (value === "show" && dataShow && dataShow[prop] !== undefined) { 6792 hidden = true; 6793 6794 // Ignore all other no-op show/hide data 6795 } else { 6796 continue; 6797 } 6798 } 6799 orig[prop] = dataShow && dataShow[prop] || _jQuery2.style(elem, prop); 6800 } 6801 } 6802 6803 // Bail out if this is a no-op like .hide().hide() 6804 propTween = !_jQuery2.isEmptyObject(props); 6805 if (!propTween && _jQuery2.isEmptyObject(orig)) { 6806 return; 6807 } 6808 6809 // Restrict "overflow" and "display" styles during box animations 6810 if (isBox && elem.nodeType === 1) { 6811 // Support: IE <=9 - 11, Edge 12 - 15 6812 // Record all 3 overflow attributes because IE does not infer the shorthand 6813 // from identically-valued overflowX and overflowY and Edge just mirrors 6814 // the overflowX value there. 6815 opts.overflow = [style.overflow, style.overflowX, style.overflowY]; 6816 6817 // Identify a display type, preferring old show/hide data over the CSS cascade 6818 restoreDisplay = dataShow && dataShow.display; 6819 if (restoreDisplay == null) { 6820 restoreDisplay = dataPriv.get(elem, "display"); 6821 } 6822 display = _jQuery2.css(elem, "display"); 6823 if (display === "none") { 6824 if (restoreDisplay) { 6825 display = restoreDisplay; 6826 } else { 6827 // Get nonempty value(s) by temporarily forcing visibility 6828 showHide([elem], true); 6829 restoreDisplay = elem.style.display || restoreDisplay; 6830 display = _jQuery2.css(elem, "display"); 6831 showHide([elem]); 6832 } 6833 } 6834 6835 // Animate inline elements as inline-block 6836 if (display === "inline" || display === "inline-block" && restoreDisplay != null) { 6837 if (_jQuery2.css(elem, "float") === "none") { 6838 // Restore the original display value at the end of pure show/hide animations 6839 if (!propTween) { 6840 anim.done(function () { 6841 style.display = restoreDisplay; 6842 }); 6843 if (restoreDisplay == null) { 6844 display = style.display; 6845 restoreDisplay = display === "none" ? "" : display; 6846 } 6847 } 6848 style.display = "inline-block"; 6849 } 6850 } 6851 } 6852 if (opts.overflow) { 6853 style.overflow = "hidden"; 6854 anim.always(function () { 6855 style.overflow = opts.overflow[0]; 6856 style.overflowX = opts.overflow[1]; 6857 style.overflowY = opts.overflow[2]; 6858 }); 6859 } 6860 6861 // Implement show/hide animations 6862 propTween = false; 6863 for (prop in orig) { 6864 // General show/hide setup for this element animation 6865 if (!propTween) { 6866 if (dataShow) { 6867 if ("hidden" in dataShow) { 6868 hidden = dataShow.hidden; 6869 } 6870 } else { 6871 dataShow = dataPriv.access(elem, "fxshow", { 6872 display: restoreDisplay 6873 }); 6874 } 6875 6876 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 6877 if (toggle) { 6878 dataShow.hidden = !hidden; 6879 } 6880 6881 // Show elements before animating them 6882 if (hidden) { 6883 showHide([elem], true); 6884 } 6885 6886 /* eslint-disable no-loop-func */ 6887 6888 anim.done(function () { 6889 /* eslint-enable no-loop-func */ 6890 6891 // The final step of a "hide" animation is actually hiding the element 6892 if (!hidden) { 6893 showHide([elem]); 6894 } 6895 dataPriv.remove(elem, "fxshow"); 6896 for (prop in orig) { 6897 _jQuery2.style(elem, prop, orig[prop]); 6898 } 6899 }); 6900 } 6901 6902 // Per-property setup 6903 propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim); 6904 if (!(prop in dataShow)) { 6905 dataShow[prop] = propTween.start; 6906 if (hidden) { 6907 propTween.end = propTween.start; 6908 propTween.start = 0; 6909 } 6910 } 6911 } 6912 } 6913 function propFilter(props, specialEasing) { 6914 var index, name, easing, value, hooks; 6915 6916 // camelCase, specialEasing and expand cssHook pass 6917 for (index in props) { 6918 name = camelCase(index); 6919 easing = specialEasing[name]; 6920 value = props[index]; 6921 if (Array.isArray(value)) { 6922 easing = value[1]; 6923 value = props[index] = value[0]; 6924 } 6925 if (index !== name) { 6926 props[name] = value; 6927 delete props[index]; 6928 } 6929 hooks = _jQuery2.cssHooks[name]; 6930 if (hooks && "expand" in hooks) { 6931 value = hooks.expand(value); 6932 delete props[name]; 6933 6934 // Not quite $.extend, this won't overwrite existing keys. 6935 // Reusing 'index' because we have the correct "name" 6936 for (index in value) { 6937 if (!(index in props)) { 6938 props[index] = value[index]; 6939 specialEasing[index] = easing; 6940 } 6941 } 6942 } else { 6943 specialEasing[name] = easing; 6944 } 6945 } 6946 } 6947 function Animation(elem, properties, options) { 6948 var result, 6949 stopped, 6950 index = 0, 6951 length = Animation.prefilters.length, 6952 deferred = _jQuery2.Deferred().always(function () { 6953 // Don't match elem in the :animated selector 6954 delete tick.elem; 6955 }), 6956 tick = function tick() { 6957 if (stopped) { 6958 return false; 6959 } 6960 var currentTime = fxNow || createFxNow(), 6961 remaining = Math.max(0, animation.startTime + animation.duration - currentTime), 6962 // Support: Android 2.3 only 6963 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 6964 temp = remaining / animation.duration || 0, 6965 percent = 1 - temp, 6966 index = 0, 6967 length = animation.tweens.length; 6968 for (; index < length; index++) { 6969 animation.tweens[index].run(percent); 6970 } 6971 deferred.notifyWith(elem, [animation, percent, remaining]); 6972 6973 // If there's more to do, yield 6974 if (percent < 1 && length) { 6975 return remaining; 6976 } 6977 6978 // If this was an empty animation, synthesize a final progress notification 6979 if (!length) { 6980 deferred.notifyWith(elem, [animation, 1, 0]); 6981 } 6982 6983 // Resolve the animation and report its conclusion 6984 deferred.resolveWith(elem, [animation]); 6985 return false; 6986 }, 6987 animation = deferred.promise({ 6988 elem: elem, 6989 props: _jQuery2.extend({}, properties), 6990 opts: _jQuery2.extend(true, { 6991 specialEasing: {}, 6992 easing: _jQuery2.easing._default 6993 }, options), 6994 originalProperties: properties, 6995 originalOptions: options, 6996 startTime: fxNow || createFxNow(), 6997 duration: options.duration, 6998 tweens: [], 6999 createTween: function createTween(prop, end) { 7000 var tween = _jQuery2.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing); 7001 animation.tweens.push(tween); 7002 return tween; 7003 }, 7004 stop: function stop(gotoEnd) { 7005 var index = 0, 7006 // If we are going to the end, we want to run all the tweens 7007 // otherwise we skip this part 7008 length = gotoEnd ? animation.tweens.length : 0; 7009 if (stopped) { 7010 return this; 7011 } 7012 stopped = true; 7013 for (; index < length; index++) { 7014 animation.tweens[index].run(1); 7015 } 7016 7017 // Resolve when we played the last frame; otherwise, reject 7018 if (gotoEnd) { 7019 deferred.notifyWith(elem, [animation, 1, 0]); 7020 deferred.resolveWith(elem, [animation, gotoEnd]); 7021 } else { 7022 deferred.rejectWith(elem, [animation, gotoEnd]); 7023 } 7024 return this; 7025 } 7026 }), 7027 props = animation.props; 7028 propFilter(props, animation.opts.specialEasing); 7029 for (; index < length; index++) { 7030 result = Animation.prefilters[index].call(animation, elem, props, animation.opts); 7031 if (result) { 7032 if (isFunction(result.stop)) { 7033 _jQuery2._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result); 7034 } 7035 return result; 7036 } 7037 } 7038 _jQuery2.map(props, createTween, animation); 7039 if (isFunction(animation.opts.start)) { 7040 animation.opts.start.call(elem, animation); 7041 } 7042 7043 // Attach callbacks from options 7044 animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always); 7045 _jQuery2.fx.timer(_jQuery2.extend(tick, { 7046 elem: elem, 7047 anim: animation, 7048 queue: animation.opts.queue 7049 })); 7050 return animation; 7051 } 7052 _jQuery2.Animation = _jQuery2.extend(Animation, { 7053 tweeners: { 7054 "*": [function (prop, value) { 7055 var tween = this.createTween(prop, value); 7056 adjustCSS(tween.elem, prop, rcssNum.exec(value), tween); 7057 return tween; 7058 }] 7059 }, 7060 tweener: function tweener(props, callback) { 7061 if (isFunction(props)) { 7062 callback = props; 7063 props = ["*"]; 7064 } else { 7065 props = props.match(rnothtmlwhite); 7066 } 7067 var prop, 7068 index = 0, 7069 length = props.length; 7070 for (; index < length; index++) { 7071 prop = props[index]; 7072 Animation.tweeners[prop] = Animation.tweeners[prop] || []; 7073 Animation.tweeners[prop].unshift(callback); 7074 } 7075 }, 7076 prefilters: [defaultPrefilter], 7077 prefilter: function prefilter(callback, prepend) { 7078 if (prepend) { 7079 Animation.prefilters.unshift(callback); 7080 } else { 7081 Animation.prefilters.push(callback); 7082 } 7083 } 7084 }); 7085 _jQuery2.speed = function (speed, easing, fn) { 7086 var opt = speed && _typeof(speed) === "object" ? _jQuery2.extend({}, speed) : { 7087 complete: fn || !fn && easing || isFunction(speed) && speed, 7088 duration: speed, 7089 easing: fn && easing || easing && !isFunction(easing) && easing 7090 }; 7091 7092 // Go to the end state if fx are off 7093 if (_jQuery2.fx.off) { 7094 opt.duration = 0; 7095 } else { 7096 if (typeof opt.duration !== "number") { 7097 if (opt.duration in _jQuery2.fx.speeds) { 7098 opt.duration = _jQuery2.fx.speeds[opt.duration]; 7099 } else { 7100 opt.duration = _jQuery2.fx.speeds._default; 7101 } 7102 } 7103 } 7104 7105 // Normalize opt.queue - true/undefined/null -> "fx" 7106 if (opt.queue == null || opt.queue === true) { 7107 opt.queue = "fx"; 7108 } 7109 7110 // Queueing 7111 opt.old = opt.complete; 7112 opt.complete = function () { 7113 if (isFunction(opt.old)) { 7114 opt.old.call(this); 7115 } 7116 if (opt.queue) { 7117 _jQuery2.dequeue(this, opt.queue); 7118 } 7119 }; 7120 return opt; 7121 }; 7122 _jQuery2.fn.extend({ 7123 fadeTo: function fadeTo(speed, to, easing, callback) { 7124 // Show any hidden elements after setting opacity to 0 7125 return this.filter(isHiddenWithinTree).css("opacity", 0).show() 7126 7127 // Animate to the value specified 7128 .end().animate({ 7129 opacity: to 7130 }, speed, easing, callback); 7131 }, 7132 animate: function animate(prop, speed, easing, callback) { 7133 var empty = _jQuery2.isEmptyObject(prop), 7134 optall = _jQuery2.speed(speed, easing, callback), 7135 doAnimation = function doAnimation() { 7136 // Operate on a copy of prop so per-property easing won't be lost 7137 var anim = Animation(this, _jQuery2.extend({}, prop), optall); 7138 7139 // Empty animations, or finishing resolves immediately 7140 if (empty || dataPriv.get(this, "finish")) { 7141 anim.stop(true); 7142 } 7143 }; 7144 doAnimation.finish = doAnimation; 7145 return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation); 7146 }, 7147 stop: function stop(type, clearQueue, gotoEnd) { 7148 var stopQueue = function stopQueue(hooks) { 7149 var stop = hooks.stop; 7150 delete hooks.stop; 7151 stop(gotoEnd); 7152 }; 7153 if (typeof type !== "string") { 7154 gotoEnd = clearQueue; 7155 clearQueue = type; 7156 type = undefined; 7157 } 7158 if (clearQueue) { 7159 this.queue(type || "fx", []); 7160 } 7161 return this.each(function () { 7162 var dequeue = true, 7163 index = type != null && type + "queueHooks", 7164 timers = _jQuery2.timers, 7165 data = dataPriv.get(this); 7166 if (index) { 7167 if (data[index] && data[index].stop) { 7168 stopQueue(data[index]); 7169 } 7170 } else { 7171 for (index in data) { 7172 if (data[index] && data[index].stop && rrun.test(index)) { 7173 stopQueue(data[index]); 7174 } 7175 } 7176 } 7177 for (index = timers.length; index--;) { 7178 if (timers[index].elem === this && (type == null || timers[index].queue === type)) { 7179 timers[index].anim.stop(gotoEnd); 7180 dequeue = false; 7181 timers.splice(index, 1); 7182 } 7183 } 7184 7185 // Start the next in the queue if the last step wasn't forced. 7186 // Timers currently will call their complete callbacks, which 7187 // will dequeue but only if they were gotoEnd. 7188 if (dequeue || !gotoEnd) { 7189 _jQuery2.dequeue(this, type); 7190 } 7191 }); 7192 }, 7193 finish: function finish(type) { 7194 if (type !== false) { 7195 type = type || "fx"; 7196 } 7197 return this.each(function () { 7198 var index, 7199 data = dataPriv.get(this), 7200 queue = data[type + "queue"], 7201 hooks = data[type + "queueHooks"], 7202 timers = _jQuery2.timers, 7203 length = queue ? queue.length : 0; 7204 7205 // Enable finishing flag on private data 7206 data.finish = true; 7207 7208 // Empty the queue first 7209 _jQuery2.queue(this, type, []); 7210 if (hooks && hooks.stop) { 7211 hooks.stop.call(this, true); 7212 } 7213 7214 // Look for any active animations, and finish them 7215 for (index = timers.length; index--;) { 7216 if (timers[index].elem === this && timers[index].queue === type) { 7217 timers[index].anim.stop(true); 7218 timers.splice(index, 1); 7219 } 7220 } 7221 7222 // Look for any animations in the old queue and finish them 7223 for (index = 0; index < length; index++) { 7224 if (queue[index] && queue[index].finish) { 7225 queue[index].finish.call(this); 7226 } 7227 } 7228 7229 // Turn off finishing flag 7230 delete data.finish; 7231 }); 7232 } 7233 }); 7234 _jQuery2.each(["toggle", "show", "hide"], function (_i, name) { 7235 var cssFn = _jQuery2.fn[name]; 7236 _jQuery2.fn[name] = function (speed, easing, callback) { 7237 return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback); 7238 }; 7239 }); 7240 7241 // Generate shortcuts for custom animations 7242 _jQuery2.each({ 7243 slideDown: genFx("show"), 7244 slideUp: genFx("hide"), 7245 slideToggle: genFx("toggle"), 7246 fadeIn: { 7247 opacity: "show" 7248 }, 7249 fadeOut: { 7250 opacity: "hide" 7251 }, 7252 fadeToggle: { 7253 opacity: "toggle" 7254 } 7255 }, function (name, props) { 7256 _jQuery2.fn[name] = function (speed, easing, callback) { 7257 return this.animate(props, speed, easing, callback); 7258 }; 7259 }); 7260 _jQuery2.timers = []; 7261 _jQuery2.fx.tick = function () { 7262 var timer, 7263 i = 0, 7264 timers = _jQuery2.timers; 7265 fxNow = Date.now(); 7266 for (; i < timers.length; i++) { 7267 timer = timers[i]; 7268 7269 // Run the timer and safely remove it when done (allowing for external removal) 7270 if (!timer() && timers[i] === timer) { 7271 timers.splice(i--, 1); 7272 } 7273 } 7274 if (!timers.length) { 7275 _jQuery2.fx.stop(); 7276 } 7277 fxNow = undefined; 7278 }; 7279 _jQuery2.fx.timer = function (timer) { 7280 _jQuery2.timers.push(timer); 7281 _jQuery2.fx.start(); 7282 }; 7283 _jQuery2.fx.interval = 13; 7284 _jQuery2.fx.start = function () { 7285 if (inProgress) { 7286 return; 7287 } 7288 inProgress = true; 7289 schedule(); 7290 }; 7291 _jQuery2.fx.stop = function () { 7292 inProgress = null; 7293 }; 7294 _jQuery2.fx.speeds = { 7295 slow: 600, 7296 fast: 200, 7297 // Default speed 7298 _default: 400 7299 }; 7300 7301 // Based off of the plugin by Clint Helfers, with permission. 7302 _jQuery2.fn.delay = function (time, type) { 7303 time = _jQuery2.fx ? _jQuery2.fx.speeds[time] || time : time; 7304 type = type || "fx"; 7305 return this.queue(type, function (next, hooks) { 7306 var timeout = window.setTimeout(next, time); 7307 hooks.stop = function () { 7308 window.clearTimeout(timeout); 7309 }; 7310 }); 7311 }; 7312 (function () { 7313 var input = document.createElement("input"), 7314 select = document.createElement("select"), 7315 opt = select.appendChild(document.createElement("option")); 7316 input.type = "checkbox"; 7317 7318 // Support: Android <=4.3 only 7319 // Default value for a checkbox should be "on" 7320 support.checkOn = input.value !== ""; 7321 7322 // Support: IE <=11 only 7323 // Must access selectedIndex to make default options select 7324 support.optSelected = opt.selected; 7325 7326 // Support: IE <=11 only 7327 // An input loses its value after becoming a radio 7328 input = document.createElement("input"); 7329 input.value = "t"; 7330 input.type = "radio"; 7331 support.radioValue = input.value === "t"; 7332 })(); 7333 var boolHook, 7334 attrHandle = _jQuery2.expr.attrHandle; 7335 _jQuery2.fn.extend({ 7336 attr: function attr(name, value) { 7337 return _access(this, _jQuery2.attr, name, value, arguments.length > 1); 7338 }, 7339 removeAttr: function removeAttr(name) { 7340 return this.each(function () { 7341 _jQuery2.removeAttr(this, name); 7342 }); 7343 } 7344 }); 7345 _jQuery2.extend({ 7346 attr: function attr(elem, name, value) { 7347 var ret, 7348 hooks, 7349 nType = elem.nodeType; 7350 7351 // Don't get/set attributes on text, comment and attribute nodes 7352 if (nType === 3 || nType === 8 || nType === 2) { 7353 return; 7354 } 7355 7356 // Fallback to prop when attributes are not supported 7357 if (typeof elem.getAttribute === "undefined") { 7358 return _jQuery2.prop(elem, name, value); 7359 } 7360 7361 // Attribute hooks are determined by the lowercase version 7362 // Grab necessary hook if one is defined 7363 if (nType !== 1 || !_jQuery2.isXMLDoc(elem)) { 7364 hooks = _jQuery2.attrHooks[name.toLowerCase()] || (_jQuery2.expr.match.bool.test(name) ? boolHook : undefined); 7365 } 7366 if (value !== undefined) { 7367 if (value === null) { 7368 _jQuery2.removeAttr(elem, name); 7369 return; 7370 } 7371 if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { 7372 return ret; 7373 } 7374 elem.setAttribute(name, value + ""); 7375 return value; 7376 } 7377 if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { 7378 return ret; 7379 } 7380 ret = _jQuery2.find.attr(elem, name); 7381 7382 // Non-existent attributes return null, we normalize to undefined 7383 return ret == null ? undefined : ret; 7384 }, 7385 attrHooks: { 7386 type: { 7387 set: function set(elem, value) { 7388 if (!support.radioValue && value === "radio" && nodeName(elem, "input")) { 7389 var val = elem.value; 7390 elem.setAttribute("type", value); 7391 if (val) { 7392 elem.value = val; 7393 } 7394 return value; 7395 } 7396 } 7397 } 7398 }, 7399 removeAttr: function removeAttr(elem, value) { 7400 var name, 7401 i = 0, 7402 // Attribute names can contain non-HTML whitespace characters 7403 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 7404 attrNames = value && value.match(rnothtmlwhite); 7405 if (attrNames && elem.nodeType === 1) { 7406 while (name = attrNames[i++]) { 7407 elem.removeAttribute(name); 7408 } 7409 } 7410 } 7411 }); 7412 7413 // Hooks for boolean attributes 7414 boolHook = { 7415 set: function set(elem, value, name) { 7416 if (value === false) { 7417 // Remove boolean attributes when set to false 7418 _jQuery2.removeAttr(elem, name); 7419 } else { 7420 elem.setAttribute(name, name); 7421 } 7422 return name; 7423 } 7424 }; 7425 _jQuery2.each(_jQuery2.expr.match.bool.source.match(/\w+/g), function (_i, name) { 7426 var getter = attrHandle[name] || _jQuery2.find.attr; 7427 attrHandle[name] = function (elem, name, isXML) { 7428 var ret, 7429 handle, 7430 lowercaseName = name.toLowerCase(); 7431 if (!isXML) { 7432 // Avoid an infinite loop by temporarily removing this function from the getter 7433 handle = attrHandle[lowercaseName]; 7434 attrHandle[lowercaseName] = ret; 7435 ret = getter(elem, name, isXML) != null ? lowercaseName : null; 7436 attrHandle[lowercaseName] = handle; 7437 } 7438 return ret; 7439 }; 7440 }); 7441 var rfocusable = /^(?:input|select|textarea|button)$/i, 7442 rclickable = /^(?:a|area)$/i; 7443 _jQuery2.fn.extend({ 7444 prop: function prop(name, value) { 7445 return _access(this, _jQuery2.prop, name, value, arguments.length > 1); 7446 }, 7447 removeProp: function removeProp(name) { 7448 return this.each(function () { 7449 delete this[_jQuery2.propFix[name] || name]; 7450 }); 7451 } 7452 }); 7453 _jQuery2.extend({ 7454 prop: function prop(elem, name, value) { 7455 var ret, 7456 hooks, 7457 nType = elem.nodeType; 7458 7459 // Don't get/set properties on text, comment and attribute nodes 7460 if (nType === 3 || nType === 8 || nType === 2) { 7461 return; 7462 } 7463 if (nType !== 1 || !_jQuery2.isXMLDoc(elem)) { 7464 // Fix name and attach hooks 7465 name = _jQuery2.propFix[name] || name; 7466 hooks = _jQuery2.propHooks[name]; 7467 } 7468 if (value !== undefined) { 7469 if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { 7470 return ret; 7471 } 7472 return elem[name] = value; 7473 } 7474 if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { 7475 return ret; 7476 } 7477 return elem[name]; 7478 }, 7479 propHooks: { 7480 tabIndex: { 7481 get: function get(elem) { 7482 // Support: IE <=9 - 11 only 7483 // elem.tabIndex doesn't always return the 7484 // correct value when it hasn't been explicitly set 7485 // Use proper attribute retrieval (trac-12072) 7486 var tabindex = _jQuery2.find.attr(elem, "tabindex"); 7487 if (tabindex) { 7488 return parseInt(tabindex, 10); 7489 } 7490 if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) { 7491 return 0; 7492 } 7493 return -1; 7494 } 7495 } 7496 }, 7497 propFix: { 7498 "for": "htmlFor", 7499 "class": "className" 7500 } 7501 }); 7502 7503 // Support: IE <=11 only 7504 // Accessing the selectedIndex property 7505 // forces the browser to respect setting selected 7506 // on the option 7507 // The getter ensures a default option is selected 7508 // when in an optgroup 7509 // eslint rule "no-unused-expressions" is disabled for this code 7510 // since it considers such accessions noop 7511 if (!support.optSelected) { 7512 _jQuery2.propHooks.selected = { 7513 get: function get(elem) { 7514 /* eslint no-unused-expressions: "off" */ 7515 7516 var parent = elem.parentNode; 7517 if (parent && parent.parentNode) { 7518 parent.parentNode.selectedIndex; 7519 } 7520 return null; 7521 }, 7522 set: function set(elem) { 7523 /* eslint no-unused-expressions: "off" */ 7524 7525 var parent = elem.parentNode; 7526 if (parent) { 7527 parent.selectedIndex; 7528 if (parent.parentNode) { 7529 parent.parentNode.selectedIndex; 7530 } 7531 } 7532 } 7533 }; 7534 } 7535 _jQuery2.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { 7536 _jQuery2.propFix[this.toLowerCase()] = this; 7537 }); 7538 7539 // Strip and collapse whitespace according to HTML spec 7540 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 7541 function stripAndCollapse(value) { 7542 var tokens = value.match(rnothtmlwhite) || []; 7543 return tokens.join(" "); 7544 } 7545 function getClass(elem) { 7546 return elem.getAttribute && elem.getAttribute("class") || ""; 7547 } 7548 function classesToArray(value) { 7549 if (Array.isArray(value)) { 7550 return value; 7551 } 7552 if (typeof value === "string") { 7553 return value.match(rnothtmlwhite) || []; 7554 } 7555 return []; 7556 } 7557 _jQuery2.fn.extend({ 7558 addClass: function addClass(value) { 7559 var classNames, cur, curValue, className, i, finalValue; 7560 if (isFunction(value)) { 7561 return this.each(function (j) { 7562 _jQuery2(this).addClass(value.call(this, j, getClass(this))); 7563 }); 7564 } 7565 classNames = classesToArray(value); 7566 if (classNames.length) { 7567 return this.each(function () { 7568 curValue = getClass(this); 7569 cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " "; 7570 if (cur) { 7571 for (i = 0; i < classNames.length; i++) { 7572 className = classNames[i]; 7573 if (cur.indexOf(" " + className + " ") < 0) { 7574 cur += className + " "; 7575 } 7576 } 7577 7578 // Only assign if different to avoid unneeded rendering. 7579 finalValue = stripAndCollapse(cur); 7580 if (curValue !== finalValue) { 7581 this.setAttribute("class", finalValue); 7582 } 7583 } 7584 }); 7585 } 7586 return this; 7587 }, 7588 removeClass: function removeClass(value) { 7589 var classNames, cur, curValue, className, i, finalValue; 7590 if (isFunction(value)) { 7591 return this.each(function (j) { 7592 _jQuery2(this).removeClass(value.call(this, j, getClass(this))); 7593 }); 7594 } 7595 if (!arguments.length) { 7596 return this.attr("class", ""); 7597 } 7598 classNames = classesToArray(value); 7599 if (classNames.length) { 7600 return this.each(function () { 7601 curValue = getClass(this); 7602 7603 // This expression is here for better compressibility (see addClass) 7604 cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " "; 7605 if (cur) { 7606 for (i = 0; i < classNames.length; i++) { 7607 className = classNames[i]; 7608 7609 // Remove *all* instances 7610 while (cur.indexOf(" " + className + " ") > -1) { 7611 cur = cur.replace(" " + className + " ", " "); 7612 } 7613 } 7614 7615 // Only assign if different to avoid unneeded rendering. 7616 finalValue = stripAndCollapse(cur); 7617 if (curValue !== finalValue) { 7618 this.setAttribute("class", finalValue); 7619 } 7620 } 7621 }); 7622 } 7623 return this; 7624 }, 7625 toggleClass: function toggleClass(value, stateVal) { 7626 var classNames, 7627 className, 7628 i, 7629 self, 7630 type = _typeof(value), 7631 isValidValue = type === "string" || Array.isArray(value); 7632 if (isFunction(value)) { 7633 return this.each(function (i) { 7634 _jQuery2(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal); 7635 }); 7636 } 7637 if (typeof stateVal === "boolean" && isValidValue) { 7638 return stateVal ? this.addClass(value) : this.removeClass(value); 7639 } 7640 classNames = classesToArray(value); 7641 return this.each(function () { 7642 if (isValidValue) { 7643 // Toggle individual class names 7644 self = _jQuery2(this); 7645 for (i = 0; i < classNames.length; i++) { 7646 className = classNames[i]; 7647 7648 // Check each className given, space separated list 7649 if (self.hasClass(className)) { 7650 self.removeClass(className); 7651 } else { 7652 self.addClass(className); 7653 } 7654 } 7655 7656 // Toggle whole class name 7657 } else if (value === undefined || type === "boolean") { 7658 className = getClass(this); 7659 if (className) { 7660 // Store className if set 7661 dataPriv.set(this, "__className__", className); 7662 } 7663 7664 // If the element has a class name or if we're passed `false`, 7665 // then remove the whole classname (if there was one, the above saved it). 7666 // Otherwise bring back whatever was previously saved (if anything), 7667 // falling back to the empty string if nothing was stored. 7668 if (this.setAttribute) { 7669 this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || ""); 7670 } 7671 } 7672 }); 7673 }, 7674 hasClass: function hasClass(selector) { 7675 var className, 7676 elem, 7677 i = 0; 7678 className = " " + selector + " "; 7679 while (elem = this[i++]) { 7680 if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) { 7681 return true; 7682 } 7683 } 7684 return false; 7685 } 7686 }); 7687 var rreturn = /\r/g; 7688 _jQuery2.fn.extend({ 7689 val: function val(value) { 7690 var hooks, 7691 ret, 7692 valueIsFunction, 7693 elem = this[0]; 7694 if (!arguments.length) { 7695 if (elem) { 7696 hooks = _jQuery2.valHooks[elem.type] || _jQuery2.valHooks[elem.nodeName.toLowerCase()]; 7697 if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { 7698 return ret; 7699 } 7700 ret = elem.value; 7701 7702 // Handle most common string cases 7703 if (typeof ret === "string") { 7704 return ret.replace(rreturn, ""); 7705 } 7706 7707 // Handle cases where value is null/undef or number 7708 return ret == null ? "" : ret; 7709 } 7710 return; 7711 } 7712 valueIsFunction = isFunction(value); 7713 return this.each(function (i) { 7714 var val; 7715 if (this.nodeType !== 1) { 7716 return; 7717 } 7718 if (valueIsFunction) { 7719 val = value.call(this, i, _jQuery2(this).val()); 7720 } else { 7721 val = value; 7722 } 7723 7724 // Treat null/undefined as ""; convert numbers to string 7725 if (val == null) { 7726 val = ""; 7727 } else if (typeof val === "number") { 7728 val += ""; 7729 } else if (Array.isArray(val)) { 7730 val = _jQuery2.map(val, function (value) { 7731 return value == null ? "" : value + ""; 7732 }); 7733 } 7734 hooks = _jQuery2.valHooks[this.type] || _jQuery2.valHooks[this.nodeName.toLowerCase()]; 7735 7736 // If set returns undefined, fall back to normal setting 7737 if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) { 7738 this.value = val; 7739 } 7740 }); 7741 } 7742 }); 7743 _jQuery2.extend({ 7744 valHooks: { 7745 option: { 7746 get: function get(elem) { 7747 var val = _jQuery2.find.attr(elem, "value"); 7748 return val != null ? val : 7749 // Support: IE <=10 - 11 only 7750 // option.text throws exceptions (trac-14686, trac-14858) 7751 // Strip and collapse whitespace 7752 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 7753 stripAndCollapse(_jQuery2.text(elem)); 7754 } 7755 }, 7756 select: { 7757 get: function get(elem) { 7758 var value, 7759 option, 7760 i, 7761 options = elem.options, 7762 index = elem.selectedIndex, 7763 one = elem.type === "select-one", 7764 values = one ? null : [], 7765 max = one ? index + 1 : options.length; 7766 if (index < 0) { 7767 i = max; 7768 } else { 7769 i = one ? index : 0; 7770 } 7771 7772 // Loop through all the selected options 7773 for (; i < max; i++) { 7774 option = options[i]; 7775 7776 // Support: IE <=9 only 7777 // IE8-9 doesn't update selected after form reset (trac-2551) 7778 if ((option.selected || i === index) && 7779 // Don't return options that are disabled or in a disabled optgroup 7780 !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) { 7781 // Get the specific value for the option 7782 value = _jQuery2(option).val(); 7783 7784 // We don't need an array for one selects 7785 if (one) { 7786 return value; 7787 } 7788 7789 // Multi-Selects return an array 7790 values.push(value); 7791 } 7792 } 7793 return values; 7794 }, 7795 set: function set(elem, value) { 7796 var optionSet, 7797 option, 7798 options = elem.options, 7799 values = _jQuery2.makeArray(value), 7800 i = options.length; 7801 while (i--) { 7802 option = options[i]; 7803 7804 /* eslint-disable no-cond-assign */ 7805 7806 if (option.selected = _jQuery2.inArray(_jQuery2.valHooks.option.get(option), values) > -1) { 7807 optionSet = true; 7808 } 7809 7810 /* eslint-enable no-cond-assign */ 7811 } 7812 7813 // Force browsers to behave consistently when non-matching value is set 7814 if (!optionSet) { 7815 elem.selectedIndex = -1; 7816 } 7817 return values; 7818 } 7819 } 7820 } 7821 }); 7822 7823 // Radios and checkboxes getter/setter 7824 _jQuery2.each(["radio", "checkbox"], function () { 7825 _jQuery2.valHooks[this] = { 7826 set: function set(elem, value) { 7827 if (Array.isArray(value)) { 7828 return elem.checked = _jQuery2.inArray(_jQuery2(elem).val(), value) > -1; 7829 } 7830 } 7831 }; 7832 if (!support.checkOn) { 7833 _jQuery2.valHooks[this].get = function (elem) { 7834 return elem.getAttribute("value") === null ? "on" : elem.value; 7835 }; 7836 } 7837 }); 7838 7839 // Return jQuery for attributes-only inclusion 7840 var location = window.location; 7841 var nonce = { 7842 guid: Date.now() 7843 }; 7844 var rquery = /\?/; 7845 7846 // Cross-browser xml parsing 7847 _jQuery2.parseXML = function (data) { 7848 var xml, parserErrorElem; 7849 if (!data || typeof data !== "string") { 7850 return null; 7851 } 7852 7853 // Support: IE 9 - 11 only 7854 // IE throws on parseFromString with invalid input. 7855 try { 7856 xml = new window.DOMParser().parseFromString(data, "text/xml"); 7857 } catch (e) {} 7858 parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0]; 7859 if (!xml || parserErrorElem) { 7860 _jQuery2.error("Invalid XML: " + (parserErrorElem ? _jQuery2.map(parserErrorElem.childNodes, function (el) { 7861 return el.textContent; 7862 }).join("\n") : data)); 7863 } 7864 return xml; 7865 }; 7866 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 7867 stopPropagationCallback = function stopPropagationCallback(e) { 7868 e.stopPropagation(); 7869 }; 7870 _jQuery2.extend(_jQuery2.event, { 7871 trigger: function trigger(event, data, elem, onlyHandlers) { 7872 var i, 7873 cur, 7874 tmp, 7875 bubbleType, 7876 ontype, 7877 handle, 7878 special, 7879 lastElement, 7880 eventPath = [elem || document], 7881 type = hasOwn.call(event, "type") ? event.type : event, 7882 namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : []; 7883 cur = lastElement = tmp = elem = elem || document; 7884 7885 // Don't do events on text and comment nodes 7886 if (elem.nodeType === 3 || elem.nodeType === 8) { 7887 return; 7888 } 7889 7890 // focus/blur morphs to focusin/out; ensure we're not firing them right now 7891 if (rfocusMorph.test(type + _jQuery2.event.triggered)) { 7892 return; 7893 } 7894 if (type.indexOf(".") > -1) { 7895 // Namespaced trigger; create a regexp to match event type in handle() 7896 namespaces = type.split("."); 7897 type = namespaces.shift(); 7898 namespaces.sort(); 7899 } 7900 ontype = type.indexOf(":") < 0 && "on" + type; 7901 7902 // Caller can pass in a jQuery.Event object, Object, or just an event type string 7903 event = event[_jQuery2.expando] ? event : new _jQuery2.Event(type, _typeof(event) === "object" && event); 7904 7905 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 7906 event.isTrigger = onlyHandlers ? 2 : 3; 7907 event.namespace = namespaces.join("."); 7908 event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; 7909 7910 // Clean up the event in case it is being reused 7911 event.result = undefined; 7912 if (!event.target) { 7913 event.target = elem; 7914 } 7915 7916 // Clone any incoming data and prepend the event, creating the handler arg list 7917 data = data == null ? [event] : _jQuery2.makeArray(data, [event]); 7918 7919 // Allow special events to draw outside the lines 7920 special = _jQuery2.event.special[type] || {}; 7921 if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) { 7922 return; 7923 } 7924 7925 // Determine event propagation path in advance, per W3C events spec (trac-9951) 7926 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 7927 if (!onlyHandlers && !special.noBubble && !isWindow(elem)) { 7928 bubbleType = special.delegateType || type; 7929 if (!rfocusMorph.test(bubbleType + type)) { 7930 cur = cur.parentNode; 7931 } 7932 for (; cur; cur = cur.parentNode) { 7933 eventPath.push(cur); 7934 tmp = cur; 7935 } 7936 7937 // Only add window if we got to document (e.g., not plain obj or detached DOM) 7938 if (tmp === (elem.ownerDocument || document)) { 7939 eventPath.push(tmp.defaultView || tmp.parentWindow || window); 7940 } 7941 } 7942 7943 // Fire handlers on the event path 7944 i = 0; 7945 while ((cur = eventPath[i++]) && !event.isPropagationStopped()) { 7946 lastElement = cur; 7947 event.type = i > 1 ? bubbleType : special.bindType || type; 7948 7949 // jQuery handler 7950 handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle"); 7951 if (handle) { 7952 handle.apply(cur, data); 7953 } 7954 7955 // Native handler 7956 handle = ontype && cur[ontype]; 7957 if (handle && handle.apply && acceptData(cur)) { 7958 event.result = handle.apply(cur, data); 7959 if (event.result === false) { 7960 event.preventDefault(); 7961 } 7962 } 7963 } 7964 event.type = type; 7965 7966 // If nobody prevented the default action, do it now 7967 if (!onlyHandlers && !event.isDefaultPrevented()) { 7968 if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) { 7969 // Call a native DOM method on the target with the same name as the event. 7970 // Don't do default actions on window, that's where global variables be (trac-6170) 7971 if (ontype && isFunction(elem[type]) && !isWindow(elem)) { 7972 // Don't re-trigger an onFOO event when we call its FOO() method 7973 tmp = elem[ontype]; 7974 if (tmp) { 7975 elem[ontype] = null; 7976 } 7977 7978 // Prevent re-triggering of the same event, since we already bubbled it above 7979 _jQuery2.event.triggered = type; 7980 if (event.isPropagationStopped()) { 7981 lastElement.addEventListener(type, stopPropagationCallback); 7982 } 7983 elem[type](); 7984 if (event.isPropagationStopped()) { 7985 lastElement.removeEventListener(type, stopPropagationCallback); 7986 } 7987 _jQuery2.event.triggered = undefined; 7988 if (tmp) { 7989 elem[ontype] = tmp; 7990 } 7991 } 7992 } 7993 } 7994 return event.result; 7995 }, 7996 // Piggyback on a donor event to simulate a different one 7997 // Used only for `focus(in | out)` events 7998 simulate: function simulate(type, elem, event) { 7999 var e = _jQuery2.extend(new _jQuery2.Event(), event, { 8000 type: type, 8001 isSimulated: true 8002 }); 8003 _jQuery2.event.trigger(e, null, elem); 8004 } 8005 }); 8006 _jQuery2.fn.extend({ 8007 trigger: function trigger(type, data) { 8008 return this.each(function () { 8009 _jQuery2.event.trigger(type, data, this); 8010 }); 8011 }, 8012 triggerHandler: function triggerHandler(type, data) { 8013 var elem = this[0]; 8014 if (elem) { 8015 return _jQuery2.event.trigger(type, data, elem, true); 8016 } 8017 } 8018 }); 8019 var rbracket = /\[\]$/, 8020 rCRLF = /\r?\n/g, 8021 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 8022 rsubmittable = /^(?:input|select|textarea|keygen)/i; 8023 function buildParams(prefix, obj, traditional, add) { 8024 var name; 8025 if (Array.isArray(obj)) { 8026 // Serialize array item. 8027 _jQuery2.each(obj, function (i, v) { 8028 if (traditional || rbracket.test(prefix)) { 8029 // Treat each array item as a scalar. 8030 add(prefix, v); 8031 } else { 8032 // Item is non-scalar (array or object), encode its numeric index. 8033 buildParams(prefix + "[" + (_typeof(v) === "object" && v != null ? i : "") + "]", v, traditional, add); 8034 } 8035 }); 8036 } else if (!traditional && toType(obj) === "object") { 8037 // Serialize object item. 8038 for (name in obj) { 8039 buildParams(prefix + "[" + name + "]", obj[name], traditional, add); 8040 } 8041 } else { 8042 // Serialize scalar item. 8043 add(prefix, obj); 8044 } 8045 } 8046 8047 // Serialize an array of form elements or a set of 8048 // key/values into a query string 8049 _jQuery2.param = function (a, traditional) { 8050 var prefix, 8051 s = [], 8052 add = function add(key, valueOrFunction) { 8053 // If value is a function, invoke it and use its return value 8054 var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction; 8055 s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value); 8056 }; 8057 if (a == null) { 8058 return ""; 8059 } 8060 8061 // If an array was passed in, assume that it is an array of form elements. 8062 if (Array.isArray(a) || a.jquery && !_jQuery2.isPlainObject(a)) { 8063 // Serialize the form elements 8064 _jQuery2.each(a, function () { 8065 add(this.name, this.value); 8066 }); 8067 } else { 8068 // If traditional, encode the "old" way (the way 1.3.2 or older 8069 // did it), otherwise encode params recursively. 8070 for (prefix in a) { 8071 buildParams(prefix, a[prefix], traditional, add); 8072 } 8073 } 8074 8075 // Return the resulting serialization 8076 return s.join("&"); 8077 }; 8078 _jQuery2.fn.extend({ 8079 serialize: function serialize() { 8080 return _jQuery2.param(this.serializeArray()); 8081 }, 8082 serializeArray: function serializeArray() { 8083 return this.map(function () { 8084 // Can add propHook for "elements" to filter or add form elements 8085 var elements = _jQuery2.prop(this, "elements"); 8086 return elements ? _jQuery2.makeArray(elements) : this; 8087 }).filter(function () { 8088 var type = this.type; 8089 8090 // Use .is( ":disabled" ) so that fieldset[disabled] works 8091 return this.name && !_jQuery2(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type)); 8092 }).map(function (_i, elem) { 8093 var val = _jQuery2(this).val(); 8094 if (val == null) { 8095 return null; 8096 } 8097 if (Array.isArray(val)) { 8098 return _jQuery2.map(val, function (val) { 8099 return { 8100 name: elem.name, 8101 value: val.replace(rCRLF, "\r\n") 8102 }; 8103 }); 8104 } 8105 return { 8106 name: elem.name, 8107 value: val.replace(rCRLF, "\r\n") 8108 }; 8109 }).get(); 8110 } 8111 }); 8112 var r20 = /%20/g, 8113 rhash = /#.*$/, 8114 rantiCache = /([?&])_=[^&]*/, 8115 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 8116 // trac-7653, trac-8125, trac-8152: local protocol detection 8117 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 8118 rnoContent = /^(?:GET|HEAD)$/, 8119 rprotocol = /^\/\//, 8120 /* Prefilters 8121 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 8122 * 2) These are called: 8123 * - BEFORE asking for a transport 8124 * - AFTER param serialization (s.data is a string if s.processData is true) 8125 * 3) key is the dataType 8126 * 4) the catchall symbol "*" can be used 8127 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 8128 */ 8129 prefilters = {}, 8130 /* Transports bindings 8131 * 1) key is the dataType 8132 * 2) the catchall symbol "*" can be used 8133 * 3) selection will start with transport dataType and THEN go to "*" if needed 8134 */ 8135 transports = {}, 8136 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 8137 allTypes = "*/".concat("*"), 8138 // Anchor tag for parsing the document origin 8139 originAnchor = document.createElement("a"); 8140 originAnchor.href = location.href; 8141 8142 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 8143 function addToPrefiltersOrTransports(structure) { 8144 // dataTypeExpression is optional and defaults to "*" 8145 return function (dataTypeExpression, func) { 8146 if (typeof dataTypeExpression !== "string") { 8147 func = dataTypeExpression; 8148 dataTypeExpression = "*"; 8149 } 8150 var dataType, 8151 i = 0, 8152 dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || []; 8153 if (isFunction(func)) { 8154 // For each dataType in the dataTypeExpression 8155 while (dataType = dataTypes[i++]) { 8156 // Prepend if requested 8157 if (dataType[0] === "+") { 8158 dataType = dataType.slice(1) || "*"; 8159 (structure[dataType] = structure[dataType] || []).unshift(func); 8160 8161 // Otherwise append 8162 } else { 8163 (structure[dataType] = structure[dataType] || []).push(func); 8164 } 8165 } 8166 } 8167 }; 8168 } 8169 8170 // Base inspection function for prefilters and transports 8171 function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) { 8172 var inspected = {}, 8173 seekingTransport = structure === transports; 8174 function inspect(dataType) { 8175 var selected; 8176 inspected[dataType] = true; 8177 _jQuery2.each(structure[dataType] || [], function (_, prefilterOrFactory) { 8178 var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR); 8179 if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) { 8180 options.dataTypes.unshift(dataTypeOrTransport); 8181 inspect(dataTypeOrTransport); 8182 return false; 8183 } else if (seekingTransport) { 8184 return !(selected = dataTypeOrTransport); 8185 } 8186 }); 8187 return selected; 8188 } 8189 return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*"); 8190 } 8191 8192 // A special extend for ajax options 8193 // that takes "flat" options (not to be deep extended) 8194 // Fixes trac-9887 8195 function ajaxExtend(target, src) { 8196 var key, 8197 deep, 8198 flatOptions = _jQuery2.ajaxSettings.flatOptions || {}; 8199 for (key in src) { 8200 if (src[key] !== undefined) { 8201 (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key]; 8202 } 8203 } 8204 if (deep) { 8205 _jQuery2.extend(true, target, deep); 8206 } 8207 return target; 8208 } 8209 8210 /* Handles responses to an ajax request: 8211 * - finds the right dataType (mediates between content-type and expected dataType) 8212 * - returns the corresponding response 8213 */ 8214 function ajaxHandleResponses(s, jqXHR, responses) { 8215 var ct, 8216 type, 8217 finalDataType, 8218 firstDataType, 8219 contents = s.contents, 8220 dataTypes = s.dataTypes; 8221 8222 // Remove auto dataType and get content-type in the process 8223 while (dataTypes[0] === "*") { 8224 dataTypes.shift(); 8225 if (ct === undefined) { 8226 ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); 8227 } 8228 } 8229 8230 // Check if we're dealing with a known content-type 8231 if (ct) { 8232 for (type in contents) { 8233 if (contents[type] && contents[type].test(ct)) { 8234 dataTypes.unshift(type); 8235 break; 8236 } 8237 } 8238 } 8239 8240 // Check to see if we have a response for the expected dataType 8241 if (dataTypes[0] in responses) { 8242 finalDataType = dataTypes[0]; 8243 } else { 8244 // Try convertible dataTypes 8245 for (type in responses) { 8246 if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) { 8247 finalDataType = type; 8248 break; 8249 } 8250 if (!firstDataType) { 8251 firstDataType = type; 8252 } 8253 } 8254 8255 // Or just use first one 8256 finalDataType = finalDataType || firstDataType; 8257 } 8258 8259 // If we found a dataType 8260 // We add the dataType to the list if needed 8261 // and return the corresponding response 8262 if (finalDataType) { 8263 if (finalDataType !== dataTypes[0]) { 8264 dataTypes.unshift(finalDataType); 8265 } 8266 return responses[finalDataType]; 8267 } 8268 } 8269 8270 /* Chain conversions given the request and the original response 8271 * Also sets the responseXXX fields on the jqXHR instance 8272 */ 8273 function ajaxConvert(s, response, jqXHR, isSuccess) { 8274 var conv2, 8275 current, 8276 conv, 8277 tmp, 8278 prev, 8279 converters = {}, 8280 // Work with a copy of dataTypes in case we need to modify it for conversion 8281 dataTypes = s.dataTypes.slice(); 8282 8283 // Create converters map with lowercased keys 8284 if (dataTypes[1]) { 8285 for (conv in s.converters) { 8286 converters[conv.toLowerCase()] = s.converters[conv]; 8287 } 8288 } 8289 current = dataTypes.shift(); 8290 8291 // Convert to each sequential dataType 8292 while (current) { 8293 if (s.responseFields[current]) { 8294 jqXHR[s.responseFields[current]] = response; 8295 } 8296 8297 // Apply the dataFilter if provided 8298 if (!prev && isSuccess && s.dataFilter) { 8299 response = s.dataFilter(response, s.dataType); 8300 } 8301 prev = current; 8302 current = dataTypes.shift(); 8303 if (current) { 8304 // There's only work to do if current dataType is non-auto 8305 if (current === "*") { 8306 current = prev; 8307 8308 // Convert response if prev dataType is non-auto and differs from current 8309 } else if (prev !== "*" && prev !== current) { 8310 // Seek a direct converter 8311 conv = converters[prev + " " + current] || converters["* " + current]; 8312 8313 // If none found, seek a pair 8314 if (!conv) { 8315 for (conv2 in converters) { 8316 // If conv2 outputs current 8317 tmp = conv2.split(" "); 8318 if (tmp[1] === current) { 8319 // If prev can be converted to accepted input 8320 conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]]; 8321 if (conv) { 8322 // Condense equivalence converters 8323 if (conv === true) { 8324 conv = converters[conv2]; 8325 8326 // Otherwise, insert the intermediate dataType 8327 } else if (converters[conv2] !== true) { 8328 current = tmp[0]; 8329 dataTypes.unshift(tmp[1]); 8330 } 8331 break; 8332 } 8333 } 8334 } 8335 } 8336 8337 // Apply converter (if not an equivalence) 8338 if (conv !== true) { 8339 // Unless errors are allowed to bubble, catch and return them 8340 if (conv && s["throws"]) { 8341 response = conv(response); 8342 } else { 8343 try { 8344 response = conv(response); 8345 } catch (e) { 8346 return { 8347 state: "parsererror", 8348 error: conv ? e : "No conversion from " + prev + " to " + current 8349 }; 8350 } 8351 } 8352 } 8353 } 8354 } 8355 } 8356 return { 8357 state: "success", 8358 data: response 8359 }; 8360 } 8361 _jQuery2.extend({ 8362 // Counter for holding the number of active queries 8363 active: 0, 8364 // Last-Modified header cache for next request 8365 lastModified: {}, 8366 etag: {}, 8367 ajaxSettings: { 8368 url: location.href, 8369 type: "GET", 8370 isLocal: rlocalProtocol.test(location.protocol), 8371 global: true, 8372 processData: true, 8373 async: true, 8374 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 8375 /* 8376 timeout: 0, 8377 data: null, 8378 dataType: null, 8379 username: null, 8380 password: null, 8381 cache: null, 8382 throws: false, 8383 traditional: false, 8384 headers: {}, 8385 */ 8386 8387 accepts: { 8388 "*": allTypes, 8389 text: "text/plain", 8390 html: "text/html", 8391 xml: "application/xml, text/xml", 8392 json: "application/json, text/javascript" 8393 }, 8394 contents: { 8395 xml: /\bxml\b/, 8396 html: /\bhtml/, 8397 json: /\bjson\b/ 8398 }, 8399 responseFields: { 8400 xml: "responseXML", 8401 text: "responseText", 8402 json: "responseJSON" 8403 }, 8404 // Data converters 8405 // Keys separate source (or catchall "*") and destination types with a single space 8406 converters: { 8407 // Convert anything to text 8408 "* text": String, 8409 // Text to html (true = no transformation) 8410 "text html": true, 8411 // Evaluate text as a json expression 8412 "text json": JSON.parse, 8413 // Parse text as xml 8414 "text xml": _jQuery2.parseXML 8415 }, 8416 // For options that shouldn't be deep extended: 8417 // you can add your own custom options here if 8418 // and when you create one that shouldn't be 8419 // deep extended (see ajaxExtend) 8420 flatOptions: { 8421 url: true, 8422 context: true 8423 } 8424 }, 8425 // Creates a full fledged settings object into target 8426 // with both ajaxSettings and settings fields. 8427 // If target is omitted, writes into ajaxSettings. 8428 ajaxSetup: function ajaxSetup(target, settings) { 8429 return settings ? 8430 // Building a settings object 8431 ajaxExtend(ajaxExtend(target, _jQuery2.ajaxSettings), settings) : 8432 // Extending ajaxSettings 8433 ajaxExtend(_jQuery2.ajaxSettings, target); 8434 }, 8435 ajaxPrefilter: addToPrefiltersOrTransports(prefilters), 8436 ajaxTransport: addToPrefiltersOrTransports(transports), 8437 // Main method 8438 ajax: function ajax(url, options) { 8439 // If url is an object, simulate pre-1.5 signature 8440 if (_typeof(url) === "object") { 8441 options = url; 8442 url = undefined; 8443 } 8444 8445 // Force options to be an object 8446 options = options || {}; 8447 var transport, 8448 // URL without anti-cache param 8449 cacheURL, 8450 // Response headers 8451 responseHeadersString, 8452 responseHeaders, 8453 // timeout handle 8454 timeoutTimer, 8455 // Url cleanup var 8456 urlAnchor, 8457 // Request state (becomes false upon send and true upon completion) 8458 completed, 8459 // To know if global events are to be dispatched 8460 fireGlobals, 8461 // Loop variable 8462 i, 8463 // uncached part of the url 8464 uncached, 8465 // Create the final options object 8466 s = _jQuery2.ajaxSetup({}, options), 8467 // Callbacks context 8468 callbackContext = s.context || s, 8469 // Context for global events is callbackContext if it is a DOM node or jQuery collection 8470 globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? _jQuery2(callbackContext) : _jQuery2.event, 8471 // Deferreds 8472 deferred = _jQuery2.Deferred(), 8473 completeDeferred = _jQuery2.Callbacks("once memory"), 8474 // Status-dependent callbacks 8475 _statusCode = s.statusCode || {}, 8476 // Headers (they are sent all at once) 8477 requestHeaders = {}, 8478 requestHeadersNames = {}, 8479 // Default abort message 8480 strAbort = "canceled", 8481 // Fake xhr 8482 jqXHR = { 8483 readyState: 0, 8484 // Builds headers hashtable if needed 8485 getResponseHeader: function getResponseHeader(key) { 8486 var match; 8487 if (completed) { 8488 if (!responseHeaders) { 8489 responseHeaders = {}; 8490 while (match = rheaders.exec(responseHeadersString)) { 8491 responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]); 8492 } 8493 } 8494 match = responseHeaders[key.toLowerCase() + " "]; 8495 } 8496 return match == null ? null : match.join(", "); 8497 }, 8498 // Raw string 8499 getAllResponseHeaders: function getAllResponseHeaders() { 8500 return completed ? responseHeadersString : null; 8501 }, 8502 // Caches the header 8503 setRequestHeader: function setRequestHeader(name, value) { 8504 if (completed == null) { 8505 name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name; 8506 requestHeaders[name] = value; 8507 } 8508 return this; 8509 }, 8510 // Overrides response content-type header 8511 overrideMimeType: function overrideMimeType(type) { 8512 if (completed == null) { 8513 s.mimeType = type; 8514 } 8515 return this; 8516 }, 8517 // Status-dependent callbacks 8518 statusCode: function statusCode(map) { 8519 var code; 8520 if (map) { 8521 if (completed) { 8522 // Execute the appropriate callbacks 8523 jqXHR.always(map[jqXHR.status]); 8524 } else { 8525 // Lazy-add the new callbacks in a way that preserves old ones 8526 for (code in map) { 8527 _statusCode[code] = [_statusCode[code], map[code]]; 8528 } 8529 } 8530 } 8531 return this; 8532 }, 8533 // Cancel the request 8534 abort: function abort(statusText) { 8535 var finalText = statusText || strAbort; 8536 if (transport) { 8537 transport.abort(finalText); 8538 } 8539 done(0, finalText); 8540 return this; 8541 } 8542 }; 8543 8544 // Attach deferreds 8545 deferred.promise(jqXHR); 8546 8547 // Add protocol if not provided (prefilters might expect it) 8548 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 8549 // We also use the url parameter if available 8550 s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); 8551 8552 // Alias method option to type as per ticket trac-12004 8553 s.type = options.method || options.type || s.method || s.type; 8554 8555 // Extract dataTypes list 8556 s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""]; 8557 8558 // A cross-domain request is in order when the origin doesn't match the current origin. 8559 if (s.crossDomain == null) { 8560 urlAnchor = document.createElement("a"); 8561 8562 // Support: IE <=8 - 11, Edge 12 - 15 8563 // IE throws exception on accessing the href property if url is malformed, 8564 // e.g. http://example.com:80x/ 8565 try { 8566 urlAnchor.href = s.url; 8567 8568 // Support: IE <=8 - 11 only 8569 // Anchor's host property isn't correctly set when s.url is relative 8570 urlAnchor.href = urlAnchor.href; 8571 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host; 8572 } catch (e) { 8573 // If there is an error parsing the URL, assume it is crossDomain, 8574 // it can be rejected by the transport if it is invalid 8575 s.crossDomain = true; 8576 } 8577 } 8578 8579 // Convert data if not already a string 8580 if (s.data && s.processData && typeof s.data !== "string") { 8581 s.data = _jQuery2.param(s.data, s.traditional); 8582 } 8583 8584 // Apply prefilters 8585 inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); 8586 8587 // If request was aborted inside a prefilter, stop there 8588 if (completed) { 8589 return jqXHR; 8590 } 8591 8592 // We can fire global events as of now if asked to 8593 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 8594 fireGlobals = _jQuery2.event && s.global; 8595 8596 // Watch for a new set of requests 8597 if (fireGlobals && _jQuery2.active++ === 0) { 8598 _jQuery2.event.trigger("ajaxStart"); 8599 } 8600 8601 // Uppercase the type 8602 s.type = s.type.toUpperCase(); 8603 8604 // Determine if request has content 8605 s.hasContent = !rnoContent.test(s.type); 8606 8607 // Save the URL in case we're toying with the If-Modified-Since 8608 // and/or If-None-Match header later on 8609 // Remove hash to simplify url manipulation 8610 cacheURL = s.url.replace(rhash, ""); 8611 8612 // More options handling for requests with no content 8613 if (!s.hasContent) { 8614 // Remember the hash so we can put it back 8615 uncached = s.url.slice(cacheURL.length); 8616 8617 // If data is available and should be processed, append data to url 8618 if (s.data && (s.processData || typeof s.data === "string")) { 8619 cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; 8620 8621 // trac-9682: remove data so that it's not used in an eventual retry 8622 delete s.data; 8623 } 8624 8625 // Add or update anti-cache param if needed 8626 if (s.cache === false) { 8627 cacheURL = cacheURL.replace(rantiCache, "$1"); 8628 uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached; 8629 } 8630 8631 // Put hash and anti-cache on the URL that will be requested (gh-1732) 8632 s.url = cacheURL + uncached; 8633 8634 // Change '%20' to '+' if this is encoded form body content (gh-2658) 8635 } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) { 8636 s.data = s.data.replace(r20, "+"); 8637 } 8638 8639 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 8640 if (s.ifModified) { 8641 if (_jQuery2.lastModified[cacheURL]) { 8642 jqXHR.setRequestHeader("If-Modified-Since", _jQuery2.lastModified[cacheURL]); 8643 } 8644 if (_jQuery2.etag[cacheURL]) { 8645 jqXHR.setRequestHeader("If-None-Match", _jQuery2.etag[cacheURL]); 8646 } 8647 } 8648 8649 // Set the correct header, if data is being sent 8650 if (s.data && s.hasContent && s.contentType !== false || options.contentType) { 8651 jqXHR.setRequestHeader("Content-Type", s.contentType); 8652 } 8653 8654 // Set the Accepts header for the server, depending on the dataType 8655 jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]); 8656 8657 // Check for headers option 8658 for (i in s.headers) { 8659 jqXHR.setRequestHeader(i, s.headers[i]); 8660 } 8661 8662 // Allow custom headers/mimetypes and early abort 8663 if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) { 8664 // Abort if not done already and return 8665 return jqXHR.abort(); 8666 } 8667 8668 // Aborting is no longer a cancellation 8669 strAbort = "abort"; 8670 8671 // Install callbacks on deferreds 8672 completeDeferred.add(s.complete); 8673 jqXHR.done(s.success); 8674 jqXHR.fail(s.error); 8675 8676 // Get transport 8677 transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); 8678 8679 // If no transport, we auto-abort 8680 if (!transport) { 8681 done(-1, "No Transport"); 8682 } else { 8683 jqXHR.readyState = 1; 8684 8685 // Send global event 8686 if (fireGlobals) { 8687 globalEventContext.trigger("ajaxSend", [jqXHR, s]); 8688 } 8689 8690 // If request was aborted inside ajaxSend, stop there 8691 if (completed) { 8692 return jqXHR; 8693 } 8694 8695 // Timeout 8696 if (s.async && s.timeout > 0) { 8697 timeoutTimer = window.setTimeout(function () { 8698 jqXHR.abort("timeout"); 8699 }, s.timeout); 8700 } 8701 try { 8702 completed = false; 8703 transport.send(requestHeaders, done); 8704 } catch (e) { 8705 // Rethrow post-completion exceptions 8706 if (completed) { 8707 throw e; 8708 } 8709 8710 // Propagate others as results 8711 done(-1, e); 8712 } 8713 } 8714 8715 // Callback for when everything is done 8716 function done(status, nativeStatusText, responses, headers) { 8717 var isSuccess, 8718 success, 8719 error, 8720 response, 8721 modified, 8722 statusText = nativeStatusText; 8723 8724 // Ignore repeat invocations 8725 if (completed) { 8726 return; 8727 } 8728 completed = true; 8729 8730 // Clear timeout if it exists 8731 if (timeoutTimer) { 8732 window.clearTimeout(timeoutTimer); 8733 } 8734 8735 // Dereference transport for early garbage collection 8736 // (no matter how long the jqXHR object will be used) 8737 transport = undefined; 8738 8739 // Cache response headers 8740 responseHeadersString = headers || ""; 8741 8742 // Set readyState 8743 jqXHR.readyState = status > 0 ? 4 : 0; 8744 8745 // Determine if successful 8746 isSuccess = status >= 200 && status < 300 || status === 304; 8747 8748 // Get response data 8749 if (responses) { 8750 response = ajaxHandleResponses(s, jqXHR, responses); 8751 } 8752 8753 // Use a noop converter for missing script but not if jsonp 8754 if (!isSuccess && _jQuery2.inArray("script", s.dataTypes) > -1 && _jQuery2.inArray("json", s.dataTypes) < 0) { 8755 s.converters["text script"] = function () {}; 8756 } 8757 8758 // Convert no matter what (that way responseXXX fields are always set) 8759 response = ajaxConvert(s, response, jqXHR, isSuccess); 8760 8761 // If successful, handle type chaining 8762 if (isSuccess) { 8763 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 8764 if (s.ifModified) { 8765 modified = jqXHR.getResponseHeader("Last-Modified"); 8766 if (modified) { 8767 _jQuery2.lastModified[cacheURL] = modified; 8768 } 8769 modified = jqXHR.getResponseHeader("etag"); 8770 if (modified) { 8771 _jQuery2.etag[cacheURL] = modified; 8772 } 8773 } 8774 8775 // if no content 8776 if (status === 204 || s.type === "HEAD") { 8777 statusText = "nocontent"; 8778 8779 // if not modified 8780 } else if (status === 304) { 8781 statusText = "notmodified"; 8782 8783 // If we have data, let's convert it 8784 } else { 8785 statusText = response.state; 8786 success = response.data; 8787 error = response.error; 8788 isSuccess = !error; 8789 } 8790 } else { 8791 // Extract error from statusText and normalize for non-aborts 8792 error = statusText; 8793 if (status || !statusText) { 8794 statusText = "error"; 8795 if (status < 0) { 8796 status = 0; 8797 } 8798 } 8799 } 8800 8801 // Set data for the fake xhr object 8802 jqXHR.status = status; 8803 jqXHR.statusText = (nativeStatusText || statusText) + ""; 8804 8805 // Success/Error 8806 if (isSuccess) { 8807 deferred.resolveWith(callbackContext, [success, statusText, jqXHR]); 8808 } else { 8809 deferred.rejectWith(callbackContext, [jqXHR, statusText, error]); 8810 } 8811 8812 // Status-dependent callbacks 8813 jqXHR.statusCode(_statusCode); 8814 _statusCode = undefined; 8815 if (fireGlobals) { 8816 globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]); 8817 } 8818 8819 // Complete 8820 completeDeferred.fireWith(callbackContext, [jqXHR, statusText]); 8821 if (fireGlobals) { 8822 globalEventContext.trigger("ajaxComplete", [jqXHR, s]); 8823 8824 // Handle the global AJAX counter 8825 if (! --_jQuery2.active) { 8826 _jQuery2.event.trigger("ajaxStop"); 8827 } 8828 } 8829 } 8830 return jqXHR; 8831 }, 8832 getJSON: function getJSON(url, data, callback) { 8833 return _jQuery2.get(url, data, callback, "json"); 8834 }, 8835 getScript: function getScript(url, callback) { 8836 return _jQuery2.get(url, undefined, callback, "script"); 8837 } 8838 }); 8839 _jQuery2.each(["get", "post"], function (_i, method) { 8840 _jQuery2[method] = function (url, data, callback, type) { 8841 // Shift arguments if data argument was omitted 8842 if (isFunction(data)) { 8843 type = type || callback; 8844 callback = data; 8845 data = undefined; 8846 } 8847 8848 // The url can be an options object (which then must have .url) 8849 return _jQuery2.ajax(_jQuery2.extend({ 8850 url: url, 8851 type: method, 8852 dataType: type, 8853 data: data, 8854 success: callback 8855 }, _jQuery2.isPlainObject(url) && url)); 8856 }; 8857 }); 8858 _jQuery2.ajaxPrefilter(function (s) { 8859 var i; 8860 for (i in s.headers) { 8861 if (i.toLowerCase() === "content-type") { 8862 s.contentType = s.headers[i] || ""; 8863 } 8864 } 8865 }); 8866 _jQuery2._evalUrl = function (url, options, doc) { 8867 return _jQuery2.ajax({ 8868 url: url, 8869 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 8870 type: "GET", 8871 dataType: "script", 8872 cache: true, 8873 async: false, 8874 global: false, 8875 // Only evaluate the response if it is successful (gh-4126) 8876 // dataFilter is not invoked for failure responses, so using it instead 8877 // of the default converter is kludgy but it works. 8878 converters: { 8879 "text script": function text_script() {} 8880 }, 8881 dataFilter: function dataFilter(response) { 8882 _jQuery2.globalEval(response, options, doc); 8883 } 8884 }); 8885 }; 8886 _jQuery2.fn.extend({ 8887 wrapAll: function wrapAll(html) { 8888 var wrap; 8889 if (this[0]) { 8890 if (isFunction(html)) { 8891 html = html.call(this[0]); 8892 } 8893 8894 // The elements to wrap the target around 8895 wrap = _jQuery2(html, this[0].ownerDocument).eq(0).clone(true); 8896 if (this[0].parentNode) { 8897 wrap.insertBefore(this[0]); 8898 } 8899 wrap.map(function () { 8900 var elem = this; 8901 while (elem.firstElementChild) { 8902 elem = elem.firstElementChild; 8903 } 8904 return elem; 8905 }).append(this); 8906 } 8907 return this; 8908 }, 8909 wrapInner: function wrapInner(html) { 8910 if (isFunction(html)) { 8911 return this.each(function (i) { 8912 _jQuery2(this).wrapInner(html.call(this, i)); 8913 }); 8914 } 8915 return this.each(function () { 8916 var self = _jQuery2(this), 8917 contents = self.contents(); 8918 if (contents.length) { 8919 contents.wrapAll(html); 8920 } else { 8921 self.append(html); 8922 } 8923 }); 8924 }, 8925 wrap: function wrap(html) { 8926 var htmlIsFunction = isFunction(html); 8927 return this.each(function (i) { 8928 _jQuery2(this).wrapAll(htmlIsFunction ? html.call(this, i) : html); 8929 }); 8930 }, 8931 unwrap: function unwrap(selector) { 8932 this.parent(selector).not("body").each(function () { 8933 _jQuery2(this).replaceWith(this.childNodes); 8934 }); 8935 return this; 8936 } 8937 }); 8938 _jQuery2.expr.pseudos.hidden = function (elem) { 8939 return !_jQuery2.expr.pseudos.visible(elem); 8940 }; 8941 _jQuery2.expr.pseudos.visible = function (elem) { 8942 return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length); 8943 }; 8944 _jQuery2.ajaxSettings.xhr = function () { 8945 try { 8946 return new window.XMLHttpRequest(); 8947 } catch (e) {} 8948 }; 8949 var xhrSuccessStatus = { 8950 // File protocol always yields status code 0, assume 200 8951 0: 200, 8952 // Support: IE <=9 only 8953 // trac-1450: sometimes IE returns 1223 when it should be 204 8954 1223: 204 8955 }, 8956 xhrSupported = _jQuery2.ajaxSettings.xhr(); 8957 support.cors = !!xhrSupported && "withCredentials" in xhrSupported; 8958 support.ajax = xhrSupported = !!xhrSupported; 8959 _jQuery2.ajaxTransport(function (options) { 8960 var _callback, errorCallback; 8961 8962 // Cross domain only allowed if supported through XMLHttpRequest 8963 if (support.cors || xhrSupported && !options.crossDomain) { 8964 return { 8965 send: function send(headers, complete) { 8966 var i, 8967 xhr = options.xhr(); 8968 xhr.open(options.type, options.url, options.async, options.username, options.password); 8969 8970 // Apply custom fields if provided 8971 if (options.xhrFields) { 8972 for (i in options.xhrFields) { 8973 xhr[i] = options.xhrFields[i]; 8974 } 8975 } 8976 8977 // Override mime type if needed 8978 if (options.mimeType && xhr.overrideMimeType) { 8979 xhr.overrideMimeType(options.mimeType); 8980 } 8981 8982 // X-Requested-With header 8983 // For cross-domain requests, seeing as conditions for a preflight are 8984 // akin to a jigsaw puzzle, we simply never set it to be sure. 8985 // (it can always be set on a per-request basis or even using ajaxSetup) 8986 // For same-domain requests, won't change header if already provided. 8987 if (!options.crossDomain && !headers["X-Requested-With"]) { 8988 headers["X-Requested-With"] = "XMLHttpRequest"; 8989 } 8990 8991 // Set headers 8992 for (i in headers) { 8993 xhr.setRequestHeader(i, headers[i]); 8994 } 8995 8996 // Callback 8997 _callback = function callback(type) { 8998 return function () { 8999 if (_callback) { 9000 _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null; 9001 if (type === "abort") { 9002 xhr.abort(); 9003 } else if (type === "error") { 9004 // Support: IE <=9 only 9005 // On a manual native abort, IE9 throws 9006 // errors on any property access that is not readyState 9007 if (typeof xhr.status !== "number") { 9008 complete(0, "error"); 9009 } else { 9010 complete( 9011 // File: protocol always yields status 0; see trac-8605, trac-14207 9012 xhr.status, xhr.statusText); 9013 } 9014 } else { 9015 complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, 9016 // Support: IE <=9 only 9017 // IE9 has no XHR2 but throws on binary (trac-11426) 9018 // For XHR2 non-text, let the caller handle it (gh-2498) 9019 (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? { 9020 binary: xhr.response 9021 } : { 9022 text: xhr.responseText 9023 }, xhr.getAllResponseHeaders()); 9024 } 9025 } 9026 }; 9027 }; 9028 9029 // Listen to events 9030 xhr.onload = _callback(); 9031 errorCallback = xhr.onerror = xhr.ontimeout = _callback("error"); 9032 9033 // Support: IE 9 only 9034 // Use onreadystatechange to replace onabort 9035 // to handle uncaught aborts 9036 if (xhr.onabort !== undefined) { 9037 xhr.onabort = errorCallback; 9038 } else { 9039 xhr.onreadystatechange = function () { 9040 // Check readyState before timeout as it changes 9041 if (xhr.readyState === 4) { 9042 // Allow onerror to be called first, 9043 // but that will not handle a native abort 9044 // Also, save errorCallback to a variable 9045 // as xhr.onerror cannot be accessed 9046 window.setTimeout(function () { 9047 if (_callback) { 9048 errorCallback(); 9049 } 9050 }); 9051 } 9052 }; 9053 } 9054 9055 // Create the abort callback 9056 _callback = _callback("abort"); 9057 try { 9058 // Do send the request (this may raise an exception) 9059 xhr.send(options.hasContent && options.data || null); 9060 } catch (e) { 9061 // trac-14683: Only rethrow if this hasn't been notified as an error yet 9062 if (_callback) { 9063 throw e; 9064 } 9065 } 9066 }, 9067 abort: function abort() { 9068 if (_callback) { 9069 _callback(); 9070 } 9071 } 9072 }; 9073 } 9074 }); 9075 9076 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 9077 _jQuery2.ajaxPrefilter(function (s) { 9078 if (s.crossDomain) { 9079 s.contents.script = false; 9080 } 9081 }); 9082 9083 // Install script dataType 9084 _jQuery2.ajaxSetup({ 9085 accepts: { 9086 script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript" 9087 }, 9088 contents: { 9089 script: /\b(?:java|ecma)script\b/ 9090 }, 9091 converters: { 9092 "text script": function text_script(text) { 9093 _jQuery2.globalEval(text); 9094 return text; 9095 } 9096 } 9097 }); 9098 9099 // Handle cache's special case and crossDomain 9100 _jQuery2.ajaxPrefilter("script", function (s) { 9101 if (s.cache === undefined) { 9102 s.cache = false; 9103 } 9104 if (s.crossDomain) { 9105 s.type = "GET"; 9106 } 9107 }); 9108 9109 // Bind script tag hack transport 9110 _jQuery2.ajaxTransport("script", function (s) { 9111 // This transport only deals with cross domain or forced-by-attrs requests 9112 if (s.crossDomain || s.scriptAttrs) { 9113 var script, _callback2; 9114 return { 9115 send: function send(_, complete) { 9116 script = _jQuery2("<script>").attr(s.scriptAttrs || {}).prop({ 9117 charset: s.scriptCharset, 9118 src: s.url 9119 }).on("load error", _callback2 = function callback(evt) { 9120 script.remove(); 9121 _callback2 = null; 9122 if (evt) { 9123 complete(evt.type === "error" ? 404 : 200, evt.type); 9124 } 9125 }); 9126 9127 // Use native DOM manipulation to avoid our domManip AJAX trickery 9128 document.head.appendChild(script[0]); 9129 }, 9130 abort: function abort() { 9131 if (_callback2) { 9132 _callback2(); 9133 } 9134 } 9135 }; 9136 } 9137 }); 9138 var oldCallbacks = [], 9139 rjsonp = /(=)\?(?=&|$)|\?\?/; 9140 9141 // Default jsonp settings 9142 _jQuery2.ajaxSetup({ 9143 jsonp: "callback", 9144 jsonpCallback: function jsonpCallback() { 9145 var callback = oldCallbacks.pop() || _jQuery2.expando + "_" + nonce.guid++; 9146 this[callback] = true; 9147 return callback; 9148 } 9149 }); 9150 9151 // Detect, normalize options and install callbacks for jsonp requests 9152 _jQuery2.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) { 9153 var callbackName, 9154 overwritten, 9155 responseContainer, 9156 jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data"); 9157 9158 // Handle iff the expected data type is "jsonp" or we have a parameter to set 9159 if (jsonProp || s.dataTypes[0] === "jsonp") { 9160 // Get callback name, remembering preexisting value associated with it 9161 callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; 9162 9163 // Insert callback into url or form data 9164 if (jsonProp) { 9165 s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName); 9166 } else if (s.jsonp !== false) { 9167 s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName; 9168 } 9169 9170 // Use data converter to retrieve json after script execution 9171 s.converters["script json"] = function () { 9172 if (!responseContainer) { 9173 _jQuery2.error(callbackName + " was not called"); 9174 } 9175 return responseContainer[0]; 9176 }; 9177 9178 // Force json dataType 9179 s.dataTypes[0] = "json"; 9180 9181 // Install callback 9182 overwritten = window[callbackName]; 9183 window[callbackName] = function () { 9184 responseContainer = arguments; 9185 }; 9186 9187 // Clean-up function (fires after converters) 9188 jqXHR.always(function () { 9189 // If previous value didn't exist - remove it 9190 if (overwritten === undefined) { 9191 _jQuery2(window).removeProp(callbackName); 9192 9193 // Otherwise restore preexisting value 9194 } else { 9195 window[callbackName] = overwritten; 9196 } 9197 9198 // Save back as free 9199 if (s[callbackName]) { 9200 // Make sure that re-using the options doesn't screw things around 9201 s.jsonpCallback = originalSettings.jsonpCallback; 9202 9203 // Save the callback name for future use 9204 oldCallbacks.push(callbackName); 9205 } 9206 9207 // Call if it was a function and we have a response 9208 if (responseContainer && isFunction(overwritten)) { 9209 overwritten(responseContainer[0]); 9210 } 9211 responseContainer = overwritten = undefined; 9212 }); 9213 9214 // Delegate to script 9215 return "script"; 9216 } 9217 }); 9218 9219 // Support: Safari 8 only 9220 // In Safari 8 documents created via document.implementation.createHTMLDocument 9221 // collapse sibling forms: the second one becomes a child of the first one. 9222 // Because of that, this security measure has to be disabled in Safari 8. 9223 // https://bugs.webkit.org/show_bug.cgi?id=137337 9224 support.createHTMLDocument = function () { 9225 var body = document.implementation.createHTMLDocument("").body; 9226 body.innerHTML = "<form></form><form></form>"; 9227 return body.childNodes.length === 2; 9228 }(); 9229 9230 // Argument "data" should be string of html 9231 // context (optional): If specified, the fragment will be created in this context, 9232 // defaults to document 9233 // keepScripts (optional): If true, will include scripts passed in the html string 9234 _jQuery2.parseHTML = function (data, context, keepScripts) { 9235 if (typeof data !== "string") { 9236 return []; 9237 } 9238 if (typeof context === "boolean") { 9239 keepScripts = context; 9240 context = false; 9241 } 9242 var base, parsed, scripts; 9243 if (!context) { 9244 // Stop scripts or inline event handlers from being executed immediately 9245 // by using document.implementation 9246 if (support.createHTMLDocument) { 9247 context = document.implementation.createHTMLDocument(""); 9248 9249 // Set the base href for the created document 9250 // so any parsed elements with URLs 9251 // are based on the document's URL (gh-2965) 9252 base = context.createElement("base"); 9253 base.href = document.location.href; 9254 context.head.appendChild(base); 9255 } else { 9256 context = document; 9257 } 9258 } 9259 parsed = rsingleTag.exec(data); 9260 scripts = !keepScripts && []; 9261 9262 // Single tag 9263 if (parsed) { 9264 return [context.createElement(parsed[1])]; 9265 } 9266 parsed = buildFragment([data], context, scripts); 9267 if (scripts && scripts.length) { 9268 _jQuery2(scripts).remove(); 9269 } 9270 return _jQuery2.merge([], parsed.childNodes); 9271 }; 9272 9273 /** 9274 * Load a url into a page 9275 */ 9276 _jQuery2.fn.load = function (url, params, callback) { 9277 var selector, 9278 type, 9279 response, 9280 self = this, 9281 off = url.indexOf(" "); 9282 if (off > -1) { 9283 selector = stripAndCollapse(url.slice(off)); 9284 url = url.slice(0, off); 9285 } 9286 9287 // If it's a function 9288 if (isFunction(params)) { 9289 // We assume that it's the callback 9290 callback = params; 9291 params = undefined; 9292 9293 // Otherwise, build a param string 9294 } else if (params && _typeof(params) === "object") { 9295 type = "POST"; 9296 } 9297 9298 // If we have elements to modify, make the request 9299 if (self.length > 0) { 9300 _jQuery2.ajax({ 9301 url: url, 9302 // If "type" variable is undefined, then "GET" method will be used. 9303 // Make value of this field explicit since 9304 // user can override it through ajaxSetup method 9305 type: type || "GET", 9306 dataType: "html", 9307 data: params 9308 }).done(function (responseText) { 9309 // Save response for use in complete callback 9310 response = arguments; 9311 self.html(selector ? 9312 // If a selector was specified, locate the right elements in a dummy div 9313 // Exclude scripts to avoid IE 'Permission Denied' errors 9314 _jQuery2("<div>").append(_jQuery2.parseHTML(responseText)).find(selector) : 9315 // Otherwise use the full result 9316 responseText); 9317 9318 // If the request succeeds, this function gets "data", "status", "jqXHR" 9319 // but they are ignored because response was set above. 9320 // If it fails, this function gets "jqXHR", "status", "error" 9321 }).always(callback && function (jqXHR, status) { 9322 self.each(function () { 9323 callback.apply(this, response || [jqXHR.responseText, status, jqXHR]); 9324 }); 9325 }); 9326 } 9327 return this; 9328 }; 9329 _jQuery2.expr.pseudos.animated = function (elem) { 9330 return _jQuery2.grep(_jQuery2.timers, function (fn) { 9331 return elem === fn.elem; 9332 }).length; 9333 }; 9334 _jQuery2.offset = { 9335 setOffset: function setOffset(elem, options, i) { 9336 var curPosition, 9337 curLeft, 9338 curCSSTop, 9339 curTop, 9340 curOffset, 9341 curCSSLeft, 9342 calculatePosition, 9343 position = _jQuery2.css(elem, "position"), 9344 curElem = _jQuery2(elem), 9345 props = {}; 9346 9347 // Set position first, in-case top/left are set even on static elem 9348 if (position === "static") { 9349 elem.style.position = "relative"; 9350 } 9351 curOffset = curElem.offset(); 9352 curCSSTop = _jQuery2.css(elem, "top"); 9353 curCSSLeft = _jQuery2.css(elem, "left"); 9354 calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; 9355 9356 // Need to be able to calculate position if either 9357 // top or left is auto and position is either absolute or fixed 9358 if (calculatePosition) { 9359 curPosition = curElem.position(); 9360 curTop = curPosition.top; 9361 curLeft = curPosition.left; 9362 } else { 9363 curTop = parseFloat(curCSSTop) || 0; 9364 curLeft = parseFloat(curCSSLeft) || 0; 9365 } 9366 if (isFunction(options)) { 9367 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 9368 options = options.call(elem, i, _jQuery2.extend({}, curOffset)); 9369 } 9370 if (options.top != null) { 9371 props.top = options.top - curOffset.top + curTop; 9372 } 9373 if (options.left != null) { 9374 props.left = options.left - curOffset.left + curLeft; 9375 } 9376 if ("using" in options) { 9377 options.using.call(elem, props); 9378 } else { 9379 curElem.css(props); 9380 } 9381 } 9382 }; 9383 _jQuery2.fn.extend({ 9384 // offset() relates an element's border box to the document origin 9385 offset: function offset(options) { 9386 // Preserve chaining for setter 9387 if (arguments.length) { 9388 return options === undefined ? this : this.each(function (i) { 9389 _jQuery2.offset.setOffset(this, options, i); 9390 }); 9391 } 9392 var rect, 9393 win, 9394 elem = this[0]; 9395 if (!elem) { 9396 return; 9397 } 9398 9399 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 9400 // Support: IE <=11 only 9401 // Running getBoundingClientRect on a 9402 // disconnected node in IE throws an error 9403 if (!elem.getClientRects().length) { 9404 return { 9405 top: 0, 9406 left: 0 9407 }; 9408 } 9409 9410 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 9411 rect = elem.getBoundingClientRect(); 9412 win = elem.ownerDocument.defaultView; 9413 return { 9414 top: rect.top + win.pageYOffset, 9415 left: rect.left + win.pageXOffset 9416 }; 9417 }, 9418 // position() relates an element's margin box to its offset parent's padding box 9419 // This corresponds to the behavior of CSS absolute positioning 9420 position: function position() { 9421 if (!this[0]) { 9422 return; 9423 } 9424 var offsetParent, 9425 offset, 9426 doc, 9427 elem = this[0], 9428 parentOffset = { 9429 top: 0, 9430 left: 0 9431 }; 9432 9433 // position:fixed elements are offset from the viewport, which itself always has zero offset 9434 if (_jQuery2.css(elem, "position") === "fixed") { 9435 // Assume position:fixed implies availability of getBoundingClientRect 9436 offset = elem.getBoundingClientRect(); 9437 } else { 9438 offset = this.offset(); 9439 9440 // Account for the *real* offset parent, which can be the document or its root element 9441 // when a statically positioned element is identified 9442 doc = elem.ownerDocument; 9443 offsetParent = elem.offsetParent || doc.documentElement; 9444 while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && _jQuery2.css(offsetParent, "position") === "static") { 9445 offsetParent = offsetParent.parentNode; 9446 } 9447 if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) { 9448 // Incorporate borders into its offset, since they are outside its content origin 9449 parentOffset = _jQuery2(offsetParent).offset(); 9450 parentOffset.top += _jQuery2.css(offsetParent, "borderTopWidth", true); 9451 parentOffset.left += _jQuery2.css(offsetParent, "borderLeftWidth", true); 9452 } 9453 } 9454 9455 // Subtract parent offsets and element margins 9456 return { 9457 top: offset.top - parentOffset.top - _jQuery2.css(elem, "marginTop", true), 9458 left: offset.left - parentOffset.left - _jQuery2.css(elem, "marginLeft", true) 9459 }; 9460 }, 9461 // This method will return documentElement in the following cases: 9462 // 1) For the element inside the iframe without offsetParent, this method will return 9463 // documentElement of the parent window 9464 // 2) For the hidden or detached element 9465 // 3) For body or html element, i.e. in case of the html node - it will return itself 9466 // 9467 // but those exceptions were never presented as a real life use-cases 9468 // and might be considered as more preferable results. 9469 // 9470 // This logic, however, is not guaranteed and can change at any point in the future 9471 offsetParent: function offsetParent() { 9472 return this.map(function () { 9473 var offsetParent = this.offsetParent; 9474 while (offsetParent && _jQuery2.css(offsetParent, "position") === "static") { 9475 offsetParent = offsetParent.offsetParent; 9476 } 9477 return offsetParent || documentElement; 9478 }); 9479 } 9480 }); 9481 9482 // Create scrollLeft and scrollTop methods 9483 _jQuery2.each({ 9484 scrollLeft: "pageXOffset", 9485 scrollTop: "pageYOffset" 9486 }, function (method, prop) { 9487 var top = "pageYOffset" === prop; 9488 _jQuery2.fn[method] = function (val) { 9489 return _access(this, function (elem, method, val) { 9490 // Coalesce documents and windows 9491 var win; 9492 if (isWindow(elem)) { 9493 win = elem; 9494 } else if (elem.nodeType === 9) { 9495 win = elem.defaultView; 9496 } 9497 if (val === undefined) { 9498 return win ? win[prop] : elem[method]; 9499 } 9500 if (win) { 9501 win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset); 9502 } else { 9503 elem[method] = val; 9504 } 9505 }, method, val, arguments.length); 9506 }; 9507 }); 9508 9509 // Support: Safari <=7 - 9.1, Chrome <=37 - 49 9510 // Add the top/left cssHooks using jQuery.fn.position 9511 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 9512 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 9513 // getComputedStyle returns percent when specified for top/left/bottom/right; 9514 // rather than make the css module depend on the offset module, just check for it here 9515 _jQuery2.each(["top", "left"], function (_i, prop) { 9516 _jQuery2.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) { 9517 if (computed) { 9518 computed = curCSS(elem, prop); 9519 9520 // If curCSS returns percentage, fallback to offset 9521 return rnumnonpx.test(computed) ? _jQuery2(elem).position()[prop] + "px" : computed; 9522 } 9523 }); 9524 }); 9525 9526 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 9527 _jQuery2.each({ 9528 Height: "height", 9529 Width: "width" 9530 }, function (name, type) { 9531 _jQuery2.each({ 9532 padding: "inner" + name, 9533 content: type, 9534 "": "outer" + name 9535 }, function (defaultExtra, funcName) { 9536 // Margin is only for outerHeight, outerWidth 9537 _jQuery2.fn[funcName] = function (margin, value) { 9538 var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), 9539 extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); 9540 return _access(this, function (elem, type, value) { 9541 var doc; 9542 if (isWindow(elem)) { 9543 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 9544 return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name]; 9545 } 9546 9547 // Get document width or height 9548 if (elem.nodeType === 9) { 9549 doc = elem.documentElement; 9550 9551 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 9552 // whichever is greatest 9553 return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]); 9554 } 9555 return value === undefined ? 9556 // Get width or height on the element, requesting but not forcing parseFloat 9557 _jQuery2.css(elem, type, extra) : 9558 // Set width or height on the element 9559 _jQuery2.style(elem, type, value, extra); 9560 }, type, chainable ? margin : undefined, chainable); 9561 }; 9562 }); 9563 }); 9564 _jQuery2.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (_i, type) { 9565 _jQuery2.fn[type] = function (fn) { 9566 return this.on(type, fn); 9567 }; 9568 }); 9569 _jQuery2.fn.extend({ 9570 bind: function bind(types, data, fn) { 9571 return this.on(types, null, data, fn); 9572 }, 9573 unbind: function unbind(types, fn) { 9574 return this.off(types, null, fn); 9575 }, 9576 delegate: function delegate(selector, types, data, fn) { 9577 return this.on(types, selector, data, fn); 9578 }, 9579 undelegate: function undelegate(selector, types, fn) { 9580 // ( namespace ) or ( selector, types [, fn] ) 9581 return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn); 9582 }, 9583 hover: function hover(fnOver, fnOut) { 9584 return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver); 9585 } 9586 }); 9587 _jQuery2.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function (_i, name) { 9588 // Handle event binding 9589 _jQuery2.fn[name] = function (data, fn) { 9590 return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name); 9591 }; 9592 }); 9593 9594 // Support: Android <=4.0 only 9595 // Make sure we trim BOM and NBSP 9596 // Require that the "whitespace run" starts from a non-whitespace 9597 // to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 9598 var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 9599 9600 // Bind a function to a context, optionally partially applying any 9601 // arguments. 9602 // jQuery.proxy is deprecated to promote standards (specifically Function#bind) 9603 // However, it is not slated for removal any time soon 9604 _jQuery2.proxy = function (fn, context) { 9605 var tmp, args, proxy; 9606 if (typeof context === "string") { 9607 tmp = fn[context]; 9608 context = fn; 9609 fn = tmp; 9610 } 9611 9612 // Quick check to determine if target is callable, in the spec 9613 // this throws a TypeError, but we will just return undefined. 9614 if (!isFunction(fn)) { 9615 return undefined; 9616 } 9617 9618 // Simulated bind 9619 args = _slice.call(arguments, 2); 9620 proxy = function proxy() { 9621 return fn.apply(context || this, args.concat(_slice.call(arguments))); 9622 }; 9623 9624 // Set the guid of unique handler to the same of original handler, so it can be removed 9625 proxy.guid = fn.guid = fn.guid || _jQuery2.guid++; 9626 return proxy; 9627 }; 9628 _jQuery2.holdReady = function (hold) { 9629 if (hold) { 9630 _jQuery2.readyWait++; 9631 } else { 9632 _jQuery2.ready(true); 9633 } 9634 }; 9635 _jQuery2.isArray = Array.isArray; 9636 _jQuery2.parseJSON = JSON.parse; 9637 _jQuery2.nodeName = nodeName; 9638 _jQuery2.isFunction = isFunction; 9639 _jQuery2.isWindow = isWindow; 9640 _jQuery2.camelCase = camelCase; 9641 _jQuery2.type = toType; 9642 _jQuery2.now = Date.now; 9643 _jQuery2.isNumeric = function (obj) { 9644 // As of jQuery 3.0, isNumeric is limited to 9645 // strings and numbers (primitives or objects) 9646 // that can be coerced to finite numbers (gh-2662) 9647 var type = _jQuery2.type(obj); 9648 return (type === "number" || type === "string") && 9649 // parseFloat NaNs numeric-cast false positives ("") 9650 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 9651 // subtraction forces infinities to NaN 9652 !isNaN(obj - parseFloat(obj)); 9653 }; 9654 _jQuery2.trim = function (text) { 9655 return text == null ? "" : (text + "").replace(rtrim, "$1"); 9656 }; 9657 9658 // Register as a named AMD module, since jQuery can be concatenated with other 9659 // files that may use define, but not via a proper concatenation script that 9660 // understands anonymous AMD modules. A named AMD is safest and most robust 9661 // way to register. Lowercase jquery is used because AMD module names are 9662 // derived from file names, and jQuery is normally delivered in a lowercase 9663 // file name. Do this after creating the global so that if an AMD module wants 9664 // to call noConflict to hide this version of jQuery, it will work. 9665 9666 // Note that for maximum portability, libraries that are not jQuery should 9667 // declare themselves as anonymous modules, and avoid setting a global if an 9668 // AMD loader is present. jQuery is a special case. For more information, see 9669 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 9670 9671 if (true) { 9672 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { 9673 return _jQuery2; 9674 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 9675 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 9676 } 9677 var 9678 // Map over jQuery in case of overwrite 9679 _jQuery = window.jQuery, 9680 // Map over the $ in case of overwrite 9681 _$ = window.$; 9682 _jQuery2.noConflict = function (deep) { 9683 if (window.$ === _jQuery2) { 9684 window.$ = _$; 9685 } 9686 if (deep && window.jQuery === _jQuery2) { 9687 window.jQuery = _jQuery; 9688 } 9689 return _jQuery2; 9690 }; 9691 9692 // Expose jQuery and $ identifiers, even in AMD 9693 // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 9694 // and CommonJS for browser emulators (trac-13566) 9695 if (typeof noGlobal === "undefined") { 9696 window.jQuery = window.$ = _jQuery2; 9697 } 9698 return _jQuery2; 9699}); 9700 9701/***/ })
vendor: 1,874 bytes, lines 9701-9751
9701 9702 9703/******/ }); 9704/************************************************************************/ 9705/******/ // The module cache 9706/******/ var __webpack_module_cache__ = {}; 9707/******/ 9708/******/ // The require function 9709/******/ function __webpack_require__(moduleId) { 9710/******/ // Check if module is in cache 9711/******/ var cachedModule = __webpack_module_cache__[moduleId]; 9712/******/ if (cachedModule !== undefined) { 9713/******/ return cachedModule.exports; 9714/******/ } 9715/******/ // Create a new module (and put it into the cache) 9716/******/ var module = __webpack_module_cache__[moduleId] = { 9717/******/ id: moduleId, 9718/******/ loaded: false, 9719/******/ exports: {} 9720/******/ }; 9721/******/ 9722/******/ // Execute the module function 9723/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 9724/******/ 9725/******/ // Flag the module as loaded 9726/******/ module.loaded = true; 9727/******/ 9728/******/ // Return the exports of the module 9729/******/ return module.exports; 9730/******/ } 9731/******/ 9732/************************************************************************/ 9733/******/ /* webpack/runtime/node module decorator */ 9734/******/ (() => { 9735/******/ __webpack_require__.nmd = (module) => { 9736/******/ module.paths = []; 9737/******/ if (!module.children) module.children = []; 9738/******/ return module; 9739/******/ }; 9740/******/ })(); 9741/******/ 9742/************************************************************************/ 9743/******/ 9744/******/ // startup 9745/******/ // Load entry module and return exports 9746/******/ // This entry module used 'module' so it can't be inlined 9747/******/ var __webpack_exports__ = __webpack_require__("./app_prime1studio_ec/cartridges/app_prime1studio_ec/cartridge/client/default/js/jquery.magnific-popup.min.js"); 9748/******/ 9749/******/ })() 9750; 9751//# sourceMappingURL=jquery.magnific-popup.min.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.