vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ "./
4resources/js/bootstrap.min.js": 5/*!***************************************!*\ 6 !*** ./resources/js/bootstrap.min.js ***! 7 \***************************************/ 8/***/ (() => { 9 10function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 11 12/*! 13 * Bootstrap v3.3.7 (http://getbootstrap.com) 14 * Copyright 2011-2016 Twitter, Inc. 15 * Licensed under the MIT license 16 */ 17if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery"); 18+function (a) { 19 "use strict"; 20 21 var b = a.fn.jquery.split(" ")[0].split("."); 22 if (b[0] < 2 && b[1] < 9 || 1 == b[0] && 9 == b[1] && b[2] < 1 || b[0] > 3) throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4"); 23}(jQuery), +function (a) { 24 "use strict"; 25 26 function b() { 27 var a = document.createElement("bootstrap"), 28 b = { 29 WebkitTransition: "webkitTransitionEnd", 30 MozTransition: "transitionend", 31 OTransition: "oTransitionEnd otransitionend", 32 transition: "transitionend" 33 }; 34 35 for (var c in b) { 36 if (void 0 !== a.style[c]) return { 37 end: b[c] 38 }; 39 } 40 41 return !1; 42 } 43 44 a.fn.emulateTransitionEnd = function (b) { 45 var c = !1, 46 d = this; 47 a(this).one("bsTransitionEnd", function () { 48 c = !0; 49 }); 50 51 var e = function e() { 52 c || a(d).trigger(a.support.transition.end); 53 }; 54 55 return setTimeout(e, b), this; 56 }, a(function () { 57 a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = { 58 bindType: a.support.transition.end, 59 delegateType: a.support.transition.end, 60 handle: function handle(b) { 61 if (a(b.target).is(this)) return b.handleObj.handler.apply(this, arguments); 62 } 63 }); 64 }); 65}(jQuery), +function (a) { 66 "use strict"; 67 68 function b(b) { 69 return this.each(function () { 70 var c = a(this), 71 e = c.data("bs.alert"); 72 e || c.data("bs.alert", e = new d(this)), "string" == typeof b && e[b].call(c); 73 }); 74 } 75 76 var c = '[data-dismiss="alert"]', 77 d = function d(b) { 78 a(b).on("click", c, this.close); 79 }; 80 81 d.VERSION = "3.3.7", d.TRANSITION_DURATION = 150, d.prototype.close = function (b) { 82 function c() { 83 g.detach().trigger("closed.bs.alert").remove(); 84 } 85 86 var e = a(this), 87 f = e.attr("data-target"); 88 f || (f = e.attr("href"), f = f && f.replace(/.*(?=#[^\s]*$)/, "")); 89 var g = a("#" === f ? [] : f); 90 b && b.preventDefault(), g.length || (g = e.closest(".alert")), g.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (g.removeClass("in"), a.support.transition && g.hasClass("fade") ? g.one("bsTransitionEnd", c).emulateTransitionEnd(d.TRANSITION_DURATION) : c()); 91 }; 92 var e = a.fn.alert; 93 a.fn.alert = b, a.fn.alert.Constructor = d, a.fn.alert.noConflict = function () { 94 return a.fn.alert = e, this; 95 }, a(document).on("click.bs.alert.data-api", c, d.prototype.close); 96}(jQuery), +function (a) { 97 "use strict"; 98 99 function b(b) { 100 return this.each(function () { 101 var d = a(this), 102 e = d.data("bs.button"), 103 f = "object" == _typeof(b) && b; 104 e || d.data("bs.button", e = new c(this, f)), "toggle" == b ? e.toggle() : b && e.setState(b); 105 }); 106 } 107 108 var c = function c(b, d) { 109 this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.isLoading = !1; 110 }; 111 112 c.VERSION = "3.3.7", c.DEFAULTS = { 113 loadingText: "loading..." 114 }, c.prototype.setState = function (b) { 115 var c = "disabled", 116 d = this.$element, 117 e = d.is("input") ? "val" : "html", 118 f = d.data(); 119 b += "Text", null == f.resetText && d.data("resetText", d[e]()), setTimeout(a.proxy(function () { 120 d[e](null == f[b] ? this.options[b] : f[b]), "loadingText" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c).prop(c, !0)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c).prop(c, !1)); 121 }, this), 0); 122 }, c.prototype.toggle = function () { 123 var a = !0, 124 b = this.$element.closest('[data-toggle="buttons"]'); 125 126 if (b.length) { 127 var c = this.$element.find("input"); 128 "radio" == c.prop("type") ? (c.prop("checked") && (a = !1), b.find(".active").removeClass("active"), this.$element.addClass("active")) : "checkbox" == c.prop("type") && (c.prop("checked") !== this.$element.hasClass("active") && (a = !1), this.$element.toggleClass("active")), c.prop("checked", this.$element.hasClass("active")), a && c.trigger("change"); 129 } else this.$element.attr("aria-pressed", !this.$element.hasClass("active")), this.$element.toggleClass("active"); 130 }; 131 var d = a.fn.button; 132 a.fn.button = b, a.fn.button.Constructor = c, a.fn.button.noConflict = function () { 133 return a.fn.button = d, this; 134 }, a(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function (c) { 135 var d = a(c.target).closest(".btn"); 136 b.call(d, "toggle"), a(c.target).is('input[type="radio"], input[type="checkbox"]') || (c.preventDefault(), d.is("input,button") ? d.trigger("focus") : d.find("input:visible,button:visible").first().trigger("focus")); 137 }).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function (b) { 138 a(b.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(b.type)); 139 }); 140}(jQuery), +function (a) { 141 "use strict"; 142 143 function b(b) { 144 return this.each(function () { 145 var d = a(this), 146 e = d.data("bs.carousel"), 147 f = a.extend({}, c.DEFAULTS, d.data(), "object" == _typeof(b) && b), 148 g = "string" == typeof b ? b : f.slide; 149 e || d.data("bs.carousel", e = new c(this, f)), "number" == typeof b ? e.to(b) : g ? e[g]() : f.interval && e.pause().cycle(); 150 }); 151 } 152 153 var c = function c(b, _c) { 154 this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = _c, this.paused = null, this.sliding = null, this.interval = null, this.$active = null, this.$items = null, this.options.keyboard && this.$element.on("key
154down.bs.carousel", a.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart" in document.documentElement) && this.$element.on("mouseenter.bs.carousel", a.proxy(this.pause, this)).on("mouseleave.bs.carousel", a.proxy(this.cycle, this)); 155 }; 156 157 c.VERSION = "3.3.7", c.TRANSITION_DURATION = 600, c.DEFAULTS = { 158 interval: 5e3, 159 pause: "hover", 160 wrap: !0, 161 keyboard: !0 162 }, c.prototype.keydown = function (a) { 163 if (!/input|textarea/i.test(a.target.tagName)) { 164 switch (a.which) { 165 case 37: 166 this.prev(); 167 break; 168 169 case 39: 170 this.next(); 171 break; 172 173 default: 174 return; 175 } 176 177 a.preventDefault(); 178 } 179 }, c.prototype.cycle = function (b) { 180 return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this; 181 }, c.prototype.getItemIndex = function (a) { 182 return this.$items = a.parent().children(".item"), this.$items.index(a || this.$active); 183 }, c.prototype.getItemForDirection = function (a, b) { 184 var c = this.getItemIndex(b), 185 d = "prev" == a && 0 === c || "next" == a && c == this.$items.length - 1; 186 if (d && !this.options.wrap) return b; 187 var e = "prev" == a ? -1 : 1, 188 f = (c + e) % this.$items.length; 189 return this.$items.eq(f); 190 }, c.prototype.to = function (a) { 191 var b = this, 192 c = this.getItemIndex(this.$active = this.$element.find(".item.active")); 193 if (!(a > this.$items.length - 1 || a < 0)) return this.sliding ? this.$element.one("slid.bs.carousel", function () { 194 b.to(a); 195 }) : c == a ? this.pause().cycle() : this.slide(a > c ? "next" : "prev", this.$items.eq(a)); 196 }, c.prototype.pause = function (b) { 197 return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this; 198 }, c.prototype.next = function () { 199 if (!this.sliding) return this.slide("next"); 200 }, c.prototype.prev = function () { 201 if (!this.sliding) return this.slide("prev"); 202 }, c.prototype.slide = function (b, d) { 203 var e = this.$element.find(".item.active"), 204 f = d || this.getItemForDirection(b, e), 205 g = this.interval, 206 h = "next" == b ? "left" : "right", 207 i = this; 208 if (f.hasClass("active")) return this.sliding = !1; 209 var j = f[0], 210 k = a.Event("slide.bs.carousel", { 211 relatedTarget: j, 212 direction: h 213 }); 214 215 if (this.$element.trigger(k), !k.isDefaultPrevented()) { 216 if (this.sliding = !0, g && this.pause(), this.$indicators.length) { 217 this.$indicators.find(".active").removeClass("active"); 218 var l = a(this.$indicators.children()[this.getItemIndex(f)]); 219 l && l.addClass("active"); 220 } 221 222 var m = a.Event("slid.bs.carousel", { 223 relatedTarget: j, 224 direction: h 225 }); 226 return a.support.transition && this.$element.hasClass("slide") ? (f.addClass(b), f[0].offsetWidth, e.addClass(h), f.addClass(h), e.one("bsTransitionEnd", function () { 227 f.removeClass([b, h].join(" ")).addClass("active"), e.removeClass(["active", h].join(" ")), i.sliding = !1, setTimeout(function () { 228 i.$element.trigger(m); 229 }, 0); 230 }).emulateTransitionEnd(c.TRANSITION_DURATION)) : (e.removeClass("active"), f.addClass("active"), this.sliding = !1, this.$element.trigger(m)), g && this.cycle(), this; 231 } 232 }; 233 var d = a.fn.carousel; 234 a.fn.carousel = b, a.fn.carousel.Constructor = c, a.fn.carousel.noConflict = function () { 235 return a.fn.carousel = d, this; 236 }; 237 238 var e = function e(c) { 239 var d, 240 e = a(this), 241 f = a(e.attr("data-target") || (d = e.attr("href")) && d.replace(/.*(?=#[^\s]+$)/, "")); 242 243 if (f.hasClass("carousel")) { 244 var g = a.extend({}, f.data(), e.data()), 245 h = e.attr("data-slide-to"); 246 h && (g.interval = !1), b.call(f, g), h && f.data("bs.carousel").to(h), c.preventDefault(); 247 } 248 }; 249
250 a(document).on("click.bs.carousel.data-api", "[data-slide]", e).on("click.bs.carousel.data-api", "[data-slide-to]", e), a(window).on("load", function () { 251 a('[data-ride="carousel"]').each(function () { 252 var c = a(this); 253 b.call(c, c.data()); 254 }); 255 }); 256}(jQuery), +function (a) { 257 "use strict"; 258 259 function b(b) { 260 var c, 261 d = b.attr("data-target") || (c = b.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, ""); 262 return a(d); 263 } 264 265 function c(b) { 266 return this.each(function () { 267 var c = a(this), 268 e = c.data("bs.collapse"), 269 f = a.extend({}, d.DEFAULTS, c.data(), "object" == _typeof(b) && b); 270 !e && f.toggle && /show|hide/.test(b) && (f.toggle = !1), e || c.data("bs.collapse", e = new d(this, f)), "string" == typeof b && e[b](); 271 }); 272 } 273 274 var d = function d(b, c) { 275 this.$element = a(b), this.options = a.extend({}, d.DEFAULTS, c), this.$trigger = a('[data-toggle="collapse"][href="#' + b.id + '"],[data-toggle="collapse"][data-target="#' + b.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle(); 276 }; 277 278 d.VERSION = "3.3.7", d.TRANSITION_DURATION = 350, d.DEFAULTS = { 279 toggle: !0 280 }, d.prototype.dimension = function () { 281 var a = this.$element.hasClass("width"); 282 return a ? "width" : "height"; 283 }, d.prototype.show = function () { 284 if (!this.transitioning && !this.$element.hasClass("in")) { 285 var b, 286 e = this.$parent && this.$parent.children(".panel").children(".in, .collapsing"); 287 288 if (!(e && e.length && (b = e.data("bs.collapse"), b && b.transitioning))) { 289 var f = a.Event("show.bs.collapse"); 290 291 if (this.$element.trigger(f), !f.isDefaultPrevented()) { 292 e && e.length && (c.call(e, "hide"), b || e.data("bs.collapse", null)); 293 var g = this.dimension(); 294 this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1; 295 296 var h = function h() { 297 this.$element.removeClass("collapsing").addClass("collapse in")[g](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse"); 298 }; 299 300 if (!a.support.transition) return h.call(this); 301 var i = a.camelCase(["scroll", g].join("-")); 302 this.$element.one("bsTransitionEnd", a.proxy(h, this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i]); 303 } 304 } 305 } 306 }, d.prototype.hide = function () { 307 if (!this.transitioning && this.$element.hasClass("in")) { 308 var b = a.Event("hide.bs.collapse"); 309 310 if (this.$element.trigger(b), !b.isDefaultPrevented()) { 311 var c = this.dimension(); 312 this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1; 313 314 var e = function e() { 315 this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse"); 316 }; 317 318 return a.support.transition ? void this.$element[c](0).one("bsTransitionEnd", a.proxy(e, this)).emulateTransitionEnd(d.TRANSITION_DURATION) : e.call(this); 319 } 320 } 321 }, d.prototype.toggle = function () { 322 this[this.$element.hasClass("in") ? "hide" : "show"](); 323 }, d.prototype.getParent = function () { 324 return a(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(a.proxy(function (c, d) { 325 var e = a(d); 326 this.addAriaAndCollapsedClass(b(e), e); 327 }, this)).end(); 328 }, d.prototype.addAriaAndCollapsedClass = function (a, b) { 329 var c = a.hasClass("in"); 330 a.attr("aria-expanded", c), b.toggleClass("collapsed", !c).attr("aria-expanded", c); 331 }; 332 var e = a.fn.collapse; 333 a.fn.collapse = c, a.fn.collapse.Constructor = d, a.fn.collapse.noConflict = function () { 334 return a.fn.collapse = e, this; 335 }, a(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function (d) { 336 var e = a(this); 337 e.attr("data-target") || d.preventDefault(); 338 var f = b(e), 339 g = f.data("bs.collapse"), 340 h = g ? "toggle" : e.data(); 341 c.call(f, h); 342 }); 343}(jQuery), +function (a) { 344 "use strict"; 345 346 function b(b) { 347 var c = b.attr("data-target"); 348 c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, "")); 349 var d = c && a(c); 350 return d && d.length ? d : b.parent(); 351 } 352 353 function c(c) { 354 c && 3 === c.which || (a(e).remove(), a(f).each(function () { 355 var d = a(this), 356 e = b(d), 357 f = { 358 relatedTarget: this 359 }; 360 e.hasClass("open") && (c && "click" == c.type && /input|textarea/i.test(c.target.tagName) && a.contains(e[0], c.target) || (e.trigger(c = a.Event("hide.bs.dropdown", f)), c.isDefaultPrevented() || (d.attr("aria-expanded", "false"), e.removeClass("open").trigger(a.Event("hidden.bs.dropdown", f))))); 361 })); 362 } 363 364 function d(b) { 365 return this.each(function () { 366 var c = a(this), 367 d = c.data("bs.dropdown"); 368 d || c.data("bs.dropdown", d = new g(this)), "string" == typeof b && d[b].call(c); 369 }); 370 } 371 372 var e = ".dropdown-backdrop", 373 f = '[data-toggle="dropdown"]', 374 g = function g(b) { 375 a(b).on("click.bs.dropdown", this.toggle); 376 }; 377 378 g.VERSION = "3.3.7", g.prototype.toggle = function (d) { 379 var e = a(this); 380 381 if (!e.is(".disabled, :disabled")) { 382 var f = b(e), 383 g = f.hasClass("open"); 384 385 if (c(), !g) { 386 "ontouchstart" in document.documentElement && !f.closest(".
386navbar-nav").length && a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click", c); 387 var h = { 388 relatedTarget: this 389 }; 390 if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented()) return; 391 e.trigger("focus").attr("aria-expanded", "true"), f.toggleClass("open").trigger(a.Event("shown.bs.dropdown", h)); 392 } 393 394 return !1; 395 } 396 }, g.prototype.keydown = function (c) { 397 if (/(38|40|27|32)/.test(c.which) && !/input|textarea/i.test(c.target.tagName)) { 398 var d = a(this); 399 400 if (c.preventDefault(), c.stopPropagation(), !d.is(".disabled, :disabled")) { 401 var e = b(d), 402 g = e.hasClass("open"); 403 if (!g && 27 != c.which || g && 27 == c.which) return 27 == c.which && e.find(f).trigger("focus"), d.trigger("click"); 404 var h = " li:not(.disabled):visible a", 405 i = e.find(".dropdown-menu" + h); 406 407 if (i.length) { 408 var j = i.index(c.target); 409 38 == c.which && j > 0 && j--, 40 == c.which && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger("focus"); 410 } 411 } 412 } 413 }; 414 var h = a.fn.dropdown; 415 a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function () { 416 return a.fn.dropdown = h, this; 417 }, a(document).on("click.bs.dropdown.data-api", c).on("click.bs.dropdown.data-api", ".dropdown form", function (a) { 418 a.stopPropagation(); 419 }).on("click.bs.dropdown.data-api", f, g.prototype.toggle).on("keydown.bs.dropdown.data-api", f, g.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", g.prototype.keydown); 420}(jQuery), +function (a) { 421 "use strict"; 422 423 function b(b, d) { 424 return this.each(function () { 425 var e = a(this), 426 f = e.data("bs.modal"), 427 g = a.extend({}, c.DEFAULTS, e.data(), "object" == _typeof(b) && b); 428 f || e.data("bs.modal", f = new c(this, g)), "string" == typeof b ? f[b](d) : g.show && f.show(d); 429 }); 430 } 431 432 var c = function c(b, _c2) { 433 this.options = _c2, this.$body = a(document.body), this.$element = a(b), this.$dialog = this.$element.find(".modal-dialog"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function () { 434 this.$element.trigger("loaded.bs.modal"); 435 }, this)); 436 }; 437 438 c.VERSION = "3.3.7", c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150, c.DEFAULTS = { 439 backdrop: !0, 440 keyboard: !0, 441 show: !0 442 }, c.prototype.toggle = function (a) { 443 return this.isShown ? this.hide() : this.show(a); 444 }, c.prototype.show = function (b) { 445 var d = this, 446 e = a.Event("show.bs.modal", { 447 relatedTarget: b 448 }); 449 this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.$dialog.on("mousedown.dismiss.bs.modal", function () { 450 d.$element.one("mouseup.dismiss.bs.modal", function (b) { 451 a(b.target).is(d.$element) && (d.ignoreBackdropClick = !0); 452 }); 453 }), this.backdrop(function () { 454 var e = a.support.transition && d.$element.hasClass("fade"); 455 d.$element.parent().length || d.$element.appendTo(d.$body), d.$element.show().scrollTop(0), d.adjustDialog(), e && d.$element[0].offsetWidth, d.$element.addClass("in"), d.enforceFocus(); 456 var f = a.Event("shown.bs.modal", { 457 relatedTarget: b 458 }); 459 e ? d.$dialog.one("bsTransitionEnd", function () { 460 d.$element.trigger("focus").trigger(f); 461 }).emulateTransitionEnd(c.TRANSITION_DURATION) : d.$element.trigger("focus").trigger(f); 462 })); 463 }, c.prototype.hide = function (b) { 464 b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").off("
464click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"), this.$dialog.off("mousedown.dismiss.bs.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", a.proxy(this.hideModal, this)).emulateTransitionEnd(c.TRANSITION_DURATION) : this.hideModal()); 465 }, c.prototype.enforceFocus = function () { 466 a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function (a) { 467 document === a.target || this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger("focus"); 468 }, this)); 469 }, c.prototype.escape = function () { 470 this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", a.proxy(function (a) { 471 27 == a.which && this.hide(); 472 }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal"); 473 }, c.prototype.resize = function () { 474 this.isShown ? a(window).on("resize.bs.modal", a.proxy(this.handleUpdate, this)) : a(window).off("resize.bs.modal"); 475 }, c.prototype.hideModal = function () { 476 var a = this; 477 this.$element.hide(), this.backdrop(function () { 478 a.$body.removeClass("modal-open"), a.resetAdjustments(), a.resetScrollbar(), a.$element.trigger("hidden.bs.modal"); 479 }); 480 }, c.prototype.removeBackdrop = function () { 481 this.$backdrop && this.$backdrop.remove(), this.$backdrop = null; 482 }, c.prototype.backdrop = function (b) { 483 var d = this, 484 e = this.$element.hasClass("fade") ? "fade" : ""; 485 486 if (this.isShown && this.options.backdrop) { 487 var f = a.support.transition && e; 488 if (this.$backdrop = a(document.createElement("div")).addClass("modal-backdrop " + e).appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", a.proxy(function (a) { 489 return this.ignoreBackdropClick ? void (this.ignoreBackdropClick = !1) : void (a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide())); 490 }, this)), f && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return; 491 f ? this.$backdrop.one("bsTransitionEnd", b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : b(); 492 } else if (!this.isShown && this.$backdrop) { 493 this.$backdrop.removeClass("in"); 494 495 var g = function g() { 496 d.removeBackdrop(), b && b(); 497 }; 498 499 a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : g(); 500 } else b && b(); 501 }, c.prototype.handleUpdate = function () { 502 this.adjustDialog(); 503 }, c.prototype.adjustDialog = function () { 504 var a = this.$element[0].scrollHeight > document.documentElement.clientHeight; 505 this.$element.css({ 506 paddingLeft: !this.bodyIsOverflowing && a ? this.scrollbarWidth : "", 507 paddingRight: this.bodyIsOverflowing && !a ? this.scrollbarWidth : "" 508 }); 509 }, c.prototype.resetAdjustments = function () { 510 this.$element.css({ 511 paddingLeft: "", 512 paddingRight: "" 513 }); 514 }, c.prototype.checkScrollbar = function () { 515 var a = window.innerWidth; 516 517 if (!a) { 518 var b = document.documentElement.getBoundingClientRect(); 519 a = b.right - Math.abs(b.left); 520 } 521 522 this.bodyIsOverflowing = document.body.clientWidth < a, this.scrollbarWidth = this.measureScrollbar(); 523 }, c.prototype.setScrollbar = function () { 524 var a = parseInt(this.$body.css("padding-right") || 0, 10); 525 this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", a + this.scrollbarWidth); 526 }, c.prototype.resetScrollbar = function () { 527 this.$body.css("padding-right", this.originalBodyPad); 528 }, c.prototype.measureScrollbar = function () { 529 var a = document.createElement("div"); 530 a.className = "modal-scrollbar-measure", this.$body.append(a); 531 var b = a.offsetWidth - a.clientWidth; 532 return this.$body[0].removeChild(a), b; 533 }; 534 var d = a.fn.modal; 535 a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function () { 536 return a.fn.modal = d, this; 537 }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (c) { 538 var d = a(this), 539 e = d.attr("href"), 540 f = a(d.attr("data-target") || e && e.replace(/.*(?=#[^\s]+$)/, "")), 541 g = f.data("bs.modal") ? "toggle" : a.extend({ 542 remote: !/#/.test(e) && e 543 }, f.data(), d.data()); 544 d.is("a") && c.preventDefault(), f.one("show.bs.modal", function (a) { 545 a.isDefaultPrevented() || f.one("hidden.bs.modal", function () { 546 d.is(":visible") && d.trigger("focus"); 547 }); 548 }), b.call(f, g, this); 549 }); 550}(jQuery), +function (a) { 551 "use strict"; 552 553 function b(b) { 554 return this.each(function () { 555 var d = a(this), 556 e = d.data("bs.tooltip"), 557 f = "object" == _typeof(b) && b; 558 !e && /destroy|hide/.test(b) || (e || d.data("bs.tooltip", e = new c(this, f)), "string" == typeof b && e[b]()); 559 }); 560 } 561 562 var c = function c(a, b) { 563 this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init("tooltip", a, b); 564 }; 565 566 c.VERSION = "3.3.7", c.TRANSITION_DURATION = 150, c.DEFAULTS = { 567 animation: !0, 568 placement: "top", 569 selector: !1, 570 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', 571 trigger: "hover focus", 572 title: "", 573 delay: 0, 574 html: !1, 575 container: !1, 576 viewport: { 577 selector: "body", 578 padding: 0 579 } 580 }, c.prototype.init = function (b, c, d) { 581 if (this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d), this.$viewport = this.options.viewport && a(a.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport), this.inState = { 582 click: !1, 583 hover: !1, 584 focus: !1 585 }, this.$element[0] instanceof document.constructor && !this.options.selector) throw new Error("`selector` option must be specified when initializing " + this.type + " on the window.document object!"); 586 587 for (var e = this.options.trigger.split(" "), f = e.length; f--;) { 588 var g = e[f]; 589 if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this));else if ("manual" != g) { 590 var h = "hover" == g ? "mouseenter" : "focusin", 591 i = "hover" == g ? "mouseleave" : "focusout"; 592 this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this)); 593 } 594 } 595 596 this.options.selector ? this._options = a.extend({}, this.options, { 597 trigger: "manual", 598 selector: "" 599 }) : this.fixTitle(); 600 }, c.prototype.getDefaults = function () { 601 return c.DEFAULTS; 602 }, c.prototype.getOptions = function (b) { 603 return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = { 604 show: b.delay, 605 hide: b.delay 606 }), b; 607 }, c.prototype.getDelegateOptions = function () { 608 var b = {}, 609 c = this.getDefaults(); 610 return this._options && a.each(this._options, function (a, d) { 611 c[a] != d && (b[a] = d); 612 }), b; 613 }, c.prototype.enter = function (b) { 614 var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type); 615 return c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), b instanceof a.Event && (c.inState["focusin" == b.type ? "focus" : "hover"] = !0), c.tip().hasClass("in") || "in" == c.hoverState ? void (c.hoverState = "in") : (clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void (c.timeout = setTimeout(function () { 616 "in" == c.hoverState && c.show(); 617 }, c.options.delay.show)) : c.show()); 618 }, c.prototype.isInStateTrue = function () { 619 for (var a in this.inState) { 620 if (this.inState[a]) return !0; 621 } 622 623 return !1; 624 }, c.prototype.leave = function (b) { 625 var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type); 626 if (c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), b instanceof a.Event && (c.inState["focusout" == b.type ? "focus" : "hover"] = !1), !c.isInStateTrue()) return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void (c.timeout = setTimeout(function () { 627 "out" == c.hoverState && c.hide(); 628 }, c.options.delay.hide)) : c.hide(); 629 }, c.prototype.show = function () { 630 var b = a.Event("show.bs." + this.type); 631 632 if (this.hasContent() && this.enabled) { 633 this.$element.trigger(b); 634 var d = a.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]); 635 if (b.isDefaultPrevented() || !d) return; 636 var e = this, 637 f = this.tip(), 638 g = this.getUID(this.type); 639 this.setContent(), f.attr("id", g), this.$element.attr("aria-describedby", g), this.options.animation && f.addClass("fade"); 640 var h = "function" == typeof this.options.placement ? this.options.placement.call(this, f[0], this.$element[0]) : this.options.placement, 641 i = /\s?auto?\s?/i, 642 j = i.test(h); 643 j && (h = h.replace(i, "") || "top"), f.detach().css({ 644 top: 0, 645 left: 0, 646 display: "block" 647 }).addClass(h).data("bs." + this.type, this), this.options.container ? f.appendTo(this.options.container) : f.insertAfter(this.$element), this.$element.trigger("inserted.bs." + this.type); 648 var k = this.getPosition(), 649 l = f[0].offsetWidth, 650 m = f[0].offsetHeight; 651 652 if (j) { 653 var n = h, 654 o = this.getPosition(this.$viewport); 655 h = "bottom" == h && k.bottom + m > o.bottom ? "top" : "top" == h && k.top - m < o.top ? "bottom" : "right" == h && k.right + l > o.width ? "left" : "left" == h && k.left - l < o.left ? "right" : h, f.removeClass(n).addClass(h); 656 } 657 658 var p = this.getCalculatedOffset(h, k, l, m); 659 this.applyPlacement(p, h); 660 661 var q = function q() { 662 var a = e.hoverState; 663 e.$element.trigger("shown.bs." + e.type), e.hoverState = null, "out" == a && e.leave(e); 664 }; 665 666 a.support.transition && this.$tip.hasClass("fade") ? f.one("bsTransitionEnd", q).emulateTransitionEnd(c.TRANSITION_DURATION) : q(); 667 } 668 }, c.prototype.applyPlacement = function (b, c) { 669 var d = this.tip(), 670 e = d[0].offsetWidth, 671 f = d[0].offsetHeight, 672 g = parseInt(d.css("margin-top"), 10), 673 h = parseInt(d.css("margin-left"), 10); 674 isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top += g, b.left += h, a.offset.setOffset(d[0], a.extend({ 675 using: function using(a) { 676 d.css({ 677 top: Math.round(a.top), 678 left: Math.round(a.left) 679 }); 680 } 681 }, b), 0), d.addClass("in"); 682 var i = d[0].offsetWidth, 683 j = d[0].offsetHeight; 684 "top" == c && j != f && (b.top = b.top + f - j); 685 var k = this.getViewportAdjustedDelta(c, b, i, j);
686 k.left ? b.left += k.left : b.top += k.top; 687 var l = /top|bottom/.test(c), 688 m = l ? 2 * k.left - e + i : 2 * k.top - f + j, 689 n = l ? "offsetWidth" : "offsetHeight"; 690 d.offset(b), this.replaceArrow(m, d[0][n], l); 691 }, c.prototype.replaceArrow = function (a, b, c) { 692 this.arrow().css(c ? "left" : "top", 50 * (1 - a / b) + "%").css(c ? "top" : "left", ""); 693 }, c.prototype.setContent = function () { 694 var a = this.tip(), 695 b = this.getTitle(); 696 a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right"); 697 }, c.prototype.hide = function (b) { 698 function d() { 699 "in" != e.hoverState && f.detach(), e.$element && e.$element.removeAttr("aria-describedby").trigger("hidden.bs." + e.type), b && b(); 700 } 701 702 var e = this, 703 f = a(this.$tip), 704 g = a.Event("hide.bs." + this.type); 705 if (this.$element.trigger(g), !g.isDefaultPrevented()) return f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one("bsTransitionEnd", d).emulateTransitionEnd(c.TRANSITION_DURATION) : d(), this.hoverState = null, this; 706 }, c.prototype.fixTitle = function () { 707 var a = this.$element; 708 (a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", ""); 709 }, c.prototype.hasContent = function () { 710 return this.getTitle(); 711 }, c.prototype.getPosition = function (b) { 712 b = b || this.$element; 713 var c = b[0], 714 d = "BODY" == c.tagName, 715 e = c.getBoundingClientRect(); 716 null == e.width && (e = a.extend({}, e, { 717 width: e.right - e.left, 718 height: e.bottom - e.top 719 })); 720 var f = window.SVGElement && c instanceof window.SVGElement, 721 g = d ? { 722 top: 0, 723 left: 0 724 } : f ? null : b.offset(), 725 h = { 726 scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop() 727 }, 728 i = d ? { 729 width: a(window).width(), 730 height: a(window).height() 731 } : null; 732 return a.extend({}, e, h, i, g); 733 }, c.prototype.getCalculatedOffset = function (a, b, c, d) { 734 return "bottom" == a ? { 735 top: b.top + b.height, 736 left: b.left + b.width / 2 - c / 2 737 } : "top" == a ? { 738 top: b.top - d, 739 left: b.left + b.width / 2 - c / 2 740 } : "left" == a ? { 741 top: b.top + b.height / 2 - d / 2, 742 left: b.left - c 743 } : { 744 top: b.top + b.height / 2 - d / 2, 745 left: b.left + b.width 746 }; 747 }, c.prototype.getViewportAdjustedDelta = function (a, b, c, d) { 748 var e = { 749 top: 0, 750 left: 0 751 }; 752 if (!this.$viewport) return e; 753 var f = this.options.viewport && this.options.viewport.padding || 0, 754 g = this.getPosition(this.$viewport); 755 756 if (/right|left/.test(a)) { 757 var h = b.top - f - g.scroll, 758 i = b.top + f - g.scroll + d; 759 h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i); 760 } else { 761 var j = b.left - f, 762 k = b.left + f + c; 763 j < g.left ? e.left = g.left - j : k > g.right && (e.left = g.left + g.width - k); 764 } 765 766 return e; 767 }, c.prototype.getTitle = function () { 768 var a, 769 b = this.$element, 770 c = this.options; 771 return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title); 772 }, c.prototype.getUID = function (a) { 773 do { 774 a += ~~(1e6 * Math.random()); 775 } while (document.getElementById(a)); 776 777 return a; 778 }, c.prototype.tip = function () { 779 if (!this.$tip && (this.$tip = a(this.options.template), 1 != this.$tip.length)) throw new Error(this.type + " `template` option must consist of exactly 1 top-level element!"); 780 return this.$tip; 781 }, c.prototype.arrow = function () { 782 return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow"); 783 }, c.prototype.enable = function () { 784 this.enabled = !0; 785 }, c.prototype.disable = function () { 786 this.enabled = !1; 787 }, c.prototype.toggleEnabled = function () { 788 this.enabled = !this.enabled; 789 }, c.prototype.toggle = function (b) { 790 var c = this; 791 b && (c = a(b.currentTarget).data("bs." + this.type), c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c))), b ? (c.inState.click = !c.inState.click, c.isInStateTrue() ? c.enter(c) : c.leave(c)) : c.tip().hasClass("in") ? c.leave(c) : c.enter(c); 792 }, c.prototype.destroy = function () { 793 var a = this; 794 clearTimeout(this.timeout), this.hide(function () { 795 a.$element.off("." + a.type).removeData("bs." + a.type), a.$tip && a.$tip.detach(), a.$tip = null, a.$arrow = null, a.$viewport = null, a.$element = null; 796 }); 797 }; 798 var d = a.fn.tooltip; 799 a.fn.tooltip = b, a.fn.tooltip.Constructor = c, a.fn.tooltip.noConflict = function () { 800 return a.fn.tooltip = d, this; 801 }; 802}(jQuery), +function (a) { 803 "use strict"; 804 805 function b(b) { 806 return this.each(function () { 807 var d = a(this), 808 e = d.data("bs.popover"), 809 f = "object" == _typeof(b) && b; 810 !e && /destroy|hide/.test(b) || (e || d.data("bs.popover", e = new c(this, f)), "string" == typeof b && e[b]()); 811 }); 812 } 813 814 var c = function c(a, b) { 815 this.init("popover", a, b); 816 }; 817 818 if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js"); 819 c.VERSION = "3.3.7", c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, { 820 placement: "right", 821 trigger: "click", 822 content: "", 823 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' 824 }), c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), c.prototype.constructor = c, c.prototype.getDefaults = function () { 825 return c.DEFAULTS; 826 }, c.prototype.setContent = function () { 827 var a = this.tip(), 828 b = this.getTitle(), 829 c = this.getContent(); 830 a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof c ? "html" : "append" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide(); 831 }, c.prototype.hasContent = function () { 832 return this.getTitle() || this.getContent(); 833 }, c.prototype.getContent = function () { 834 var a = this.$element, 835 b = this.options; 836 return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content); 837 }, c.prototype.arrow = function () { 838 return this.$arrow = this.$arrow || this.tip().find(".arrow"); 839 }; 840 var d = a.fn.popover; 841 a.fn.popover = b, a.fn.popover.Constructor = c, a.fn.popover.noConflict = function () { 842 return a.fn.popover = d, this; 843 }; 844}(jQuery), +function (a) { 845 "use strict"; 846 847 function b(c, d) { 848 this.$body = a(document.body), this.$scrollElement = a(a(c).is(document.body) ? window : c), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", a.proxy(this.process, this)), this.refresh(), this.process(); 849 } 850 851 function c(c) { 852 return this.each(function () { 853 var d = a(this), 854 e = d.data("bs.scrollspy"), 855 f = "object" == _typeof(c) && c; 856 e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c](); 857 }); 858 } 859 860 b.VERSION = "3.3.7", b.DEFAULTS = { 861 offset: 10 862 }, b.prototype.getScrollHeight = function () { 863 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight); 864 }, b.prototype.refresh = function () { 865 var b = this, 866 c = "offset", 867 d = 0; 868 this.offsets = [], this.targets = [], this.scrollHeight = this.get
vendor: 6,410 bytes, lines 868-1014
868ScrollHeight(), a.isWindow(this.$scrollElement[0]) || (c = "position", d = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function () { 869 var b = a(this), 870 e = b.data("target") || b.attr("href"), 871 f = /^#./.test(e) && a(e); 872 return f && f.length && f.is(":visible") && [[f[c]().top + d, e]] || null; 873 }).sort(function (a, b) { 874 return a[0] - b[0]; 875 }).each(function () { 876 b.offsets.push(this[0]), b.targets.push(this[1]); 877 }); 878 }, b.prototype.process = function () { 879 var a, 880 b = this.$scrollElement.scrollTop() + this.options.offset, 881 c = this.getScrollHeight(), 882 d = this.options.offset + c - this.$scrollElement.height(), 883 e = this.offsets, 884 f = this.targets, 885 g = this.activeTarget; 886 if (this.scrollHeight != c && this.refresh(), b >= d) return g != (a = f[f.length - 1]) && this.activate(a); 887 if (g && b < e[0]) return this.activeTarget = null, this.clear(); 888 889 for (a = e.length; a--;) { 890 g != f[a] && b >= e[a] && (void 0 === e[a + 1] || b < e[a + 1]) && this.activate(f[a]); 891 } 892 }, b.prototype.activate = function (b) { 893 this.activeTarget = b, this.clear(); 894 var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', 895 d = a(c).parents("li").addClass("active"); 896 d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy"); 897 }, b.prototype.clear = function () { 898 a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active"); 899 }; 900 var d = a.fn.scrollspy; 901 a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () { 902 return a.fn.scrollspy = d, this; 903 }, a(window).on("load.bs.scrollspy.data-api", function () { 904 a('[data-spy="scroll"]').each(function () { 905 var b = a(this); 906 c.call(b, b.data()); 907 }); 908 }); 909}(jQuery), +function (a) { 910 "use strict"; 911 912 function b(b) { 913 return this.each(function () { 914 var d = a(this), 915 e = d.data("bs.tab"); 916 e || d.data("bs.tab", e = new c(this)), "string" == typeof b && e[b](); 917 }); 918 } 919 920 var c = function c(b) { 921 this.element = a(b); 922 }; 923 924 c.VERSION = "3.3.7", c.TRANSITION_DURATION = 150, c.prototype.show = function () { 925 var b = this.element, 926 c = b.closest("ul:not(.dropdown-menu)"), 927 d = b.data("target"); 928 929 if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) { 930 var e = c.find(".active:last a"), 931 f = a.Event("hide.bs.tab", { 932 relatedTarget: b[0] 933 }), 934 g = a.Event("show.bs.tab", { 935 relatedTarget: e[0] 936 }); 937 938 if (e.trigger(f), b.trigger(g), !g.isDefaultPrevented() && !f.isDefaultPrevented()) { 939 var h = a(d); 940 this.activate(b.closest("li"), c), this.activate(h, h.parent(), function () { 941 e.trigger({ 942 type: "hidden.bs.tab", 943 relatedTarget: b[0] 944 }), b.trigger({ 945 type: "shown.bs.tab", 946 relatedTarget: e[0] 947 }); 948 }); 949 } 950 } 951 }, c.prototype.activate = function (b, d, e) { 952 function f() { 953 g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), h ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu").length && b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), e && e(); 954 } 955 956 var g = d.find("> .active"), 957 h = e && a.support.transition && (g.length && g.hasClass("fade") || !!d.find("> .fade").length); 958 g.length && h ? g.one("bsTransitionEnd", f).emulateTransitionEnd(c.TRANSITION_DURATION) : f(), g.removeClass("in"); 959 }; 960 var d = a.fn.tab; 961 a.fn.tab = b, a.fn.tab.Constructor = c, a.fn.tab.noConflict = function () { 962 return a.fn.tab = d, this; 963 }; 964 965 var e = function e(c) { 966 c.preventDefault(), b.call(a(this), "show"); 967 }; 968 969 a(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', e).on("click.bs.tab.data-api", '[data-toggle="pill"]', e); 970}(jQuery), +function (a) { 971 "use strict"; 972 973 function b(b) { 974 return this.each(function () { 975 var d = a(this), 976 e = d.data("bs.affix"), 977 f = "object" == _typeof(b) && b; 978 e || d.data("bs.affix", e = new c(this, f)), "string" == typeof b && e[b](); 979 }); 980 } 981 982 var c = function c(b, d) { 983 this.options = a.extend({}, c.DEFAULTS, d), this.$target = a(this.options.target).on("scroll.bs.affix.data-api", a.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(b), this.affixed = null, this.unpin = null, this.pinnedOffset = null, this.checkPosition(); 984 }; 985 986 c.VERSION = "3.3.7", c.RESET = "affix affix-top affix-bottom", c.DEFAULTS = { 987 offset: 0, 988 target: window 989 }, c.prototype.getState = function (a, b, c, d) { 990 var e = this.$target.scrollTop(), 991 f = this.$element.offset(), 992 g = this.$target.height(); 993 if (null != c && "top" == this.affixed) return e < c && "top"; 994 if ("bottom" == this.affixed) return null != c ? !(e + this.unpin <= f.top) && "bottom" : !(e + g <= a - d) && "bottom"; 995 var h = null == this.affixed, 996 i = h ? e : f.top, 997 j = h ? g : b; 998 return null != c && e <= c ? "top" : null != d && i + j >= a - d && "bottom"; 999 }, c.prototype.getPinnedOffset = function () { 1000 if (this.pinnedOffset) return this.pinnedOffset; 1001 this.$element.removeClass(c.RESET).addClass("affix"); 1002 var a = this.$target.scrollTop(), 1003 b = this.$element.offset(); 1004 return this.pinnedOffset = b.top - a; 1005 }, c.prototype.checkPositionWithEventLoop = function () { 1006 setTimeout(a.proxy(this.checkPosition, this), 1); 1007 }, c.prototype.checkPosition = function () { 1008 if (this.$element.is(":visible")) { 1009 var b = this.$element.height(), 1010 d = this.options.offset, 1011 e = d.top, 1012 f = d.bottom, 1013 g = Math.max(a(document).height(), a(document.body).height()); 1014 "object" != _typeof(d) && (f = e = d), "function" == typeof e && (e = d.top(this.$element)), "function" == typeof f && (f = d.bottom(this.$element));
1015 var h = this.getState(g, b, e, f); 1016 1017 if (this.affixed != h) { 1018 null != this.unpin && this.$element.css("top", ""); 1019 var i = "affix" + (h ? "-" + h : ""), 1020 j = a.Event(i + ".bs.affix"); 1021 if (this.$element.trigger(j), j.isDefaultPrevented()) return; 1022 this.affixed = h, this.unpin = "bottom" == h ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix", "affixed") + ".bs.affix"); 1023 } 1024 1025 "bottom" == h && this.$element.offset({ 1026 top: g - b - f 1027 }); 1028 } 1029 }; 1030 var d = a.fn.affix; 1031 a.fn.affix = b, a.fn.affix.Constructor = c, a.fn.affix.noConflict = function () { 1032 return a.fn.affix = d, this; 1033 }, a(window).on("load", function () { 1034 a('[data-spy="affix"]').each(function () { 1035 var c = a(this), 1036 d = c.data(); 1037 d.offset = d.offset || {}, null != d.offsetBottom && (d.offset.bottom = d.offsetBottom), null != d.offsetTop && (d.offset.top = d.offsetTop), b.call(c, d); 1038 }); 1039 }); 1040}(jQuery); 1041 1042/***/ }), 1043
1044/***/ "./resources/js/jquery.min.js": 1045/*!************************************!*\ 1046 !*** ./resources/js/jquery.min.js ***! 1047 \************************************/ 1048/***/ (function(module, exports, __webpack_require__) { 1049 1050/* module decorator */ module = __webpack_require__.nmd(module); 1051var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 1052 1053/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ 1054!function (a, b) { 1055 "object" == ( false ? 0 : _typeof(module)) && "object" == _typeof(module.exports) ? module.exports = a.document ? b(a, !0) : function (a) { 1056 if (!a.document) throw new Error("jQuery requires a window with a document"); 1057 return b(a); 1058 } : b(a); 1059}("undefined" != typeof window ? window : this, function (a, b) { 1060 var c = [], 1061 d = a.document, 1062 e = c.slice, 1063 f = c.concat, 1064 g = c.push, 1065 h = c.indexOf, 1066 i = {}, 1067 j = i.toString, 1068 k = i.hasOwnProperty, 1069 l = {}, 1070 m = "1.12.4", 1071 n = function n(a, b) { 1072 return new n.fn.init(a, b); 1073 }, 1074 o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 1075 p = /^-ms-/, 1076 q = /-([\da-z])/gi, 1077 r = function r(a, b) { 1078 return b.toUpperCase(); 1079 }; 1080 1081 n.fn = n.prototype = { 1082 jquery: m, 1083 constructor: n, 1084 selector: "", 1085 length: 0, 1086 toArray: function toArray() { 1087 return e.call(this); 1088 }, 1089 get: function get(a) { 1090 return null != a ? 0 > a ? this[a + this.length] : this[a] : e.call(this); 1091 }, 1092 pushStack: function pushStack(a) { 1093 var b = n.merge(this.constructor(), a); 1094 return b.prevObject = this, b.context = this.context, b; 1095 }, 1096 each: function each(a) { 1097 return n.each(this, a); 1098 }, 1099 map: function map(a) { 1100 return this.pushStack(n.map(this, function (b, c) { 1101 return a.call(b, c, b); 1102 })); 1103 }, 1104 slice: function slice() { 1105 return this.pushStack(e.apply(this, arguments)); 1106 }, 1107 first: function first() { 1108 return this.eq(0); 1109 }, 1110 last: function last() { 1111 return this.eq(-1); 1112 }, 1113 eq: function eq(a) { 1114 var b = this.length, 1115 c = +a + (0 > a ? b : 0); 1116 return this.pushStack(c >= 0 && b > c ? [this[c]] : []); 1117 }, 1118 end: function end() { 1119 return this.prevObject || this.constructor(); 1120 }, 1121 push: g, 1122 sort: c.sort, 1123 splice: c.splice 1124 }, n.extend = n.fn.extend = function () { 1125 var a, 1126 b, 1127 c, 1128 d, 1129 e, 1130 f, 1131 g = arguments[0] || {}, 1132 h = 1, 1133 i = arguments.length, 1134 j = !1; 1135 1136 for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == _typeof(g) || n.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++) { 1137 if (null != (e = arguments[h])) for (d in e) { 1138 a = g[d], c = e[d], g !== c && (j && c && (n.isPlainObject(c) || (b = n.isArray(c))) ? (b ? (b = !1, f = a && n.isArray(a) ? a : []) : f = a && n.isPlainObject(a) ? a : {}, g[d] = n.extend(j, f, c)) : void 0 !== c && (g[d] = c)); 1139 } 1140 } 1141 1142 return g; 1143 }, n.extend({ 1144 expando: "jQuery" + (m + Math.random()).replace(/\D/g, ""), 1145 isReady: !0, 1146 error: function error(a) { 1147 throw new Error(a); 1148 }, 1149 noop: function noop() {}, 1150 isFunction: function isFunction(a) { 1151 return "function" === n.type(a); 1152 }, 1153 isArray: Array.isArray || function (a) { 1154 return "array" === n.type(a); 1155 }, 1156 isWindow: function isWindow(a) { 1157 return null != a && a == a.window; 1158 }, 1159 isNumeric: function isNumeric(a) { 1160 var b = a && a.toString(); 1161 return !n.isArray(a) && b - parseFloat(b) + 1 >= 0; 1162 }, 1163 isEmptyObject: function isEmptyObject(a) { 1164 var b; 1165 1166 for (b in a) { 1167 return !1; 1168 } 1169 1170 return !0; 1171 }, 1172 isPlainObject: function isPlainObject(a) { 1173 var b; 1174 if (!a || "object" !== n.type(a) || a.nodeType || n.isWindow(a)) return !1; 1175
1176 try { 1177 if (a.constructor && !k.call(a, "constructor") && !k.call(a.constructor.prototype, "isPrototypeOf")) return !1; 1178 } catch (c) { 1179 return !1; 1180 } 1181 1182 if (!l.ownFirst) for (b in a) { 1183 return k.call(a, b); 1184 } 1185 1186 for (b in a) { 1187 ; 1188 } 1189 1190 return void 0 === b || k.call(a, b); 1191 }, 1192 type: function type(a) { 1193 return null == a ? a + "" : "object" == _typeof(a) || "function" == typeof a ? i[j.call(a)] || "object" : _typeof(a); 1194 }, 1195 globalEval: function globalEval(b) { 1196 b && n.trim(b) && (a.execScript || function (b) { 1197 a.eval.call(a, b); 1198 })(b); 1199 }, 1200 camelCase: function camelCase(a) { 1201 return a.replace(p, "ms-").replace(q, r); 1202 }, 1203 nodeName: function nodeName(a, b) { 1204 return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase(); 1205 }, 1206 each: function each(a, b) { 1207 var c, 1208 d = 0; 1209 1210 if (s(a)) { 1211 for (c = a.length; c > d; d++) { 1212 if (b.call(a[d], d, a[d]) === !1) break; 1213 } 1214 } else for (d in a) { 1215 if (b.call(a[d], d, a[d]) === !1) break; 1216 } 1217 1218 return a; 1219 }, 1220 trim: function trim(a) { 1221 return null == a ? "" : (a + "").replace(o, ""); 1222 }, 1223 makeArray: function makeArray(a, b) { 1224 var c = b || []; 1225 return null != a && (s(Object(a)) ? n.merge(c, "string" == typeof a ? [a] : a) : g.call(c, a)), c; 1226 }, 1227 inArray: function inArray(a, b, c) { 1228 var d; 1229 1230 if (b) { 1231 if (h) return h.call(b, a, c); 1232 1233 for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++) { 1234 if (c in b && b[c] === a) return c; 1235 } 1236 } 1237 1238 return -1; 1239 }, 1240 merge: function merge(a, b) { 1241 var c = +b.length, 1242 d = 0, 1243 e = a.length; 1244 1245 while (c > d) { 1246 a[e++] = b[d++]; 1247 } 1248 1249 if (c !== c) while (void 0 !== b[d]) { 1250 a[e++] = b[d++]; 1251 } 1252 return a.length = e, a; 1253 }, 1254 grep: function grep(a, b, c) { 1255 for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++) { 1256 d = !b(a[f], f), d !== h && e.push(a[f]); 1257 } 1258 1259 return e; 1260 }, 1261 map: function map(a, b, c) { 1262 var d, 1263 e, 1264 g = 0, 1265 h = []; 1266 if (s(a)) for (d = a.length; d > g; g++) { 1267 e = b(a[g], g, c), null != e && h.push(e); 1268 } else for (g in a) { 1269 e = b(a[g], g, c), null != e && h.push(e); 1270 } 1271 return f.apply([], h); 1272 }, 1273 guid: 1, 1274 proxy: function proxy(a, b) { 1275 var c, d, f; 1276 return "string" == typeof b && (f = a[b], b = a, a = f), n.isFunction(a) ? (c = e.call(arguments, 2), d = function d() { 1277 return a.apply(b || this, c.concat(e.call(arguments))); 1278 }, d.guid = a.guid = a.guid || n.guid++, d) : void 0; 1279 }, 1280 now: function now() { 1281 return +new Date(); 1282 }, 1283 support: l 1284 }), "function" == typeof Symbol && (n.fn[Symbol.iterator] = c[Symbol.iterator]), n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (a, b) { 1285 i["[object " + b + "]"] = b.toLowerCase(); 1286 }); 1287 1288 function s(a) { 1289 var b = !!a && "length" in a && a.length, 1290 c = n.type(a); 1291 return "function" === c || n.isWindow(a) ? !1 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a; 1292 } 1293 1294 var t = function (a) { 1295 var b, 1296 c, 1297 d, 1298 e, 1299 f, 1300 g, 1301 h, 1302 i, 1303 j, 1304 k, 1305 l, 1306 m, 1307 n, 1308 o, 1309 p, 1310 q, 1311 r, 1312 s, 1313 t, 1314 u = "sizzle" + 1 * new Date(), 1315 v = a.document, 1316 w = 0, 1317 x = 0, 1318 y = ga(), 1319 z = ga(), 1320 A = ga(), 1321 B = function B(a, b) { 1322 return a === b && (l = !0), 0; 1323 }, 1324 C = 1 << 31, 1325 D = {}.hasOwnProperty, 1326 E = [], 1327 F = E.pop, 1328 G = E.push, 1329 H = E.push, 1330 I = E.slice, 1331 J = function J(a, b) { 1332 for (var c = 0, d = a.length; d > c; c++) { 1333 if (a[c] === b) return c; 1334 } 1335 1336 return -1; 1337 }, 1338 K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 1339 L = "[\\x20\\t\\r\\n\\f]", 1340 M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", 1341 N = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + M + "))|)" + L + "*\\]", 1342 O = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + N + ")*)|.*)\\)|)", 1343 P = new RegExp(L + "+", "g"), 1344 Q = new RegExp("^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$", "g"), 1345 R = new RegExp("^" + L + "*," + L + "*"), 1346 S = new RegExp("^" + L + "*([>+~]|" + L + ")" + L + "*"), 1347 T = new RegExp("=" + L + "*([^\\]'\"]*?)" + L + "*\\]", "g"), 1348 U = new RegExp(O), 1349 V = new RegExp("^" + M + "$"), 1350 W = { 1351 ID: new RegExp("^#(" + M + ")"), 1352 CLASS: new RegExp("^\\.(" + M + ")"), 1353 TAG: new RegExp("^(" + M + "|[*])"), 1354 ATTR: new RegExp("^" + N), 1355 PSEUDO: new RegExp("^" + O), 1356 CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)", "i"), 1357 bool: new RegExp("^(?:" + K + ")$", "i"), 1358 needsContext: new RegExp("^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)", "i") 1359 }, 1360 X = /^(?:input|select|textarea|button)$/i, 1361 Y = /^h\d$/i, 1362 Z = /^[^{]+\{\s*\[native \w/, 1363 $ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 1364 _ = /[+~]/, 1365 aa = /'|\\/g, 1366 ba = new RegExp("\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)", "ig"), 1367 ca = function ca(a, b, c) { 1368 var d = "0x" + b - 65536; 1369 return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320); 1370 }, 1371 da = function da() { 1372 m(); 1373 }; 1374 1375 try { 1376 H.apply(E = I.call(v.childNodes), v.childNodes), E[v.childNodes.length].nodeType; 1377 } catch (ea) { 1378 H = { 1379 apply: E.length ? function (a, b) { 1380 G.apply(a, I.call(b)); 1381 } : function (a, b) { 1382 var c = a.length, 1383 d = 0; 1384 1385 while (a[c++] = b[d++]) { 1386 ; 1387 } 1388 1389 a.length = c - 1; 1390 } 1391 }; 1392 } 1393 1394 function fa(a, b, d, e) { 1395 var f, 1396 h, 1397 j, 1398 k, 1399 l, 1400 o, 1401 r, 1402 s, 1403 w = b && b.ownerDocument, 1404 x = b ? b.nodeType : 9; 1405 if (d = d || [], "string" != typeof a || !a || 1 !== x && 9 !== x && 11 !== x) return d; 1406 1407 if (!e && ((b ? b.ownerDocument || b : v) !== n && m(b), b = b || n, p)) { 1408 if (11 !== x && (o = $.exec(a))) if (f = o[1]) { 1409 if (9 === x) { 1410 if (!(j = b.getElementById(f))) return d; 1411 if (j.id === f) return d.push(j), d; 1412 } else if (w && (j = w.getElementById(f)) && t(b, j) && j.id === f) return d.push(j), d; 1413 } else { 1414 if (o[2]) return H.apply(d, b.getElementsByTagName(a)), d; 1415 if ((f = o[3]) && c.getElementsByClassName && b.getElementsByClassName) return H.apply(d, b.getElementsByClassName(f)), d; 1416 } 1417 1418 if (c.qsa && !A[a + " "] && (!q || !q.test(a))) { 1419 if (1 !== x) w = b, s = a;else if ("object" !== b.nodeName.toLowerCase()) { 1420 (k = b.getAttribute("id")) ? k = k.replace(aa, "\\$&") : b.setAttribute("id", k = u), r = g(a), h = r.length, l = V.test(k) ? "#" + k : "[id='" + k + "']"; 1421 1422 while (h--) { 1423 r[h] = l + " " + qa(r[h]); 1424 } 1425 1426 s = r.join(","), w = _.test(a) && oa(b.parentNode) || b; 1427 } 1428 if (s) try { 1429 return H.apply(d, w.querySelectorAll(s)), d; 1430 } catch (y) {} finally { 1431 k === u && b.removeAttribute("id"); 1432 } 1433 } 1434 } 1435 1436 return i(a.replace(Q, "$1"), b, d, e); 1437 } 1438 1439 function ga() { 1440 var a = []; 1441 1442 function b(c, e) { 1443 return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e; 1444 } 1445 1446 return b; 1447 } 1448 1449 function ha(a) { 1450 return a[u] = !0, a; 1451 } 1452 1453 function ia(a) { 1454 var b = n.createElement("div"); 1455
1456 try { 1457 return !!a(b); 1458 } catch (c) { 1459 return !1; 1460 } finally { 1461 b.parentNode && b.parentNode.removeChild(b), b = null; 1462 } 1463 } 1464 1465 function ja(a, b) { 1466 var c = a.split("|"), 1467 e = c.length; 1468 1469 while (e--) { 1470 d.attrHandle[c[e]] = b; 1471 } 1472 } 1473 1474 function ka(a, b) { 1475 var c = b && a, 1476 d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || C) - (~a.sourceIndex || C); 1477 if (d) return d; 1478 if (c) while (c = c.nextSibling) { 1479 if (c === b) return -1; 1480 } 1481 return a ? 1 : -1; 1482 } 1483 1484 function la(a) { 1485 return function (b) { 1486 var c = b.nodeName.toLowerCase(); 1487 return "input" === c && b.type === a; 1488 }; 1489 } 1490 1491 function ma(a) { 1492 return function (b) { 1493 var c = b.nodeName.toLowerCase(); 1494 return ("input" === c || "button" === c) && b.type === a; 1495 }; 1496 } 1497 1498 function na(a) { 1499 return ha(function (b) { 1500 return b = +b, ha(function (c, d) { 1501 var e, 1502 f = a([], c.length, b), 1503 g = f.length; 1504 1505 while (g--) { 1506 c[e = f[g]] && (c[e] = !(d[e] = c[e])); 1507 } 1508 }); 1509 }); 1510 } 1511 1512 function oa(a) { 1513 return a && "undefined" != typeof a.getElementsByTagName && a; 1514 } 1515 1516 c = fa.support = {}, f = fa.isXML = function (a) { 1517 var b = a && (a.ownerDocument || a).documentElement; 1518 return b ? "HTML" !== b.nodeName : !1; 1519 }, m = fa.setDocument = function (a) { 1520 var b, 1521 e, 1522 g = a ? a.ownerDocument || a : v; 1523 return g !== n && 9 === g.nodeType && g.documentElement ? (n = g, o = n.documentElement, p = !f(n), (e = n.defaultView) && e.top !== e && (e.addEventListener ? e.addEventListener("unload", da, !1) : e.attachEvent && e.attachEvent("onunload", da)), c.attributes = ia(function (a) { 1524 return a.className = "i", !a.getAttribute("className"); 1525 }), c.getElementsByTagName = ia(function (a) { 1526 return a.appendChild(n.createComment("")), !a.getElementsByTagName("*").length; 1527 }), c.getElementsByClassName = Z.test(n.getElementsByClassName), c.getById = ia(function (a) { 1528 return o.appendChild(a).id = u, !n.getElementsByName || !n.getElementsByName(u).length; 1529 }), c.getById ? (d.find.ID = function (a, b) { 1530 if ("undefined" != typeof b.getElementById && p) { 1531 var c = b.getElementById(a); 1532 return c ? [c] : []; 1533 } 1534 }, d.filter.ID = function (a) { 1535 var b = a.replace(ba, ca); 1536 return function (a) { 1537 return a.getAttribute("id") === b; 1538 }; 1539 }) : (delete d.find.ID, d.filter.ID = function (a) { 1540 var b = a.replace(ba, ca); 1541 return function (a) { 1542 var c = "undefined" != typeof a.getAttributeNode && a.getAttributeNode("id"); 1543 return c && c.value === b; 1544 }; 1545 }), d.find.TAG = c.getElementsByTagName ? function (a, b) { 1546 return "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName(a) : c.qsa ? b.querySelectorAll(a) : void 0; 1547 } : function (a, b) { 1548 var c, 1549 d = [], 1550 e = 0, 1551 f = b.getElementsByTagName(a); 1552 1553 if ("*" === a) { 1554 while (c = f[e++]) { 1555 1 === c.nodeType && d.push(c); 1556 } 1557 1558 return d; 1559 } 1560 1561 return f; 1562 }, d.find.CLASS = c.getElementsByClassName && function (a, b) { 1563 return "undefined" != typeof b.getElementsByClassName && p ? b.getElementsByClassName(a) : void 0; 1564 }, r = [], q = [], (c.qsa = Z.test(n.querySelectorAll)) && (ia(function (a) { 1565 o.appendChild(a).innerHTML = "<a id='" + u + "'></a><select id='" + u + "-\r\\' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && q.push("[*^$]=" + L + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || q.push("\\[" + L + "*(?:value|" + K + ")"), a.querySelectorAll("[id~=" + u + "-]").length || q.push("~="), a.querySelectorAll(":checked").length || q.push(":checked"), a.querySelectorAll("a#" + u + "+*").length || q.push(".#.+[+~]"); 1566 }), ia(function (a) { 1567 var b = n.createElement("input"); 1568 b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + L + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || q.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), q.push(",.*:"); 1569 })), (c.matchesSelector = Z.test(s = o.matches || o.webkitMatchesSelector || o.mozMatchesSelector || o.oMatchesSelector || o.msMatchesSelector)) && ia(function (a) { 1570 c.disconnectedMatch = s.call(a, "div"), s.call(a, "[s!='']:x"), r.push("!=", O); 1571 }), q = q.length && new RegExp(q.join("|")), r = r.length && new RegExp(r.join("|")), b = Z.test(o.compareDocumentPosition), t = b || Z.test(o.contains) ? function (a, b) { 1572 var c = 9 === a.nodeType ? a.documentElement : a, 1573 d = b && b.parentNode; 1574 return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d))); 1575 } : function (a, b) { 1576 if (b) while (b = b.parentNode) { 1577 if (b === a) return !0; 1578 } 1579 return !1; 1580 }, B = b ? function (a, b) { 1581 if (a === b) return l = !0, 0; 1582 var d = !a.compareDocumentPosition - !b.compareDocumentPosition; 1583 return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === n || a.ownerDocument === v && t(v, a) ? -1 : b === n || b.ownerDocument === v && t(v, b) ? 1 : k ? J(k, a) - J(k, b) : 0 : 4 & d ? -1 : 1); 1584 } : function (a, b) { 1585 if (a === b) return l = !0, 0; 1586 var c, 1587 d = 0, 1588 e = a.parentNode, 1589 f = b.parentNode, 1590 g = [a], 1591 h = [b]; 1592 if (!e || !f) return a === n ? -1 : b === n ? 1 : e ? -1 : f ? 1 : k ? J(k, a) - J(k, b) : 0; 1593 if (e === f) return ka(a, b); 1594 c = a; 1595 1596 while (c = c.parentNode) { 1597 g.unshift(c); 1598 } 1599 1600 c = b; 1601 1602 while (c = c.parentNode) { 1603 h.unshift(c); 1604 } 1605 1606 while (g[d] === h[d]) { 1607 d++; 1608 } 1609 1610 return d ? ka(g[d], h[d]) : g[d] === v ? -1 : h[d] === v ? 1 : 0; 1611 }, n) : n; 1612 }, fa.matches = function (a, b) { 1613 return fa(a, null, null, b); 1614 }, fa.matchesSelector = function (a, b) { 1615 if ((a.ownerDocument || a) !== n && m(a), b = b.replace(T, "='$1']"), c.matchesSelector && p && !A[b + " "] && (!r || !r.test(b)) && (!q || !q.test(b))) try { 1616 var d = s.call(a, b); 1617 if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d; 1618 } catch (e) {} 1619 return fa(b, n, null, [a]).length > 0; 1620 }
1620, fa.contains = function (a, b) { 1621 return (a.ownerDocument || a) !== n && m(a), t(a, b); 1622 }, fa.attr = function (a, b) { 1623 (a.ownerDocument || a) !== n && m(a); 1624 var e = d.attrHandle[b.toLowerCase()], 1625 f = e && D.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0; 1626 return void 0 !== f ? f : c.attributes || !p ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null; 1627 }, fa.error = function (a) { 1628 throw new Error("Syntax error, unrecognized expression: " + a); 1629 }, fa.uniqueSort = function (a) { 1630 var b, 1631 d = [], 1632 e = 0, 1633 f = 0; 1634 1635 if (l = !c.detectDuplicates, k = !c.sortStable && a.slice(0), a.sort(B), l) { 1636 while (b = a[f++]) { 1637 b === a[f] && (e = d.push(f)); 1638 } 1639 1640 while (e--) { 1641 a.splice(d[e], 1); 1642 } 1643 } 1644 1645 return k = null, a; 1646 }, e = fa.getText = function (a) { 1647 var b, 1648 c = "", 1649 d = 0, 1650 f = a.nodeType; 1651 1652 if (f) { 1653 if (1 === f || 9 === f || 11 === f) { 1654 if ("string" == typeof a.textContent) return a.textContent; 1655 1656 for (a = a.firstChild; a; a = a.nextSibling) { 1657 c += e(a); 1658 } 1659 } else if (3 === f || 4 === f) return a.nodeValue; 1660 } else while (b = a[d++]) { 1661 c += e(b); 1662 } 1663 1664 return c; 1665 }, d = fa.selectors = { 1666 cacheLength: 50, 1667 createPseudo: ha, 1668 match: W, 1669 attrHandle: {}, 1670 find: {}, 1671 relative: { 1672 ">": { 1673 dir: "parentNode", 1674 first: !0 1675 }, 1676 " ": { 1677 dir: "parentNode" 1678 }, 1679 "+": { 1680 dir: "previousSibling", 1681 first: !0 1682 }, 1683 "~": { 1684 dir: "previousSibling" 1685 } 1686 }, 1687 preFilter: { 1688 ATTR: function ATTR(a) { 1689 return a[1] = a[1].replace(ba, ca), a[3] = (a[3] || a[4] || a[5] || "").replace(ba, ca), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4); 1690 }, 1691 CHILD: function CHILD(a) { 1692 return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || fa.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && fa.error(a[0]), a; 1693 }, 1694 PSEUDO: function PSEUDO(a) { 1695 var b, 1696 c = !a[6] && a[2]; 1697 return W.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && U.test(c) && (b = g(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3)); 1698 } 1699 }, 1700 filter: { 1701 TAG: function TAG(a) { 1702 var b = a.replace(ba, ca).toLowerCase(); 1703 return "*" === a ? function () { 1704 return !0; 1705 } : function (a) { 1706 return a.nodeName && a.nodeName.toLowerCase() === b; 1707 }; 1708 }, 1709 CLASS: function CLASS(a) { 1710 var b = y[a + " "]; 1711 return b || (b = new RegExp("(^|" + L + ")" + a + "(" + L + "|$)")) && y(a, function (a) { 1712 return b.test("string" == typeof a.className && a.className || "undefined" != typeof a.getAttribute && a.getAttribute("class") || ""); 1713 }); 1714 }, 1715 ATTR: function ATTR(a, b, c) { 1716 return function (d) { 1717 var e = fa.attr(d, a); 1718 return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e.replace(P, " ") + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0; 1719 }; 1720 }, 1721 CHILD: function CHILD(a, b, c, d, e) { 1722 var f = "nth" !== a.slice(0, 3), 1723 g = "last" !== a.slice(-4), 1724 h = "of-type" === b; 1725 return 1 === d && 0 === e ? function (a) { 1726 return !!a.parentNode; 1727 } : function (b, c, i) { 1728 var j, 1729 k, 1730 l, 1731 m, 1732 n, 1733 o, 1734 p = f !== g ? "nextSibling" : "previousSibling", 1735 q = b.parentNode, 1736 r = h && b.nodeName.toLowerCase(), 1737 s = !i && !h, 1738 t = !1; 1739 1740 if (q) { 1741 if (f) { 1742 while (p) { 1743 m = b; 1744 1745 while (m = m[p]) { 1746 if (h ? m.nodeName.toLowerCase() === r : 1 === m.nodeType) return !1; 1747 } 1748 1749 o = p = "only" === a && !o && "nextSibling"; 1750 } 1751 1752 return !0; 1753 } 1754 1755 if (o = [g ? q.firstChild : q.lastChild], g && s) { 1756 m = q, l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === w && j[1], t = n && j[2], m = n && q.childNodes[n]; 1757 1758 while (m = ++n && m && m[p] || (t = n = 0) || o.pop()) { 1759 if (1 === m.nodeType && ++t && m === b) { 1760 k[a] = [w, n, t]; 1761 break; 1762 } 1763 } 1764 } else if (s && (m = b, l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === w && j[1], t = n), t === !1) while (m = ++n && m && m[p] || (t = n = 0) || o.pop()) { 1765 if ((h ? m.nodeName.toLowerCase() === r : 1 === m.nodeType) && ++t && (s && (l = m[u] || (m[u] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), k[a] = [w, t]), m === b)) break; 1766 } 1767 1768 return t -= e, t === d || t % d === 0 && t / d >= 0; 1769 } 1770 }; 1771 }, 1772 PSEUDO: function PSEUDO(a, b) { 1773 var c, 1774 e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || fa.error("unsupported pseudo: " + a); 1775 return e[u] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? ha(function (a, c) { 1776 var d, 1777 f = e(a, b), 1778 g = f.length; 1779 1780 while (g--) { 1781 d = J(a, f[g]), a[d] = !(c[d] = f[g]); 1782 } 1783 }) : function (a) { 1784 return e(a, 0, c); 1785 }) : e; 1786 } 1787 }, 1788 pseudos: { 1789 not: ha(function (a) { 1790 var b = [], 1791 c = [], 1792 d = h(a.replace(Q, "$1")); 1793 return d[u] ? ha(function (a, b, c, e) { 1794 var f, 1795 g = d(a, null, e, []), 1796 h = a.length; 1797 1798 while (h--) { 1799 (f = g[h]) && (a[h] = !(b[h] = f)); 1800 } 1801 }) : function (a, e, f) { 1802 return b[0] = a, d(b, null, f, c), b[0] = null, !c.pop(); 1803 }; 1804 }), 1805 has: ha(function (a) { 1806 return function (b) { 1807 return fa(a, b).length > 0; 1808 }; 1809 }), 1810 contains: ha(function (a) { 1811 return a = a.replace(ba, ca), function (b) { 1812 return (b.textContent || b.innerText || e(b)).indexOf(a) > -1; 1813 }; 1814 }), 1815 lang: ha(function (a) { 1816 return V.test(a || "") || fa.error("unsupported lang: " + a), a = a.replace(ba, ca).toLowerCase(), function (b) { 1817 var c; 1818 1819 do { 1820 if (c = p ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang")) return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); 1821 } while ((b = b.parentNode) && 1 === b.nodeType); 1822 1823 return !1; 1824 }; 1825 }), 1826 target: function target(b) { 1827 var c = a.location && a.location.hash; 1828 return c && c.slice(1) === b.id; 1829 }, 1830 root: function root(a) { 1831 return a === o; 1832 }, 1833 focus: function focus(a) { 1834 return a === n.activeElement && (!n.hasFocus || n.hasFocus()) && !!(a.type || a.href || ~a.tabIndex); 1835 }, 1836 enabled: function enabled(a) { 1837 return a.disabled === !1; 1838 }, 1839 disabled: function disabled(a) { 1840 return a.disabled === !0; 1841 }, 1842 checked: function checked(a) { 1843 var b = a.nodeName.toLowerCase(); 1844 return "input" === b && !!a.checked || "option" === b && !!a.selected; 1845 }, 1846 selected: function selected(a) { 1847 return a.parentNode && a.parentNode.selectedIndex, a.selected === !0; 1848 }, 1849 empty: function empty(a) { 1850 for (a = a.firstChild; a; a = a.nextSibling) { 1851 if (a.nodeType < 6) return !1; 1852 } 1853 1854 return !0; 1855 }, 1856 parent: function parent(a) { 1857 return !d.pseudos.empty(a); 1858 }, 1859 header: function header(a) { 1860 return Y.test(a.nodeName); 1861 }, 1862 input: function input(a) { 1863 return X.test(a.nodeName); 1864 }, 1865 button: function button(a) { 1866 var b = a.nodeName.toLowerCase(); 1867 return "input" === b && "button" === a.type || "button" === b; 1868 }, 1869 text: function text(a) { 1870 var b; 1871 return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase()); 1872 }, 1873 first: na(function () { 1874 return [0]; 1875 }), 1876 last: na(function (a, b) { 1877 return [b - 1]; 1878 }), 1879 eq: na(function (a, b, c) { 1880 return [0 > c ? c + b : c]; 1881 }), 1882 even: na(function (a, b) { 1883 for (var c = 0; b > c; c += 2) { 1884 a.push(c); 1885 } 1886 1887 return a; 1888 }), 1889 odd: na(function (a, b) { 1890 for (var c = 1; b > c; c += 2) { 1891 a.push(c); 1892 } 1893 1894 return a; 1895 }), 1896 lt: na(function (a, b, c) { 1897 for (var d = 0 > c ? c + b : c; --d >= 0;) { 1898 a.push(d); 1899 } 1900 1901 return a; 1902 }), 1903 gt: na(function (a, b, c) { 1904 for (var d = 0 > c ? c + b : c; ++d < b;) { 1905 a.push(d); 1906 } 1907 1908 return a; 1909 }) 1910 } 1911 }, d.pseudos.nth = d.pseudos.eq; 1912 1913 for (b in { 1914 radio: !0, 1915 checkbox: !0, 1916 file: !0, 1917 password: !0, 1918 image: !0 1919 }) { 1920 d.pseudos[b] = la(b); 1921 } 1922 1923 for (b in { 1924 submit: !0, 1925 reset: !0 1926 }) { 1927 d.pseudos[b] = ma(b); 1928 } 1929 1930 function pa() {} 1931 1932 pa.prototype = d.filters = d.pseudos, d.setFilters = new pa(), g = fa.tokenize = function (a, b) { 1933 var c, 1934 e, 1935 f, 1936 g, 1937 h, 1938 i, 1939 j, 1940 k = z[a + " "]; 1941 if (k) return b ? 0 : k.slice(0); 1942 h = a, i = [], j = d.preFilter; 1943 1944 while (h) { 1945 c && !(e = R.exec(h)) || (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = S.exec(h)) && (c = e.shift(), f.push({ 1946 value: c, 1947 type: e[0].replace(Q, " ") 1948 }), h = h.slice(c.length)); 1949 1950 for (g in d.filter) { 1951 !(e = W[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({ 1952 value: c, 1953 type: g, 1954 matches: e 1955 }), h = h.slice(c.length)); 1956 } 1957 1958 if (!c) break; 1959 } 1960 1961 return b ? h.length : h ? fa.error(a) : z(a, i).slice(0); 1962 }; 1963 1964 function qa(a) { 1965 for (var b = 0, c = a.length, d = ""; c > b; b++) { 1966 d += a[b].value; 1967 } 1968 1969 return d; 1970 } 1971 1972 function ra(a, b, c) { 1973 var d = b.dir, 1974 e = c && "parentNode" === d, 1975 f = x++;
1976 return b.first ? function (b, c, f) { 1977 while (b = b[d]) { 1978 if (1 === b.nodeType || e) return a(b, c, f); 1979 } 1980 } : function (b, c, g) { 1981 var h, 1982 i, 1983 j, 1984 k = [w, f]; 1985 1986 if (g) { 1987 while (b = b[d]) { 1988 if ((1 === b.nodeType || e) && a(b, c, g)) return !0; 1989 } 1990 } else while (b = b[d]) { 1991 if (1 === b.nodeType || e) { 1992 if (j = b[u] || (b[u] = {}), i = j[b.uniqueID] || (j[b.uniqueID] = {}), (h = i[d]) && h[0] === w && h[1] === f) return k[2] = h[2]; 1993 if (i[d] = k, k[2] = a(b, c, g)) return !0; 1994 } 1995 } 1996 }; 1997 } 1998 1999 function sa(a) { 2000 return a.length > 1 ? function (b, c, d) { 2001 var e = a.length; 2002 2003 while (e--) { 2004 if (!a[e](b, c, d)) return !1; 2005 } 2006 2007 return !0; 2008 } : a[0]; 2009 } 2010 2011 function ta(a, b, c) { 2012 for (var d = 0, e = b.length; e > d; d++) { 2013 fa(a, b[d], c); 2014 } 2015 2016 return c; 2017 } 2018 2019 function ua(a, b, c, d, e) { 2020 for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++) { 2021 (f = a[h]) && (c && !c(f, d, e) || (g.push(f), j && b.push(h))); 2022 } 2023 2024 return g; 2025 } 2026 2027 function va(a, b, c, d, e, f) { 2028 return d && !d[u] && (d = va(d)), e && !e[u] && (e = va(e, f)), ha(function (f, g, h, i) { 2029 var j, 2030 k, 2031 l, 2032 m = [], 2033 n = [], 2034 o = g.length, 2035 p = f || ta(b || "*", h.nodeType ? [h] : h, []), 2036 q = !a || !f && b ? p : ua(p, m, a, h, i), 2037 r = c ? e || (f ? a : o || d) ? [] : g : q; 2038 2039 if (c && c(q, r, h, i), d) { 2040 j = ua(r, n), d(j, [], h, i), k = j.length; 2041 2042 while (k--) { 2043 (l = j[k]) && (r[n[k]] = !(q[n[k]] = l)); 2044 } 2045 } 2046 2047 if (f) { 2048 if (e || a) { 2049 if (e) { 2050 j = [], k = r.length; 2051 2052 while (k--) { 2053 (l = r[k]) && j.push(q[k] = l); 2054 } 2055 2056 e(null, r = [], j, i); 2057 } 2058 2059 k = r.length; 2060 2061 while (k--) { 2062 (l = r[k]) && (j = e ? J(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l)); 2063 } 2064 } 2065 } else r = ua(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : H.apply(g, r); 2066 }); 2067 } 2068 2069 function wa(a) { 2070 for (var b, c, e, f = a.length, g = d.relative[a[0].type], h = g || d.relative[" "], i = g ? 1 : 0, k = ra(function (a) { 2071 return a === b; 2072 }, h, !0), l = ra(function (a) { 2073 return J(b, a) > -1; 2074 }, h, !0), m = [function (a, c, d) { 2075 var e = !g && (d || c !== j) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d)); 2076 return b = null, e; 2077 }]; f > i; i++) { 2078 if (c = d.relative[a[i].type]) m = [ra(sa(m), c)];else { 2079 if (c = d.filter[a[i].type].apply(null, a[i].matches), c[u]) { 2080 for (e = ++i; f > e; e++) { 2081 if (d.relative[a[e].type]) break; 2082 } 2083 2084 return va(i > 1 && sa(m), i > 1 && qa(a.slice(0, i - 1).concat({ 2085 value: " " === a[i - 2].type ? "*" : "" 2086 })).replace(Q, "$1"), c, e > i && wa(a.slice(i, e)), f > e && wa(a = a.slice(e)), f > e && qa(a)); 2087 } 2088 2089 m.push(c); 2090 } 2091 } 2092 2093 return sa(m); 2094 } 2095 2096 function xa(a, b) { 2097 var c = b.length > 0, 2098 e = a.length > 0, 2099 f = function f(_f, g, h, i, k) { 2100 var l, 2101 o, 2102 q, 2103 r = 0, 2104 s = "0", 2105 t = _f && [], 2106 u = [], 2107 v = j, 2108 x = _f || e && d.find.TAG("*", k), 2109 y = w += null == v ? 1 : Math.random() || .1, 2110 z = x.length; 2111 2112 for (k && (j = g === n || g || k); s !== z && null != (l = x[s]); s++) { 2113 if (e && l) { 2114 o = 0, g || l.ownerDocument === n || (m(l), h = !p); 2115 2116 while (q = a[o++]) { 2117 if (q(l, g || n, h)) { 2118 i.push(l); 2119 break; 2120 } 2121 } 2122 2123 k && (w = y); 2124 } 2125 2126 c && ((l = !q && l) && r--, _f && t.push(l)); 2127 } 2128 2129 if (r += s, c && s !== r) { 2130 o = 0; 2131 2132 while (q = b[o++]) { 2133 q(t, u, g, h); 2134 } 2135 2136 if (_f) { 2137 if (r > 0) while (s--) { 2138 t[s] || u[s] || (u[s] = F.call(i)); 2139 } 2140 u = ua(u); 2141 } 2142 2143 H.apply(i, u), k && !_f && u.length > 0 && r + b.length > 1 && fa.uniqueSort(i); 2144 } 2145 2146 return k && (w = y, j = v), t; 2147 }; 2148 2149 return c ? ha(f) : f; 2150 } 2151 2152 return h = fa.compile = function (a, b) { 2153 var c, 2154 d = [], 2155 e = [], 2156 f = A[a + " "]; 2157 2158 if (!f) { 2159 b || (b = g(a)), c = b.length; 2160 2161 while (c--) { 2162 f = wa(b[c]), f[u] ? d.push(f) : e.push(f); 2163 } 2164 2165 f = A(a, xa(e, d)), f.selector = a; 2166 } 2167 2168 return f; 2169 }, i = fa.select = function (a, b, e, f) { 2170 var i, 2171 j, 2172 k, 2173 l, 2174 m, 2175 n = "function" == typeof a && a, 2176 o = !f && g(a = n.selector || a); 2177 2178 if (e = e || [], 1 === o.length) { 2179 if (j = o[0] = o[0].slice(0), j.length > 2 && "ID" === (k = j[0]).type && c.getById && 9 === b.nodeType && p && d.relative[j[1].type]) { 2180 if (b = (d.find.ID(k.matches[0].replace(ba, ca), b) || [])[0], !b) return e; 2181 n && (b = b.parentNode), a = a.slice(j.shift().value.length); 2182 } 2183 2184 i = W.needsContext.test(a) ? 0 : j.length; 2185 2186 while (i--) { 2187 if (k = j[i], d.relative[l = k.type]) break; 2188 2189 if ((m = d.find[l]) && (f = m(k.matches[0].replace(ba, ca), _.test(j[0].type) && oa(b.parentNode) || b))) { 2190 if (j.splice(i, 1), a = f.length && qa(j), !a) return H.apply(e, f), e; 2191 break; 2192 } 2193 } 2194 } 2195 2196 return (n || h(a, o))(f, b, !p, e, !b || _.test(a) && oa(b.parentNode) || b), e; 2197 }, c.sortStable = u.split("").sort(B).join("") === u, c.detectDuplicates = !!l, m(), c.sortDetached = ia(function (a) { 2198 return 1 & a.compareDocumentPosition(n.createElement("div")); 2199 }), ia(function (a) { 2200 return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href"); 2201 }) || ja("type|href|height|width", function (a, b, c) { 2202 return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2); 2203 }), c.attributes && ia(function (a) { 2204 return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value"); 2205 }) || ja("value", function (a, b, c) { 2206 return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue; 2207 }), ia(function (a) { 2208 return null == a.getAttribute("disabled"); 2209 }) || ja(K, function (a, b, c) { 2210 var d; 2211 return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null; 2212 }), fa; 2213 }(a); 2214 2215 n.find = t, n.expr = t.selectors, n.expr[":"] = n.expr.pseudos, n.uniqueSort = n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains; 2216 2217 var u = function u(a, b, c) { 2218 var d = [], 2219 e = void 0 !== c; 2220 2221 while ((a = a[b]) && 9 !== a.nodeType) { 2222 if (1 === a.nodeType) { 2223 if (e && n(a).is(c)) break; 2224 d.push(a); 2225 } 2226 } 2227 2228 return d; 2229 }, 2230 v = function v(a, b) { 2231 for (var c = []; a; a = a.nextSibling) { 2232 1 === a.nodeType && a !== b && c.push(a); 2233 } 2234 2235 return c; 2236 }, 2237 w = n.expr.match.needsContext, 2238 x = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/, 2239 y = /^.[^:#\[\.,]*$/; 2240 2241 function z(a, b, c) { 2242 if (n.isFunction(b)) return n.grep(a, function (a, d) { 2243 return !!b.call(a, d, a) !== c; 2244 }); 2245 if (b.nodeType) return n.grep(a, function (a) { 2246 return a === b !== c; 2247 }); 2248 2249 if ("string" == typeof b) { 2250 if (y.test(b)) return n.filter(b, a, c); 2251 b = n.filter(b, a); 2252 } 2253 2254 return n.grep(a, function (a) { 2255 return n.inArray(a, b) > -1 !== c; 2256 }); 2257 } 2258 2259 n.filter = function (a, b, c) { 2260 var d = b[0]; 2261 return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function (a) { 2262 return 1 === a.nodeType; 2263 })); 2264 }, n.fn.extend({ 2265 find: function find(a) { 2266 var b, 2267 c = [], 2268 d = this, 2269 e = d.length; 2270 if ("string" != typeof a) return this.pushStack(n(a).filter(function () { 2271 for (b = 0; e > b; b++) { 2272 if (n.contains(d[b], this)) return !0; 2273 } 2274 })); 2275 2276 for (b = 0; e > b; b++) { 2277 n.find(a, d[b], c); 2278 } 2279 2280 return c = this.pushStack(e > 1 ? n.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c; 2281 }, 2282 filter: function filter(a) { 2283 return this.pushStack(z(this, a || [], !1)); 2284 }, 2285 not: function not(a) { 2286 return this.pushStack(z(this, a || [], !0)); 2287 }, 2288 is: function is(a) { 2289 return !!z(this, "string" == typeof a && w.test(a) ? n(a) : a || [], !1).length; 2290 } 2291 }); 2292 2293 var A, 2294 B = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, 2295 C = n.fn.init = function (a, b, c) { 2296 var e, f; 2297 if (!a) return this; 2298 2299 if (c = c || A, "string" == typeof a) { 2300 if (e = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : B.exec(a), !e || !e[1] && b) return !b || b.jquery ? (b || c).find(a) : this.constructor(b).find(a); 2301 2302 if (e[1]) { 2303 if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(e[1], b && b.nodeType ? b.ownerDocument || b : d, !0)), x.test(e[1]) && n.isPlainObject(b)) for (e in b) { 2304 n.isFunction(this[e]) ? this[e](b[e]) : this.attr(e, b[e]); 2305 } 2306 return this; 2307 } 2308 2309 if (f = d.getElementById(e[2]), f && f.parentNode) { 2310 if (f.id !== e[2]) return A.find(a); 2311 this.length = 1, this[0] = f; 2312 } 2313 2314 return this.context = d, this.selector = a, this; 2315 } 2316 2317 return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? "undefined" != typeof c.ready ? c.ready(a) : a(n) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), n.makeArray(a, this)); 2318 }; 2319 2320 C.prototype = n.fn, A = n(d); 2321 var D = /^(?:parents|prev(?:Until|All))/, 2322 E = { 2323 children: !0, 2324 contents: !0, 2325 next: !0, 2326 prev: !0 2327 }; 2328 n.fn.extend({ 2329 has: function has(a) { 2330 var b, 2331 c = n(a, this), 2332 d = c.length; 2333 return this.filter(function () { 2334 for (b = 0; d > b; b++) { 2335 if (n.contains(this, c[b])) return !0; 2336 } 2337 }); 2338 }, 2339 closest: function closest(a, b) { 2340 for (var c, d = 0, e = this.length, f = [], g = w.test(a) || "string" != typeof a ? n(a, b || this.context) : 0; e > d; d++) { 2341 for (c = this[d]; c && c !== b; c = c.parentNode) { 2342 if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && n.find.matchesSelector(c, a))) { 2343 f.push(c); 2344 break; 2345 } 2346 } 2347 } 2348 2349 return this.pushStack(f.length > 1 ? n.uniqueSort(f) : f); 2350 }, 2351 index: function index(a) { 2352 return a ? "string" == typeof a ? n.inArray(this[0], n(a)) : n.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1; 2353 }, 2354 add: function add(a, b) { 2355 return this.pushStack(n.uniqueSort(n.merge(this.get(), n(a, b)))); 2356 }, 2357 addBack: function addBack(a) { 2358 return this.add(null == a ? this.prevObject : this.prevObject.filter(a)); 2359 } 2360 }); 2361 2362 function F(a, b) { 2363 do { 2364 a = a[b]; 2365 } while (a && 1 !== a.nodeType); 2366 2367 return a; 2368 } 2369 2370 n.each({ 2371 parent: function parent(a) { 2372 var b = a.parentNode; 2373 return b && 11 !== b.nodeType ? b : null; 2374 }, 2375 parents: function parents(a) { 2376 return u(a, "parentNode"); 2377 }, 2378 parentsUntil: function parentsUntil(a, b, c) {
2379 return u(a, "parentNode", c); 2380 }, 2381 next: function next(a) { 2382 return F(a, "nextSibling"); 2383 }, 2384 prev: function prev(a) { 2385 return F(a, "previousSibling"); 2386 }, 2387 nextAll: function nextAll(a) { 2388 return u(a, "nextSibling"); 2389 }, 2390 prevAll: function prevAll(a) { 2391 return u(a, "previousSibling"); 2392 }, 2393 nextUntil: function nextUntil(a, b, c) { 2394 return u(a, "nextSibling", c); 2395 }, 2396 prevUntil: function prevUntil(a, b, c) { 2397 return u(a, "previousSibling", c); 2398 }, 2399 siblings: function siblings(a) { 2400 return v((a.parentNode || {}).firstChild, a); 2401 }, 2402 children: function children(a) { 2403 return v(a.firstChild); 2404 }, 2405 contents: function contents(a) { 2406 return n.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : n.merge([], a.childNodes); 2407 } 2408 }, function (a, b) { 2409 n.fn[a] = function (c, d) { 2410 var e = n.map(this, b, c); 2411 return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = n.filter(d, e)), this.length > 1 && (E[a] || (e = n.uniqueSort(e)), D.test(a) && (e = e.reverse())), this.pushStack(e); 2412 }; 2413 }); 2414 var G = /\S+/g; 2415 2416 function H(a) { 2417 var b = {}; 2418 return n.each(a.match(G) || [], function (a, c) { 2419 b[c] = !0; 2420 }), b; 2421 } 2422 2423 n.Callbacks = function (a) { 2424 a = "string" == typeof a ? H(a) : n.extend({}, a); 2425 2426 var b, 2427 c, 2428 d, 2429 e, 2430 f = [], 2431 g = [], 2432 h = -1, 2433 i = function i() { 2434 for (e = a.once, d = b = !0; g.length; h = -1) { 2435 c = g.shift(); 2436 2437 while (++h < f.length) { 2438 f[h].apply(c[0], c[1]) === !1 && a.stopOnFalse && (h = f.length, c = !1); 2439 } 2440 } 2441 2442 a.memory || (c = !1), b = !1, e && (f = c ? [] : ""); 2443 }, 2444 j = { 2445 add: function add() { 2446 return f && (c && !b && (h = f.length - 1, g.push(c)), function d(b) { 2447 n.each(b, function (b, c) { 2448 n.isFunction(c) ? a.unique && j.has(c) || f.push(c) : c && c.length && "string" !== n.type(c) && d(c); 2449 }); 2450 }(arguments), c && !b && i()), this; 2451 }, 2452 remove: function remove() { 2453 return n.each(arguments, function (a, b) { 2454 var c; 2455 2456 while ((c = n.inArray(b, f, c)) > -1) { 2457 f.splice(c, 1), h >= c && h--; 2458 } 2459 }), this; 2460 }, 2461 has: function has(a) { 2462 return a ? n.inArray(a, f) > -1 : f.length > 0; 2463 }, 2464 empty: function empty() { 2465 return f && (f = []), this; 2466 }, 2467 disable: function disable() { 2468 return e = g = [], f = c = "", this; 2469 }, 2470 disabled: function disabled() { 2471 return !f; 2472 }, 2473 lock: function lock() { 2474 return e = !0, c || j.disable(), this; 2475 }, 2476 locked: function locked() { 2477 return !!e; 2478 }, 2479 fireWith: function fireWith(a, c) { 2480 return e || (c = c || [], c = [a, c.slice ? c.slice() : c], g.push(c), b || i()), this; 2481 }, 2482 fire: function fire() { 2483 return j.fireWith(this, arguments), this; 2484 }, 2485 fired: function fired() { 2486 return !!d; 2487 } 2488 }; 2489 2490 return j; 2491 }, n.extend({ 2492 Deferred: function Deferred(a) { 2493 var b = [["resolve", "done", n.Callbacks("once memory"), "resolved"], ["reject", "fail", n.Callbacks("once memory"), "rejected"], ["notify", "progress", n.Callbacks("memory")]], 2494 c = "pending", 2495 d = { 2496 state: function state() { 2497 return c; 2498 }, 2499 always: function always() { 2500 return e.done(arguments).fail(arguments), this; 2501 }, 2502 then: function then() { 2503 var a = arguments; 2504 return n.Deferred(function (c) { 2505 n.each(b, function (b, f) { 2506 var g = n.isFunction(a[b]) && a[b]; 2507 e[f[1]](function () { 2508 var a = g && g.apply(this, arguments); 2509 a && n.isFunction(a.promise) ? a.promise().progress(c.notify).done(c.resolve).fail(c.reject) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments); 2510 }); 2511 }), a = null; 2512 }).promise(); 2513 }, 2514 promise: function promise(a) { 2515 return null != a ? n.extend(a, d) : d; 2516 } 2517 }, 2518 e = {}; 2519 return d.pipe = d.then, n.each(b, function (a, f) { 2520 var g = f[2], 2521 h = f[3]; 2522 d[f[1]] = g.add, h && g.add(function () { 2523 c = h; 2524 }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () { 2525 return e[f[0] + "With"](this === e ? d : this, arguments), this; 2526 }, e[f[0] + "With"] = g.fireWith; 2527 }), d.promise(e), a && a.call(e, e), e; 2528 }, 2529 when: function when(a) { 2530 var b = 0, 2531 c = e.call(arguments), 2532 d = c.length, 2533 f = 1 !== d || a && n.isFunction(a.promise) ? d : 0, 2534 g = 1 === f ? a : n.Deferred(), 2535 h = function h(a, b, c) { 2536 return function (d) { 2537 b[a] = this, c[a] = arguments.length > 1 ? e.call(arguments) : d, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c); 2538 }; 2539 }, 2540 i, 2541 j, 2542 k; 2543 2544 if (d > 1) for (i = new Array(d), j = new Array(d), k = new Array(d); d > b; b++) { 2545 c[b] && n.isFunction(c[b].promise) ? c[b].promise().progress(h(b, j, i)).done(h(b, k, c)).fail(g.reject) : --f; 2546 } 2547 return f || g.resolveWith(k, c), g.promise(); 2548 } 2549 }); 2550 var I; 2551 n.fn.ready = function (a) { 2552 return n.ready.promise().done(a), this; 2553 }, n.extend({ 2554 isReady: !1, 2555 readyWait: 1, 2556 holdReady: function holdReady(a) { 2557 a ? n.readyWait++ : n.ready(!0); 2558 }, 2559 ready: function ready(a) { 2560 (a === !0 ? --n.readyWait : n.isReady) || (n.isReady = !0, a !== !0 && --n.readyWait > 0 || (I.resolveWith(d, [n]), n.fn.triggerHandler && (n(d).triggerHandler("ready"), n(d).off("ready")))); 2561 } 2562 }); 2563 2564 function J() { 2565 d.addEventListener ? (d.removeEventListener("DOMContentLoaded", K), a.removeEventListener("load", K)) : (d.detachEvent("onreadystatechange", K), a.detachEvent("onload", K)); 2566 } 2567 2568 function K() { 2569 (d.addEventListener || "load" === a.event.type || "complete" === d.readyState) && (J(), n.ready()); 2570 } 2571 2572 n.ready.promise = function (b) { 2573 if (!I) if (I = n.Deferred(), "complete" === d.readyState || "loading" !== d.readyState && !d.documentElement.doScroll) a.setTimeout(n.ready);else if (d.addEventListener) d.addEventListener("DOMContentLoaded", K), a.addEventListener("load", K);else { 2574 d.attachEvent("onreadystatechange", K), a.attachEvent("onload", K); 2575 var c = !1; 2576
2577 try { 2578 c = null == a.frameElement && d.documentElement; 2579 } catch (e) {} 2580 2581 c && c.doScroll && !function f() { 2582 if (!n.isReady) { 2583 try { 2584 c.doScroll("left"); 2585 } catch (b) { 2586 return a.setTimeout(f, 50); 2587 } 2588 2589 J(), n.ready(); 2590 } 2591 }(); 2592 } 2593 return I.promise(b); 2594 }, n.ready.promise(); 2595 var L; 2596 2597 for (L in n(l)) { 2598 break; 2599 } 2600 2601 l.ownFirst = "0" === L, l.inlineBlockNeedsLayout = !1, n(function () { 2602 var a, b, c, e; 2603 c = d.getElementsByTagName("body")[0], c && c.style && (b = d.createElement("div"), e = d.createElement("div"), e.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(e).appendChild(b), "undefined" != typeof b.style.zoom && (b.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", l.inlineBlockNeedsLayout = a = 3 === b.offsetWidth, a && (c.style.zoom = 1)), c.removeChild(e)); 2604 }), function () { 2605 var a = d.createElement("div"); 2606 l.deleteExpando = !0; 2607 2608 try { 2609 delete a.test; 2610 } catch (b) { 2611 l.deleteExpando = !1; 2612 } 2613 2614 a = null; 2615 }(); 2616 2617 var M = function M(a) { 2618 var b = n.noData[(a.nodeName + " ").toLowerCase()], 2619 c = +a.nodeType || 1; 2620 return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b; 2621 }, 2622 N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 2623 O = /([A-Z])/g; 2624 2625 function P(a, b, c) { 2626 if (void 0 === c && 1 === a.nodeType) { 2627 var d = "data-" + b.replace(O, "-$1").toLowerCase(); 2628 2629 if (c = a.getAttribute(d), "string" == typeof c) { 2630 try { 2631 c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? n.parseJSON(c) : c; 2632 } catch (e) {} 2633 2634 n.data(a, b, c); 2635 } else c = void 0; 2636 } 2637 2638 return c; 2639 } 2640 2641 function Q(a) { 2642 var b; 2643 2644 for (b in a) { 2645 if (("data" !== b || !n.isEmptyObject(a[b])) && "toJSON" !== b) return !1; 2646 } 2647 2648 return !0; 2649 } 2650 2651 function R(a, b, d, e) { 2652 if (M(a)) { 2653 var f, 2654 g, 2655 h = n.expando, 2656 i = a.nodeType, 2657 j = i ? n.cache : a, 2658 k = i ? a[h] : a[h] && h; 2659 if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b) return k || (k = i ? a[h] = c.pop() || n.guid++ : h), j[k] || (j[k] = i ? {} : { 2660 toJSON: n.noop 2661 }), "object" != _typeof(b) && "function" != typeof b || (e ? j[k] = n.extend(j[k], b) : j[k].data = n.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[n.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[n.camelCase(b)])) : f = g, f; 2662 } 2663 } 2664 2665 function S(a, b, c) { 2666 if (M(a)) { 2667 var d, 2668 e, 2669 f = a.nodeType, 2670 g = f ? n.cache : a, 2671 h = f ? a[n.expando] : n.expando; 2672 2673 if (g[h]) { 2674 if (b && (d = c ? g[h] : g[h].data)) { 2675 n.isArray(b) ? b = b.concat(n.map(b, n.camelCase)) : b in d ? b = [b] : (b = n.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length; 2676 2677 while (e--) { 2678 delete d[b[e]]; 2679 } 2680 2681 if (c ? !Q(d) : !n.isEmptyObject(d)) return; 2682 } 2683 2684 (c || (delete g[h].data, Q(g[h]))) && (f ? n.cleanData([a], !0) : l.deleteExpando || g != g.window ? delete g[h] : g[h] = void 0); 2685 } 2686 } 2687 } 2688 2689 n.extend({ 2690 cache: {}, 2691 noData: { 2692 "applet ": !0, 2693 "embed ": !0, 2694 "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 2695 }, 2696 hasData: function hasData(a) { 2697 return a = a.nodeType ? n.cache[a[n.expando]] : a[n.expando], !!a && !Q(a); 2698 }, 2699 data: function data(a, b, c) { 2700 return R(a, b, c); 2701 }, 2702 removeData: function removeData(a, b) { 2703 return S(a, b); 2704 }, 2705 _data: function _data(a, b, c) { 2706 return R(a, b, c, !0); 2707 }, 2708 _removeData: function _removeData(a, b) { 2709 return S(a, b, !0); 2710 } 2711 }), n.fn.extend({ 2712 data: function data(a, b) { 2713 var c, 2714 d, 2715 e, 2716 f = this[0], 2717 g = f && f.attributes; 2718 2719 if (void 0 === a) { 2720 if (this.length && (e = n.data(f), 1 === f.nodeType && !n._data(f, "parsedAttrs"))) { 2721 c = g.length; 2722 2723 while (c--) { 2724 g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = n.camelCase(d.slice(5)), P(f, d, e[d]))); 2725 } 2726 2727 n._data(f, "parsedAttrs", !0); 2728 } 2729 2730 return e; 2731 } 2732 2733 return "object" == _typeof(a) ? this.each(function () { 2734 n.data(this, a); 2735 }) : arguments.length > 1 ? this.each(function () { 2736 n.data(this, a, b); 2737 }) : f ? P(f, a, n.data(f, a)) : void 0; 2738 }, 2739 removeData: function removeData(a) { 2740 return this.each(function () { 2741 n.removeData(this, a); 2742 }); 2743 } 2744 }), n.extend({ 2745 queue: function queue(a, b, c) { 2746 var d; 2747 return a ? (b = (b || "fx") + "queue", d = n._data(a, b), c && (!d || n.isArray(c) ? d = n._data(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0; 2748 }, 2749 dequeue: function dequeue(a, b) { 2750 b = b || "fx"; 2751 2752 var c = n.queue(a, b), 2753 d = c.length, 2754 e = c.shift(), 2755 f = n._queueHooks(a, b), 2756 g = function g() { 2757 n.dequeue(a, b); 2758 }; 2759 2760 "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire(); 2761 }, 2762 _queueHooks: function _queueHooks(a, b) { 2763 var c = b + "queueHooks"; 2764 return n._data(a, c) || n._data(a, c, { 2765 empty: n.Callbacks("once memory").add(function () { 2766 n._removeData(a, b + "queue"), n._removeData(a, c); 2767 }) 2768 }); 2769 } 2770 }), n.fn.extend({ 2771 queue: function queue(a, b) { 2772 var c = 2; 2773 return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function () { 2774 var c = n.queue(this, a, b); 2775 n._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && n.dequeue(this, a); 2776 }); 2777 }, 2778 dequeue: function dequeue(a) { 2779 return this.each(function () { 2780 n.dequeue(this, a); 2781 }); 2782 }, 2783 clearQueue: function clearQueue(a) { 2784 return this.queue(a || "fx", []); 2785 }, 2786 promise: function promise(a, b) { 2787 var c, 2788 d = 1, 2789 e = n.Deferred(), 2790 f = this, 2791 g = this.length, 2792 h = function h() { 2793 --d || e.resolveWith(f, [f]); 2794 }; 2795 2796 "string" != typeof a && (b = a, a = void 0), a = a || "fx"; 2797 2798 while (g--) { 2799 c = n._data(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h)); 2800 } 2801 2802 return h(), e.promise(b); 2803 } 2804 }), function () { 2805 var a; 2806 2807 l.shrinkWrapBlocks = function () { 2808 if (null != a) return a; 2809 a = !1; 2810 var b, c, e; 2811 return c = d.getElementsByTagName("body")[0], c && c.style ? (b = d.createElement("div"), e = d.createElement("div"), e.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(e).appendChild(b), "undefined" != typeof b.style.zoom && (b.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", b.appendChild(d.createElement("div")).style.width = "5px", a = 3 !== b.offsetWidth), c.removeChild(e), a) : void 0; 2812 }; 2813 }(); 2814 2815 var T = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
2816 U = new RegExp("^(?:([+-])=|)(" + T + ")([a-z%]*)$", "i"), 2817 V = ["Top", "Right", "Bottom", "Left"], 2818 W = function W(a, b) { 2819 return a = b || a, "none" === n.css(a, "display") || !n.contains(a.ownerDocument, a); 2820 }; 2821 2822 function X(a, b, c, d) { 2823 var e, 2824 f = 1, 2825 g = 20, 2826 h = d ? function () { 2827 return d.cur(); 2828 } : function () { 2829 return n.css(a, b, ""); 2830 }, 2831 i = h(), 2832 j = c && c[3] || (n.cssNumber[b] ? "" : "px"), 2833 k = (n.cssNumber[b] || "px" !== j && +i) && U.exec(n.css(a, b)); 2834 2835 if (k && k[3] !== j) { 2836 j = j || k[3], c = c || [], k = +i || 1; 2837 2838 do { 2839 f = f || ".5", k /= f, n.style(a, b, k + j); 2840 } while (f !== (f = h() / i) && 1 !== f && --g); 2841 } 2842 2843 return c && (k = +k || +i || 0, e = c[1] ? k + (c[1] + 1) * c[2] : +c[2], d && (d.unit = j, d.start = k, d.end = e)), e; 2844 } 2845 2846 var Y = function Y(a, b, c, d, e, f, g) { 2847 var h = 0, 2848 i = a.length, 2849 j = null == c; 2850 2851 if ("object" === n.type(c)) { 2852 e = !0; 2853 2854 for (h in c) { 2855 Y(a, b, h, c[h], !0, f, g); 2856 } 2857 } else if (void 0 !== d && (e = !0, n.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function b(a, _b2, c) { 2858 return j.call(n(a), c); 2859 })), b)) for (; i > h; h++) { 2860 b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); 2861 } 2862 2863 return e ? a : j ? b.call(a) : i ? b(a[0], c) : f; 2864 }, 2865 Z = /^(?:checkbox|radio)$/i, 2866 $ = /<([\w:-]+)/, 2867 _ = /^$|\/(?:java|ecma)script/i, 2868 aa = /^\s+/, 2869 ba = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video"; 2870 2871 function ca(a) { 2872 var b = ba.split("|"), 2873 c = a.createDocumentFragment(); 2874 if (c.createElement) while (b.length) { 2875 c.createElement(b.pop()); 2876 } 2877 return c; 2878 } 2879 2880 !function () { 2881 var a = d.createElement("div"), 2882 b = d.createDocumentFragment(), 2883 c = d.createElement("input"); 2884 a.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", l.leadingWhitespace = 3 === a.firstChild.nodeType, l.tbody = !a.getElementsByTagName("tbody").length, l.htmlSerialize = !!a.getElementsByTagName("link").length, l.html5Clone = "<:nav></:nav>" !== d.createElement("nav").cloneNode(!0).outerHTML, c.type = "checkbox", c.checked = !0, b.appendChild(c), l.appendChecked = c.checked, a.innerHTML = "<textarea>x</textarea>", l.noCloneChecked = !!a.cloneNode(!0).lastChild.defaultValue, b.appendChild(a), c = d.createElement("input"), c.setAttribute("type", "radio"), c.setAttribute("checked", "checked"), c.setAttribute("name", "t"), a.appendChild(c), l.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !!a.addEventListener, a[n.expando] = 1, l.attributes = !a.getAttribute(n.expando); 2885 }(); 2886 var da = { 2887 option: [1, "<select multiple='multiple'>", "</select>"], 2888 legend: [1, "<fieldset>", "</fieldset>"], 2889 area: [1, "<map>", "</map>"], 2890 param: [1, "<object>", "</object>"], 2891 thead: [1, "<table>", "</table>"], 2892 tr: [2, "<table><tbody>", "</tbody></table>"], 2893 col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], 2894 td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], 2895 _default: l.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"] 2896 }; 2897 da.optgroup = da.option, da.tbody = da.tfoot = da.colgroup = da.caption = da.thead, da.th = da.td; 2898 2899 function ea(a, b) { 2900 var c, 2901 d, 2902 e = 0, 2903 f = "undefined" != typeof a.getElementsByTagName ? a.getElementsByTagName(b || "*") : "undefined" != typeof a.querySelectorAll ? a.querySelectorAll(b || "*") : void 0; 2904 if (!f) for (f = [], c = a.childNodes || a; null != (d = c[e]); e++) { 2905 !b || n.nodeName(d, b) ? f.push(d) : n.merge(f, ea(d, b)); 2906 } 2907 return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], f) : f; 2908 } 2909 2910 function fa(a, b) { 2911 for (var c, d = 0; null != (c = a[d]); d++) { 2912 n._data(c, "globalEval", !b || n._data(b[d], "globalEval")); 2913 } 2914 } 2915
2916 var ga = /<|&#?\w+;/, 2917 ha = /<tbody/i; 2918 2919 function ia(a) { 2920 Z.test(a.type) && (a.defaultChecked = a.checked); 2921 } 2922 2923 function ja(a, b, c, d, e) { 2924 for (var f, g, h, i, j, k, m, o = a.length, p = ca(b), q = [], r = 0; o > r; r++) { 2925 if (g = a[r], g || 0 === g) if ("object" === n.type(g)) n.merge(q, g.nodeType ? [g] : g);else if (ga.test(g)) { 2926 i = i || p.appendChild(b.createElement("div")), j = ($.exec(g) || ["", ""])[1].toLowerCase(), m = da[j] || da._default, i.innerHTML = m[1] + n.htmlPrefilter(g) + m[2], f = m[0]; 2927 2928 while (f--) { 2929 i = i.lastChild; 2930 } 2931 2932 if (!l.leadingWhitespace && aa.test(g) && q.push(b.createTextNode(aa.exec(g)[0])), !l.tbody) { 2933 g = "table" !== j || ha.test(g) ? "<table>" !== m[1] || ha.test(g) ? 0 : i : i.firstChild, f = g && g.childNodes.length; 2934 2935 while (f--) { 2936 n.nodeName(k = g.childNodes[f], "tbody") && !k.childNodes.length && g.removeChild(k); 2937 } 2938 } 2939 2940 n.merge(q, i.childNodes), i.textContent = ""; 2941 2942 while (i.firstChild) { 2943 i.removeChild(i.firstChild); 2944 } 2945 2946 i = p.lastChild; 2947 } else q.push(b.createTextNode(g)); 2948 } 2949 2950 i && p.removeChild(i), l.appendChecked || n.grep(ea(q, "input"), ia), r = 0; 2951 2952 while (g = q[r++]) { 2953 if (d && n.inArray(g, d) > -1) e && e.push(g);else if (h = n.contains(g.ownerDocument, g), i = ea(p.appendChild(g), "script"), h && fa(i), c) { 2954 f = 0; 2955 2956 while (g = i[f++]) { 2957 _.test(g.type || "") && c.push(g); 2958 } 2959 } 2960 } 2961 2962 return i = null, p; 2963 } 2964 2965 !function () { 2966 var b, 2967 c, 2968 e = d.createElement("div"); 2969 2970 for (b in { 2971 submit: !0, 2972 change: !0, 2973 focusin: !0 2974 }) { 2975 c = "on" + b, (l[b] = c in a) || (e.setAttribute(c, "t"), l[b] = e.attributes[c].expando === !1); 2976 } 2977 2978 e = null; 2979 }(); 2980 var ka = /^(?:input|select|textarea)$/i, 2981 la = /^key/, 2982 ma = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 2983 na = /^(?:focusinfocus|focusoutblur)$/, 2984 oa = /^([^.]*)(?:\.(.+)|)/; 2985 2986 function pa() { 2987 return !0; 2988 } 2989 2990 function qa() { 2991 return !1; 2992 } 2993 2994 function ra() { 2995 try { 2996 return d.activeElement; 2997 } catch (a) {} 2998 } 2999 3000 function sa(a, b, c, d, e, f) { 3001 var g, h; 3002 3003 if ("object" == _typeof(b)) { 3004 "string" != typeof c && (d = d || c, c = void 0); 3005 3006 for (h in b) { 3007 sa(a, h, c, d, b[h], f); 3008 } 3009 3010 return a; 3011 } 3012 3013 if (null == d && null == e ? (e = c, d = c = void 0) : null == e && ("string" == typeof c ? (e = d, d = void 0) : (e = d, d = c, c = void 0)), e === !1) e = qa;else if (!e) return a; 3014 return 1 === f && (g = e, e = function e(a) { 3015 return n().off(a), g.apply(this, arguments); 3016 }, e.guid = g.guid || (g.guid = n.guid++)), a.each(function () { 3017 n.event.add(this, b, e, d, c); 3018 }); 3019 } 3020 3021 n.event = { 3022 global: {}, 3023 add: function add(a, b, c, d, e) { 3024 var f, 3025 g, 3026 h, 3027 i, 3028 j, 3029 k, 3030 l, 3031 m, 3032 o, 3033 p, 3034 q, 3035 r = n._data(a); 3036 3037 if (r) { 3038 c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function (a) { 3039 return "undefined" == typeof n || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments); 3040 }, k.elem = a), b = (b || "").match(G) || [""], h = b.length; 3041 3042 while (h--) { 3043 f = oa.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({ 3044 type: o, 3045 origType: q, 3046 data: d, 3047 handler: c, 3048 guid: c.guid, 3049 selector: e, 3050 needsContext: e && n.expr.match.needsContext.test(e), 3051 namespace: p.join(".") 3052 }, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0); 3053 } 3054 3055 a = null; 3056 } 3057 }, 3058 remove: function remove(a, b, c, d, e) { 3059 var f, 3060 g, 3061 h, 3062 i, 3063 j, 3064 k, 3065 l, 3066 m, 3067 o, 3068 p, 3069 q, 3070 r = n.hasData(a) && n._data(a); 3071 3072 if (r && (k = r.events)) { 3073 b = (b || "").match(G) || [""], j = b.length; 3074 3075 while (j--) { 3076 if (h = oa.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) { 3077 l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h
3077= h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length; 3078 3079 while (f--) { 3080 g = m[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g)); 3081 } 3082 3083 i && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o]); 3084 } else for (o in k) { 3085 n.event.remove(a, o + b[j], c, d, !0); 3086 } 3087 } 3088 3089 n.isEmptyObject(k) && (delete r.handle, n._removeData(a, "events")); 3090 } 3091 }, 3092 trigger: function trigger(b, c, e, f) { 3093 var g, 3094 h, 3095 i, 3096 j, 3097 l, 3098 m, 3099 o, 3100 p = [e || d], 3101 q = k.call(b, "type") ? b.type : b, 3102 r = k.call(b, "namespace") ? b.namespace.split(".") : []; 3103 3104 if (i = m = e = e || d, 3 !== e.nodeType && 8 !== e.nodeType && !na.test(q + n.event.triggered) && (q.indexOf(".") > -1 && (r = q.split("."), q = r.shift(), r.sort()), h = q.indexOf(":") < 0 && "on" + q, b = b[n.expando] ? b : new n.Event(q, "object" == _typeof(b) && b), b.isTrigger = f ? 2 : 3, b.namespace = r.join("."), b.rnamespace = b.namespace ? new RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = e), c = null == c ? [b] : n.makeArray(c, [b]), l = n.event.special[q] || {}, f || !l.trigger || l.trigger.apply(e, c) !== !1)) { 3105 if (!f && !l.noBubble && !n.isWindow(e)) { 3106 for (j = l.delegateType || q, na.test(j + q) || (i = i.parentNode); i; i = i.parentNode) { 3107 p.push(i), m = i; 3108 } 3109 3110 m === (e.ownerDocument || d) && p.push(m.defaultView || m.parentWindow || a); 3111 } 3112 3113 o = 0; 3114 3115 while ((i = p[o++]) && !b.isPropagationStopped()) { 3116 b.type = o > 1 ? j : l.bindType || q, g = (n._data(i, "events") || {})[b.type] && n._data(i, "handle"), g && g.apply(i, c), g = h && i[h], g && g.apply && M(i) && (b.result = g.apply(i, c), b.result === !1 && b.preventDefault()); 3117 } 3118 3119 if (b.type = q, !f && !b.isDefaultPrevented() && (!l._default || l._default.apply(p.pop(), c) === !1) && M(e) && h && e[q] && !n.isWindow(e)) { 3120 m = e[h], m && (e[h] = null), n.event.triggered = q; 3121 3122 try { 3123 e[q](); 3124 } catch (s) {} 3125 3126 n.event.triggered = void 0, m && (e[h] = m); 3127 } 3128 3129 return b.result; 3130 } 3131 }, 3132 dispatch: function dispatch(a) { 3133 a = n.event.fix(a); 3134 var b, 3135 c, 3136 d, 3137 f, 3138 g, 3139 h = [], 3140 i = e.call(arguments), 3141 j = (n._data(this, "events") || {})[a.type] || [], 3142 k = n.event.special[a.type] || {}; 3143 3144 if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) { 3145 h = n.event.handlers.call(this, a, j), b = 0; 3146 3147 while ((f = h[b++]) && !a.isPropagationStopped()) { 3148 a.currentTarget = f.elem, c = 0; 3149 3150 while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) { 3151 a.rnamespace && !a.rnamespace.test(g.namespace) || (a.handleObj = g, a.data = g.data, d = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== d && (a.result = d) === !1 && (a.preventDefault(), a.stopPropagation())); 3152 } 3153 } 3154 3155 return k.postDispatch && k.postDispatch.call(this, a), a.result; 3156 } 3157 }, 3158 handlers: function handlers(a, b) { 3159 var c, 3160 d, 3161 e, 3162 f, 3163 g = [], 3164 h = b.delegateCount, 3165 i = a.target; 3166 if (h && i.nodeType && ("click" !== a.type || isNaN(a.button) || a.button < 1)) for (; i != this; i = i.parentNode || this) { 3167 if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) { 3168 for (d = [], c = 0; h > c; c++) { 3169 f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? n(e, this).index(i) > -1 : n.find(e, this, null, [i]).length), d[e] && d.push(f); 3170 } 3171 3172 d.length && g.push({ 3173 elem: i, 3174 handlers: d 3175 }); 3176 } 3177 } 3178 return h < b.length && g.push({ 3179 elem: this, 3180 handlers: b.slice(h) 3181 }), g; 3182 }, 3183 fix: function fix(a) { 3184 if (a[n.expando]) return a; 3185 var b, 3186 c, 3187 e, 3188 f = a.type, 3189 g = a, 3190 h = this.fixHooks[f]; 3191 h || (this.fixHooks[f] = h = ma.test(f) ? this.mouseHooks : la.test(f) ? this.keyHooks
3191: {}), e = h.props ? this.props.concat(h.props) : this.props, a = new n.Event(g), b = e.length; 3192 3193 while (b--) { 3194 c = e[b], a[c] = g[c]; 3195 } 3196 3197 return a.target || (a.target = g.srcElement || d), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, h.filter ? h.filter(a, g) : a; 3198 }, 3199 props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), 3200 fixHooks: {}, 3201 keyHooks: { 3202 props: "char charCode key keyCode".split(" "), 3203 filter: function filter(a, b) { 3204 return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a; 3205 } 3206 }, 3207 mouseHooks: { 3208 props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), 3209 filter: function filter(a, b) { 3210 var c, 3211 e, 3212 f, 3213 g = b.button, 3214 h = b.fromElement; 3215 return null == a.pageX && null != b.clientX && (e = a.target.ownerDocument || d, f = e.documentElement, c = e.body, a.pageX = b.clientX + (f && f.scrollLeft || c && c.scrollLeft || 0) - (f && f.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (f && f.scrollTop || c && c.scrollTop || 0) - (f && f.clientTop || c && c.clientTop || 0)), !a.relatedTarget && h && (a.relatedTarget = h === a.target ? b.toElement : h), a.which || void 0 === g || (a.which = 1 & g ? 1 : 2 & g ? 3 : 4 & g ? 2 : 0), a; 3216 } 3217 }, 3218 special: { 3219 load: { 3220 noBubble: !0 3221 }, 3222 focus: { 3223 trigger: function trigger() { 3224 if (this !== ra() && this.focus) try { 3225 return this.focus(), !1; 3226 } catch (a) {} 3227 }, 3228 delegateType: "focusin" 3229 }, 3230 blur: { 3231 trigger: function trigger() { 3232 return this === ra() && this.blur ? (this.blur(), !1) : void 0; 3233 }, 3234 delegateType: "focusout" 3235 }, 3236 click: { 3237 trigger: function trigger() { 3238 return n.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0; 3239 }, 3240 _default: function _default(a) { 3241 return n.nodeName(a.target, "a"); 3242 } 3243 }, 3244 beforeunload: { 3245 postDispatch: function postDispatch(a) { 3246 void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result); 3247 } 3248 } 3249 }, 3250 simulate: function simulate(a, b, c) { 3251 var d = n.extend(new n.Event(), c, { 3252 type: a, 3253 isSimulated: !0 3254 }); 3255 n.event.trigger(d, null, b), d.isDefaultPrevented() && c.preventDefault(); 3256 } 3257 }, n.removeEvent = d.removeEventListener ? function (a, b, c) { 3258 a.removeEventListener && a.removeEventListener(b, c); 3259 } : function (a, b, c) { 3260 var d = "on" + b; 3261 a.detachEvent && ("undefined" == typeof a[d] && (a[d] = null), a.detachEvent(d, c)); 3262 }, n.Event = function (a, b) { 3263 return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? pa : qa) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void (this[n.expando] = !0)) : new n.Event(a, b); 3264 }, n.Event.prototype = { 3265 constructor: n.Event, 3266 isDefaultPrevented: qa, 3267 isPropagationStopped: qa, 3268 isImmediatePropagationStopped: qa, 3269 preventDefault: function preventDefault() { 3270 var a = this.originalEvent; 3271 this.isDefaultPrevented = pa, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1); 3272 }, 3273 stopPropagation: function stopPropagation() { 3274 var a = this.originalEvent; 3275 this.isPropagationStopped = pa, a && !this.isSimulated && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0); 3276 }, 3277 stopImmediatePropagation: function stopImmediatePropagation() { 3278 var a = this.originalEvent; 3279 this.isImmediatePropagationStopped = pa, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation(); 3280 } 3281 }, n.each({ 3282 mouseenter: "mouseover", 3283 mouseleave: "mouseout", 3284 pointerenter: "pointerover", 3285 pointerleave: "pointerout" 3286 }, function (a, b) { 3287 n.event.special[a] = { 3288 delegateType: b, 3289 bindType: b, 3290 handle: function handle(a) { 3291 var c, 3292 d = this, 3293 e = a.relatedTarget, 3294 f = a.handleObj; 3295 return e && (e === d || n.contains(d, e)) || (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c; 3296 } 3297 }; 3298 }), l.submit || (n.event.special.submit = { 3299 setup: function setup() { 3300 return n.nodeName(this, "form") ? !1 : void n.event.add(this, "click._submit keypress._submit", function (a) { 3301 var b = a.target, 3302 c = n.nodeName(b, "input") || n.nodeName(b, "button") ? n.prop(b, "form") : void 0; 3303 c && !n._data(c, "submit") && (n.event.add(c, "submit._submit", function (a) { 3304 a._submitBubble = !0; 3305 }), n._data(c, "submit", !0)); 3306 }); 3307 }, 3308 postDispatch: function postDispatch(a) { 3309 a._submitBubble && (delete a._submitBubble, this.parentNode && !a.isTrigger && n.event.simulate("submit", this.parentNode, a)); 3310 }, 3311 teardown: function teardown() { 3312 return n.nodeName(this, "form") ? !1 : void n.event.remove(this, "._submit"); 3313 } 3314 }), l.change || (n.event.special.change = { 3315 setup: function setup() { 3316 return ka.test(this.nodeName) ? ("checkbox" !== this.type && "radio" !== this.type || (n.event.add(this, "propertychange._change", function (a) { 3317 "checked" === a.originalEvent.propertyName && (this._justChanged = !0); 3318 }), n.event.add(this, "click._change", function (a) { 3319 this._justChanged && !a.isTrigger && (this._justChanged = !1), n.event.simulate("change", this, a); 3320 })), !1) : void n.event.add(this, "beforeactivate._change", function (a) { 3321 var b = a.target; 3322 ka.test(b.nodeName) && !n._data(b, "change") && (n.event.add(b, "change._change", function (a) { 3323 !this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate("change", this.parentNode, a); 3324 }), n._data(b, "change", !0)); 3325 }); 3326 }, 3327 handle: function handle(a) { 3328 var b = a.target; 3329 return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0; 3330 }, 3331 teardown: function teardown() { 3332 return n.event.remove(this, "._change"), !ka.test(this.nodeName); 3333 } 3334 }), l.focusin || n.each({ 3335 focus: "focusin", 3336 blur: "focusout" 3337 }, function (a, b) { 3338 var c = function c(a) { 3339 n.event.simulate(b, a.target, n.event.fix(a)); 3340 }; 3341 3342 n.event.special[b] = { 3343 setup: function setup() { 3344 var d = this.ownerDocument || this, 3345 e = n._data(d, b); 3346 3347 e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1); 3348 }, 3349 teardown: function teardown() { 3350 var d = this.ownerDocument || this, 3351 e = n._data(d, b) - 1; 3352 e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b)); 3353 } 3354 }; 3355 }), n.fn.extend({ 3356 on: function on(a, b, c, d) { 3357 return sa(this, a, b, c, d); 3358 }, 3359 one: function one(a, b, c, d) { 3360 return sa(this, a, b, c, d, 1); 3361 }, 3362 off: function off(a, b, c) { 3363 var d, e; 3364 if (a && a.preventDefault && a.handleObj) return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this; 3365 3366 if ("object" == _typeof(a)) { 3367 for (e in a) { 3368 this.off(e, b, a[e]); 3369 } 3370 3371 return this; 3372 } 3373 3374 return b !== !1 && "function" != typeof b || (c = b, b = void 0), c === !1 && (c = qa), this.each(function () { 3375 n.event.remove(this, a, c, b); 3376 }); 3377 }, 3378 trigger: function trigger(a, b) { 3379 return this.each(function () { 3380 n.event.trigger(a, b, this); 3381 }); 3382 }, 3383 triggerHandler: function triggerHandler(a, b) { 3384 var c = this[0]; 3385 return c ? n.event.trigger(a, b, c, !0) : void 0; 3386 } 3387 }); 3388 var ta = / jQuery\d+="(?:null|\d+)"/g, 3389 ua = new RegExp("<(?:" + ba + ")[\\s/>]", "i"), 3390 va = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, 3391 wa = /<script|<style|<link/i, 3392 xa = /checked\s*(?:[^=]|=\s*.checked.)/i, 3393 ya = /^true\/(.*)/, 3394 za = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, 3395 Aa = ca(d), 3396 Ba = Aa.appendChild(d.createElement("div")); 3397 3398 function Ca(a, b) { 3399 return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a; 3400 } 3401 3402 function Da(a) { 3403 return a.type = (null !== n.find.attr(a, "type")) + "/" + a.type, a; 3404 } 3405 3406 function Ea(a) { 3407 var b = ya.exec(a.type); 3408 return b ? a.type = b[1] : a.removeAttribute("type"), a; 3409 } 3410 3411 function Fa(a, b) { 3412 if (1 === b.nodeType && n.hasData(a)) { 3413 var c, 3414 d, 3415 e, 3416 f = n._data(a), 3417 g = n._data(b, f), 3418 h = f.events; 3419 3420 if (h) { 3421 delete g.handle, g.events = {}; 3422 3423 for (c in h) { 3424 for (d = 0, e = h[c].length; e > d; d++) { 3425 n.event.add(b, c, h[c][d]); 3426 } 3427 } 3428 } 3429 3430 g.data && (g.data = n.extend({}, g.data)); 3431 } 3432 } 3433 3434 function Ga(a, b) { 3435 var c, d, e; 3436 3437 if (1 === b.nodeType) { 3438 if (c = b.nodeName.toLowerCase(), !l.noCloneEvent && b[n.expando]) { 3439 e = n._data(b); 3440 3441 for (d in e.events) { 3442 n.removeEvent(b, d, e.handle); 3443 } 3444 3445 b.removeAttribute(n.expando); 3446 } 3447 3448 "script" === c && b.text !== a.text ? (Da(b).text = a.text, Ea(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), l.html5Clone && a.innerHTML && !n.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && Z.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : "input" !== c && "textarea" !== c || (b.defaultValue = a.defaultValue); 3449 } 3450 } 3451 3452 function Ha(a, b, c, d) { 3453 b = f.apply([], b); 3454 var e, 3455 g, 3456 h, 3457 i, 3458 j, 3459 k, 3460 m = 0, 3461 o = a.length, 3462 p = o - 1, 3463 q = b[0], 3464 r = n.isFunction(q); 3465 if (r || o > 1 && "string" == typeof q && !l.checkClone && xa.test(q)) return a.each(function (e) { 3466 var f = a.eq(e); 3467 r && (b[0] = q.call(this, e, f.html())), Ha(f, b, c, d); 3468 }); 3469 3470 if (o && (k = ja(b, a[0].ownerDocument, !1, a, d), e = k.firstChild, 1 === k.childNodes.length && (k = e), e || d)) { 3471 for (i = n.map(ea(k, "script"), Da), h = i.length; o > m; m++) { 3472 g = k, m !== p && (g = n.clone(g, !0, !0), h && n.merge(i, ea(g, "script"))), c.call(a[m], g, m); 3473 } 3474 3475 if (h) for (j = i[i.length - 1].ownerDocument, n.map(i, Ea), m = 0; h > m; m++) { 3476 g = i[m], _.test(g.type || "") && !n._data(g, "globalEval") && n.contains(j, g) && (g.src ? n._evalUrl && n._evalUrl(g.src) : n.globalEval((g.text || g.textContent || g.innerHTML || "").replace(za, ""))); 3477 } 3478 k = e = null; 3479 } 3480 3481 return a; 3482 } 3483 3484 function Ia(a, b, c) { 3485 for (var d, e = b ? n.filter(b, a) : a, f = 0; null != (d = e[f]); f++) { 3486 c || 1 !== d.nodeType || n.cleanData(ea(d)), d.parentNode && (c && n.contains(d.ownerDocument, d) && fa(ea(d, "script")), d.parentNode.removeChild(d)); 3487 } 3488 3489 return a; 3490 } 3491 3492 n.extend({ 3493 htmlPrefilter: function htmlPrefilter(a) { 3494 return a.replace(va, "<$1></$2>"); 3495 }, 3496 clone: function clone(a, b, c) { 3497 var d, 3498 e, 3499 f, 3500 g, 3501 h, 3502 i = n.contains(a.ownerDocument, a); 3503 if (l.html5Clone || n.isXMLDoc(a) || !ua.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (Ba.innerHTML = a.outerHTML, Ba.removeChild(f = Ba.firstChild)), !(l.noCloneEvent && l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a))) for (d = ea(f), h
3503= ea(a), g = 0; null != (e = h[g]); ++g) { 3504 d[g] && Ga(e, d[g]); 3505 } 3506 if (b) if (c) for (h = h || ea(a), d = d || ea(f), g = 0; null != (e = h[g]); g++) { 3507 Fa(e, d[g]); 3508 } else Fa(a, f); 3509 return d = ea(f, "script"), d.length > 0 && fa(d, !i && ea(a, "script")), d = h = e = null, f; 3510 }, 3511 cleanData: function cleanData(a, b) { 3512 for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.attributes, m = n.event.special; null != (d = a[h]); h++) { 3513 if ((b || M(d)) && (f = d[i], g = f && j[f])) { 3514 if (g.events) for (e in g.events) { 3515 m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle); 3516 } 3517 j[f] && (delete j[f], k || "undefined" == typeof d.removeAttribute ? d[i] = void 0 : d.removeAttribute(i), c.push(f)); 3518 } 3519 } 3520 } 3521 }), n.fn.extend({ 3522 domManip: Ha, 3523 detach: function detach(a) { 3524 return Ia(this, a, !0); 3525 }, 3526 remove: function remove(a) { 3527 return Ia(this, a); 3528 }, 3529 text: function text(a) { 3530 return Y(this, function (a) { 3531 return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || d).createTextNode(a)); 3532 }, null, a, arguments.length); 3533 }, 3534 append: function append() { 3535 return Ha(this, arguments, function (a) { 3536 if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { 3537 var b = Ca(this, a); 3538 b.appendChild(a); 3539 } 3540 }); 3541 }, 3542 prepend: function prepend() { 3543 return Ha(this, arguments, function (a) { 3544 if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { 3545 var b = Ca(this, a); 3546 b.insertBefore(a, b.firstChild); 3547 } 3548 }); 3549 }, 3550 before: function before() { 3551 return Ha(this, arguments, function (a) { 3552 this.parentNode && this.parentNode.insertBefore(a, this); 3553 }); 3554 }, 3555 after: function after() { 3556 return Ha(this, arguments, function (a) { 3557 this.parentNode && this.parentNode.insertBefore(a, this.nextSibling); 3558 }); 3559 }, 3560 empty: function empty() { 3561 for (var a, b = 0; null != (a = this[b]); b++) { 3562 1 === a.nodeType && n.cleanData(ea(a, !1)); 3563 3564 while (a.firstChild) { 3565 a.removeChild(a.firstChild); 3566 } 3567 3568 a.options && n.nodeName(a, "select") && (a.options.length = 0); 3569 } 3570 3571 return this; 3572 }, 3573 clone: function clone(a, b) { 3574 return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () { 3575 return n.clone(this, a, b); 3576 }); 3577 }, 3578 html: function html(a) { 3579 return Y(this, function (a) { 3580 var b = this[0] || {}, 3581 c = 0, 3582 d = this.length; 3583 if (void 0 === a) return 1 === b.nodeType ? b.innerHTML.replace(ta, "") : void 0; 3584 3585 if ("string" == typeof a && !wa.test(a) && (l.htmlSerialize || !ua.test(a)) && (l.leadingWhitespace || !aa.test(a)) && !da[($.exec(a) || ["", ""])[1].toLowerCase()]) { 3586 a = n.htmlPrefilter(a); 3587 3588 try { 3589 for (; d > c; c++) { 3590 b = this[c] || {}, 1 === b.nodeType && (n.cleanData(ea(b, !1)), b.innerHTML = a); 3591 } 3592 3593 b = 0; 3594 } catch (e) {} 3595 } 3596 3597 b && this.empty().append(a); 3598 }, null, a, arguments.length); 3599 }, 3600 replaceWith: function replaceWith() { 3601 var a = []; 3602 return Ha(this, arguments, function (b) { 3603 var c = this.parentNode; 3604 n.inArray(this, a) < 0 && (n.cleanData(ea(this)), c && c.replaceChild(b, this)); 3605 }, a); 3606 } 3607 }), n.each({ 3608 appendTo: "append", 3609 prependTo: "prepend", 3610 insertBefore: "before", 3611 insertAfter: "after", 3612 replaceAll: "replaceWith" 3613 }, function (a, b) { 3614 n.fn[a] = function (a) { 3615 for (var c, d = 0, e = [], f = n(a), h = f.length - 1; h >= d; d++) { 3616 c = d === h ? this : this.clone(!0), n(f[d])[b](c), g.apply(e, c.get()); 3617 } 3618 3619 return this.pushStack(e); 3620 }; 3621 }); 3622 var Ja, 3623 Ka = { 3624 HTML: "block", 3625 BODY: "block" 3626 }; 3627 3628 function La(a, b) { 3629 var c = n(b.createElement(a)).appendTo(b.body), 3630 d = n.css(c[0], "display"); 3631 return c.detach(), d; 3632 } 3633 3634 function Ma(a) { 3635 var b = d, 3636 c = Ka[a]; 3637 return c || (c = La(a, b), "none" !== c && c || (Ja = (Ja || n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = (Ja[0].contentWindow || Ja[0].contentDocument).document, b.write(), b.close(), c = La(a, b), Ja.detach()), Ka[a] = c), c; 3638 } 3639 3640 var Na = /^margin/, 3641 Oa = new RegExp("^(" + T + ")(?!px)[a-z%]+$", "i"), 3642 Pa = function Pa(a, b, c, d) { 3643 var e, 3644 f, 3645 g = {}; 3646 3647 for (f in b) { 3648 g[f] = a.style[f], a.style[f] = b[f]; 3649 } 3650 3651 e = c.apply(a, d || []); 3652 3653 for (f in b) { 3654 a.style[f] = g[f]; 3655 } 3656 3657 return e; 3658 }, 3659 Qa = d.documentElement; 3660 3661 !function () { 3662 var b, 3663 c, 3664 e, 3665 f, 3666 g, 3667 h, 3668 i = d.createElement("div"), 3669 j = d.createElement("div"); 3670 3671 if (j.style) { 3672 var _k = function _k() { 3673 var k, 3674 l, 3675 m = d.documentElement; 3676 m.appendChild(i), j.style.cssText = "-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%", b = e = h = !1, c = g = !0, a.getComputedStyle && (l = a.getComputedStyle(j), b = "1%" !== (l || {}).top, h = "2px" === (l || {}).marginLeft, e = "4px" === (l || { 3677 width: "4px" 3678 }).width, j.style.marginRight = "50%", c = "4px" === (l || { 3679 marginRight: "4px" 3680 }).marginRight, k = j.appendChild(d.createElement("div")), k.style.cssText = j.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", k.style.marginRight = k.style.width = "0", j.style.width = "1px", g = !parseFloat((a.getComputedStyle(k) || {}).marginRight), j.removeChild(k)), j.style.display = "none", f = 0 === j.getClientRects().length, f && (j.style.display = "", j.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", j.childNodes[0].style.borderCollapse = "separate", k = j.getElementsByTagName("td"), k[0].style.cssText = "margin:0;border:0;padding:0;display:none", f = 0 === k[0].offsetHeight, f && (k[0].style.display = "", k[1].style.display = "none", f = 0 === k[0].offsetHeight)), m.removeChild(i); 3681 }; 3682 3683 j.style.cssText = "float:left;opacity:.5", l.opacity = "0.5" === j.style.opacity, l.cssFloat = !!j.style.cssFloat, j.style.backgroundClip = "content-box", j.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === j.style.backgroundClip, i = d.createElement("div"), i.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute", j.innerHTML = "", i.appendChild(j), l.boxSizing = "" === j.style.boxSizing || "" === j.style.MozBoxSizing || "" === j.style.WebkitBoxSizing, n.extend(l, { 3684 reliableHiddenOffsets: function reliableHiddenOffsets() { 3685 return null == b && _k(), f; 3686 }, 3687 boxSizingReliable: function boxSizingReliable() { 3688 return null == b && _k(), e; 3689 }, 3690 pixelMarginRight: function pixelMarginRight() { 3691 return null == b && _k(), c; 3692 }, 3693 pixelPosition: function pixelPosition() { 3694 return null == b && _k(), b; 3695 }, 3696 reliableMarginRight: function reliableMarginRight() { 3697 return null == b && _k(), g; 3698 }, 3699 reliableMarginLeft: function reliableMarginLeft() { 3700 return null == b && _k(), h; 3701 } 3702 }); 3703 } 3704 }(); 3705 var Ra, 3706 Sa, 3707 Ta = /^(top|right|bottom|left)$/; 3708 a.getComputedStyle ? (Ra = function Ra(b) { 3709 var c = b.ownerDocument.defaultView; 3710 return c && c.opener || (c = a), c.getComputedStyle(b); 3711 }, Sa = function Sa(a, b, c) { 3712 var d, 3713 e, 3714 f, 3715 g, 3716 h = a.style; 3717 return c = c || Ra(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, "" !== g && void 0 !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), c && !l.pixelMarginRight() && Oa.test(g) && Na.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f), void 0 === g ? g : g + ""; 3718 }) : Qa.currentStyle && (Ra = function Ra(a) { 3719 return a.currentStyle; 3720 }, Sa = function Sa(a, b, c) { 3721 var d, 3722 e, 3723 f, 3724 g, 3725 h = a.style; 3726 return c = c || Ra(a), g = c ? c[b] : void 0, null == g && h && h[b] && (g = h[b]), Oa.test(g) && !Ta.test(b) && (d = h.left, e = a.runtimeStyle, f = e && e.left, f && (e.left = a.
3726currentStyle.left), h.left = "fontSize" === b ? "1em" : g, g = h.pixelLeft + "px", h.left = d, f && (e.left = f)), void 0 === g ? g : g + "" || "auto"; 3727 }); 3728 3729 function Ua(a, b) { 3730 return { 3731 get: function get() { 3732 return a() ? void delete this.get : (this.get = b).apply(this, arguments); 3733 } 3734 }; 3735 } 3736 3737 var Va = /alpha\([^)]*\)/i, 3738 Wa = /opacity\s*=\s*([^)]*)/i, 3739 Xa = /^(none|table(?!-c[ea]).+)/, 3740 Ya = new RegExp("^(" + T + ")(.*)$", "i"), 3741 Za = { 3742 position: "absolute", 3743 visibility: "hidden", 3744 display: "block" 3745 }, 3746 $a = { 3747 letterSpacing: "0", 3748 fontWeight: "400" 3749 }, 3750 _a = ["Webkit", "O", "Moz", "ms"], 3751 ab = d.createElement("div").style; 3752 3753 function bb(a) { 3754 if (a in ab) return a; 3755 var b = a.charAt(0).toUpperCase() + a.slice(1), 3756 c = _a.length; 3757 3758 while (c--) { 3759 if (a = _a[c] + b, a in ab) return a; 3760 } 3761 } 3762 3763 function cb(a, b) { 3764 for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++) { 3765 d = a[g], d.style && (f[g] = n._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && W(d) && (f[g] = n._data(d, "olddisplay", Ma(d.nodeName)))) : (e = W(d), (c && "none" !== c || !e) && n._data(d, "olddisplay", e ? c : n.css(d, "display")))); 3766 } 3767 3768 for (g = 0; h > g; g++) { 3769 d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none")); 3770 } 3771 3772 return a; 3773 } 3774 3775 function db(a, b, c) { 3776 var d = Ya.exec(b); 3777 return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b; 3778 } 3779 3780 function eb(a, b, c, d, e) { 3781 for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2) { 3782 "margin" === c && (g += n.css(a, c + V[f], !0, e)), d ? ("content" === c && (g -= n.css(a, "padding" + V[f], !0, e)), "margin" !== c && (g -= n.css(a, "border" + V[f] + "Width", !0, e))) : (g += n.css(a, "padding" + V[f], !0, e), "padding" !== c && (g += n.css(a, "border" + V[f] + "Width", !0, e))); 3783 } 3784 3785 return g; 3786 } 3787 3788 function fb(a, b, c) { 3789 var d = !0, 3790 e = "width" === b ? a.offsetWidth : a.offsetHeight, 3791 f = Ra(a), 3792 g = l.boxSizing && "border-box" === n.css(a, "boxSizing", !1, f); 3793 3794 if (0 >= e || null == e) { 3795 if (e = Sa(a, b, f), (0 > e || null == e) && (e = a.style[b]), Oa.test(e)) return e; 3796 d = g && (l.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0; 3797 } 3798 3799 return e + eb(a, b, c || (g ? "border" : "content"), d, f) + "px"; 3800 } 3801 3802 n.extend({ 3803 cssHooks: { 3804 opacity: { 3805 get: function get(a, b) { 3806 if (b) { 3807 var c = Sa(a, "opacity"); 3808 return "" === c ? "1" : c; 3809 } 3810 } 3811 } 3812 }, 3813 cssNumber: { 3814 animationIterationCount: !0, 3815 columnCount: !0, 3816 fillOpacity: !0, 3817 flexGrow: !0, 3818 flexShrink: !0, 3819 fontWeight: !0, 3820 lineHeight: !0, 3821 opacity: !0, 3822 order: !0, 3823 orphans: !0, 3824 widows: !0, 3825 zIndex: !0, 3826 zoom: !0 3827 }, 3828 cssProps: { 3829 "float": l.cssFloat ? "cssFloat" : "styleFloat" 3830 }, 3831 style: function style(a, b, c, d) { 3832 if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) { 3833 var e, 3834 f, 3835 g, 3836 h = n.camelCase(b), 3837 i = a.style; 3838 if (b = n.cssProps[h] || (n.cssProps[h] = bb(h) || h), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c) return g && "get" in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b]; 3839 if (f = _typeof(c), "string" === f && (e = U.exec(c)) && e[1] && (c = X(a, b, e), f = "number"), null != c && c === c && ("number" === f && (c += e && e[3] || (n.cssNumber[h] ? "" : "px")), l.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), !(g && "set" in g && void 0 === (c = g.set(a, c, d))))) try { 3840 i[b] = c; 3841 } catch (j) {} 3842 } 3843 }, 3844 css: function css(a, b, c, d) { 3845 var e, 3846 f, 3847 g, 3848 h = n.camelCase(b); 3849 return b = n.cssProps[h] || (n.cssProps[h] = bb(h) || h), g = n.cssHooks[b] || n.css
3849Hooks[h], g && "get" in g && (f = g.get(a, !0, c)), void 0 === f && (f = Sa(a, b, d)), "normal" === f && b in $a && (f = $a[b]), "" === c || c ? (e = parseFloat(f), c === !0 || isFinite(e) ? e || 0 : f) : f; 3850 } 3851 }), n.each(["height", "width"], function (a, b) { 3852 n.cssHooks[b] = { 3853 get: function get(a, c, d) { 3854 return c ? Xa.test(n.css(a, "display")) && 0 === a.offsetWidth ? Pa(a, Za, function () { 3855 return fb(a, b, d); 3856 }) : fb(a, b, d) : void 0; 3857 }, 3858 set: function set(a, c, d) { 3859 var e = d && Ra(a); 3860 return db(a, c, d ? eb(a, b, d, l.boxSizing && "border-box" === n.css(a, "boxSizing", !1, e), e) : 0); 3861 } 3862 }; 3863 }), l.opacity || (n.cssHooks.opacity = { 3864 get: function get(a, b) { 3865 return Wa.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""; 3866 }, 3867 set: function set(a, b) { 3868 var c = a.style, 3869 d = a.currentStyle, 3870 e = n.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "", 3871 f = d && d.filter || c.filter || ""; 3872 c.zoom = 1, (b >= 1 || "" === b) && "" === n.trim(f.replace(Va, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = Va.test(f) ? f.replace(Va, e) : f + " " + e); 3873 } 3874 }), n.cssHooks.marginRight = Ua(l.reliableMarginRight, function (a, b) { 3875 return b ? Pa(a, { 3876 display: "inline-block" 3877 }, Sa, [a, "marginRight"]) : void 0; 3878 }), n.cssHooks.marginLeft = Ua(l.reliableMarginLeft, function (a, b) { 3879 return b ? (parseFloat(Sa(a, "marginLeft")) || (n.contains(a.ownerDocument, a) ? a.getBoundingClientRect().left - Pa(a, { 3880 marginLeft: 0 3881 }, function () { 3882 return a.getBoundingClientRect().left; 3883 }) : 0)) + "px" : void 0; 3884 }), n.each({ 3885 margin: "", 3886 padding: "", 3887 border: "Width" 3888 }, function (a, b) { 3889 n.cssHooks[a + b] = { 3890 expand: function expand(c) { 3891 for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++) { 3892 e[a + V[d] + b] = f[d] || f[d - 2] || f[0]; 3893 } 3894 3895 return e; 3896 } 3897 }, Na.test(a) || (n.cssHooks[a + b].set = db); 3898 }), n.fn.extend({ 3899 css: function css(a, b) { 3900 return Y(this, function (a, b, c) { 3901 var d, 3902 e, 3903 f = {}, 3904 g = 0; 3905 3906 if (n.isArray(b)) { 3907 for (d = Ra(a), e = b.length; e > g; g++) { 3908 f[b[g]] = n.css(a, b[g], !1, d); 3909 } 3910 3911 return f; 3912 } 3913 3914 return void 0 !== c ? n.style(a, b, c) : n.css(a, b); 3915 }, a, b, arguments.length > 1); 3916 }, 3917 show: function show() { 3918 return cb(this, !0); 3919 }, 3920 hide: function hide() { 3921 return cb(this); 3922 }, 3923 toggle: function toggle(a) { 3924 return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () { 3925 W(this) ? n(this).show() : n(this).hide(); 3926 }); 3927 } 3928 }); 3929 3930 function gb(a, b, c, d, e) { 3931 return new gb.prototype.init(a, b, c, d, e); 3932 } 3933 3934 n.Tween = gb, gb.prototype = { 3935 constructor: gb, 3936 init: function init(a, b, c, d, e, f) { 3937 this.elem = a, this.prop = c, this.easing = e || n.easing._default, this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? "" : "px"); 3938 }, 3939 cur: function cur() { 3940 var a = gb.propHooks[this.prop]; 3941 return a && a.get ? a.get(this) : gb.propHooks._default.get(this); 3942 }, 3943 run: function run(a) { 3944 var b, 3945 c = gb.propHooks[this.prop]; 3946 return this.options.duration ? this.pos = b = n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : this.pos = b = a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : gb.propHooks._default.set(this), this; 3947 } 3948 }, gb.prototype.init.prototype = gb.prototype, gb.propHooks = { 3949 _default: { 3950 get: function get(a) { 3951 var b; 3952 return 1 !== a.elem.nodeType || null != a.elem[a.prop] && null == a.elem.style[a.prop] ? a.elem[a.prop] : (b = n.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0); 3953 },
3954 set: function set(a) { 3955 n.fx.step[a.prop] ? n.fx.step[a.prop](a) : 1 !== a.elem.nodeType || null == a.elem.style[n.cssProps[a.prop]] && !n.cssHooks[a.prop] ? a.elem[a.prop] = a.now : n.style(a.elem, a.prop, a.now + a.unit); 3956 } 3957 } 3958 }, gb.propHooks.scrollTop = gb.propHooks.scrollLeft = { 3959 set: function set(a) { 3960 a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now); 3961 } 3962 }, n.easing = { 3963 linear: function linear(a) { 3964 return a; 3965 }, 3966 swing: function swing(a) { 3967 return .5 - Math.cos(a * Math.PI) / 2; 3968 }, 3969 _default: "swing" 3970 }, n.fx = gb.prototype.init, n.fx.step = {}; 3971 var hb, 3972 ib, 3973 jb = /^(?:toggle|show|hide)$/, 3974 kb = /queueHooks$/; 3975 3976 function lb() { 3977 return a.setTimeout(function () { 3978 hb = void 0; 3979 }), hb = n.now(); 3980 } 3981 3982 function mb(a, b) { 3983 var c, 3984 d = { 3985 height: a 3986 }, 3987 e = 0; 3988 3989 for (b = b ? 1 : 0; 4 > e; e += 2 - b) { 3990 c = V[e], d["margin" + c] = d["padding" + c] = a; 3991 } 3992 3993 return b && (d.opacity = d.width = a), d; 3994 } 3995 3996 function nb(a, b, c) { 3997 for (var d, e = (qb.tweeners[b] || []).concat(qb.tweeners["*"]), f = 0, g = e.length; g > f; f++) { 3998 if (d = e[f].call(c, b, a)) return d; 3999 } 4000 } 4001 4002 function ob(a, b, c) { 4003 var d, 4004 e, 4005 f, 4006 g, 4007 h, 4008 i, 4009 j, 4010 k, 4011 m = this, 4012 o = {}, 4013 p = a.style, 4014 q = a.nodeType && W(a), 4015 r = n._data(a, "fxshow"); 4016 4017 c.queue || (h = n._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () { 4018 h.unqueued || i(); 4019 }), h.unqueued++, m.always(function () { 4020 m.always(function () { 4021 h.unqueued--, n.queue(a, "fx").length || h.empty.fire(); 4022 }); 4023 })), 1 === a.nodeType && ("height" in b || "width" in b) && (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = n.css(a, "display"), k = "none" === j ? n._data(a, "olddisplay") || Ma(a.nodeName) : j, "inline" === k && "none" === n.css(a, "float") && (l.inlineBlockNeedsLayout && "inline" !== Ma(a.nodeName) ? p.zoom = 1 : p.display = "inline-block")), c.overflow && (p.overflow = "hidden", l.shrinkWrapBlocks() || m.always(function () { 4024 p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2]; 4025 })); 4026 4027 for (d in b) { 4028 if (e = b[d], jb.exec(e)) { 4029 if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) { 4030 if ("show" !== e || !r || void 0 === r[d]) continue; 4031 q = !0; 4032 } 4033 4034 o[d] = r && r[d] || n.style(a, d); 4035 } else j = void 0; 4036 } 4037 4038 if (n.isEmptyObject(o)) "inline" === ("none" === j ? Ma(a.nodeName) : j) && (p.display = j);else { 4039 r ? "hidden" in r && (q = r.hidden) : r = n._data(a, "fxshow", {}), f && (r.hidden = !q), q ? n(a).show() : m.done(function () { 4040 n(a).hide(); 4041 }), m.done(function () { 4042 var b; 4043 4044 n._removeData(a, "fxshow"); 4045 4046 for (b in o) { 4047 n.style(a, b, o[b]); 4048 } 4049 }); 4050 4051 for (d in o) { 4052 g = nb(q ? r[d] : 0, d, m), d in r || (r[d] = g.start, q && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0)); 4053 } 4054 } 4055 } 4056 4057 function pb(a, b) { 4058 var c, d, e, f, g; 4059 4060 for (c in a) { 4061 if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = n.cssHooks[d], g && "expand" in g) { 4062 f = g.expand(f), delete a[d]; 4063 4064 for (c in f) { 4065 c in a || (a[c] = f[c], b[c] = e); 4066 } 4067 } else b[d] = e; 4068 } 4069 } 4070 4071 function qb(a, b, c) { 4072 var d, 4073 e, 4074 f = 0, 4075 g = qb.prefilters.length, 4076 h = n.Deferred().always(function () { 4077 delete i.elem; 4078 }), 4079 i = function i() { 4080 if (e) return !1; 4081 4082 for (var b = hb || lb(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++) { 4083 j.tweens[g].run(f); 4084 } 4085 4086 return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1); 4087 }, 4088 j = h.promise({ 4089 elem: a, 4090 props: n.extend({}, b), 4091 opts: n.extend(!0, { 4092 specialEasing: {}, 4093 easing: n.easing._default 4094 }, c), 4095 originalProperties: b, 4096 originalOptions: c, 4097 startTime: hb || lb(), 4098 duration: c.duration, 4099 tweens: [], 4100 createTween: function createTween(b, c) { 4101 var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing); 4102 return j.tweens.push(d), d; 4103 }, 4104 stop: function stop(b) { 4105 var c = 0, 4106 d = b ? j.tweens.length : 0; 4107 if (e) return this; 4108 4109 for (e = !0; d > c; c++) { 4110 j.tweens[c].run(1); 4111 } 4112 4113 return b ? (h.notifyWith(a, [j, 1, 0]), h.resolveWith(a, [j, b])) : h.rejectWith(a, [j, b]), this; 4114 } 4115 }), 4116 k = j.props; 4117 4118 for (pb(k, j.opts.specialEasing); g > f; f++) { 4119 if (d = qb.prefilters[f].call(j, a, k, j.opts)) return n.isFunction(d.stop) && (n._queueHooks(j.elem, j.opts.queue).stop = n.proxy(d.stop, d)), d; 4120 } 4121 4122 return n.map(k, nb, j), n.isFunction(j.opts.start) && j.opts.start.call(a, j), n.fx.timer(n.extend(i, { 4123 elem: a, 4124 anim: j, 4125 queue: j.opts.queue 4126 })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always); 4127 } 4128 4129 n.Animation = n.extend(qb, { 4130 tweeners: { 4131 "*": [function (a, b) { 4132 var c = this.createTween(a, b); 4133 return X(c.elem, a, U.exec(b), c), c; 4134 }] 4135 }, 4136 tweener: function tweener(a, b) { 4137 n.isFunction(a) ? (b = a, a = ["*"]) : a = a.match(G); 4138 4139 for (var c, d = 0, e = a.length; e > d; d++) { 4140 c = a[d], qb.tweeners[c] = qb.tweeners[c] || [], qb.tweeners[c].unshift(b); 4141 } 4142 }, 4143 prefilters: [ob], 4144 prefilter: function prefilter(a, b) { 4145 b ? qb.prefilters.unshift(a) : qb.prefilters.push(a); 4146 } 4147 }), n.speed = function (a, b, c) { 4148 var d = a && "object" == _typeof(a) ? n.extend({}, a) : { 4149 complete: c || !c && b || n.isFunction(a) && a, 4150 duration: a, 4151 easing: c && b || b && !n.isFunction(b) && b 4152 }; 4153 return d.duration = n.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, null != d.queue && d.queue !== !0 || (d.queue = "fx"), d.old = d.complete, d.complete = function () { 4154 n.isFunction(d.old) && d.old.call(this), d.queue && n.dequeue(this, d.queue); 4155 }, d; 4156 }, n.fn.extend({ 4157 fadeTo: function fadeTo(a, b, c, d) { 4158 return this.filter(W).css("opacity", 0).show().end().animate({ 4159 opacity: b 4160 }, a, c, d); 4161 }, 4162 animate: function animate(a, b, c, d) { 4163 var e = n.isEmptyObject(a), 4164 f = n.speed(b, c, d), 4165 g = function g() { 4166 var b = qb(this, n.extend({}, a), f); 4167 (e || n._data(this, "finish")) && b.stop(!0); 4168 }; 4169 4170 return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g); 4171 }, 4172 stop: function stop(a, b, c) { 4173 var d = function d(a) { 4174 var b = a.stop; 4175 delete a.stop, b(c); 4176 }; 4177 4178 return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function () { 4179 var b = !0, 4180 e = null != a && a + "queueHooks", 4181 f = n.timers, 4182 g = n._data(this); 4183 4184 if (e) g[e] && g[e].stop && d(g[e]);else for (e in g) { 4185 g[e] && g[e].stop && kb.test(e) && d(g[e]); 4186 } 4187 4188 for (e = f.length; e--;) { 4189 f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1)); 4190 } 4191 4192 !b && c || n.dequeue(this, a); 4193 }); 4194 }, 4195 finish: function finish(a) { 4196 return a !== !1 && (a = a || "fx"), this.each(function () { 4197 var b, 4198 c = n._data(this), 4199 d = c[a + "queue"], 4200 e = c[a + "queueHooks"], 4201 f = n.timers, 4202 g = d ? d.length : 0; 4203 4204 for (c.finish = !0, n.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;) { 4205 f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1)); 4206 } 4207 4208 for (b = 0; g > b; b++) { 4209 d[b] && d[b].finish && d[b].finish.call(this); 4210 } 4211 4212 delete c.finish; 4213 }); 4214 } 4215 }), n.each(["toggle", "show", "hide"], function (a, b) { 4216 var c = n.fn[b]; 4217 4218 n.fn[b] = function (a, d, e) { 4219 return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(mb(b, !0), a, d, e); 4220 }; 4221 }), n.each({ 4222 slideDown: mb("show"), 4223 slideUp: mb("hide"), 4224 slideToggle: mb("toggle"), 4225 fadeIn: { 4226 opacity: "show" 4227 }, 4228 fadeOut: { 4229 opacity: "hide" 4230 }, 4231 fadeToggle: { 4232 opacity: "toggle" 4233 } 4234 }, function (a, b) { 4235 n.fn[a] = function (a, c, d) { 4236 return this.animate(b, a, c, d); 4237 }; 4238 }), n.timers = [], n.fx.tick = function () { 4239 var a, 4240 b = n.timers, 4241 c = 0; 4242 4243 for (hb = n.now(); c < b.length; c++) { 4244 a = b[c], a() || b[c] !== a || b.splice(c--, 1); 4245 } 4246 4247 b.length || n.fx.stop(), hb = void 0; 4248 }, n.fx.timer = function (a) { 4249 n.timers.push(a), a() ? n.fx.start() : n.timers.pop(); 4250 }, n.fx.interval = 13, n.fx.start = function () { 4251 ib || (ib = a.setInterval(n.fx.tick, n.fx.interval)); 4252 }, n.fx.stop = function () { 4253 a.clearInterval(ib), ib = null; 4254 }, n.fx.speeds = { 4255 slow: 600, 4256 fast: 200, 4257 _default: 400 4258 }
4258, n.fn.delay = function (b, c) { 4259 return b = n.fx ? n.fx.speeds[b] || b : b, c = c || "fx", this.queue(c, function (c, d) { 4260 var e = a.setTimeout(c, b); 4261 4262 d.stop = function () { 4263 a.clearTimeout(e); 4264 }; 4265 }); 4266 }, function () { 4267 var a, 4268 b = d.createElement("input"), 4269 c = d.createElement("div"), 4270 e = d.createElement("select"), 4271 f = e.appendChild(d.createElement("option")); 4272 c = d.createElement("div"), c.setAttribute("className", "t"), c.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = c.getElementsByTagName("a")[0], b.setAttribute("type", "checkbox"), c.appendChild(b), a = c.getElementsByTagName("a")[0], a.style.cssText = "top:1px", l.getSetAttribute = "t" !== c.className, l.style = /top/.test(a.getAttribute("style")), l.hrefNormalized = "/a" === a.getAttribute("href"), l.checkOn = !!b.value, l.optSelected = f.selected, l.enctype = !!d.createElement("form").enctype, e.disabled = !0, l.optDisabled = !f.disabled, b = d.createElement("input"), b.setAttribute("value", ""), l.input = "" === b.getAttribute("value"), b.value = "t", b.setAttribute("type", "radio"), l.radioValue = "t" === b.value; 4273 }(); 4274 var rb = /\r/g, 4275 sb = /[\x20\t\r\n\f]+/g; 4276 n.fn.extend({ 4277 val: function val(a) { 4278 var b, 4279 c, 4280 d, 4281 e = this[0]; 4282 { 4283 if (arguments.length) return d = n.isFunction(a), this.each(function (c) { 4284 var e; 4285 1 === this.nodeType && (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : n.isArray(e) && (e = n.map(e, function (a) { 4286 return null == a ? "" : a + ""; 4287 })), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b && "set" in b && void 0 !== b.set(this, e, "value") || (this.value = e)); 4288 }); 4289 if (e) return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b && "get" in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(rb, "") : null == c ? "" : c); 4290 } 4291 } 4292 }), n.extend({ 4293 valHooks: { 4294 option: { 4295 get: function get(a) { 4296 var b = n.find.attr(a, "value"); 4297 return null != b ? b : n.trim(n.text(a)).replace(sb, " "); 4298 } 4299 }, 4300 select: { 4301 get: function get(a) { 4302 for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++) { 4303 if (c = d[i], (c.selected || i === e) && (l.optDisabled ? !c.disabled : null === c.getAttribute("disabled")) && (!c.parentNode.disabled || !n.nodeName(c.parentNode, "optgroup"))) { 4304 if (b = n(c).val(), f) return b; 4305 g.push(b); 4306 } 4307 } 4308 4309 return g; 4310 }, 4311 set: function set(a, b) { 4312 var c, 4313 d, 4314 e = a.options, 4315 f = n.makeArray(b), 4316 g = e.length; 4317 4318 while (g--) { 4319 if (d = e[g], n.inArray(n.valHooks.option.get(d), f) > -1) try { 4320 d.selected = c = !0; 4321 } catch (h) { 4322 d.scrollHeight; 4323 } else d.selected = !1; 4324 } 4325 4326 return c || (a.selectedIndex = -1), e; 4327 } 4328 } 4329 } 4330 }), n.each(["radio", "checkbox"], function () { 4331 n.valHooks[this] = { 4332 set: function set(a, b) { 4333 return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) > -1 : void 0; 4334 } 4335 }, l.checkOn || (n.valHooks[this].get = function (a) { 4336 return null === a.getAttribute("value") ? "on" : a.value; 4337 }); 4338 }); 4339 var tb, 4340 ub, 4341 vb = n.expr.attrHandle, 4342 wb = /^(?:checked|selected)$/i, 4343 xb = l.getSetAttribute, 4344 yb = l.input; 4345 n.fn.extend({ 4346 attr: function attr(a, b) { 4347 return Y(this, n.attr, a, b, arguments.length > 1); 4348 }, 4349 removeAttr: function removeAttr(a) { 4350 return this.each(function () { 4351 n.removeAttr(this, a); 4352 }); 4353 } 4354 }), n.extend({ 4355 attr: function attr(a, b, c) { 4356 var d, 4357 e, 4358 f = a.nodeType; 4359 if (3 !== f && 8 !== f && 2 !== f) return "undefined" == typeof a.getAttribute ? n.prop(a, b, c) : (1 === f && n.isXMLDoc(a) || (b = b.toLowerCase(), e = n.attrHooks[b] || (n.expr.match.bool.test(b) ? ub : tb)), void 0 !== c ? null === c ? void n.removeAttr(a, b) : e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : (a.setAttribute(b, c + ""), c) : e && "get" in e && null !== (d = e.get(a, b)) ? d : (d = n.find.attr(a, b), null == d ? void 0 : d)); 4360 }, 4361 attrHooks: { 4362 type: { 4363 set: function set(a, b) { 4364 if (!l.radioValue && "radio" === b && n.nodeName(a, "input")) { 4365 var c = a.value; 4366 return a.setAttribute("type", b), c && (a.value = c), b; 4367 } 4368 } 4369 } 4370 }, 4371 removeAttr: function removeAttr(a, b) { 4372 var c, 4373 d, 4374 e = 0, 4375 f = b && b.match(G); 4376 if (f && 1 === a.nodeType) while (c = f[e++]) { 4377 d = n.propFix[c] || c, n.expr.match.bool.test(c) ? yb && xb || !wb.test(c) ? a[d] = !1 : a[n.camel
4377Case("default-" + c)] = a[d] = !1 : n.attr(a, c, ""), a.removeAttribute(xb ? c : d); 4378 } 4379 } 4380 }), ub = { 4381 set: function set(a, b, c) { 4382 return b === !1 ? n.removeAttr(a, c) : yb && xb || !wb.test(c) ? a.setAttribute(!xb && n.propFix[c] || c, c) : a[n.camelCase("default-" + c)] = a[c] = !0, c; 4383 } 4384 }, n.each(n.expr.match.bool.source.match(/\w+/g), function (a, b) { 4385 var c = vb[b] || n.find.attr; 4386 yb && xb || !wb.test(b) ? vb[b] = function (a, b, d) { 4387 var e, f; 4388 return d || (f = vb[b], vb[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, vb[b] = f), e; 4389 } : vb[b] = function (a, b, c) { 4390 return c ? void 0 : a[n.camelCase("default-" + b)] ? b.toLowerCase() : null; 4391 }; 4392 }), yb && xb || (n.attrHooks.value = { 4393 set: function set(a, b, c) { 4394 return n.nodeName(a, "input") ? void (a.defaultValue = b) : tb && tb.set(a, b, c); 4395 } 4396 }), xb || (tb = { 4397 set: function set(a, b, c) { 4398 var d = a.getAttributeNode(c); 4399 return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += "", "value" === c || b === a.getAttribute(c) ? b : void 0; 4400 } 4401 }, vb.id = vb.name = vb.coords = function (a, b, c) { 4402 var d; 4403 return c ? void 0 : (d = a.getAttributeNode(b)) && "" !== d.value ? d.value : null; 4404 }, n.valHooks.button = { 4405 get: function get(a, b) { 4406 var c = a.getAttributeNode(b); 4407 return c && c.specified ? c.value : void 0; 4408 }, 4409 set: tb.set 4410 }, n.attrHooks.contenteditable = { 4411 set: function set(a, b, c) { 4412 tb.set(a, "" === b ? !1 : b, c); 4413 } 4414 }, n.each(["width", "height"], function (a, b) { 4415 n.attrHooks[b] = { 4416 set: function set(a, c) { 4417 return "" === c ? (a.setAttribute(b, "auto"), c) : void 0; 4418 } 4419 }; 4420 })), l.style || (n.attrHooks.style = { 4421 get: function get(a) { 4422 return a.style.cssText || void 0; 4423 }, 4424 set: function set(a, b) { 4425 return a.style.cssText = b + ""; 4426 } 4427 }); 4428 var zb = /^(?:input|select|textarea|button|object)$/i, 4429 Ab = /^(?:a|area)$/i; 4430 n.fn.extend({ 4431 prop: function prop(a, b) { 4432 return Y(this, n.prop, a, b, arguments.length > 1); 4433 }, 4434 removeProp: function removeProp(a) { 4435 return a = n.propFix[a] || a, this.each(function () { 4436 try { 4437 this[a] = void 0, delete this[a]; 4438 } catch (b) {} 4439 }); 4440 } 4441 }), n.extend({ 4442 prop: function prop(a, b, c) { 4443 var d, 4444 e, 4445 f = a.nodeType; 4446 if (3 !== f && 8 !== f && 2 !== f) return 1 === f && n.isXMLDoc(a) || (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get" in e && null !== (d = e.get(a, b)) ? d : a[b]; 4447 }, 4448 propHooks: { 4449 tabIndex: { 4450 get: function get(a) { 4451 var b = n.find.attr(a, "tabindex"); 4452 return b ? parseInt(b, 10) : zb.test(a.nodeName) || Ab.test(a.nodeName) && a.href ? 0 : -1; 4453 } 4454 } 4455 }, 4456 propFix: { 4457 "for": "htmlFor", 4458 "class": "className" 4459 } 4460 }), l.hrefNormalized || n.each(["href", "src"], function (a, b) { 4461 n.propHooks[b] = { 4462 get: function get(a) { 4463 return a.getAttribute(b, 4); 4464 } 4465 }; 4466 }), l.optSelected || (n.propHooks.selected = { 4467 get: function get(a) { 4468 var b = a.parentNode; 4469 return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null; 4470 }, 4471 set: function set(a) { 4472 var b = a.parentNode; 4473 b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex); 4474 } 4475 }), n.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { 4476 n.propFix[this.toLowerCase()] = this; 4477 }), l.enctype || (n.propFix.enctype = "encoding"); 4478 var Bb = /[\t\r\n\f]/g; 4479 4480 function Cb(a) { 4481 return n.attr(a, "class") || ""; 4482 } 4483 4484 n.fn.extend({ 4485 addClass: function addClass(a) { 4486 var b, 4487 c, 4488 d, 4489 e, 4490 f, 4491 g, 4492 h, 4493 i = 0; 4494 if (n.isFunction(a)) return this.each(function (b) { 4495 n(this).addClass(a.call(this, b, Cb(this))); 4496 }); 4497 4498 if ("string" == typeof a && a) { 4499 b = a.match(G) || []; 4500 4501 while (c = this[i++]) { 4502 if (e = Cb(c), d = 1 === c.nodeType && (" " + e + " ").replace(Bb, " ")) { 4503 g = 0; 4504 4505 while (f = b[g++]) { 4506 d.indexOf(" " + f + " ") < 0 && (d += f + " "); 4507 } 4508 4509 h = n.trim(d), e !== h && n.attr(c, "class", h); 4510 } 4511 } 4512 } 4513 4514 return this; 4515 }, 4516 removeClass: function removeClass(a) { 4517 var b, 4518 c, 4519 d, 4520 e, 4521 f, 4522 g, 4523 h, 4524 i = 0; 4525 if (n.isFunction(a)) return this.each(function (b) { 4526 n(this).removeClass(a.call(this, b, Cb(this))); 4527 }); 4528 if (!arguments.length) return this.attr("class", ""); 4529 4530 if ("string" == typeof a && a) { 4531 b = a.match(G) || []; 4532 4533 while (c = this[i++]) { 4534 if (e = Cb(c), d = 1 === c.nodeType && (" " + e + " ").replace(Bb, " ")) { 4535 g = 0; 4536 4537 while (f = b[g++]) { 4538 while (d.indexOf(" " + f + " ") > -1) { 4539 d = d.replace(" " + f + " ", " "); 4540 } 4541 } 4542 4543 h = n.trim(d), e !== h && n.attr(c, "class", h); 4544 } 4545 } 4546 } 4547 4548 return this; 4549 }, 4550 toggleClass: function toggleClass(a, b) { 4551 var c = _typeof(a); 4552 4553 return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : n.isFunction(a) ? this.each(function (c) { 4554 n(this).toggleClass(a.call(this, c, Cb(this), b), b); 4555 }) : this.each(function () { 4556 var b, d, e, f; 4557 4558 if ("string" === c) { 4559 d = 0, e = n(this), f = a.match(G) || []; 4560 4561 while (b = f[d++]) { 4562 e.hasClass(b) ? e.removeClass(b) : e.addClass(b); 4563 } 4564 } else void 0 !== a && "boolean" !== c || (b = Cb(this), b && n._data(this, "__className__", b), n.attr(this, "class", b || a === !1 ? "" : n._data(this, "__className__") || "")); 4565 }); 4566 }, 4567 hasClass: function hasClass(a) { 4568 var b, 4569 c, 4570 d = 0; 4571 b = " " + a + " "; 4572 4573 while (c = this[d++]) { 4574 if (1 === c.nodeType && (" " + Cb(c) + " ").replace(Bb, " ").indexOf(b) > -1) return !0; 4575 } 4576 4577 return !1; 4578 } 4579 }), n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) { 4580 n.fn[b] = function (a, c) { 4581 return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b); 4582 }; 4583 }), n.fn.extend({ 4584 hover: function hover(a, b) { 4585 return this.mouseenter(a).mouseleave(b || a); 4586 } 4587 }); 4588 var Db = a.location, 4589 Eb = n.now(), 4590 Fb = /\?/, 4591 Gb = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g; 4592 n.parseJSON = function (b) { 4593 if (a.JSON && a.JSON.parse) return a.JSON.parse(b + ""); 4594 var c, 4595 d = null, 4596 e = n.trim(b + ""); 4597 return e && !n.trim(e.replace(Gb, function (a, b, e, f) { 4598 return c && b && (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, ""); 4599 })) ? Function("return " + e)() : n.error("Invalid JSON: " + b); 4600 }, n.parseXML = function (b) { 4601 var c, d; 4602 if (!b || "string" != typeof b) return null; 4603 4604 try { 4605 a.DOMParser ? (d = new a.DOMParser(), c = d.parseFromString(b, "text/xml")) : (c = new a.ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b)); 4606 } catch (e) { 4607 c = void 0; 4608 } 4609 4610 return c && c.documentElement && !c.getElementsByTagName("parsererror").length || n.error("Invalid XML: " + b), c; 4611 }; 4612 var Hb = /#.*$/, 4613 Ib = /([?&])_=[^&]*/, 4614 Jb = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, 4615 Kb = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 4616 Lb = /^(?:GET|HEAD)$/, 4617 Mb = /^\/\//, 4618 Nb = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, 4619 Ob = {}, 4620 Pb = {}, 4621 Qb = "*/".concat("*"), 4622 Rb = Db.href, 4623 Sb = Nb.exec(Rb.toLowerCase()) || []; 4624 4625 function Tb(a) { 4626 return function (b, c) { 4627 "string" != typeof b && (c = b, b = "*"); 4628 var d, 4629 e = 0, 4630 f = b.toLowerCase().match(G) || []; 4631 if (n.isFunction(c)) while (d = f[e++]) { 4632 "+" === d.charAt(0) ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c); 4633 } 4634 }; 4635 } 4636 4637 function Ub(a, b, c, d) { 4638 var e = {}, 4639 f = a === Pb; 4640 4641 function g(h) { 4642 var i; 4643 return e[h] = !0, n.each(a[h] || [], function (a, h) { 4644 var j = h(b, c, d); 4645 return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1); 4646 }), i; 4647 } 4648 4649 return g(b.dataTypes[0]) || !e["*"] && g("*"); 4650 } 4651 4652 function Vb(a, b) { 4653 var c, 4654 d, 4655 e = n.ajaxSettings.flatOptions || {}; 4656 4657 for (d in b) { 4658 void 0 !== b[d] && ((e[d] ? a : c || (c = {}))[d] = b[d]); 4659 } 4660 4661 return c && n.extend(!0, a, c), a; 4662 } 4663 4664 function Wb(a, b, c) { 4665 var d, 4666 e, 4667 f, 4668 g, 4669 h = a.contents, 4670 i = a.dataTypes; 4671 4672 while ("*" === i[0]) { 4673 i.shift(), void 0 === e && (e = a.mimeType || b.getResponseHeader("Content-Type")); 4674 } 4675 4676 if (e) for (g in h) { 4677 if (h[g] && h[g].test(e)) { 4678 i.unshift(g); 4679 break; 4680 } 4681 } 4682 if (i[0] in c) f = i[0];else { 4683 for (g in c) { 4684 if (!i[0] || a.converters[g + " " + i[0]]) { 4685 f = g; 4686 break; 4687 } 4688 4689 d || (d = g); 4690 } 4691 4692 f = f || d; 4693 } 4694 return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0; 4695 } 4696 4697 function Xb(a, b, c, d) { 4698 var e, 4699 f, 4700 g, 4701 h, 4702 i, 4703 j = {}, 4704 k = a.dataTypes.slice(); 4705 if (k[1]) for (g in a.converters) { 4706 j[g.toLowerCase()] = a.converters[g]; 4707 } 4708 f = k.shift(); 4709 4710 while (f) { 4711 if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift()) if ("*" === f) f = i;else if ("*" !== i && i !== f) { 4712 if (g = j[i + " " + f] || j["* " + f], !g) for (e in j) { 4713 if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) { 4714 g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1])); 4715 break; 4716 } 4717 } 4718 if (g !== !0) if (g && a["throws"]) b = g(b);else try { 4719 b = g(b); 4720 } catch (l) { 4721 return { 4722 state: "parsererror", 4723 error: g ? l : "No conversion from " + i + " to " + f 4724 }; 4725 } 4726 } 4727 } 4728 4729 return { 4730 state: "success", 4731 data: b 4732 }; 4733 } 4734 4735 n.extend({ 4736 active: 0, 4737 lastModified: {}, 4738 etag: {}, 4739 ajaxSettings: { 4740 url: Rb, 4741 type: "GET", 4742 isLocal: Kb.test(Sb[1]), 4743 global: !0, 4744 processData: !0, 4745 async: !0, 4746 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 4747 accepts: { 4748 "*": Qb, 4749 text: "text/plain", 4750 html: "text/html", 4751 xml: "application/xml, text/xml", 4752 json: "application/json, text/javascript" 4753 }, 4754 contents: { 4755 xml: /\bxml\b/, 4756 html: /\bhtml/, 4757 json: /\bjson\b/ 4758 }, 4759 responseFields: { 4760 xml: "responseXML", 4761 text: "responseText", 4762 json: "responseJSON" 4763 }, 4764 converters: { 4765 "* text": String, 4766 "text html": !0, 4767 "text json": n.parseJSON, 4768 "text xml": n.parseXML 4769 }, 4770 flatOptions: { 4771 url: !0, 4772 context: !0 4773 } 4774 }, 4775 ajaxSetup: function ajaxSetup(a, b) { 4776 return b ? Vb(Vb(a, n.ajaxSettings), b) : Vb(n.ajaxSettings, a); 4777 }, 4778 ajaxPrefilter: Tb(Ob), 4779 ajaxTransport: Tb(Pb), 4780 ajax: function ajax(b, c) { 4781 "object" == _typeof(b) && (c = b, b = void 0), c = c || {}; 4782 var d, 4783 e, 4784 f, 4785 g, 4786 h, 4787 i, 4788 j, 4789 k, 4790 l = n.ajaxSetup({}, c), 4791 m = l.context || l, 4792 o = l.context && (m.nodeType || m.jquery) ? n(m) : n.event, 4793 p = n.Deferred(), 4794 q = n.Callbacks("once memory"), 4795 r = l.statusCode || {}, 4796 s = {}, 4797 t = {}, 4798 u = 0, 4799 v = "canceled", 4800 w = { 4801 readyState: 0, 4802 getResponseHeader: function getResponseHeader(a) { 4803 var b; 4804 4805 if (2 === u) { 4806 if (!k) { 4807 k = {}; 4808 4809 while (b = Jb.exec(g)) { 4810 k[b[1].toLowerCase()] = b[2]; 4811 } 4812 } 4813 4814 b = k[a.toLowerCase()]; 4815 } 4816 4817 return null == b ? null : b; 4818 }, 4819 getAllResponseHeaders: function getAllResponseHeaders() { 4820 return 2 === u ? g : null; 4821 }, 4822 setRequestHeader: function setRequestHeader(a, b) { 4823 var c = a.toLowerCase(); 4824 return u || (a = t[c] = t[c] || a, s[a] = b), this; 4825 }, 4826 overrideMimeType: function overrideMimeType(a) { 4827 return u || (l.mimeType = a), this; 4828 }, 4829 statusCode: function statusCode(a) { 4830 var b; 4831 if (a) if (2 > u) for (b in a) { 4832 r[b] = [r[b], a[b]]; 4833 }
4833 else w.always(a[w.status]); 4834 return this; 4835 }, 4836 abort: function abort(a) { 4837 var b = a || v; 4838 return j && j.abort(b), y(0, b), this; 4839 } 4840 }; 4841 if (p.promise(w).complete = q.add, w.success = w.done, w.error = w.fail, l.url = ((b || l.url || Rb) + "").replace(Hb, "").replace(Mb, Sb[1] + "//"), l.type = c.method || c.type || l.method || l.type, l.dataTypes = n.trim(l.dataType || "*").toLowerCase().match(G) || [""], null == l.crossDomain && (d = Nb.exec(l.url.toLowerCase()), l.crossDomain = !(!d || d[1] === Sb[1] && d[2] === Sb[2] && (d[3] || ("http:" === d[1] ? "80" : "443")) === (Sb[3] || ("http:" === Sb[1] ? "80" : "443")))), l.data && l.processData && "string" != typeof l.data && (l.data = n.param(l.data, l.traditional)), Ub(Ob, l, c, w), 2 === u) return w; 4842 i = n.event && l.global, i && 0 === n.active++ && n.event.trigger("ajaxStart"), l.type = l.type.toUpperCase(), l.hasContent = !Lb.test(l.type), f = l.url, l.hasContent || (l.data && (f = l.url += (Fb.test(f) ? "&" : "?") + l.data, delete l.data), l.cache === !1 && (l.url = Ib.test(f) ? f.replace(Ib, "$1_=" + Eb++) : f + (Fb.test(f) ? "&" : "?") + "_=" + Eb++)), l.ifModified && (n.lastModified[f] && w.setRequestHeader("If-Modified-Since", n.lastModified[f]), n.etag[f] && w.setRequestHeader("If-None-Match", n.etag[f])), (l.data && l.hasContent && l.contentType !== !1 || c.contentType) && w.setRequestHeader("Content-Type", l.contentType), w.setRequestHeader("Accept", l.dataTypes[0] && l.accepts[l.dataTypes[0]] ? l.accepts[l.dataTypes[0]] + ("*" !== l.dataTypes[0] ? ", " + Qb + "; q=0.01" : "") : l.accepts["*"]); 4843 4844 for (e in l.headers) { 4845 w.setRequestHeader(e, l.headers[e]); 4846 } 4847 4848 if (l.beforeSend && (l.beforeSend.call(m, w, l) === !1 || 2 === u)) return w.abort(); 4849 v = "abort"; 4850 4851 for (e in { 4852 success: 1, 4853 error: 1, 4854 complete: 1 4855 }) { 4856 w[e](l[e]); 4857 } 4858 4859 if (j = Ub(Pb, l, c, w)) { 4860 if (w.readyState = 1, i && o.trigger("ajaxSend", [w, l]), 2 === u) return w; 4861 l.async && l.timeout > 0 && (h = a.setTimeout(function () { 4862 w.abort("timeout"); 4863 }, l.timeout)); 4864 4865 try { 4866 u = 1, j.send(s, y); 4867 } catch (x) { 4868 if (!(2 > u)) throw x; 4869 y(-1, x); 4870 } 4871 } else y(-1, "No Transport"); 4872 4873 function y(b, c, d, e) { 4874 var k, 4875 s, 4876 t, 4877 v, 4878 x, 4879 y = c; 4880 2 !== u && (u = 2, h && a.clearTimeout(h), j = void 0, g = e || "", w.readyState = b > 0 ? 4 : 0, k = b >= 200 && 300 > b || 304 === b, d && (v = Wb(l, w, d)), v = Xb(l, v, w, k), k ? (l.ifModified && (x = w.getResponseHeader("Last-Modified"), x && (n.lastModified[f] = x), x = w.getResponseHeader("etag"), x && (n.etag[f] = x)), 204 === b || "HEAD" === l.type ? y = "nocontent" : 304 === b ? y = "notmodified" : (y = v.state, s = v.data, t = v.error, k = !t)) : (t = y, !b && y || (y = "error", 0 > b && (b = 0))), w.status = b, w.statusText = (c || y) + "", k ? p.resolveWith(m, [s, y, w]) : p.rejectWith(m, [w, y, t]), w.statusCode(r), r = void 0, i && o.trigger(k ? "ajaxSuccess" : "ajaxError", [w, l, k ? s : t]), q.fireWith(m, [w, y]), i && (o.trigger("ajaxComplete", [w, l]), --n.active || n.event.trigger("ajaxStop"))); 4881 } 4882 4883 return w; 4884 }, 4885 getJSON: function getJSON(a, b, c) { 4886 return n.get(a, b, c, "json"); 4887 }, 4888 getScript: function getScript(a, b) { 4889 return n.get(a, void 0, b, "script"); 4890 } 4891 }), n.each(["get", "post"], function (a, b) { 4892 n[b] = function (a, c, d, e) { 4893 return n.isFunction(c) && (e = e || d, d = c, c = void 0), n.ajax(n.extend({ 4894 url: a, 4895 type: b, 4896 dataType: e, 4897 data: c, 4898 success: d 4899 }, n.isPlainObject(a) && a)); 4900 }; 4901 }), n._evalUrl = function (a) { 4902 return n.ajax({ 4903 url: a, 4904 type: "GET", 4905 dataType: "script", 4906 cache: !0, 4907 async: !1, 4908 global: !1, 4909 "throws": !0 4910 }); 4911 }, n.fn.extend({ 4912 wrapAll: function wrapAll(a) { 4913 if (n.isFunction(a)) return this.each(function (b) { 4914 n(this).wrapAll(a.call(this, b)); 4915 }); 4916 4917 if (this[0]) { 4918 var b = n(a, this[0].ownerDocument).eq(0).clone(!0); 4919 this[0].parentNode && b.insertBefore(this[0]), b.map(function () { 4920 var a = this; 4921 4922 while (a.firstChild && 1 === a.firstChild.nodeType) { 4923 a = a.firstChild; 4924 } 4925 4926 return a; 4927 }).append(this); 4928 } 4929 4930 return this; 4931 }, 4932 wrapInner: function wrapInner(a) { 4933 return n.isFunction(a) ? this.each(function (b) { 4934 n(this).wrapInner(a.call(this, b)); 4935 }) : this.each(function () { 4936 var b = n(this), 4937 c = b.contents(); 4938 c.length ? c.wrapAll(a) : b.append(a); 4939 }); 4940 }, 4941 wrap: function wrap(a) { 4942 var b = n.isFunction(a); 4943 return this.each(function (c) { 4944 n(this).wrapAll(b ? a.call(this, c) : a); 4945 }); 4946 }, 4947 unwrap: function unwrap() { 4948 return this.parent().each(function () { 4949 n.nodeName(this, "body") || n(this).replaceWith(this.childNodes); 4950 }).end(); 4951 } 4952 }); 4953 4954 function Yb(a) { 4955 return a.style && a.style.display || n.css(a, "display"); 4956 } 4957 4958 function Zb(a) { 4959 if (!n.contains(a.ownerDocument || d, a)) return !0; 4960 4961 while (a && 1 === a.nodeType) { 4962 if ("none" === Yb(a) || "hidden" === a.type) return !0; 4963 a = a.parentNode; 4964 } 4965 4966 return !1; 4967 } 4968 4969 n.expr.filters.hidden = function (a) { 4970 return l.reliableHiddenOffsets() ? a.offsetWidth <= 0 && a.offsetHeight <= 0 && !a.getClientRects().length : Zb(a); 4971 }, n.expr.filters.visible = function (a) { 4972 return !n.expr.filters.hidden(a); 4973 }; 4974 var $b = /%20/g, 4975 _b = /\[\]$/, 4976 ac = /\r?\n/g, 4977 bc = /^(?:submit|button|image|reset|file)$/i, 4978 cc = /^(?:input|select|textarea|keygen)/i; 4979 4980 function dc(a, b, c, d) { 4981 var e; 4982 if (n.isArray(b)) n.each(b, function (b, e) { 4983 c || _b.test(a) ? d(a, e) : dc(a + "[" + ("object" == _typeof(e) && null != e ? b : "") + "]", e, c, d); 4984 });else if (c || "object" !== n.type(b)) d(a, b);else for (e in b) { 4985 dc(a + "[" + e + "]", b[e], c, d); 4986 } 4987 } 4988 4989 n.param = function (a, b) { 4990 var c, 4991 d = [], 4992 e = function e(a, b) { 4993 b = n.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b); 4994 }; 4995 4996 if (void 0 === b && (b = n.ajaxSettings && n.ajaxSettings.traditional), n.isArray(a) || a.jquery && !n.isPlainObject(a)) n.each(a, function () { 4997 e(this.name, this.value); 4998 });else for (c in a) { 4999 dc(c, a[c], b, e); 5000 } 5001 return d.join("&").replace($b, "+"); 5002 }, n.fn.extend({ 5003 serialize: function serialize() { 5004 return n.param(this.serializeArray()); 5005 }, 5006 serializeArray: function serializeArray() { 5007 return this.map(function () { 5008 var a = n.prop(this, "elements"); 5009 return a ? n.makeArray(a) : this; 5010 }).filter(function () { 5011 var a = this.type; 5012 return this.name && !n(this).is(":disabled") && cc.test(this.nodeName) && !bc.test(a) && (this.checked || !Z.test(a)); 5013 }).map(function (a, b) { 5014 var c = n(this).val(); 5015 return null == c ? null : n.isArray(c) ? n.map(c, function (a) { 5016 return { 5017 name: b.name, 5018 value: a.replace(ac, "\r\n") 5019 }; 5020 }) : { 5021 name: b.name, 5022 value: c.replace(ac, "\r\n") 5023 }; 5024 }).get(); 5025 } 5026 }), n.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function () { 5027 return this.isLocal ? ic() : d.documentMode >
5027 8 ? hc() : /^(get|post|head|put|delete|options)$/i.test(this.type) && hc() || ic(); 5028 } : hc; 5029 var ec = 0, 5030 fc = {}, 5031 gc = n.ajaxSettings.xhr(); 5032 a.attachEvent && a.attachEvent("onunload", function () { 5033 for (var a in fc) { 5034 fc[a](void 0, !0); 5035 } 5036 }), l.cors = !!gc && "withCredentials" in gc, gc = l.ajax = !!gc, gc && n.ajaxTransport(function (b) { 5037 if (!b.crossDomain || l.cors) { 5038 var _c; 5039 5040 return { 5041 send: function send(d, e) { 5042 var f, 5043 g = b.xhr(), 5044 h = ++ec; 5045 if (g.open(b.type, b.url, b.async, b.username, b.password), b.xhrFields) for (f in b.xhrFields) { 5046 g[f] = b.xhrFields[f]; 5047 } 5048 b.mimeType && g.overrideMimeType && g.overrideMimeType(b.mimeType), b.crossDomain || d["X-Requested-With"] || (d["X-Requested-With"] = "XMLHttpRequest"); 5049 5050 for (f in d) { 5051 void 0 !== d[f] && g.setRequestHeader(f, d[f] + ""); 5052 } 5053 5054 g.send(b.hasContent && b.data || null), _c = function c(a, d) { 5055 var f, i, j; 5056 if (_c && (d || 4 === g.readyState)) if (delete fc[h], _c = void 0, g.onreadystatechange = n.noop, d) 4 !== g.readyState && g.abort();else { 5057 j = {}, f = g.status, "string" == typeof g.responseText && (j.text = g.responseText); 5058 5059 try { 5060 i = g.statusText; 5061 } catch (k) { 5062 i = ""; 5063 } 5064 5065 f || !b.isLocal || b.crossDomain ? 1223 === f && (f = 204) : f = j.text ? 200 : 404; 5066 } 5067 j && e(f, i, j, g.getAllResponseHeaders()); 5068 }, b.async ? 4 === g.readyState ? a.setTimeout(_c) : g.onreadystatechange = fc[h] = _c : _c(); 5069 }, 5070 abort: function abort() { 5071 _c && _c(void 0, !0); 5072 } 5073 }; 5074 } 5075 }); 5076 5077 function hc() { 5078 try { 5079 return new a.XMLHttpRequest(); 5080 } catch (b) {} 5081 } 5082 5083 function ic() { 5084 try { 5085 return new a.ActiveXObject("Microsoft.XMLHTTP"); 5086 } catch (b) {} 5087 } 5088 5089 n.ajaxSetup({ 5090 accepts: { 5091 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" 5092 }, 5093 contents: { 5094 script: /\b(?:java|ecma)script\b/ 5095 }, 5096 converters: { 5097 "text script": function textScript(a) { 5098 return n.globalEval(a), a; 5099 } 5100 } 5101 }), n.ajaxPrefilter("script", function (a) { 5102 void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1); 5103 }), n.ajaxTransport("script", function (a) { 5104 if (a.crossDomain) { 5105 var b, 5106 c = d.head || n("head")[0] || d.documentElement; 5107 return { 5108 send: function send(e, f) { 5109 b = d.createElement("script"), b.async = !0, a.scriptCharset && (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function (a, c) { 5110 (c || !b.readyState || /loaded|complete/.test(b.readyState)) && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), b = null, c || f(200, "success")); 5111 }, c.insertBefore(b, c.firstChild); 5112 }, 5113 abort: function abort() { 5114 b && b.onload(void 0, !0); 5115 } 5116 }; 5117 } 5118 }); 5119 var jc = [], 5120 kc = /(=)\?(?=&|$)|\?\?/; 5121 n.ajaxSetup({ 5122 jsonp: "callback", 5123 jsonpCallback: function jsonpCallback() { 5124 var a = jc.pop() || n.expando + "_" + Eb++; 5125 return this[a] = !0, a; 5126 } 5127 }), n.ajaxPrefilter("json jsonp", function (b, c, d) { 5128 var e, 5129 f, 5130 g, 5131 h = b.jsonp !== !1 && (kc.test(b.url) ? "url" : "string" == typeof b.data && 0 === (b.contentType || "").indexOf("application/x-www-form-urlencoded") && kc.test(b.data) && "data"); 5132 return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(kc, "$1" + e) : b.jsonp !== !1 && (b.url += (Fb.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function () { 5133 return g || n.error(e + " was not called"), g[0]; 5134 }, b.dataTypes[0] = "json", f = a[e], a[e] = function () { 5135 g = arguments; 5136 }, d.always(function () {
5137 void 0 === f ? n(a).removeProp(e) : a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, jc.push(e)), g && n.isFunction(f) && f(g[0]), g = f = void 0; 5138 }), "script") : void 0; 5139 }), n.parseHTML = function (a, b, c) { 5140 if (!a || "string" != typeof a) return null; 5141 "boolean" == typeof b && (c = b, b = !1), b = b || d; 5142 var e = x.exec(a), 5143 f = !c && []; 5144 return e ? [b.createElement(e[1])] : (e = ja([a], b, f), f && f.length && n(f).remove(), n.merge([], e.childNodes)); 5145 }; 5146 var lc = n.fn.load; 5147 n.fn.load = function (a, b, c) { 5148 if ("string" != typeof a && lc) return lc.apply(this, arguments); 5149 var d, 5150 e, 5151 f, 5152 g = this, 5153 h = a.indexOf(" "); 5154 return h > -1 && (d = n.trim(a.slice(h, a.length)), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b && "object" == _typeof(b) && (e = "POST"), g.length > 0 && n.ajax({ 5155 url: a, 5156 type: e || "GET", 5157 dataType: "html", 5158 data: b 5159 }).done(function (a) { 5160 f = arguments, g.html(d ? n("<div>").append(n.parseHTML(a)).find(d) : a); 5161 }).always(c && function (a, b) { 5162 g.each(function () { 5163 c.apply(this, f || [a.responseText, b, a]); 5164 }); 5165 }), this; 5166 }, n.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) { 5167 n.fn[b] = function (a) { 5168 return this.on(b, a); 5169 }; 5170 }), n.expr.filters.animated = function (a) { 5171 return n.grep(n.timers, function (b) { 5172 return a === b.elem; 5173 }).length; 5174 }; 5175 5176 function mc(a) { 5177 return n.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1; 5178 } 5179 5180 n.offset = { 5181 setOffset: function setOffset(a, b, c) { 5182 var d, 5183 e, 5184 f, 5185 g, 5186 h, 5187 i, 5188 j, 5189 k = n.css(a, "position"), 5190 l = n(a), 5191 m = {}; 5192 "static" === k && (a.style.position = "relative"), h = l.offset(), f = n.css(a, "top"), i = n.css(a, "left"), j = ("absolute" === k || "fixed" === k) && n.inArray("auto", [f, i]) > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) && (b = b.call(a, c, n.extend({}, h))), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using" in b ? b.using.call(a, m) : l.css(m); 5193 } 5194 }, n.fn.extend({ 5195 offset: function offset(a) { 5196 if (arguments.length) return void 0 === a ? this : this.each(function (b) { 5197 n.offset.setOffset(this, a, b); 5198 }); 5199 var b, 5200 c, 5201 d = { 5202 top: 0, 5203 left: 0 5204 }, 5205 e = this[0], 5206 f = e && e.ownerDocument; 5207 if (f) return b = f.documentElement, n.contains(b, e) ? ("undefined" != typeof e.getBoundingClientRect && (d = e.getBoundingClientRect()), c = mc(f), { 5208 top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0), 5209 left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0) 5210 }) : d; 5211 }, 5212 position: function position() { 5213 if (this[0]) { 5214 var a, 5215 b, 5216 c = { 5217 top: 0, 5218 left: 0 5219 }, 5220 d = this[0]; 5221 return "fixed" === n.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], "html") || (c = a.offset()), c.top += n.css(a[0], "borderTopWidth", !0), c.left += n.css(a[0], "borderLeftWidth", !0)), { 5222 top: b.top - c.top - n.css(d, "marginTop", !0), 5223 left: b.left - c.left - n.css(d, "marginLeft", !0) 5224 }; 5225 } 5226 }, 5227 offsetParent: function offsetParent() { 5228 return this.map(function () { 5229 var a = this.offsetParent; 5230 5231 while (a && !n.nodeName(a, "html") && "static" === n.css(a, "position")) { 5232 a = a.offsetParent; 5233 } 5234 5235 return a || Qa; 5236 }); 5237 } 5238 }), n.each({ 5239 scrollLeft: "pageXOffset", 5240 scrollTop: "pageYOffset" 5241 }, function (a, b) { 5242 var c = /Y/.test(b); 5243 5244 n.fn[a] = function (d) { 5245 return Y(this, function (a, d, e) { 5246 var f = mc(a); 5247 return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void (f ? f.scrollTo(c ? n(f).scrollLeft() : e, c ? e : n(f).scrollTop()) : a[d] = e); 5248 }, a, d, arguments.length, null); 5249 }; 5250 }), n.each(["top", "left"], function (a, b) {
5251 n.cssHooks[b] = Ua(l.pixelPosition, function (a, c) { 5252 return c ? (c = Sa(a, b), Oa.test(c) ? n(a).position()[b] + "px" : c) : void 0; 5253 }); 5254 }), n.each({ 5255 Height: "height", 5256 Width: "width" 5257 }, function (a, b) { 5258 n.each({ 5259 padding: "inner" + a, 5260 content: b, 5261 "": "outer" + a 5262 }, function (c, d) { 5263 n.fn[d] = function (d, e) { 5264 var f = arguments.length && (c || "boolean" != typeof d), 5265 g = c || (d === !0 || e === !0 ? "margin" : "border"); 5266 return Y(this, function (b, c, d) { 5267 var e; 5268 return n.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g); 5269 }, b, f ? d : void 0, f, null); 5270 }; 5271 }); 5272 }), n.fn.extend({ 5273 bind: function bind(a, b, c) { 5274 return this.on(a, null, b, c); 5275 }, 5276 unbind: function unbind(a, b) { 5277 return this.off(a, null, b); 5278 }, 5279 delegate: function delegate(a, b, c, d) { 5280 return this.on(b, a, c, d); 5281 }, 5282 undelegate: function undelegate(a, b, c) { 5283 return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c); 5284 } 5285 }), n.fn.size = function () { 5286 return this.length; 5287 }, n.fn.andSelf = n.fn.addBack, true && !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { 5288 return n; 5289 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 5290 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 5291 var nc = a.jQuery, 5292 oc = a.$; 5293 return n.noConflict = function (b) { 5294 return a.$ === n && (a.$ = oc), b && a.jQuery === n && (a.jQuery = nc), n; 5295 }, b || (a.jQuery = a.$ = n), n; 5296}); 5297 5298/***/ }), 5299
5300/***/ "./resources/js/jquery.sticky.js": 5301/*!***************************************!*\ 5302 !*** ./resources/js/jquery.sticky.js ***! 5303 \***************************************/ 5304/***/ ((module, exports, __webpack_require__) => { 5305 5306var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 5307 5308// Sticky Plugin v1.0.3 for jQuery 5309// ============= 5310// Author: Anthony Garand 5311// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk) 5312// Improvements by Leonardo C. Daronco (daronco) 5313// Created: 02/14/2011 5314// Date: 07/20/2015 5315// Website: http://stickyjs.com/ 5316// Description: Makes an element on the page stick on the screen as you scroll 5317// It will only set the 'top' and 'position' of your element, you 5318// might need to adjust the width in some cases. 5319(function (factory) { 5320 if (true) { 5321 // AMD. Register as an anonymous module. 5322 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 5323 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 5324 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 5325 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 5326 } else {} 5327})(function ($) { 5328 var slice = Array.prototype.slice; // save ref to original slice() 5329 5330 var splice = Array.prototype.splice; // save ref to original slice() 5331 5332 var defaults = { 5333 topSpacing: 0, 5334 bottomSpacing: 0, 5335 className: 'is-sticky', 5336 wrapperClassName: 'sticky-wrapper', 5337 center: false, 5338 getWidthFrom: '', 5339 widthFromWrapper: true, 5340 // works only when .getWidthFrom is empty 5341 responsiveWidth: false 5342 }, 5343 $window = $(window), 5344 $document = $(document), 5345 sticked = [], 5346 windowHeight = $window.height(), 5347 scroller = function scroller() { 5348 var scrollTop = $window.scrollTop(), 5349 documentHeight = $document.height(), 5350 dwh = documentHeight - windowHeight, 5351 extra = scrollTop > dwh ? dwh - scrollTop : 0; 5352 5353 for (var i = 0, l = sticked.length; i < l; i++) { 5354 var s = sticked[i], 5355 elementTop = s.stickyWrapper.offset().top, 5356 etse = elementTop - s.topSpacing - extra; //update height in case of dynamic content 5357 5358 s.stickyWrapper.css('height', s.stickyElement.outerHeight()); 5359 5360 if (scrollTop <= etse) { 5361 if (s.currentTop !== null) { 5362 s.stickyElement.css({ 5363 'width': '', 5364 'position': '', 5365 'top': '' 5366 }); 5367 s.stickyElement.parent().removeClass(s.className); 5368 s.stickyElement.trigger('sticky-end', [s]); 5369 s.currentTop = null; 5370 } 5371 } else { 5372 var newTop = documentHeight - s.stickyElement.outerHeight() - s.topSpacing - s.bottomSpacing - scrollTop - extra; 5373 5374 if (newTop < 0) { 5375 newTop = newTop + s.topSpacing; 5376 } else { 5377 newTop = s.topSpacing; 5378 } 5379 5380 if (s.currentTop !== newTop) { 5381 var newWidth; 5382 5383 if (s.getWidthFrom) { 5384 newWidth = $(s.getWidthFrom).width() || null; 5385 } else if (s.widthFromWrapper) { 5386 newWidth = s.stickyWrapper.width(); 5387 } 5388 5389 if (newWidth == null) { 5390 newWidth = s.stickyElement.width(); 5391 } 5392 5393 s.stickyElement.css('width', newWidth).css('position', 'fixed').css('top', newTop); 5394 s.stickyElement.parent().addClass(s.className); 5395 5396 if (s.currentTop === null) { 5397 s.stickyElement.trigger('sticky-start', [s]); 5398 } else { 5399 // sticky is started but it have to be repositioned 5400 s.stickyElement.trigger('sticky-update', [s]); 5401 } 5402 5403 if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) { 5404 // just reached bottom || just started to stick but bottom is already reached 5405 s.stickyElement.trigger('sticky-bottom-reached', [s]); 5406 } else if (s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) { 5407 // sticky is started && sticked at topSpacing && overflowing from top just finished 5408 s.stickyElement.trigger('sticky-bottom-unreached', [s]); 5409 } 5410 5411 s.currentTop = newTop; 5412 } // Check if sticky has reached end of container and stop sticking 5413 5414 5415 var stickyWrapperContainer = s.stickyWrapper.parent(); 5416 var unstick = s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight() && s.stickyElement.offset().top <= s.topSpacing; 5417 5418 if (unstick) { 5419 s.stickyElement.css('position', 'absolute').css('top', '').css('bottom', 0); 5420 } else { 5421 s.stickyElement.css('position', 'fixed').css('top', newTop).css('bottom', ''); 5422 } 5423 } 5424 } 5425 }, 5426 resizer = function resizer() { 5427 windowHeight = $window.height(); 5428 5429 for (var i = 0, l = sticked.length; i < l; i++) { 5430 var s = sticked[i]; 5431 var newWidth = null; 5432 5433 if (s.getWidthFrom) { 5434 if (s.responsiveWidth) { 5435 newWidth = $(s.getWidthFrom).width(); 5436 } 5437 } else if (s.widthFromWrapper) { 5438 newWidth = s.stickyWrapper.width(); 5439 } 5440 5441 if (newWidth != null) { 5442 s.stickyElement.css('width', newWidth); 5443 } 5444 } 5445 }, 5446 methods = { 5447 init: function init(options) { 5448 var o = $.extend({}, defaults, options); 5449 return this.each(function () { 5450 var stickyElement = $(this); 5451 var stickyId = stickyElement.attr('id'); 5452 var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
vendor: 3,593 bytes, lines 5453-5572
5453 var wrapper = $('<div></div>').attr('id', wrapperId).addClass(o.wrapperClassName); 5454 stickyElement.wrapAll(wrapper); 5455 var stickyWrapper = stickyElement.parent(); 5456 5457 if (o.center) { 5458 stickyWrapper.css({ 5459 width: stickyElement.outerWidth(), 5460 marginLeft: "auto", 5461 marginRight: "auto" 5462 }); 5463 } 5464 5465 if (stickyElement.css("float") === "right") { 5466 stickyElement.css({ 5467 "float": "none" 5468 }).parent().css({ 5469 "float": "right" 5470 }); 5471 } 5472 5473 o.stickyElement = stickyElement; 5474 o.stickyWrapper = stickyWrapper; 5475 o.currentTop = null; 5476 sticked.push(o); 5477 methods.setWrapperHeight(this); 5478 methods.setupChangeListeners(this); 5479 }); 5480 }, 5481 setWrapperHeight: function setWrapperHeight(stickyElement) { 5482 var element = $(stickyElement); 5483 var stickyWrapper = element.parent(); 5484 5485 if (stickyWrapper) { 5486 stickyWrapper.css('height', element.outerHeight()); 5487 } 5488 }, 5489 setupChangeListeners: function setupChangeListeners(stickyElement) { 5490 if (window.MutationObserver) { 5491 var mutationObserver = new window.MutationObserver(function (mutations) { 5492 if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) { 5493 methods.setWrapperHeight(stickyElement); 5494 } 5495 }); 5496 mutationObserver.observe(stickyElement, { 5497 subtree: true, 5498 childList: true 5499 }); 5500 } else { 5501 stickyElement.addEventListener('DOMNodeInserted', function () { 5502 methods.setWrapperHeight(stickyElement); 5503 }, false); 5504 stickyElement.addEventListener('DOMNodeRemoved', function () { 5505 methods.setWrapperHeight(stickyElement); 5506 }, false); 5507 } 5508 }, 5509 update: scroller, 5510 unstick: function unstick(options) { 5511 return this.each(function () { 5512 var that = this; 5513 var unstickyElement = $(that); 5514 var removeIdx = -1; 5515 var i = sticked.length; 5516 5517 while (i-- > 0) { 5518 if (sticked[i].stickyElement.get(0) === that) { 5519 splice.call(sticked, i, 1); 5520 removeIdx = i; 5521 } 5522 } 5523 5524 if (removeIdx !== -1) { 5525 unstickyElement.unwrap(); 5526 unstickyElement.css({ 5527 'width': '', 5528 'position': '', 5529 'top': '', 5530 'float': '' 5531 }); 5532 } 5533 }); 5534 } 5535 }; // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer): 5536 5537 5538 if (window.addEventListener) { 5539 window.addEventListener('scroll', scroller, false); 5540 window.addEventListener('resize', resizer, false); 5541 } else if (window.attachEvent) { 5542 window.attachEvent('onscroll', scroller); 5543 window.attachEvent('onresize', resizer); 5544 } 5545 5546 $.fn.sticky = function (method) { 5547 if (methods[method]) { 5548 return methods[method].apply(this, slice.call(arguments, 1)); 5549 } else if (_typeof(method) === 'object' || !method) { 5550 return methods.init.apply(this, arguments); 5551 } else { 5552 $.error('Method ' + method + ' does not exist on jQuery.sticky'); 5553 } 5554 }; 5555 5556 $.fn.unstick = function (method) { 5557 if (methods[method]) { 5558 return methods[method].apply(this, slice.call(arguments, 1)); 5559 } else if (_typeof(method) === 'object' || !method) { 5560 return methods.unstick.apply(this, arguments); 5561 } else { 5562 $.error('Method ' + method + ' does not exist on jQuery.sticky'); 5563 } 5564 }; 5565 5566 $(function () { 5567 setTimeout(scroller, 0); 5568 }); 5569}); 5570 5571/***/ }), 5572
5573/***/ "./resources/js/menumaker.js": 5574/*!***********************************!*\ 5575 !*** ./resources/js/menumaker.js ***! 5576 \***********************************/ 5577/***/ (() => { 5578 5579(function ($) { 5580 $.fn.menumaker = function (options) { 5581 var cssmenu = $(this), 5582 settings = $.extend({ 5583 title: "Menu", 5584 format: "dropdown", 5585 breakpoint: 768, 5586 sticky: false 5587 }, options); 5588 return this.each(function () { 5589 cssmenu.find('li ul').parent().addClass('has-sub'); 5590 5591 if (settings.format != 'select') { 5592 cssmenu.prepend('<div id="menu-button">' + settings.title + '</div>'); 5593 $(this).find("#menu-button").on('click', function () { 5594 $(this).toggleClass('menu-opened'); 5595 var mainmenu = $(this).next('ul'); 5596 5597 if (mainmenu.hasClass('open')) { 5598 mainmenu.hide().removeClass('open'); 5599 } else { 5600 mainmenu.show().addClass('open'); 5601 5602 if (settings.format === "dropdown") { 5603 mainmenu.find('ul').show(); 5604 } 5605 } 5606 }); 5607 5608 multiTg = function multiTg() { 5609 cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>'); 5610 cssmenu.find('.submenu-button').on('click', function () { 5611 $(this).toggleClass('submenu-opened'); 5612 5613 if ($(this).siblings('ul').hasClass('open')) { 5614 $(this).siblings('ul').removeClass('open').hide(); 5615 } else { 5616 $(this).siblings('ul').addClass('open').show(); 5617 } 5618 }); 5619 }; 5620 5621 if (settings.format === 'multitoggle') multiTg();else cssmenu.addClass('dropdown'); 5622 } else if (settings.format === 'select') { 5623 cssmenu.append('<select style="width: 100%"/>').addClass('select-list'); 5624 var selectList = cssmenu.find('select'); 5625 selectList.append('<option>' + settings.title + '</option>', { 5626 "selected": "selected", 5627 "value": "" 5628 }); 5629 cssmenu.find('a').each(function () { 5630 var element = $(this), 5631 indentation = ""; 5632 5633 for (i = 1; i < element.parents('ul').length; i++) { 5634 indentation += '-'; 5635 } 5636 5637 selectList.append('<option value="' + $(this).attr('href') + '">' + indentation + element.text() + '</option'); 5638 }); 5639 selectList.on('change', function () { 5640 window.location = $(this).find("option:selected").val(); 5641 }); 5642 } 5643 5644 if (settings.sticky === true) cssmenu.css('position', 'fixed'); 5645 5646 resizeFix = function resizeFix() { 5647 if ($(window).width() > settings.breakpoint) { 5648 cssmenu.find('ul').show(); 5649 cssmenu.removeClass('small-screen'); 5650 5651 if (settings.format === 'select') { 5652 cssmenu.find('select').hide(); 5653 } else { 5654 cssmenu.find("#menu-button").removeClass("menu-opened"); 5655 } 5656 } 5657 5658 if ($(window).width() <= settings.breakpoint && !cssmenu.hasClass("small-screen")) { 5659 cssmenu.find('ul').hide().removeClass('open'); 5660 cssmenu.addClass('small-screen'); 5661 5662 if (settings.format === 'select') { 5663 cssmenu.find('select').show(); 5664 } 5665 } 5666 }; 5667 5668 resizeFix(); 5669 return $(window).on('resize', resizeFix); 5670 }); 5671 }; 5672})(jQuery); 5673 5674$("#navigation").menumaker({ 5675 title: "Menu", 5676 format: "multitoggle" 5677}); 5678 5679/***/ }), 5680
5681/***/ "./resources/js/navigation.js": 5682/*!************************************!*\ 5683 !*** ./resources/js/navigation.js ***! 5684 \************************************/ 5685/***/ (() => { 5686 5687//jQuery to collapse the navbar on scroll 5688$(window).scroll(function () { 5689 if ($("#navigation").offset().top > 160) { 5690 $(".navbar-fixed-top").addClass("header-collapse"); 5691 } else { 5692 $(".navbar-fixed-top").removeClass("header-collapse"); 5693 } 5694}); 5695 5696/***/ }), 5697
5698/***/ "./resources/js/owl.carousel.min.js": 5699/*!******************************************!*\ 5700 !*** ./resources/js/owl.carousel.min.js ***! 5701 \******************************************/ 5702/***/ (() => { 5703 5704function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 5705 5706/** 5707 * Owl Carousel v2.2.1 5708 * Copyright 2013-2017 David Deutsch 5709 * Licensed under () 5710 */ 5711!function (a, b, c, d) { 5712 function e(b, c) { 5713 this.settings = null, this.options = a.extend({}, e.Defaults, c), this.$element = a(b), this._handlers = {}, this._plugins = {}, this._supress = {}, this._current = null, this._speed = null, this._coordinates = [], this._breakpoint = null, this._width = null, this._items = [], this._clones = [], this._mergers = [], this._widths = [], this._invalidated = {}, this._pipe = [], this._drag = { 5714 time: null, 5715 target: null, 5716 pointer: null, 5717 stage: { 5718 start: null, 5719 current: null 5720 }, 5721 direction: null 5722 }, this._states = { 5723 current: {}, 5724 tags: { 5725 initializing: ["busy"], 5726 animating: ["busy"], 5727 dragging: ["interacting"] 5728 } 5729 }, a.each(["onResize", "onThrottledResize"], a.proxy(function (b, c) { 5730 this._handlers[c] = a.proxy(this[c], this); 5731 }, this)), a.each(e.Plugins, a.proxy(function (a, b) { 5732 this._plugins[a.charAt(0).toLowerCase() + a.slice(1)] = new b(this); 5733 }, this)), a.each(e.Workers, a.proxy(function (b, c) { 5734 this._pipe.push({ 5735 filter: c.filter, 5736 run: a.proxy(c.run, this) 5737 }); 5738 }, this)), this.setup(), this.initialize(); 5739 } 5740 5741 e.Defaults = { 5742 items: 3, 5743 loop: !1, 5744 center: !1, 5745 rewind: !1, 5746 mouseDrag: !0, 5747 touchDrag: !0, 5748 pullDrag: !0, 5749 freeDrag: !1, 5750 margin: 0, 5751 stagePadding: 0, 5752 merge: !1, 5753 mergeFit: !0, 5754 autoWidth: !1, 5755 startPosition: 0, 5756 rtl: !1, 5757 smartSpeed: 250, 5758 fluidSpeed: !1, 5759 dragEndSpeed: !1, 5760 responsive: {}, 5761 responsiveRefreshRate: 200, 5762 responsiveBaseElement: b, 5763 fallbackEasing: "swing", 5764 info: !1, 5765 nestedItemSelector: !1, 5766 itemElement: "div", 5767 stageElement: "div", 5768 refreshClass: "owl-refresh", 5769 loadedClass: "owl-loaded", 5770 loadingClass: "owl-loading", 5771 rtlClass: "owl-rtl", 5772 responsiveClass: "owl-responsive", 5773 dragClass: "owl-drag", 5774 itemClass: "owl-item", 5775 stageClass: "owl-stage", 5776 stageOuterClass: "owl-stage-outer", 5777 grabClass: "owl-grab" 5778 }, e.Width = { 5779 Default: "default", 5780 Inner: "inner", 5781 Outer: "outer" 5782 }, e.Type = { 5783 Event: "event", 5784 State: "state" 5785 }, e.Plugins = {}, e.Workers = [{ 5786 filter: ["width", "settings"], 5787 run: function run() { 5788 this._width = this.$element.width(); 5789 } 5790 }, { 5791 filter: ["width", "items", "settings"], 5792 run: function run(a) { 5793 a.current = this._items && this._items[this.relative(this._current)]; 5794 } 5795 }, { 5796 filter: ["items", "settings"], 5797 run: function run() { 5798 this.$stage.children(".cloned").remove(); 5799 } 5800 }, { 5801 filter: ["width", "items", "settings"], 5802 run: function run(a) { 5803 var b = this.settings.margin || "", 5804 c = !this.settings.autoWidth, 5805 d = this.settings.rtl, 5806 e = { 5807 width: "auto", 5808 "margin-left": d ? b : "", 5809 "margin-right": d ? "" : b 5810 }; 5811 !c && this.$stage.children().css(e), a.css = e; 5812 } 5813 }, { 5814 filter: ["width", "items", "settings"], 5815 run: function run(a) { 5816 var b = (this.width() / this.settings.items).toFixed(3) - this.settings.margin, 5817 c = null, 5818 d = this._items.length, 5819 e = !this.settings.autoWidth, 5820 f = []; 5821 5822 for (a.items = { 5823 merge: !1, 5824 width: b 5825 }; d--;) { 5826 c = this._mergers[d], c = this.settings.mergeFit && Math.min(c, this.settings.items) || c, a.items.merge = c > 1 || a.items.merge, f[d] = e ? b * c : this._items[d].width(); 5827 } 5828 5829 this._widths = f; 5830 } 5831 }, { 5832 filter: ["items", "settings"], 5833 run: function run() { 5834 var b = [], 5835 c = this._items, 5836 d = this.settings, 5837 e = Math.max(2 * d.items, 4), 5838 f = 2 * Math.ceil(c.length / 2), 5839 g = d.loop && c.length ? d.rewind ? e : Math.max(e, f) : 0, 5840 h = "", 5841 i = ""; 5842 5843 for (g /= 2; g--;) { 5844 b.push(this.normalize(b.length / 2, !0)), h += c[b[b.length - 1]][0].outerHTML, b.push(this.normalize(c.length - 1 - (b.length - 1) / 2, !0)), i = c[b[b.length - 1]][0].outerHTML + i; 5845 } 5846 5847 this._clones = b, a(h).addClass("cloned").appendTo(this.$stage), a(i).addClass("cloned").prependTo(this.$stage); 5848 } 5849 }, { 5850 filter: ["width", "items", "settings"], 5851 run: function run() { 5852 for (var a = this.settings.rtl ? 1 : -1, b = this._clones.length + this._items.length, c = -1, d = 0, e = 0, f = []; ++c < b;) { 5853 d = f[c - 1] || 0, e = this._widths[this.relative(c)] + this.settings.margin, f.pu
5853sh(d + e * a); 5854 } 5855 5856 this._coordinates = f; 5857 } 5858 }, { 5859 filter: ["width", "items", "settings"], 5860 run: function run() { 5861 var a = this.settings.stagePadding, 5862 b = this._coordinates, 5863 c = { 5864 width: Math.ceil(Math.abs(b[b.length - 1])) + 2 * a, 5865 "padding-left": a || "", 5866 "padding-right": a || "" 5867 }; 5868 this.$stage.css(c); 5869 } 5870 }, { 5871 filter: ["width", "items", "settings"], 5872 run: function run(a) { 5873 var b = this._coordinates.length, 5874 c = !this.settings.autoWidth, 5875 d = this.$stage.children(); 5876 if (c && a.items.merge) for (; b--;) { 5877 a.css.width = this._widths[this.relative(b)], d.eq(b).css(a.css); 5878 } else c && (a.css.width = a.items.width, d.css(a.css)); 5879 } 5880 }, { 5881 filter: ["items"], 5882 run: function run() { 5883 this._coordinates.length < 1 && this.$stage.removeAttr("style"); 5884 } 5885 }, { 5886 filter: ["width", "items", "settings"], 5887 run: function run(a) { 5888 a.current = a.current ? this.$stage.children().index(a.current) : 0, a.current = Math.max(this.minimum(), Math.min(this.maximum(), a.current)), this.reset(a.current); 5889 } 5890 }, { 5891 filter: ["position"], 5892 run: function run() { 5893 this.animate(this.coordinates(this._current)); 5894 } 5895 }, { 5896 filter: ["width", "position", "items", "settings"], 5897 run: function run() { 5898 var a, 5899 b, 5900 c, 5901 d, 5902 e = this.settings.rtl ? 1 : -1, 5903 f = 2 * this.settings.stagePadding, 5904 g = this.coordinates(this.current()) + f, 5905 h = g + this.width() * e, 5906 i = []; 5907 5908 for (c = 0, d = this._coordinates.length; c < d; c++) { 5909 a = this._coordinates[c - 1] || 0, b = Math.abs(this._coordinates[c]) + f * e, (this.op(a, "<=", g) && this.op(a, ">", h) || this.op(b, "<", g) && this.op(b, ">", h)) && i.push(c); 5910 } 5911 5912 this.$stage.children(".active").removeClass("active"), this.$stage.children(":eq(" + i.join("), :eq(") + ")").addClass("active"), this.settings.center && (this.$stage.children(".center").removeClass("center"), this.$stage.children().eq(this.current()).addClass("center")); 5913 } 5914 }], e.prototype.initialize = function () { 5915 if (this.enter("initializing"), this.trigger("initialize"), this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl), this.settings.autoWidth && !this.is("pre-loading")) { 5916 var b, c, e; 5917 b = this.$element.find("img"), c = this.settings.nestedItemSelector ? "." + this.settings.nestedItemSelector : d, e = this.$element.children(c).width(), b.length && e <= 0 && this.preloadAutoWidthImages(b); 5918 } 5919 5920 this.$element.addClass(this.options.loadingClass), this.$stage = a("<" + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>').wrap('<div class="' + this.settings.stageOuterClass + '"/>'), this.$element.append(this.$stage.parent()), this.replace(this.$element.children().not(this.$stage.parent())), this.$element.is(":visible") ? this.refresh() : this.invalidate("width"), this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass), this.registerEventHandlers(), this.leave("initializing"), this.trigger("initialized"); 5921 }, e.prototype.setup = function () { 5922 var b = this.viewport(), 5923 c = this.options.responsive, 5924 d = -1, 5925 e = null; 5926 c ? (a.each(c, function (a) { 5927 a <= b && a > d && (d = Number(a)); 5928 }), e = a.extend({}, this.options, c[d]), "function" == typeof e.stagePadding && (e.stagePadding = e.stagePadding()), delete e.responsive, e.responsiveClass && this.$element.attr("class", this.$element.attr("class").replace(new RegExp("(" + this.options.responsiveClass + "-)\\S+\\s", "g"), "$1" + d))) : e = a.extend({}, this.options), this.trigger("change", { 5929 property: { 5930 name: "settings", 5931 value: e 5932 } 5933 }), this._breakpoint = d, this.settings = e, this.invalidate("settings"), this.trigger("changed", { 5934 property: { 5935 name: "settings", 5936 value: this.settings 5937 } 5938 }); 5939 }, e.prototype.optionsLogic = function () { 5940 this.settings.autoWidth && (this.settings.stagePadding = !1, this.settings.merge = !1); 5941 }, e.prototype.prepare = function (b) { 5942 var c = this.trigger("prepare", { 5943 content: b 5944 }); 5945 return c.data || (c.data = a("<" + this.settings.itemElement + "/>").addClass(this.options.itemClass).append(b)), this.trigger("prepared", { 5946 content: c.data 5947 }), c.data; 5948 }, e.prototype.update = function () { 5949 for (var b = 0, c = this._pipe.length, d = a.proxy(function (a) { 5950 return this[a]; 5951 }, this._invalidated), e = {}; b < c;) { 5952 (this._invalidated.all || a.grep(this._pipe[b].filter, d).length > 0) && this._pipe[b].run(e), b++; 5953 } 5954 5955 this._invalidated = {}, !this.is("valid") && this.enter("valid"); 5956 }, e.prototype.width = function (a) { 5957 switch (a = a || e.Width.Default) { 5958 case e.Width.Inner: 5959 case e.Width.Outer: 5960 return this._width; 5961 5962 default: 5963 return this._width - 2 * this.settings.stagePadding + this.settings.margin; 5964 } 5965 }, e.prototype.refresh = function () { 5966 this.enter("refreshing"), this.trigger("refresh"), this.setup(), this.optionsLogic(), this.$element.addClass(this.options.refreshClass), this.update(), this.$element.removeClass(this.options.refreshClass), this.leave("refreshing"), this.trigger("refreshed"); 5967 }, e.prototype.onThrottledResize = function () { 5968 b.clearTimeout(this.resizeTimer), this.resizeTimer = b.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate); 5969 }, e.prototype.onResize = function () { 5970 return !!this._items.length && this._width !== this.$element.width() && !!this.$element.is(":visible") && (this.enter("resizing"), this.trigger("resize").isDefaultPrevented() ? (this.leave("resizing"), !1) : (this.invalidate("width"), this.refresh(), this.leave("resizing"), void this.trigger("resized"))); 5971 }, e.prototype.registerEventHandlers = function () { 5972 a.support.transition && this.$stage.on(a.support.transition.end + ".owl.core", a.proxy(this.onTransitionEnd, this)), this.settings.responsive !== !1 && this.on(b, "resize", this._handlers.onThrottledResize), this.settings.mouseDrag && (this.$element.addClass(this.options.dragClass), this.$stage.on("mousedown.owl.core", a.proxy(this.onDragStart, this)), this.$stage.on("dragstart.owl.core selectstart.owl.core", function () { 5973 return !1; 5974 })), this.settings.touchDrag && (this.$stage.on("touchstart.owl.core", a.proxy(this.onDragStart, this)), this.$stage.on("touchcancel.owl.core", a.proxy(this.onDragEnd, this))); 5975 }, e.prototype.onDragStart = function (b) { 5976 var d = null; 5977 3 !== b.which && (a.support.transform ? (d = this.$stage.css("transform").replace(/.*\(|\)| /g, "").split(","), d = { 5978 x: d[16 === d.length ? 12 : 4],
vendor: 14,006 bytes, lines 5979-6207
5979 y: d[16 === d.length ? 13 : 5] 5980 }) : (d = this.$stage.position(), d = { 5981 x: this.settings.rtl ? d.left + this.$stage.width() - this.width() + this.settings.margin : d.left, 5982 y: d.top 5983 }), this.is("animating") && (a.support.transform ? this.animate(d.x) : this.$stage.stop(), this.invalidate("position")), this.$element.toggleClass(this.options.grabClass, "mousedown" === b.type), this.speed(0), this._drag.time = new Date().getTime(), this._drag.target = a(b.target), this._drag.stage.start = d, this._drag.stage.current = d, this._drag.pointer = this.pointer(b), a(c).on("mouseup.owl.core touchend.owl.core", a.proxy(this.onDragEnd, this)), a(c).one("mousemove.owl.core touchmove.owl.core", a.proxy(function (b) { 5984 var d = this.difference(this._drag.pointer, this.pointer(b)); 5985 a(c).on("mousemove.owl.core touchmove.owl.core", a.proxy(this.onDragMove, this)), Math.abs(d.x) < Math.abs(d.y) && this.is("valid") || (b.preventDefault(), this.enter("dragging"), this.trigger("drag")); 5986 }, this))); 5987 }, e.prototype.onDragMove = function (a) { 5988 var b = null, 5989 c = null, 5990 d = null, 5991 e = this.difference(this._drag.pointer, this.pointer(a)), 5992 f = this.difference(this._drag.stage.start, e); 5993 this.is("dragging") && (a.preventDefault(), this.settings.loop ? (b = this.coordinates(this.minimum()), c = this.coordinates(this.maximum() + 1) - b, f.x = ((f.x - b) % c + c) % c + b) : (b = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()), c = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()), d = this.settings.pullDrag ? -1 * e.x / 5 : 0, f.x = Math.max(Math.min(f.x, b + d), c + d)), this._drag.stage.current = f, this.animate(f.x)); 5994 }, e.prototype.onDragEnd = function (b) { 5995 var d = this.difference(this._drag.pointer, this.pointer(b)), 5996 e = this._drag.stage.current, 5997 f = d.x > 0 ^ this.settings.rtl ? "left" : "right"; 5998 a(c).off(".owl.core"), this.$element.removeClass(this.options.grabClass), (0 !== d.x && this.is("dragging") || !this.is("valid")) && (this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed), this.current(this.closest(e.x, 0 !== d.x ? f : this._drag.direction)), this.invalidate("position"), this.update(), this._drag.direction = f, (Math.abs(d.x) > 3 || new Date().getTime() - this._drag.time > 300) && this._drag.target.one("click.owl.core", function () { 5999 return !1; 6000 })), this.is("dragging") && (this.leave("dragging"), this.trigger("dragged")); 6001 }, e.prototype.closest = function (b, c) { 6002 var d = -1, 6003 e = 30, 6004 f = this.width(), 6005 g = this.coordinates(); 6006 return this.settings.freeDrag || a.each(g, a.proxy(function (a, h) { 6007 return "left" === c && b > h - e && b < h + e ? d = a : "right" === c && b > h - f - e && b < h - f + e ? d = a + 1 : this.op(b, "<", h) && this.op(b, ">", g[a + 1] || h - f) && (d = "left" === c ? a + 1 : a), d === -1; 6008 }, this)), this.settings.loop || (this.op(b, ">", g[this.minimum()]) ? d = b = this.minimum() : this.op(b, "<", g[this.maximum()]) && (d = b = this.maximum())), d; 6009 }, e.prototype.animate = function (b) { 6010 var c = this.speed() > 0; 6011 this.is("animating") && this.onTransitionEnd(), c && (this.enter("animating"), this.trigger("translate")), a.support.transform3d && a.support.transition ? this.$stage.css({ 6012 transform: "translate3d(" + b + "px,0px,0px)", 6013 transition: this.speed() / 1e3 + "s" 6014 }) : c ? this.$stage.animate({ 6015 left: b + "px" 6016 }, this.speed(), this.settings.fallbackEasing, a.proxy(this.onTransitionEnd, this)) : this.$stage.css({ 6017 left: b + "px" 6018 }); 6019 }, e.prototype.is = function (a) { 6020 return this._states.current[a] && this._states.current[a] > 0; 6021 }, e.prototype.current = function (a) { 6022 if (a === d) return this._current; 6023 if (0 === this._items.length) return d; 6024 6025 if (a = this.normalize(a), this._current !== a) { 6026 var b = this.trigger("change", { 6027 property: { 6028 name: "position", 6029 value: a 6030 } 6031 }); 6032 b.data !== d && (a = this.normalize(b.data)), this._current = a, this.invalidate("position"), this.trigger("changed", { 6033 property: { 6034 name: "position", 6035 value: this._current 6036 } 6037 }); 6038 } 6039 6040 return this._current; 6041 }, e.prototype.invalidate = function (b) { 6042 return "string" === a.type(b) && (this._invalidated[b] = !0, this.is("valid") && this.leave("valid")), a.map(this._invalidated, function (a, b) { 6043 return b; 6044 }); 6045 }, e.prototype.reset = function (a) { 6046 a = this.normalize(a), a !== d && (this._speed = 0, this._current = a, this.suppress(["translate", "translated"]), this.animate(this.coordinates(a)), this.release(["translate", "translated"])); 6047 }, e.prototype.normalize = function (a, b) { 6048 var c = this._items.length, 6049 e = b ? 0 : this._clones.length; 6050 return !this.isNumeric(a) || c < 1 ? a = d : (a < 0 || a >= c + e) && (a = ((a - e / 2) % c + c) % c + e / 2), a; 6051 }, e.prototype.relative = function (a) { 6052 return a -= this._clones.length / 2, this.normalize(a, !0); 6053 }, e.prototype.maximum = function (a) { 6054 var b, 6055 c, 6056 d, 6057 e = this.settings, 6058 f = this._coordinates.length; 6059 if (e.loop) f = this._clones.length / 2 + this._items.length - 1;else if (e.autoWidth || e.merge) { 6060 for (b = this._items.length, c = this._items[--b].width(), d = this.$element.width(); b-- && (c += this._items[b].width() + this.settings.margin, !(c > d));) { 6061 ; 6062 } 6063 6064 f = b + 1; 6065 } else f = e.center ? this._items.length - 1 : this._items.length - e.items; 6066 return a && (f -= this._clones.length / 2), Math.max(f, 0); 6067 }, e.prototype.minimum = function (a) { 6068 return a ? 0 : this._clones.length / 2; 6069 }, e.prototype.items = function (a) { 6070 return a === d ? this._items.slice() : (a = this.normalize(a, !0), this._items[a]); 6071 }, e.prototype.mergers = function (a) { 6072 return a === d ? this._mergers.slice() : (a = this.normalize(a, !0), this._mergers[a]); 6073 }, e.prototype.clones = function (b) { 6074 var c = this._clones.length / 2, 6075 e = c + this._items.length, 6076 f = function f(a) { 6077 return a % 2 === 0 ? e + a / 2 : c - (a + 1) / 2; 6078 }; 6079 6080 return b === d ? a.map(this._clones, function (a, b) { 6081 return f(b); 6082 }) : a.map(this._clones, function (a, c) { 6083 return a === b ? f(c) : null; 6084 }); 6085 }, e.prototype.speed = function (a) { 6086 return a !== d && (this._speed = a), this._speed; 6087 }, e.prototype.coordinates = function (b) { 6088 var c, 6089 e = 1, 6090 f = b - 1; 6091 return b === d ? a.map(this._coordinates, a.proxy(function (a, b) { 6092 return this.coordinates(b); 6093 }, this)) : (this.settings.center ? (this.settings.rtl && (e = -1, f = b + 1), c = this._coordinates[b], c += (this.width() - c + (this._coordinates[f] || 0)) / 2 * e) : c = this._coordinates[f] || 0, c = Math.ceil(c)); 6094 }, e.prototype.duration = function (a, b, c) { 6095 return 0 === c ? 0 : Math.min(Math.max(Math.abs(b - a), 1), 6) * Math.abs(c || this.settings.smartSpeed); 6096 }, e.prototype.to = function (a, b) { 6097 var c = this.current(), 6098 d = null, 6099 e = a - this.relative(c), 6100 f = (e > 0) - (e < 0), 6101 g = this._items.length, 6102 h = this.minimum(), 6103 i = this.maximum(); 6104 this.settings.loop ? (!this.settings.rewind && Math.abs(e) > g / 2 && (e += f * -1 * g), a = c + e, d = ((a - h) % g + g) % g + h, d !== a && d - e <= i && d - e > 0 && (c = d - e, a = d, this.reset(c))) : this.settings.rewind ? (i += 1, a = (a % i + i) % i) : a = Math.max(h, Math.min(i, a)), this.speed(this.duration(c, a, b)), this.current(a), this.$element.is(":visible") && this.update(); 6105 }, e.prototype.next = function (a) { 6106 a = a || !1, this.to(this.relative(this.current()) + 1, a); 6107 }, e.prototype.prev = function (a) { 6108 a = a || !1, this.to(this.relative(this.current()) - 1, a); 6109 }, e.prototype.onTransitionEnd = function (a) { 6110 if (a !== d && (a.stopPropagation(), (a.target || a.srcElement || a.originalTarget) !== this.$stage.get(0))) return !1; 6111 this.leave("animating"), this.trigger("translated"); 6112 }, e.prototype.viewport = function () { 6113 var d; 6114 return this.options.responsiveBaseElement !== b ? d = a(this.options.responsiveBaseElement).width() : b.innerWidth ? d = b.innerWidth : c.documentElement && c.documentElement.clientWidth ? d = c.documentElement.clientWidth : console.warn("Can not detect viewport width."), d; 6115 }, e.prototype.replace = function (b) { 6116 this.$stage.empty(), this._items = [], b && (b = b instanceof jQuery ? b : a(b)), this.settings.nestedItemSelector && (b = b.find("." + this.settings.nestedItemSelector)), b.filter(function () { 6117 return 1 === this.nodeType; 6118 }).each(a.proxy(function (a, b) { 6119 b = this.prepare(b), this.$stage.append(b), this._items.push(b), this._mergers.push(1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1); 6120 }, this)), this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0), this.invalidate("items"); 6121 }, e.prototype.add = function (b, c) { 6122 var e = this.relative(this._current); 6123 c = c === d ? this._items.length : this.normalize(c, !0), b = b instanceof jQuery ? b : a(b), this.trigger("add", { 6124 content: b, 6125 position: c 6126 }), b = this.prepare(b), 0 === this._items.length || c === this._items.length ? (0 === this._items.length && this.$stage.append(b), 0 !== this._items.length && this._items[c - 1].after(b), this._items.push(b), this._mergers.push(1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1)) : (this._items[c].before(b), this._items.splice(c, 0, b), this._mergers.splice(c, 0, 1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1)), this._items[e] && this.reset(this._items[e].index()), this.invalidate("items"), this.trigger("added", { 6127 content: b, 6128 position: c 6129 }); 6130 }, e.prototype.remove = function (a) { 6131 a = this.normalize(a, !0), a !== d && (this.trigger("remove", { 6132 content: this._items[a], 6133 position: a 6134 }), this._items[a].remove(), this._items.splice(a, 1), this._mergers.splice(a, 1), this.invalidate("items"), this.trigger("removed", { 6135 content: null, 6136 position: a 6137 })); 6138 }, e.prototype.preloadAutoWidthImages = function (b) { 6139 b.each(a.proxy(function (b, c) { 6140 this.enter("pre-loading"), c = a(c), a(new Image()).one("load", a.proxy(function (a) { 6141 c.attr("src", a.target.src), c.css("opacity", 1), this.leave("pre-loading"), !this.is("pre-loading") && !this.is("initializing") && this.refresh(); 6142 }, this)).attr("src", c.attr("src") || c.attr("data-src") || c.attr("data-src-retina")); 6143 }, this)); 6144 }, e.prototype.destroy = function () { 6145 this.$element.off(".owl.core"), this.$stage.off(".owl.core"), a(c).off(".owl.core"), this.settings.responsive !== !1 && (b.clearTimeout(this.resizeTimer), this.off(b, "resize", this._handlers.onThrottledResize)); 6146 6147 for (var d in this._plugins) { 6148 this._plugins[d].destroy(); 6149 } 6150 6151 this.$stage.children(".cloned").remove(), this.$stage.unwrap(), this.$stage.children().contents().unwrap(), this.$stage.children().unwrap(), this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class", this.$element.attr("class").replace(new RegExp(this.options.responsiveClass + "-\\S+\\s", "g"), "")).removeData("owl.carousel"); 6152 }, e.prototype.op = function (a, b, c) { 6153 var d = this.settings.rtl; 6154 6155 switch (b) { 6156 case "<": 6157 return d ? a > c : a < c; 6158 6159 case ">": 6160 return d ? a < c : a > c; 6161 6162 case ">=": 6163 return d ? a <= c : a >= c; 6164 6165 case "<=": 6166 return d ? a >= c : a <= c; 6167 } 6168 }, e.prototype.on = function (a, b, c, d) { 6169 a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent("on" + b, c); 6170 }, e.prototype.off = function (a, b, c, d) { 6171 a.removeEventListener ? a.removeEventListener(b, c, d) : a.detachEvent && a.detachEvent("on" + b, c); 6172 }, e.prototype.trigger = function (b, c, d, f, g) { 6173 var h = { 6174 item: { 6175 count: this._items.length, 6176 index: this.current() 6177 } 6178 }, 6179 i = a.camelCase(a.grep(["on", b, d], function (a) { 6180 return a; 6181 }).join("-").toLowerCase()), 6182 j = a.Event([b, "owl", d || "carousel"].join(".").toLowerCase(), a.extend({ 6183 relatedTarget: this 6184 }, h, c)); 6185 return this._supress[b] || (a.each(this._plugins, function (a, b) { 6186 b.onTrigger && b.onTrigger(j); 6187 }), this.register({ 6188 type: e.Type.Event, 6189 name: b 6190 }), this.$element.trigger(j), this.settings && "function" == typeof this.settings[i] && this.settings[i].call(this, j)), j; 6191 }, e.prototype.enter = function (b) { 6192 a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) { 6193 this._states.current[b] === d && (this._states.current[b] = 0), this._states.current[b]++; 6194 }, this)); 6195 }, e.prototype.leave = function (b) { 6196 a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) { 6197 this._states.current[b]--; 6198 }, this)); 6199 }, e.prototype.register = function (b) { 6200 if (b.type === e.Type.Event) { 6201 if (a.event.special[b.name] || (a.event.special[b.name] = {}), !a.event.special[b.name].owl) { 6202 var c = a.event.special[b.name]._default; 6203 a.event.special[b.name]._default = function (a) { 6204 return !c || !c.apply || a.namespace && a.namespace.indexOf("owl") !== -1 ? a.namespace && a.namespace.indexOf("owl") > -1 : c.apply(this, arguments); 6205 }, a.event.special[b.name].owl = !0; 6206 } 6207 } else b.type === e.Type.State && (this._states.tags[b.name] ? this._states.tags[b.name] = this._states.tags[b.name].
6207concat(b.tags) : this._states.tags[b.name] = b.tags, this._states.tags[b.name] = a.grep(this._states.tags[b.name], a.proxy(function (c, d) { 6208 return a.inArray(c, this._states.tags[b.name]) === d; 6209 }, this))); 6210 }, e.prototype.suppress = function (b) { 6211 a.each(b, a.proxy(function (a, b) { 6212 this._supress[b] = !0; 6213 }, this)); 6214 }, e.prototype.release = function (b) { 6215 a.each(b, a.proxy(function (a, b) { 6216 delete this._supress[b]; 6217 }, this)); 6218 }, e.prototype.pointer = function (a) { 6219 var c = { 6220 x: null, 6221 y: null 6222 }; 6223 return a = a.originalEvent || a || b.event, a = a.touches && a.touches.length ? a.touches[0] : a.changedTouches && a.changedTouches.length ? a.changedTouches[0] : a, a.pageX ? (c.x = a.pageX, c.y = a.pageY) : (c.x = a.clientX, c.y = a.clientY), c; 6224 }, e.prototype.isNumeric = function (a) { 6225 return !isNaN(parseFloat(a)); 6226 }, e.prototype.difference = function (a, b) { 6227 return { 6228 x: a.x - b.x, 6229 y: a.y - b.y 6230 }; 6231 }, a.fn.owlCarousel = function (b) { 6232 var c = Array.prototype.slice.call(arguments, 1); 6233 return this.each(function () { 6234 var d = a(this), 6235 f = d.data("owl.carousel"); 6236 f || (f = new e(this, "object" == _typeof(b) && b), d.data("owl.carousel", f), a.each(["next", "prev", "to", "destroy", "refresh", "replace", "add", "remove"], function (b, c) { 6237 f.register({ 6238 type: e.Type.Event, 6239 name: c 6240 }), f.$element.on(c + ".owl.carousel.core", a.proxy(function (a) { 6241 a.namespace && a.relatedTarget !== this && (this.suppress([c]), f[c].apply(this, [].slice.call(arguments, 1)), this.release([c])); 6242 }, f)); 6243 })), "string" == typeof b && "_" !== b.charAt(0) && f[b].apply(f, c); 6244 }); 6245 }, a.fn.owlCarousel.Constructor = e; 6246}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6247 var e = function e(b) { 6248 this._core = b, this._interval = null, this._visible = null, this._handlers = { 6249 "initialized.owl.carousel": a.proxy(function (a) { 6250 a.namespace && this._core.settings.autoRefresh && this.watch(); 6251 }, this) 6252 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers); 6253 }; 6254 6255 e.Defaults = { 6256 autoRefresh: !0, 6257 autoRefreshInterval: 500 6258 }, e.prototype.watch = function () { 6259 this._interval || (this._visible = this._core.$element.is(":visible"), this._interval = b.setInterval(a.proxy(this.refresh, this), this._core.settings.autoRefreshInterval)); 6260 }, e.prototype.refresh = function () { 6261 this._core.$element.is(":visible") !== this._visible && (this._visible = !this._visible, this._core.$element.toggleClass("owl-hidden", !this._visible), this._visible && this._core.invalidate("width") && this._core.refresh()); 6262 }, e.prototype.destroy = function () { 6263 var a, c; 6264 b.clearInterval(this._interval); 6265 6266 for (a in this._handlers) { 6267 this._core.$element.off(a, this._handlers[a]); 6268 } 6269 6270 for (c in Object.getOwnPropertyNames(this)) { 6271 "function" != typeof this[c] && (this[c] = null); 6272 } 6273 }, a.fn.owlCarousel.Constructor.Plugins.AutoRefresh = e; 6274}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6275 var e = function e(b) { 6276 this._core = b, this._loaded = [], this._handlers = { 6277 "initialized.owl.carousel change.owl.carousel resized.owl.carousel": a.proxy(function (b) { 6278 if (b.namespace && this._core.settings && this._core.settings.lazyLoad && (b.property && "position" == b.property.name || "initialized" == b.type)) for (var c = this._core.settings, e = c.center && Math.ceil(c.items / 2) || c.items, f = c.center && e * -1 || 0, g = (b.property && b.property.value !== d ? b.property.value : this._core.current()) + f, h = this._core.clones().length, i = a.proxy(function (a, b) { 6279 this.load(b); 6280 }, this); f++ < e;) { 6281 this.load(h / 2 + this._core.relative(g)), h && a.each(this._core.clones(this._core.relative(g)), i), g++; 6282 } 6283 }, this) 6284 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers); 6285 }; 6286 6287 e.Defaults = { 6288 lazyLoad: !1 6289 }, e.prototype.load = function (c) { 6290 var d = this._core.$stage.children().eq(c), 6291 e = d && d.find(".owl-lazy"); 6292 6293 !e || a.inArray(d.get(0), this._loaded) > -1 || (e.each(a.proxy(function (c, d) { 6294 var e, 6295 f = a(d), 6296 g = b.devicePixelRatio > 1 && f.attr("data-src-retina") || f.attr("data-src"); 6297 this._core.trigger("load", { 6298 element: f, 6299 url: g 6300 }, "lazy"), f.is("img") ? f.one("load.owl.lazy", a.proxy(function () { 6301 f.css("opacity", 1), this._core.trigger("loaded", { 6302 element: f, 6303 url: g 6304 }, "lazy"); 6305 }, this)).attr("src", g) : (e = new Image(), e.onload = a.proxy(function () { 6306 f.css({ 6307 "background-image": 'url("' + g + '")', 6308 opacity: "1" 6309 }), this._core.trigger("loaded", { 6310 element: f, 6311 url: g 6312 }, "lazy"); 6313 }, this), e.src = g); 6314 }, this)), this._loaded.push(d.get(0))); 6315 }, e.prototype.destroy = function () { 6316 var a, b; 6317 6318 for (a in this.handlers) { 6319 this._core.$element.off(a, this.handlers[a]); 6320 } 6321 6322 for (b in Object.getOwnPropertyNames(this)) { 6323 "function" != typeof this[b] && (this[b] = null); 6324 } 6325 }, a.fn.owlCarousel.Constructor.Plugins.Lazy = e; 6326}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6327 var e = function e(b) { 6328 this._core = b, this._handlers = { 6329 "initialized.owl.carousel refreshed.owl.carousel": a.proxy(function (a) { 6330 a.namespace && this._core.settings.autoHeight && this.update(); 6331 }, this), 6332 "changed.owl.carousel": a.proxy(function (a) { 6333 a.namespace && this._core.settings.autoHeight && "position" == a.property.name && this.update(); 6334 }, this), 6335 "loaded.owl.lazy": a.proxy(function (a) { 6336 a.namespace && this._core.settings.autoHeight && a.element.closest("." + this._core.settings.itemClass).index() === this._core.current() && this.update(); 6337 }, this) 6338 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers); 6339 }; 6340 6341 e.Defaults = { 6342 autoHeight: !1, 6343 autoHeightClass: "owl-height" 6344 }, e.prototype.update = function () { 6345 var b = this._core._current, 6346 c = b + this._core.settings.items, 6347 d = this._core.$stage.children().toArray().slice(b, c), 6348 e = [], 6349 f = 0; 6350 6351 a.each(d, function (b, c) { 6352 e.push(a(c).height()); 6353 }), f = Math.max.apply(null, e), this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass); 6354 }, e.prototype.destroy = function () { 6355 var a, b; 6356 6357 for (a in this._handlers) { 6358 this._core.$element.off(a, this._handlers[a]); 6359 } 6360 6361 for (b in Object.getOwnPropertyNames(this)) { 6362 "function" != typeof this[b] && (this[b] = null); 6363 } 6364 }, a.fn.owlCarousel.Constructor.Plugins.AutoHeight = e; 6365}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6366 var e = function e(b) { 6367 this._core = b, this._videos = {}, this._playing = null, this._handlers = { 6368 "initialized.owl.carousel": a.proxy(function (a) { 6369 a.namespace && this._core.register({ 6370 type: "state", 6371 name: "playing", 6372 tags: ["interacting"] 6373 }); 6374 }, this), 6375 "resize.owl.carousel": a.proxy(function (a) { 6376 a.namespace && this._core.settings.video && this.isInFullScreen() && a.preventDefault(); 6377 }, this), 6378 "refreshed.owl.carousel": a.proxy(function (a) { 6379 a.namespace && this._core.is("resizing") && this._core.$stage.find(".cloned .owl-video-frame").remove(); 6380 }, this), 6381 "changed.owl.carousel": a.proxy(function (a) { 6382 a.namespace && "position" === a.property.name && this._playing && this.stop(); 6383 }, this), 6384 "prepared.owl.carousel": a.proxy(function (b) { 6385 if (b.namespace) { 6386 var c = a(b.content).find(".owl-video"); 6387 c.length && (c.css("display", "none"), this.fetch(c, a(b.content))); 6388 } 6389 }, this) 6390 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers), this._core.$element.on("click.owl.video", ".owl-video-play-icon", a.proxy(function (a) { 6391 this.play(a); 6392 }, this)); 6393 }; 6394 6395 e.Defaults = { 6396 video: !1, 6397 videoHeight: !1, 6398 videoWidth: !1 6399 }, e.prototype.fetch = function (a, b) { 6400 var c = function () { 6401 return a.attr("data-vimeo-id") ? "vimeo" : a.attr("data-vzaar-id") ? "vzaar" : "youtube"; 6402 }(), 6403 d = a.attr("data-vimeo-id") || a.attr("data-youtube-id") || a.attr("data-vzaar-id"), 6404 e = a.attr("data-width") || this._core.settings.videoWidth, 6405 f = a.attr("data-height") || this._core.settings.videoHeight, 6406 g = a.attr("href"); 6407 6408 if (!g) throw new Error("Missing video URL."); 6409 if (d = g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/), d[3].indexOf("youtu") > -1) c = "youtube";else if (d[3].indexOf("vimeo") > -1) c = "vimeo";else { 6410 if (!(d[3].indexOf("vzaar") > -1)) throw new Error("Video URL not supported."); 6411 c = "vzaar"; 6412 } 6413 d = d[6], this._videos[g] = { 6414 type: c, 6415 id: d, 6416 width: e, 6417 height: f 6418 }, b.attr("data-video", g), this.thumbnail(a, this._videos[g]); 6419 }, e.prototype.thumbnail = function (b, c) { 6420 var d, 6421 e, 6422 f, 6423 g = c.width && c.height ? 'style="width:' + c.width + "px;height:" + c.height + 'px;"' : "", 6424 h = b.find("img"), 6425 i = "src", 6426 j = "", 6427 k = this._core.settings, 6428 l = function l(a) { 6429 e = '<div class="owl-video-play-icon"></div>', d = k.lazyLoad ? '<div class="owl-video-tn ' + j + '" ' + i + '="' + a + '"></div>' : '<div class="owl-video-tn" style="opacity:1;background-image:url(' + a + ')"></div>', b.after(d), b.after(e); 6430 }; 6431 6432 if (b.wrap('<div class="owl-video-wrapper"' + g + "></div>"), this._core.settings.lazyLoad && (i = "data-src", j = "owl-lazy"), h.length) return l(h.attr(i)), h.remove(), !1; 6433 "youtube" === c.type ? (f = "//img.youtube.com/vi/" + c.id + "/hqdefault.jpg", l(f)) : "vimeo" === c.type ? a.aja
vendor: 14,018 bytes, lines 6433-6707
6433x({ 6434 type: "GET", 6435 url: "//vimeo.com/api/v2/video/" + c.id + ".json", 6436 jsonp: "callback", 6437 dataType: "jsonp", 6438 success: function success(a) { 6439 f = a[0].thumbnail_large, l(f); 6440 } 6441 }) : "vzaar" === c.type && a.ajax({ 6442 type: "GET", 6443 url: "//vzaar.com/api/videos/" + c.id + ".json", 6444 jsonp: "callback", 6445 dataType: "jsonp", 6446 success: function success(a) { 6447 f = a.framegrab_url, l(f); 6448 } 6449 }); 6450 }, e.prototype.stop = function () { 6451 this._core.trigger("stop", null, "video"), this._playing.find(".owl-video-frame").remove(), this._playing.removeClass("owl-video-playing"), this._playing = null, this._core.leave("playing"), this._core.trigger("stopped", null, "video"); 6452 }, e.prototype.play = function (b) { 6453 var c, 6454 d = a(b.target), 6455 e = d.closest("." + this._core.settings.itemClass), 6456 f = this._videos[e.attr("data-video")], 6457 g = f.width || "100%", 6458 h = f.height || this._core.$stage.height(); 6459 6460 this._playing || (this._core.enter("playing"), this._core.trigger("play", null, "video"), e = this._core.items(this._core.relative(e.index())), this._core.reset(e.index()), "youtube" === f.type ? c = '<iframe width="' + g + '" height="' + h + '" src="//www.youtube.com/embed/' + f.id + "?autoplay=1&rel=0&v=" + f.id + '" frameborder="0" allowfullscreen></iframe>' : "vimeo" === f.type ? c = '<iframe src="//player.vimeo.com/video/' + f.id + '?autoplay=1" width="' + g + '" height="' + h + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>' : "vzaar" === f.type && (c = '<iframe frameborder="0"height="' + h + '"width="' + g + '" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/' + f.id + '/player?autoplay=true"></iframe>'), a('<div class="owl-video-frame">' + c + "</div>").insertAfter(e.find(".owl-video")), this._playing = e.addClass("owl-video-playing")); 6461 }, e.prototype.isInFullScreen = function () { 6462 var b = c.fullscreenElement || c.mozFullScreenElement || c.webkitFullscreenElement; 6463 return b && a(b).parent().hasClass("owl-video-frame"); 6464 }, e.prototype.destroy = function () { 6465 var a, b; 6466 6467 this._core.$element.off("click.owl.video"); 6468 6469 for (a in this._handlers) { 6470 this._core.$element.off(a, this._handlers[a]); 6471 } 6472 6473 for (b in Object.getOwnPropertyNames(this)) { 6474 "function" != typeof this[b] && (this[b] = null); 6475 } 6476 }, a.fn.owlCarousel.Constructor.Plugins.Video = e; 6477}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6478 var e = function e(b) { 6479 this.core = b, this.core.options = a.extend({}, e.Defaults, this.core.options), this.swapping = !0, this.previous = d, this.next = d, this.handlers = { 6480 "change.owl.carousel": a.proxy(function (a) { 6481 a.namespace && "position" == a.property.name && (this.previous = this.core.current(), this.next = a.property.value); 6482 }, this), 6483 "drag.owl.carousel dragged.owl.carousel translated.owl.carousel": a.proxy(function (a) { 6484 a.namespace && (this.swapping = "translated" == a.type); 6485 }, this), 6486 "translate.owl.carousel": a.proxy(function (a) { 6487 a.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn) && this.swap(); 6488 }, this) 6489 }, this.core.$element.on(this.handlers); 6490 }; 6491 6492 e.Defaults = { 6493 animateOut: !1, 6494 animateIn: !1 6495 }, e.prototype.swap = function () { 6496 if (1 === this.core.settings.items && a.support.animation && a.support.transition) { 6497 this.core.speed(0); 6498 var b, 6499 c = a.proxy(this.clear, this), 6500 d = this.core.$stage.children().eq(this.previous), 6501 e = this.core.$stage.children().eq(this.next), 6502 f = this.core.settings.animateIn, 6503 g = this.core.settings.animateOut; 6504 this.core.current() !== this.previous && (g && (b = this.core.coordinates(this.previous) - this.core.coordinates(this.next), d.one(a.support.animation.end, c).css({ 6505 left: b + "px" 6506 }).addClass("animated owl-animated-out").addClass(g)), f && e.one(a.support.animation.end, c).addClass("animated owl-animated-in").addClass(f)); 6507 } 6508 }, e.prototype.clear = function (b) { 6509 a(b.target).css({ 6510 left: "" 6511 }).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut), this.core.onTransitionEnd(); 6512 }, e.prototype.destroy = function () { 6513 var a, b; 6514 6515 for (a in this.handlers) { 6516 this.core.$element.off(a, this.handlers[a]); 6517 } 6518 6519 for (b in Object.getOwnPropertyNames(this)) { 6520 "function" != typeof this[b] && (this[b] = null); 6521 } 6522 }, a.fn.owlCarousel.Constructor.Plugins.Animate = e; 6523}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6524 var e = function e(b) { 6525 this._core = b, this._timeout = null, this._paused = !1, this._handlers = { 6526 "changed.owl.carousel": a.proxy(function (a) { 6527 a.namespace && "settings" === a.property.name ? this._core.settings.autoplay ? this.play() : this.stop() : a.namespace && "position" === a.property.name && this._core.settings.autoplay && this._setAutoPlayInterval(); 6528 }, this), 6529 "initialized.owl.carousel": a.proxy(function (a) { 6530 a.namespace && this._core.settings.autoplay && this.play(); 6531 }, this), 6532 "play.owl.autoplay": a.proxy(function (a, b, c) { 6533 a.namespace && this.play(b, c); 6534 }, this), 6535 "stop.owl.autoplay": a.proxy(function (a) { 6536 a.namespace && this.stop(); 6537 }, this), 6538 "mouseover.owl.autoplay": a.proxy(function () { 6539 this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.pause(); 6540 }, this), 6541 "mouseleave.owl.autoplay": a.proxy(function () { 6542 this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.play(); 6543 }, this), 6544 "touchstart.owl.core": a.proxy(function () { 6545 this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.pause(); 6546 }, this), 6547 "touchend.owl.core": a.proxy(function () { 6548 this._core.settings.autoplayHoverPause && this.play(); 6549 }, this) 6550 }, this._core.$element.on(this._handlers), this._core.options = a.extend({}, e.Defaults, this._core.options); 6551 }; 6552 6553 e.Defaults = { 6554 autoplay: !1, 6555 autoplayTimeout: 5e3, 6556 autoplayHoverPause: !1, 6557 autoplaySpeed: !1 6558 }, e.prototype.play = function (a, b) { 6559 this._paused = !1, this._core.is("rotating") || (this._core.enter("rotating"), this._setAutoPlayInterval()); 6560 }, e.prototype._getNextTimeout = function (d, e) { 6561 return this._timeout && b.clearTimeout(this._timeout), b.setTimeout(a.proxy(function () { 6562 this._paused || this._core.is("busy") || this._core.is("interacting") || c.hidden || this._core.next(e || this._core.settings.autoplaySpeed); 6563 }, this), d || this._core.settings.autoplayTimeout); 6564 }, e.prototype._setAutoPlayInterval = function () { 6565 this._timeout = this._getNextTimeout(); 6566 }, e.prototype.stop = function () { 6567 this._core.is("rotating") && (b.clearTimeout(this._timeout), this._core.leave("rotating")); 6568 }, e.prototype.pause = function () { 6569 this._core.is("rotating") && (this._paused = !0); 6570 }, e.prototype.destroy = function () { 6571 var a, b; 6572 this.stop(); 6573 6574 for (a in this._handlers) { 6575 this._core.$element.off(a, this._handlers[a]); 6576 } 6577 6578 for (b in Object.getOwnPropertyNames(this)) { 6579 "function" != typeof this[b] && (this[b] = null); 6580 } 6581 }, a.fn.owlCarousel.Constructor.Plugins.autoplay = e; 6582}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6583 "use strict"; 6584 6585 var e = function e(b) { 6586 this._core = b, this._initialized = !1, this._pages = [], this._controls = {}, this._templates = [], this.$element = this._core.$element, this._overrides = { 6587 next: this._core.next, 6588 prev: this._core.prev, 6589 to: this._core.to 6590 }, this._handlers = { 6591 "prepared.owl.carousel": a.proxy(function (b) { 6592 b.namespace && this._core.settings.dotsData && this._templates.push('<div class="' + this._core.settings.dotClass + '">' + a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot") + "</div>"); 6593 }, this), 6594 "added.owl.carousel": a.proxy(function (a) { 6595 a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 0, this._templates.pop()); 6596 }, this), 6597 "remove.owl.carousel": a.proxy(function (a) { 6598 a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 1); 6599 }, this), 6600 "changed.owl.carousel": a.proxy(function (a) { 6601 a.namespace && "position" == a.property.name && this.draw(); 6602 }, this), 6603 "initialized.owl.carousel": a.proxy(function (a) { 6604 a.namespace && !this._initialized && (this._core.trigger("initialize", null, "navigation"), this.initialize(), this.update(), this.draw(), this._initialized = !0, this._core.trigger("initialized", null, "navigation")); 6605 }, this), 6606 "refreshed.owl.carousel": a.proxy(function (a) { 6607 a.namespace && this._initialized && (this._core.trigger("refresh", null, "navigation"), this.update(), this.draw(), this._core.trigger("refreshed", null, "navigation")); 6608 }, this) 6609 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers); 6610 }; 6611 6612 e.Defaults = { 6613 nav: !1, 6614 navText: ["prev", "next"], 6615 navSpeed: !1, 6616 navElement: "div", 6617 navContainer: !1, 6618 navContainerClass: "owl-nav", 6619 navClass: ["owl-prev", "owl-next"], 6620 slideBy: 1, 6621 dotClass: "owl-dot", 6622 dotsClass: "owl-dots", 6623 dots: !0, 6624 dotsEach: !1, 6625 dotsData: !1, 6626 dotsSpeed: !1, 6627 dotsContainer: !1 6628 }, e.prototype.initialize = function () { 6629 var b, 6630 c = this._core.settings; 6631 this._controls.$relative = (c.navContainer ? a(c.navContainer) : a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"), this._controls.$previous = a("<" + c.navElement + ">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click", a.proxy(function (a) { 6632 this.prev(c.navSpeed); 6633 }, this)), this._controls.$next = a("<" + c.navElement + ">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click", a.proxy(function (a) { 6634 this.next(c.navSpeed); 6635 }, this)), c.dotsData || (this._templates = [a("<div>").addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]), this._controls.$absolute = (c.dotsContainer ? a(c.dotsContainer) : a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"), this._controls.$absolute.on("click", "div", a.proxy(function (b) { 6636 var d = a(b.target).parent().is(this._controls.$absolute) ? a(b.target).index() : a(b.target).parent().index(); 6637 b.preventDefault(), this.to(d, c.dotsSpeed); 6638 }, this)); 6639 6640 for (b in this._overrides) { 6641 this._core[b] = a.proxy(this[b], this); 6642 } 6643 }, e.prototype.destroy = function () { 6644 var a, b, c, d; 6645 6646 for (a in this._handlers) { 6647 this.$element.off(a, this._handlers[a]); 6648 } 6649 6650 for (b in this._controls) { 6651 this._controls[b].remove(); 6652 } 6653 6654 for (d in this.overides) { 6655 this._core[d] = this._overrides[d]; 6656 } 6657 6658 for (c in Object.getOwnPropertyNames(this)) { 6659 "function" != typeof this[c] && (this[c] = null); 6660 } 6661 }, e.prototype.update = function () { 6662 var a, 6663 b, 6664 c, 6665 d = this._core.clones().length / 2, 6666 e = d + this._core.items().length, 6667 f = this._core.maximum(!0), 6668 g = this._core.settings, 6669 h = g.center || g.autoWidth || g.dotsData ? 1 : g.dotsEach || g.items; 6670 6671 if ("page" !== g.slideBy && (g.slideBy = Math.min(g.slideBy, g.items)), g.dots || "page" == g.slideBy) for (this._pages = [], a = d, b = 0, c = 0; a < e; a++) { 6672 if (b >= h || 0 === b) { 6673 if (this._pages.push({ 6674 start: Math.min(f, a - d), 6675 end: a - d + h - 1 6676 }), Math.min(f, a - d) === f) break; 6677 b = 0, ++c; 6678 } 6679 6680 b += this._core.mergers(this._core.relative(a)); 6681 } 6682 }, e.prototype.draw = function () { 6683 var b, 6684 c = this._core.settings, 6685 d = this._core.items().length <= c.items, 6686 e = this._core.relative(this._core.current()), 6687 f = c.loop || c.rewind; 6688 6689 this._controls.$relative.toggleClass("disabled", !c.nav || d), c.nav && (this._controls.$previous.toggleClass("disabled", !f && e <= this._core.minimum(!0)), this._controls.$next.toggleClass("disabled", !f && e >= this._core.maximum(!0))), this._controls.$absolute.toggleClass("disabled", !c.dots || d), c.dots && (b = this._pages.length - this._controls.$absolute.children().length, c.dotsData && 0 !== b ? this._controls.$absolute.html(this._templates.join("")) : b > 0 ? this._controls.$absolute.append(new Array(b + 1).join(this._templates[0])) : b < 0 && this._controls.$absolute.children().slice(b).remove(), this._controls.$absolute.find(".active").removeClass("active"), this._controls.$absolute.children().eq(a.inArray(this.current(), this._pages)).addClass("active")); 6690 }, e.prototype.onTrigger = function (b) { 6691 var c = this._core.settings; 6692 b.page = { 6693 index: a.inArray(this.current(), this._pages), 6694 count: this._pages.length, 6695 size: c && (c.center || c.autoWidth || c.dotsData ? 1 : c.dotsEach || c.items) 6696 }; 6697 }, e.prototype.current = function () { 6698 var b = this._core.relative(this._core.current()); 6699 6700 return a.grep(this._pages, a.proxy(function (a, c) { 6701 return a.start <= b && a.end >= b; 6702 }, this)).pop(); 6703 }, e.prototype.getPosition = function (b) { 6704 var c, 6705 d, 6706 e = this._core.settings; 6707 return "page" == e.slideBy ? (c = a.inArray(this.current(), this._pages), d = this._pages.length, b ? ++c : --c, c = this._pages[(c % d + d) % d].start) : (c = this._core.relative(this._core.current()), d = this._core.items().length, b ? c += e.
6707slideBy : c -= e.slideBy), c; 6708 }, e.prototype.next = function (b) { 6709 a.proxy(this._overrides.to, this._core)(this.getPosition(!0), b); 6710 }, e.prototype.prev = function (b) { 6711 a.proxy(this._overrides.to, this._core)(this.getPosition(!1), b); 6712 }, e.prototype.to = function (b, c, d) { 6713 var e; 6714 !d && this._pages.length ? (e = this._pages.length, a.proxy(this._overrides.to, this._core)(this._pages[(b % e + e) % e].start, c)) : a.proxy(this._overrides.to, this._core)(b, c); 6715 }, a.fn.owlCarousel.Constructor.Plugins.Navigation = e; 6716}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6717 "use strict"; 6718 6719 var e = function e(c) { 6720 this._core = c, this._hashes = {}, this.$element = this._core.$element, this._handlers = { 6721 "initialized.owl.carousel": a.proxy(function (c) { 6722 c.namespace && "URLHash" === this._core.settings.startPosition && a(b).trigger("hashchange.owl.navigation"); 6723 }, this), 6724 "prepared.owl.carousel": a.proxy(function (b) { 6725 if (b.namespace) { 6726 var c = a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash"); 6727 if (!c) return; 6728 this._hashes[c] = b.content; 6729 } 6730 }, this), 6731 "changed.owl.carousel": a.proxy(function (c) { 6732 if (c.namespace && "position" === c.property.name) { 6733 var d = this._core.items(this._core.relative(this._core.current())), 6734 e = a.map(this._hashes, function (a, b) { 6735 return a === d ? b : null; 6736 }).join(); 6737 6738 if (!e || b.location.hash.slice(1) === e) return; 6739 b.location.hash = e; 6740 } 6741 }, this) 6742 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers), a(b).on("hashchange.owl.navigation", a.proxy(function (a) { 6743 var c = b.location.hash.substring(1), 6744 e = this._core.$stage.children(), 6745 f = this._hashes[c] && e.index(this._hashes[c]); 6746 6747 f !== d && f !== this._core.current() && this._core.to(this._core.relative(f), !1, !0); 6748 }, this)); 6749 }; 6750 6751 e.Defaults = { 6752 URLhashListener: !1 6753 }, e.prototype.destroy = function () { 6754 var c, d; 6755 a(b).off("hashchange.owl.navigation"); 6756 6757 for (c in this._handlers) { 6758 this._core.$element.off(c, this._handlers[c]); 6759 } 6760 6761 for (d in Object.getOwnPropertyNames(this)) { 6762 "function" != typeof this[d] && (this[d] = null); 6763 } 6764 }, a.fn.owlCarousel.Constructor.Plugins.Hash = e; 6765}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 6766 function e(b, c) { 6767 var e = !1, 6768 f = b.charAt(0).toUpperCase() + b.slice(1); 6769 return a.each((b + " " + h.join(f + " ") + f).split(" "), function (a, b) { 6770 if (g[b] !== d) return e = !c || b, !1; 6771 }), e; 6772 } 6773 6774 function f(a) { 6775 return e(a, !0); 6776 } 6777 6778 var g = a("<support>").get(0).style, 6779 h = "Webkit Moz O ms".split(" "), 6780 i = { 6781 transition: { 6782 end: { 6783 WebkitTransition: "webkitTransitionEnd", 6784 MozTransition: "transitionend", 6785 OTransition: "oTransitionEnd", 6786 transition: "transitionend" 6787 } 6788 }, 6789 animation: { 6790 end: { 6791 WebkitAnimation: "webkitAnimationEnd", 6792 MozAnimation: "animationend", 6793 OAnimation: "oAnimationEnd", 6794 animation: "animationend" 6795 } 6796 } 6797 }, 6798 j = { 6799 csstransforms: function csstransforms() { 6800 return !!e("transform"); 6801 }, 6802 csstransforms3d: function csstransforms3d() { 6803 return !!e("perspective"); 6804 }, 6805 csstransitions: function csstransitions() { 6806 return !!e("transition"); 6807 }, 6808 cssanimations: function cssanimations() { 6809 return !!e("animation"); 6810 } 6811 }; 6812 j.csstransitions() && (a.support.transition = new String(f("transition")), a.support.transition.end = i.transition.end[a.support.transition]), j.cssanimations() && (a.support.animation = new String(f("animation")), a.support.animation.end = i.animation.end[a.support.animation]), j.csstransforms() && (a.support.transform = new String(f("transform")), a.support.transform3d = j.csstransforms3d()); 6813}(window.Zepto || window.jQuery, window, document); 6814 6815/***/ }), 6816
6817/***/ "./resources/js/slider.js": 6818/*!********************************!*\ 6819 !*** ./resources/js/slider.js ***! 6820 \********************************/ 6821/***/ (() => { 6822 6823$('.owl-carousel').owlCarousel({ 6824 loop: true, 6825 margin: 0, 6826 autoplay: true, 6827 autoplayTimeout: 6000, 6828 nav: true, 6829 navText: ['<i class="fa fa-angle-left"></i>', '<i class="fa fa-angle-right"></i>'], 6830 responsive: { 6831 0: { 6832 items: 1 6833 }, 6834 600: { 6835 items: 1 6836 }, 6837 1000: { 6838 items: 1 6839 } 6840 } 6841}); 6842 6843/***/ }), 6844
6845/***/ "./resources/js/testimonial-slider.js": 6846/*!********************************************!*\ 6847 !*** ./resources/js/testimonial-slider.js ***! 6848 \********************************************/ 6849/***/ (() => { 6850 6851$('.owl-carousel').owlCarousel({ 6852 loop: true, 6853 margin: 0, 6854 autoplay: true, 6855 autoplayTimeout: 3000, 6856 nav: true, 6857 navText: ['<i class="fa fa-angle-left"></i>', '<i class="fa fa-angle-right"></i>'], 6858 responsive: { 6859 0: { 6860 items: 1 6861 }, 6862 600: { 6863 items: 1 6864 }, 6865 1000: { 6866 items: 3 6867 } 6868 } 6869}); 6870 6871/***/ }), 6872
vendor: 289,018 bytes, lines 6873-17763
6873/***/ "./node_modules/jquery/dist/jquery.js": 6874/*!********************************************!*\ 6875 !*** ./node_modules/jquery/dist/jquery.js ***! 6876 \********************************************/ 6877/***/ (function(module, exports) { 6878 6879var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 6880 * jQuery JavaScript Library v3.6.0 6881 * https://jquery.com/ 6882 * 6883 * Includes Sizzle.js 6884 * https://sizzlejs.com/ 6885 * 6886 * Copyright OpenJS Foundation and other contributors 6887 * Released under the MIT license 6888 * https://jquery.org/license 6889 * 6890 * Date: 2021-03-02T17:08Z 6891 */ 6892( function( global, factory ) { 6893 6894 "use strict"; 6895 6896 if ( true && typeof module.exports === "object" ) { 6897 6898 // For CommonJS and CommonJS-like environments where a proper `window` 6899 // is present, execute the factory and get jQuery. 6900 // For environments that do not have a `window` with a `document` 6901 // (such as Node.js), expose a factory as module.exports. 6902 // This accentuates the need for the creation of a real `window`. 6903 // e.g. var jQuery = require("jquery")(window); 6904 // See ticket #14549 for more info. 6905 module.exports = global.document ? 6906 factory( global, true ) : 6907 function( w ) { 6908 if ( !w.document ) { 6909 throw new Error( "jQuery requires a window with a document" ); 6910 } 6911 return factory( w ); 6912 }; 6913 } else { 6914 factory( global ); 6915 } 6916 6917// Pass this if window is not defined yet 6918} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 6919 6920// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 6921// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 6922// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 6923// enough that all such attempts are guarded in a try block. 6924"use strict"; 6925 6926var arr = []; 6927 6928var getProto = Object.getPrototypeOf; 6929 6930var slice = arr.slice; 6931 6932var flat = arr.flat ? function( array ) { 6933 return arr.flat.call( array ); 6934} : function( array ) { 6935 return arr.concat.apply( [], array ); 6936}; 6937 6938 6939var push = arr.push; 6940 6941var indexOf = arr.indexOf; 6942 6943var class2type = {}; 6944 6945var toString = class2type.toString; 6946 6947var hasOwn = class2type.hasOwnProperty; 6948 6949var fnToString = hasOwn.toString; 6950 6951var ObjectFunctionString = fnToString.call( Object ); 6952 6953var support = {}; 6954 6955var isFunction = function isFunction( obj ) { 6956 6957 // Support: Chrome <=57, Firefox <=52 6958 // In some browsers, typeof returns "function" for HTML <object> elements 6959 // (i.e., `typeof document.createElement( "object" ) === "function"`). 6960 // We don't want to classify *any* DOM node as a function. 6961 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 6962 // Plus for old WebKit, typeof returns "function" for HTML collections 6963 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 6964 return typeof obj === "function" && typeof obj.nodeType !== "number" && 6965 typeof obj.item !== "function"; 6966 }; 6967 6968 6969var isWindow = function isWindow( obj ) { 6970 return obj != null && obj === obj.window; 6971 }; 6972 6973 6974var document = window.document; 6975 6976 6977 6978 var preservedScriptAttributes = { 6979 type: true, 6980 src: true, 6981 nonce: true, 6982 noModule: true 6983 }; 6984 6985 function DOMEval( code, node, doc ) { 6986 doc = doc || document; 6987 6988 var i, val, 6989 script = doc.createElement( "script" ); 6990 6991 script.text = code; 6992 if ( node ) { 6993 for ( i in preservedScriptAttributes ) { 6994 6995 // Support: Firefox 64+, Edge 18+ 6996 // Some browsers don't support the "nonce" property on scripts. 6997 // On the other hand, just using `getAttribute` is not enough as 6998 // the `nonce` attribute is reset to an empty string whenever it 6999 // becomes browsing-context connected. 7000 // See https://github.com/whatwg/html/issues/2369 7001 // See https://html.spec.whatwg.org/#nonce-attributes 7002 // The `node.getAttribute` check was added for the sake of 7003 // `jQuery.globalEval` so that it can fake a nonce-containing node 7004 // via an object. 7005 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 7006 if ( val ) { 7007 script.setAttribute( i, val ); 7008 } 7009 } 7010 } 7011 doc.head.appendChild( script ).parentNode.removeChild( script ); 7012 } 7013 7014 7015function toType( obj ) { 7016 if ( obj == null ) { 7017 return obj + ""; 7018 } 7019 7020 // Support: Android <=2.3 only (functionish RegExp) 7021 return typeof obj === "object" || typeof obj === "function" ? 7022 class2type[ toString.call( obj ) ] || "object" : 7023 typeof obj; 7024} 7025/* global Symbol */ 7026// Defining this global in .eslintrc.json would create a danger of using the global 7027// unguarded in another place, it seems safer to define global only for this module 7028 7029 7030 7031var 7032 version = "3.6.0", 7033 7034 // Define a local copy of jQuery 7035 jQuery = function( selector, context ) { 7036 7037 // The jQuery object is actually just the init constructor 'enhanced' 7038 // Need init if jQuery is called (just allow error to be thrown if not included) 7039 return new jQuery.fn.init( selector, context ); 7040 }; 7041 7042jQuery.fn = jQuery.prototype = { 7043 7044 // The current version of jQuery being used 7045 jquery: version, 7046 7047 constructor: jQuery, 7048 7049 // The default length of a jQuery object is 0 7050 length: 0, 7051 7052 toArray: function() { 7053 return slice.call( this ); 7054 }, 7055 7056 // Get the Nth element in the matched element set OR 7057 // Get the whole matched element set as a clean array 7058 get: function( num ) { 7059 7060 // Return all the elements in a clean array 7061 if ( num == null ) { 7062 return slice.call( this ); 7063 } 7064 7065 // Return just the one element from the set 7066 return num < 0 ? this[ num + this.length ] : this[ num ]; 7067 }, 7068 7069 // Take an array of elements and push it onto the stack 7070 // (returning the new matched element set) 7071 pushStack: function( elems ) { 7072 7073 // Build a new jQuery matched element set 7074 var ret = jQuery.merge( this.constructor(), elems ); 7075 7076 // Add the old object onto the stack (as a reference) 7077 ret.prevObject = this; 7078 7079 // Return the newly-formed element set 7080 return ret; 7081 }, 7082 7083 // Execute a callback for every element in the matched set. 7084 each: function( callback ) { 7085 return jQuery.each( this, callback ); 7086 }, 7087 7088 map: function( callback ) { 7089 return this.pushStack( jQuery.map( this, function( elem, i ) { 7090 return callback.call( elem, i, elem ); 7091 } ) ); 7092 }, 7093 7094 slice: function() { 7095 return this.pushStack( slice.apply( this, arguments ) ); 7096 }, 7097 7098 first: function() { 7099 return this.eq( 0 ); 7100 }, 7101 7102 last: function() { 7103 return this.eq( -1 ); 7104 }, 7105 7106 even: function() { 7107 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 7108 return ( i + 1 ) % 2; 7109 } ) ); 7110 }, 7111 7112 odd: function() { 7113 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 7114 return i % 2; 7115 } ) ); 7116 }, 7117 7118 eq: function( i ) { 7119 var len = this.length, 7120 j = +i + ( i < 0 ? len : 0 ); 7121 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 7122 }, 7123 7124 end: function() { 7125 return this.prevObject || this.constructor(); 7126 }, 7127 7128 // For internal use only. 7129 // Behaves like an Array's method, not like a jQuery method. 7130 push: push, 7131 sort: arr.sort, 7132 splice: arr.splice 7133}; 7134 7135jQuery.extend = jQuery.fn.extend = function() { 7136 var options, name, src, copy, copyIsArray, clone, 7137 target = arguments[ 0 ] || {}, 7138 i = 1, 7139 length = arguments.length, 7140 deep = false; 7141 7142 // Handle a deep copy situation 7143 if ( typeof target === "boolean" ) { 7144 deep = target; 7145 7146 // Skip the boolean and the target 7147 target = arguments[ i ] || {}; 7148 i++; 7149 } 7150 7151 // Handle case when target is a string or something (possible in deep copy) 7152 if ( typeof target !== "object" && !isFunction( target ) ) { 7153 target = {}; 7154 } 7155 7156 // Extend jQuery itself if only one argument is passed 7157 if ( i === length ) { 7158 target = this; 7159 i--; 7160 } 7161 7162 for ( ; i < length; i++ ) { 7163 7164 // Only deal with non-null/undefined values 7165 if ( ( options = arguments[ i ] ) != null ) { 7166 7167 // Extend the base object 7168 for ( name in options ) { 7169 copy = options[ name ]; 7170 7171 // Prevent Object.prototype pollution 7172 // Prevent never-ending loop 7173 if ( name === "__proto__" || target === copy ) { 7174 continue; 7175 } 7176 7177 // Recurse if we're merging plain objects or arrays 7178 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 7179 ( copyIsArray = Array.isArray( copy ) ) ) ) { 7180 src = target[ name ]; 7181 7182 // Ensure proper type for the source value 7183 if ( copyIsArray && !Array.isArray( src ) ) { 7184 clone = []; 7185 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 7186 clone = {}; 7187 } else { 7188 clone = src; 7189 } 7190 copyIsArray = false; 7191 7192 // Never move original objects, clone them 7193 target[ name ] = jQuery.extend( deep, clone, copy ); 7194 7195 // Don't bring in undefined values 7196 } else if ( copy !== undefined ) { 7197 target[ name ] = copy; 7198 } 7199 } 7200 } 7201 } 7202 7203 // Return the modified object 7204 return target; 7205}; 7206 7207jQuery.extend( { 7208 7209 // Unique for each copy of jQuery on the page 7210 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 7211 7212 // Assume jQuery is ready without the ready module 7213 isReady: true, 7214 7215 error: function( msg ) { 7216 throw new Error( msg ); 7217 }, 7218 7219 noop: function() {}, 7220 7221 isPlainObject: function( obj ) { 7222 var proto, Ctor; 7223 7224 // Detect obvious negatives 7225 // Use toString instead of jQuery.type to catch host objects 7226 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 7227 return false; 7228 } 7229 7230 proto = getProto( obj ); 7231 7232 // Objects with no prototype (e.g., `Object.create( null )`) are plain 7233 if ( !proto ) { 7234 return true; 7235 } 7236 7237 // Objects with prototype are plain iff they were constructed by a global Object function 7238 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 7239 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 7240 }, 7241 7242 isEmptyObject: function( obj ) { 7243 var name; 7244 7245 for ( name in obj ) { 7246 return false; 7247 } 7248 return true; 7249 }, 7250 7251 // Evaluates a script in a provided context; falls back to the global one 7252 // if not specified. 7253 globalEval: function( code, options, doc ) { 7254 DOMEval( code, { nonce: options && options.nonce }, doc ); 7255 }, 7256 7257 each: function( obj, callback ) { 7258 var length, i = 0; 7259 7260 if ( isArrayLike( obj ) ) { 7261 length = obj.length; 7262 for ( ; i < length; i++ ) { 7263 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 7264 break; 7265 } 7266 } 7267 } else { 7268 for ( i in obj ) { 7269 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 7270 break; 7271 } 7272 } 7273 } 7274 7275 return obj; 7276 }, 7277 7278 // results is for internal usage only 7279 makeArray: function( arr, results ) { 7280 var ret = results || []; 7281 7282 if ( arr != null ) { 7283 if ( isArrayLike( Object( arr ) ) ) { 7284 jQuery.merge( ret, 7285 typeof arr === "string" ? 7286 [ arr ] : arr 7287 ); 7288 } else { 7289 push.call( ret, arr ); 7290 } 7291 } 7292 7293 return ret; 7294 }, 7295 7296 inArray: function( elem, arr, i ) { 7297 return arr == null ? -1 : indexOf.call( arr, elem, i ); 7298 }, 7299 7300 // Support: Android <=4.0 only, PhantomJS 1 only 7301 // push.apply(_, arraylike) throws on ancient WebKit 7302 merge: function( first, second ) { 7303 var len = +second.length, 7304 j = 0, 7305 i = first.length; 7306 7307 for ( ; j < len; j++ ) { 7308 first[ i++ ] = second[ j ]; 7309 } 7310 7311 first.length = i; 7312 7313 return first; 7314 }, 7315 7316 grep: function( elems, callback, invert ) { 7317 var callbackInverse, 7318 matches = [], 7319 i = 0, 7320 length = elems.length, 7321 callbackExpect = !invert; 7322 7323 // Go through the array, only saving the items 7324 // that pass the validator function 7325 for ( ; i < length; i++ ) { 7326 callbackInverse = !callback( elems[ i ], i ); 7327 if ( callbackInverse !== callbackExpect ) { 7328 matches.push( elems[ i ] ); 7329 } 7330 } 7331 7332 return matches; 7333 }, 7334 7335 // arg is for internal usage only 7336 map: function( elems, callback, arg ) { 7337 var length, value, 7338 i = 0, 7339 ret = []; 7340 7341 // Go through the array, translating each of the items to their new values 7342 if ( isArrayLike( elems ) ) { 7343 length = elems.length; 7344 for ( ; i < length; i++ ) { 7345 value = callback( elems[ i ], i, arg ); 7346 7347 if ( value != null ) { 7348 ret.push( value ); 7349 } 7350 } 7351 7352 // Go through every key on the object, 7353 } else { 7354 for ( i in elems ) { 7355 value = callback( elems[ i ], i, arg ); 7356 7357 if ( value != null ) { 7358 ret.push( value ); 7359 } 7360 } 7361 } 7362 7363 // Flatten any nested arrays 7364 return flat( ret ); 7365 }, 7366 7367 // A global GUID counter for objects 7368 guid: 1, 7369 7370 // jQuery.support is not used in Core but other projects attach their 7371 // properties to it so it needs to exist. 7372 support: support 7373} ); 7374 7375if ( typeof Symbol === "function" ) { 7376 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 7377} 7378 7379// Populate the class2type map 7380jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 7381 function( _i, name ) { 7382 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 7383 } ); 7384 7385function isArrayLike( obj ) { 7386 7387 // Support: real iOS 8.2 only (not reproducible in simulator) 7388 // `in` check used to prevent JIT error (gh-2145) 7389 // hasOwn isn't used here due to false negatives 7390 // regarding Nodelist length in IE 7391 var length = !!obj && "length" in obj && obj.length, 7392 type = toType( obj ); 7393 7394 if ( isFunction( obj ) || isWindow( obj ) ) { 7395 return false; 7396 } 7397 7398 return type === "array" || length === 0 || 7399 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 7400} 7401var Sizzle = 7402/*! 7403 * Sizzle CSS Selector Engine v2.3.6 7404 * https://sizzlejs.com/ 7405 * 7406 * Copyright JS Foundation and other contributors 7407 * Released under the MIT license 7408 * https://js.foundation/ 7409 * 7410 * Date: 2021-02-16 7411 */ 7412( function( window ) { 7413var i, 7414 support, 7415 Expr, 7416 getText, 7417 isXML, 7418 tokenize, 7419 compile, 7420 select, 7421 outermostContext, 7422 sortInput, 7423 hasDuplicate, 7424 7425 // Local document vars 7426 setDocument, 7427 document, 7428 docElem, 7429 documentIsHTML, 7430 rbuggyQSA, 7431 rbuggyMatches, 7432 matches, 7433 contains, 7434 7435 // Instance-specific data 7436 expando = "sizzle" + 1 * new Date(), 7437 preferredDoc = window.document, 7438 dirruns = 0, 7439 done = 0, 7440 classCache = createCache(), 7441 tokenCache = createCache(), 7442 compilerCache = createCache(), 7443 nonnativeSelectorCache = createCache(), 7444 sortOrder = function( a, b ) { 7445 if ( a === b ) { 7446 hasDuplicate = true; 7447 } 7448 return 0; 7449 }, 7450 7451 // Instance methods 7452 hasOwn = ( {} ).hasOwnProperty, 7453 arr = [], 7454 pop = arr.pop, 7455 pushNative = arr.push, 7456 push = arr.push, 7457 slice = arr.slice, 7458 7459 // Use a stripped-down indexOf as it's faster than native 7460 // https://jsperf.com/thor-indexof-vs-for/5 7461 indexOf = function( list, elem ) { 7462 var i = 0, 7463 len = list.length; 7464 for ( ; i < len; i++ ) { 7465 if ( list[ i ] === elem ) { 7466 return i; 7467 } 7468 } 7469 return -1; 7470 }, 7471 7472 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + 7473 "ismap|loop|multiple|open|readonly|required|scoped", 7474 7475 // Regular expressions 7476 7477 // http://www.w3.org/TR/css3-selectors/#whitespace 7478 whitespace = "[\\x20\\t\\r\\n\\f]", 7479 7480 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 7481 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 7482 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 7483 7484 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 7485 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 7486 7487 // Operator (capture 2) 7488 "*([*^$|!~]?=)" + whitespace + 7489 7490 // "Attribute values must be CSS identifiers [capture 5] 7491 // or strings [capture 3 or capture 4]" 7492 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 7493 whitespace + "*\\]", 7494 7495 pseudos = ":(" + identifier + ")(?:\\((" + 7496 7497 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 7498 // 1. quoted (capture 3; capture 4 or capture 5) 7499 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 7500 7501 // 2. simple (capture 6) 7502 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 7503 7504 // 3. anything else (capture 2) 7505 ".*" + 7506 ")\\)|)", 7507 7508 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 7509 rwhitespace = new RegExp( whitespace + "+", "g" ), 7510 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + 7511 whitespace + "+$", "g" ), 7512 7513 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 7514 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + 7515 "*" ), 7516 rdescend = new RegExp( whitespace + "|>" ), 7517 7518 rpseudo = new RegExp( pseudos ), 7519 ridentifier = new RegExp( "^" + identifier + "$" ), 7520 7521 matchExpr = { 7522 "ID": new RegExp( "^#(" + identifier + ")" ), 7523 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 7524 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 7525 "ATTR": new RegExp( "^" + attributes ), 7526 "PSEUDO": new RegExp( "^" + pseudos ), 7527 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 7528 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 7529 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 7530 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 7531 7532 // For use in libraries implementing .is() 7533 // We use this for POS matching in `select` 7534 "needsContext": new RegExp( "^" + whitespace + 7535 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 7536 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 7537 }, 7538 7539 rhtml = /HTML$/i, 7540 rinputs = /^(?:input|select|textarea|button)$/i, 7541 rheader = /^h\d$/i, 7542 7543 rnative = /^[^{]+\{\s*\[native \w/, 7544 7545 // Easily-parseable/retrievable ID or TAG or CLASS selectors 7546 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 7547 7548 rsibling = /[+~]/, 7549 7550 // CSS escapes 7551 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 7552 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), 7553 funescape = function( escape, nonHex ) { 7554 var high = "0x" + escape.slice( 1 ) - 0x10000; 7555 7556 return nonHex ? 7557 7558 // Strip the backslash prefix from a non-hex escape sequence 7559 nonHex : 7560 7561 // Replace a hexadecimal escape sequence with the encoded Unicode code point 7562 // Support: IE <=11+ 7563 // For values outside the Basic Multilingual Plane (BMP), manually construct a 7564 // surrogate pair 7565 high < 0 ? 7566 String.fromCharCode( high + 0x10000 ) : 7567 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 7568 }, 7569 7570 // CSS string/identifier serialization 7571 // https://drafts.csswg.org/cssom/#common-serializing-idioms 7572 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, 7573 fcssescape = function( ch, asCodePoint ) { 7574 if ( asCodePoint ) { 7575 7576 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 7577 if ( ch === "\0" ) { 7578 return "\uFFFD"; 7579 } 7580 7581 // Control characters and (dependent upon position) numbers get escaped as code points 7582 return ch.slice( 0, -1 ) + "\\" + 7583 ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 7584 } 7585 7586 // Other potentially-special ASCII characters get backslash-escaped 7587 return "\\" + ch; 7588 }, 7589 7590 // Used for iframes 7591 // See setDocument() 7592 // Removing the function wrapper causes a "Permission Denied" 7593 // error in IE 7594 unloadHandler = function() { 7595 setDocument(); 7596 }, 7597 7598 inDisabledFieldset = addCombinator( 7599 function( elem ) { 7600 return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; 7601 }, 7602 { dir: "parentNode", next: "legend" } 7603 ); 7604 7605// Optimize for push.apply( _, NodeList ) 7606try { 7607 push.apply( 7608 ( arr = slice.call( preferredDoc.childNodes ) ), 7609 preferredDoc.childNodes 7610 ); 7611 7612 // Support: Android<4.0 7613 // Detect silently failing push.apply 7614 // eslint-disable-next-line no-unused-expressions 7615 arr[ preferredDoc.childNodes.length ].nodeType; 7616} catch ( e ) { 7617 push = { apply: arr.length ? 7618 7619 // Leverage slice if possible 7620 function( target, els ) { 7621 pushNative.apply( target, slice.call( els ) ); 7622 } : 7623 7624 // Support: IE<9 7625 // Otherwise append directly 7626 function( target, els ) { 7627 var j = target.length, 7628 i = 0; 7629 7630 // Can't trust NodeList.length 7631 while ( ( target[ j++ ] = els[ i++ ] ) ) {} 7632 target.length = j - 1; 7633 } 7634 }; 7635} 7636 7637function Sizzle( selector, context, results, seed ) { 7638 var m, i, elem, nid, match, groups, newSelector, 7639 newContext = context && context.ownerDocument, 7640 7641 // nodeType defaults to 9, since context defaults to document 7642 nodeType = context ? context.nodeType : 9; 7643 7644 results = results || []; 7645 7646 // Return early from calls with invalid selector or context 7647 if ( typeof selector !== "string" || !selector || 7648 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 7649 7650 return results; 7651 } 7652 7653 // Try to shortcut find operations (as opposed to filters) in HTML documents 7654 if ( !seed ) { 7655 setDocument( context ); 7656 context = context || document; 7657 7658 if ( documentIsHTML ) { 7659 7660 // If the selector is sufficiently simple, try using a "get*By*" DOM method 7661 // (excepting DocumentFragment context, where the methods don't exist) 7662 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 7663 7664 // ID selector 7665 if ( ( m = match[ 1 ] ) ) { 7666 7667 // Document context 7668 if ( nodeType === 9 ) { 7669 if ( ( elem = context.getElementById( m ) ) ) { 7670 7671 // Support: IE, Opera, Webkit 7672 // TODO: identify versions 7673 // getElementById can match elements by name instead of ID 7674 if ( elem.id === m ) { 7675 results.push( elem ); 7676 return results; 7677 } 7678 } else { 7679 return results; 7680 } 7681 7682 // Element context 7683 } else { 7684 7685 // Support: IE, Opera, Webkit 7686 // TODO: identify versions 7687 // getElementById can match elements by name instead of ID 7688 if ( newContext && ( elem = newContext.getElementById( m ) ) && 7689 contains( context, elem ) && 7690 elem.id === m ) { 7691 7692 results.push( elem ); 7693 return results; 7694 } 7695 } 7696 7697 // Type selector 7698 } else if ( match[ 2 ] ) { 7699 push.apply( results, context.getElementsByTagName( selector ) ); 7700 return results; 7701 7702 // Class selector 7703 } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && 7704 context.getElementsByClassName ) { 7705 7706 push.apply( results, context.getElementsByClassName( m ) ); 7707 return results; 7708 } 7709 } 7710 7711 // Take advantage of querySelectorAll 7712 if ( support.qsa && 7713 !nonnativeSelectorCache[ selector + " " ] && 7714 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && 7715 7716 // Support: IE 8 only 7717 // Exclude object elements 7718 ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { 7719 7720 newSelector = selector; 7721 newContext = context; 7722 7723 // qSA considers elements outside a scoping root when evaluating child or 7724 // descendant combinators, which is not what we want. 7725 // In such cases, we work around the behavior by prefixing every selector in the 7726 // list with an ID selector referencing the scope context. 7727 // The technique has to be used as well when a leading combinator is used 7728 // as such selectors are not recognized by querySelectorAll. 7729 // Thanks to Andrew Dupont for this technique. 7730 if ( nodeType === 1 && 7731 ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { 7732 7733 // Expand context for sibling selectors 7734 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 7735 context; 7736 7737 // We can use :scope instead of the ID hack if the browser 7738 // supports it & if we're not changing the context. 7739 if ( newContext !== context || !support.scope ) { 7740 7741 // Capture the context ID, setting it first if necessary 7742 if ( ( nid = context.getAttribute( "id" ) ) ) { 7743 nid = nid.replace( rcssescape, fcssescape ); 7744 } else { 7745 context.setAttribute( "id", ( nid = expando ) ); 7746 } 7747 } 7748 7749 // Prefix every selector in the list 7750 groups = tokenize( selector ); 7751 i = groups.length; 7752 while ( i-- ) { 7753 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 7754 toSelector( groups[ i ] ); 7755 } 7756 newSelector = groups.join( "," ); 7757 } 7758 7759 try { 7760 push.apply( results, 7761 newContext.querySelectorAll( newSelector ) 7762 ); 7763 return results; 7764 } catch ( qsaError ) { 7765 nonnativeSelectorCache( selector, true ); 7766 } finally { 7767 if ( nid === expando ) { 7768 context.removeAttribute( "id" ); 7769 } 7770 } 7771 } 7772 } 7773 } 7774 7775 // All others 7776 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 7777} 7778 7779/** 7780 * Create key-value caches of limited size 7781 * @returns {function(string, object)} Returns the Object data after storing it on itself with 7782 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 7783 * deleting the oldest entry 7784 */ 7785function createCache() { 7786 var keys = []; 7787 7788 function cache( key, value ) { 7789 7790 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 7791 if ( keys.push( key + " " ) > Expr.cacheLength ) { 7792 7793 // Only keep the most recent entries 7794 delete cache[ keys.shift() ]; 7795 } 7796 return ( cache[ key + " " ] = value ); 7797 } 7798 return cache; 7799} 7800 7801/** 7802 * Mark a function for special use by Sizzle 7803 * @param {Function} fn The function to mark 7804 */ 7805function markFunction( fn ) { 7806 fn[ expando ] = true; 7807 return fn; 7808} 7809 7810/** 7811 * Support testing using an element 7812 * @param {Function} fn Passed the created element and returns a boolean result 7813 */ 7814function assert( fn ) { 7815 var el = document.createElement( "fieldset" ); 7816 7817 try { 7818 return !!fn( el ); 7819 } catch ( e ) { 7820 return false; 7821 } finally { 7822 7823 // Remove from its parent by default 7824 if ( el.parentNode ) { 7825 el.parentNode.removeChild( el ); 7826 } 7827 7828 // release memory in IE 7829 el = null; 7830 } 7831} 7832 7833/** 7834 * Adds the same handler for all of the specified attrs 7835 * @param {String} attrs Pipe-separated list of attributes 7836 * @param {Function} handler The method that will be applied 7837 */ 7838function addHandle( attrs, handler ) { 7839 var arr = attrs.split( "|" ), 7840 i = arr.length; 7841 7842 while ( i-- ) { 7843 Expr.attrHandle[ arr[ i ] ] = handler; 7844 } 7845} 7846 7847/** 7848 * Checks document order of two siblings 7849 * @param {Element} a 7850 * @param {Element} b 7851 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 7852 */ 7853function siblingCheck( a, b ) { 7854 var cur = b && a, 7855 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 7856 a.sourceIndex - b.sourceIndex; 7857 7858 // Use IE sourceIndex if available on both nodes 7859 if ( diff ) { 7860 return diff; 7861 } 7862 7863 // Check if b follows a 7864 if ( cur ) { 7865 while ( ( cur = cur.nextSibling ) ) { 7866 if ( cur === b ) { 7867 return -1; 7868 } 7869 } 7870 } 7871 7872 return a ? 1 : -1; 7873} 7874 7875/** 7876 * Returns a function to use in pseudos for input types 7877 * @param {String} type 7878 */ 7879function createInputPseudo( type ) { 7880 return function( elem ) { 7881 var name = elem.nodeName.toLowerCase(); 7882 return name === "input" && elem.type === type; 7883 }; 7884} 7885 7886/** 7887 * Returns a function to use in pseudos for buttons 7888 * @param {String} type 7889 */ 7890function createButtonPseudo( type ) { 7891 return function( elem ) { 7892 var name = elem.nodeName.toLowerCase(); 7893 return ( name === "input" || name === "button" ) && elem.type === type; 7894 }; 7895} 7896 7897/** 7898 * Returns a function to use in pseudos for :enabled/:disabled 7899 * @param {Boolean} disabled true for :disabled; false for :enabled 7900 */ 7901function createDisabledPseudo( disabled ) { 7902 7903 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 7904 return function( elem ) { 7905 7906 // Only certain elements can match :enabled or :disabled 7907 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 7908 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 7909 if ( "form" in elem ) { 7910 7911 // Check for inherited disabledness on relevant non-disabled elements: 7912 // * listed form-associated elements in a disabled fieldset 7913 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 7914 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 7915 // * option elements in a disabled optgroup 7916 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 7917 // All such elements have a "form" property. 7918 if ( elem.parentNode && elem.disabled === false ) { 7919 7920 // Option elements defer to a parent optgroup if present 7921 if ( "label" in elem ) { 7922 if ( "label" in elem.parentNode ) { 7923 return elem.parentNode.disabled === disabled; 7924 } else { 7925 return elem.disabled === disabled; 7926 } 7927 } 7928 7929 // Support: IE 6 - 11 7930 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 7931 return elem.isDisabled === disabled || 7932 7933 // Where there is no isDisabled, check manually 7934 /* jshint -W018 */ 7935 elem.isDisabled !== !disabled && 7936 inDisabledFieldset( elem ) === disabled; 7937 } 7938 7939 return elem.disabled === disabled; 7940 7941 // Try to winnow out elements that can't be disabled before trusting the disabled property. 7942 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 7943 // even exist on them, let alone have a boolean value. 7944 } else if ( "label" in elem ) { 7945 return elem.disabled === disabled; 7946 } 7947 7948 // Remaining elements are neither :enabled nor :disabled 7949 return false; 7950 }; 7951} 7952 7953/** 7954 * Returns a function to use in pseudos for positionals 7955 * @param {Function} fn 7956 */ 7957function createPositionalPseudo( fn ) { 7958 return markFunction( function( argument ) { 7959 argument = +argument; 7960 return markFunction( function( seed, matches ) { 7961 var j, 7962 matchIndexes = fn( [], seed.length, argument ), 7963 i = matchIndexes.length; 7964 7965 // Match elements found at the specified indexes 7966 while ( i-- ) { 7967 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 7968 seed[ j ] = !( matches[ j ] = seed[ j ] ); 7969 } 7970 } 7971 } ); 7972 } ); 7973} 7974 7975/** 7976 * Checks a node for validity as a Sizzle context 7977 * @param {Element|Object=} context 7978 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 7979 */ 7980function testContext( context ) { 7981 return context && typeof context.getElementsByTagName !== "undefined" && context; 7982} 7983 7984// Expose support vars for convenience 7985support = Sizzle.support = {}; 7986 7987/** 7988 * Detects XML nodes 7989 * @param {Element|Object} elem An element or a document 7990 * @returns {Boolean} True iff elem is a non-HTML XML node 7991 */ 7992isXML = Sizzle.isXML = function( elem ) { 7993 var namespace = elem && elem.namespaceURI, 7994 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 7995 7996 // Support: IE <=8 7997 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes 7998 // https://bugs.jquery.com/ticket/4833 7999 return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); 8000}; 8001 8002/** 8003 * Sets document-related variables once based on the current document 8004 * @param {Element|Object} [doc] An element or document object to use to set the document 8005 * @returns {Object} Returns the current document 8006 */ 8007setDocument = Sizzle.setDocument = function( node ) { 8008 var hasCompare, subWindow, 8009 doc = node ? node.ownerDocument || node : preferredDoc; 8010 8011 // Return early if doc is invalid or already selected 8012 // Support: IE 11+, Edge 17 - 18+ 8013 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8014 // two documents; shallow comparisons work. 8015 // eslint-disable-next-line eqeqeq 8016 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 8017 return document; 8018 } 8019 8020 // Update global variables 8021 document = doc; 8022 docElem = document.documentElement; 8023 documentIsHTML = !isXML( document ); 8024 8025 // Support: IE 9 - 11+, Edge 12 - 18+ 8026 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 8027 // Support: IE 11+, Edge 17 - 18+ 8028 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8029 // two documents; shallow comparisons work. 8030 // eslint-disable-next-line eqeqeq 8031 if ( preferredDoc != document && 8032 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 8033 8034 // Support: IE 11, Edge 8035 if ( subWindow.addEventListener ) { 8036 subWindow.addEventListener( "unload", unloadHandler, false ); 8037 8038 // Support: IE 9 - 10 only 8039 } else if ( subWindow.attachEvent ) { 8040 subWindow.attachEvent( "onunload", unloadHandler ); 8041 } 8042 } 8043 8044 // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, 8045 // Safari 4 - 5 only, Opera <=11.6 - 12.x only 8046 // IE/Edge & older browsers don't support the :scope pseudo-class. 8047 // Support: Safari 6.0 only 8048 // Safari 6.0 supports :scope but it's an alias of :root there. 8049 support.scope = assert( function( el ) { 8050 docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); 8051 return typeof el.querySelectorAll !== "undefined" && 8052 !el.querySelectorAll( ":scope fieldset div" ).length; 8053 } ); 8054 8055 /* Attributes 8056 ---------------------------------------------------------------------- */ 8057 8058 // Support: IE<8 8059 // Verify that getAttribute really returns attributes and not properties 8060 // (excepting IE8 booleans) 8061 support.attributes = assert( function( el ) { 8062 el.className = "i"; 8063 return !el.getAttribute( "className" ); 8064 } ); 8065 8066 /* getElement(s)By* 8067 ---------------------------------------------------------------------- */ 8068 8069 // Check if getElementsByTagName("*") returns only elements 8070 support.getElementsByTagName = assert( function( el ) { 8071 el.appendChild( document.createComment( "" ) ); 8072 return !el.getElementsByTagName( "*" ).length; 8073 } ); 8074 8075 // Support: IE<9 8076 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 8077 8078 // Support: IE<10 8079 // Check if getElementById returns elements by name 8080 // The broken getElementById methods don't pick up programmatically-set names, 8081 // so use a roundabout getElementsByName test 8082 support.getById = assert( function( el ) { 8083 docElem.appendChild( el ).id = expando; 8084 return !document.getElementsByName || !document.getElementsByName( expando ).length; 8085 } ); 8086 8087 // ID filter and find 8088 if ( support.getById ) { 8089 Expr.filter[ "ID" ] = function( id ) { 8090 var attrId = id.replace( runescape, funescape ); 8091 return function( elem ) { 8092 return elem.getAttribute( "id" ) === attrId; 8093 }; 8094 }; 8095 Expr.find[ "ID" ] = function( id, context ) { 8096 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 8097 var elem = context.getElementById( id ); 8098 return elem ? [ elem ] : []; 8099 } 8100 }; 8101 } else { 8102 Expr.filter[ "ID" ] = function( id ) { 8103 var attrId = id.replace( runescape, funescape ); 8104 return function( elem ) { 8105 var node = typeof elem.getAttributeNode !== "undefined" && 8106 elem.getAttributeNode( "id" ); 8107 return node && node.value === attrId; 8108 }; 8109 }; 8110 8111 // Support: IE 6 - 7 only 8112 // getElementById is not reliable as a find shortcut 8113 Expr.find[ "ID" ] = function( id, context ) { 8114 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 8115 var node, i, elems, 8116 elem = context.getElementById( id ); 8117 8118 if ( elem ) { 8119 8120 // Verify the id attribute 8121 node = elem.getAttributeNode( "id" ); 8122 if ( node && node.value === id ) { 8123 return [ elem ]; 8124 } 8125 8126 // Fall back on getElementsByName 8127 elems = context.getElementsByName( id ); 8128 i = 0; 8129 while ( ( elem = elems[ i++ ] ) ) { 8130 node = elem.getAttributeNode( "id" ); 8131 if ( node && node.value === id ) { 8132 return [ elem ]; 8133 } 8134 } 8135 } 8136 8137 return []; 8138 } 8139 }; 8140 } 8141 8142 // Tag 8143 Expr.find[ "TAG" ] = support.getElementsByTagName ? 8144 function( tag, context ) { 8145 if ( typeof context.getElementsByTagName !== "undefined" ) { 8146 return context.getElementsByTagName( tag ); 8147 8148 // DocumentFragment nodes don't have gEBTN 8149 } else if ( support.qsa ) { 8150 return context.querySelectorAll( tag ); 8151 } 8152 } : 8153 8154 function( tag, context ) { 8155 var elem, 8156 tmp = [], 8157 i = 0, 8158 8159 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 8160 results = context.getElementsByTagName( tag ); 8161 8162 // Filter out possible comments 8163 if ( tag === "*" ) { 8164 while ( ( elem = results[ i++ ] ) ) { 8165 if ( elem.nodeType === 1 ) { 8166 tmp.push( elem ); 8167 } 8168 } 8169 8170 return tmp; 8171 } 8172 return results; 8173 }; 8174 8175 // Class 8176 Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { 8177 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 8178 return context.getElementsByClassName( className ); 8179 } 8180 }; 8181 8182 /* QSA/matchesSelector 8183 ---------------------------------------------------------------------- */ 8184 8185 // QSA and matchesSelector support 8186 8187 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 8188 rbuggyMatches = []; 8189 8190 // qSa(:focus) reports false when true (Chrome 21) 8191 // We allow this because of a bug in IE8/9 that throws an error 8192 // whenever `document.activeElement` is accessed on an iframe 8193 // So, we allow :focus to pass through QSA all the time to avoid the IE error 8194 // See https://bugs.jquery.com/ticket/13378 8195 rbuggyQSA = []; 8196 8197 if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { 8198 8199 // Build QSA regex 8200 // Regex strategy adopted from Diego Perini 8201 assert( function( el ) { 8202 8203 var input; 8204 8205 // Select is set to empty string on purpose 8206 // This is to test IE's treatment of not explicitly 8207 // setting a boolean content attribute, 8208 // since its presence should be enough 8209 // https://bugs.jquery.com/ticket/12359 8210 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + 8211 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 8212 "<option selected=''></option></select>"; 8213 8214 // Support: IE8, Opera 11-12.16 8215 // Nothing should be selected when empty strings follow ^= or $= or *= 8216 // The test attribute must be unknown in Opera but "safe" for WinRT 8217 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 8218 if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { 8219 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 8220 } 8221 8222 // Support: IE8 8223 // Boolean attributes and "value" are not treated correctly 8224 if ( !el.querySelectorAll( "[selected]" ).length ) { 8225 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 8226 } 8227 8228 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 8229 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 8230 rbuggyQSA.push( "~=" ); 8231 } 8232 8233 // Support: IE 11+, Edge 15 - 18+ 8234 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 8235 // Adding a temporary attribute to the document before the selection works 8236 // around the issue. 8237 // Interestingly, IE 10 & older don't seem to have the issue. 8238 input = document.createElement( "input" ); 8239 input.setAttribute( "name", "" ); 8240 el.appendChild( input ); 8241 if ( !el.querySelectorAll( "[name='']" ).length ) { 8242 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 8243 whitespace + "*(?:''|\"\")" ); 8244 } 8245 8246 // Webkit/Opera - :checked should return selected option elements 8247 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 8248 // IE8 throws error here and will not see later tests 8249 if ( !el.querySelectorAll( ":checked" ).length ) { 8250 rbuggyQSA.push( ":checked" ); 8251 } 8252 8253 // Support: Safari 8+, iOS 8+ 8254 // https://bugs.webkit.org/show_bug.cgi?id=136851 8255 // In-page `selector#id sibling-combinator selector` fails 8256 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 8257 rbuggyQSA.push( ".#.+[+~]" ); 8258 } 8259 8260 // Support: Firefox <=3.6 - 5 only 8261 // Old Firefox doesn't throw on a badly-escaped identifier. 8262 el.querySelectorAll( "\\\f" ); 8263 rbuggyQSA.push( "[\\r\\n\\f]" ); 8264 } ); 8265 8266 assert( function( el ) { 8267 el.innerHTML = "<a href='' disabled='disabled'></a>" + 8268 "<select disabled='disabled'><option/></select>"; 8269 8270 // Support: Windows 8 Native Apps 8271 // The type and name attributes are restricted during .innerHTML assignment 8272 var input = document.createElement( "input" ); 8273 input.setAttribute( "type", "hidden" ); 8274 el.appendChild( input ).setAttribute( "name", "D" ); 8275 8276 // Support: IE8 8277 // Enforce case-sensitivity of name attribute 8278 if ( el.querySelectorAll( "[name=d]" ).length ) { 8279 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 8280 } 8281 8282 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 8283 // IE8 throws error here and will not see later tests 8284 if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { 8285 rbuggyQSA.push( ":enabled", ":disabled" ); 8286 } 8287 8288 // Support: IE9-11+ 8289 // IE's :disabled selector does not pick up the children of disabled fieldsets 8290 docElem.appendChild( el ).disabled = true; 8291 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 8292 rbuggyQSA.push( ":enabled", ":disabled" ); 8293 } 8294 8295 // Support: Opera 10 - 11 only 8296 // Opera 10-11 does not throw on post-comma invalid pseudos 8297 el.querySelectorAll( "*,:x" ); 8298 rbuggyQSA.push( ",.*:" ); 8299 } ); 8300 } 8301 8302 if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || 8303 docElem.webkitMatchesSelector || 8304 docElem.mozMatchesSelector || 8305 docElem.oMatchesSelector || 8306 docElem.msMatchesSelector ) ) ) ) { 8307 8308 assert( function( el ) { 8309 8310 // Check to see if it's possible to do matchesSelector 8311 // on a disconnected node (IE 9) 8312 support.disconnectedMatch = matches.call( el, "*" ); 8313 8314 // This should fail with an exception 8315 // Gecko does not error, returns false instead 8316 matches.call( el, "[s!='']:x" ); 8317 rbuggyMatches.push( "!=", pseudos ); 8318 } ); 8319 } 8320 8321 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 8322 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); 8323 8324 /* Contains 8325 ---------------------------------------------------------------------- */ 8326 hasCompare = rnative.test( docElem.compareDocumentPosition ); 8327 8328 // Element contains another 8329 // Purposefully self-exclusive 8330 // As in, an element does not contain itself 8331 contains = hasCompare || rnative.test( docElem.contains ) ? 8332 function( a, b ) { 8333 var adown = a.nodeType === 9 ? a.documentElement : a, 8334 bup = b && b.parentNode; 8335 return a === bup || !!( bup && bup.nodeType === 1 && ( 8336 adown.contains ? 8337 adown.contains( bup ) : 8338 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 8339 ) ); 8340 } : 8341 function( a, b ) { 8342 if ( b ) { 8343 while ( ( b = b.parentNode ) ) { 8344 if ( b === a ) { 8345 return true; 8346 } 8347 } 8348 } 8349 return false; 8350 }; 8351 8352 /* Sorting 8353 ---------------------------------------------------------------------- */ 8354 8355 // Document order sorting 8356 sortOrder = hasCompare ? 8357 function( a, b ) { 8358 8359 // Flag for duplicate removal 8360 if ( a === b ) { 8361 hasDuplicate = true; 8362 return 0; 8363 } 8364 8365 // Sort on method existence if only one input has compareDocumentPosition 8366 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 8367 if ( compare ) { 8368 return compare; 8369 } 8370 8371 // Calculate position if both inputs belong to the same document 8372 // Support: IE 11+, Edge 17 - 18+ 8373 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8374 // two documents; shallow comparisons work. 8375 // eslint-disable-next-line eqeqeq 8376 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 8377 a.compareDocumentPosition( b ) : 8378 8379 // Otherwise we know they are disconnected 8380 1; 8381 8382 // Disconnected nodes 8383 if ( compare & 1 || 8384 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 8385 8386 // Choose the first element that is related to our preferred document 8387 // Support: IE 11+, Edge 17 - 18+ 8388 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8389 // two documents; shallow comparisons work. 8390 // eslint-disable-next-line eqeqeq 8391 if ( a == document || a.ownerDocument == preferredDoc && 8392 contains( preferredDoc, a ) ) { 8393 return -1; 8394 } 8395 8396 // Support: IE 11+, Edge 17 - 18+ 8397 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8398 // two documents; shallow comparisons work. 8399 // eslint-disable-next-line eqeqeq 8400 if ( b == document || b.ownerDocument == preferredDoc && 8401 contains( preferredDoc, b ) ) { 8402 return 1; 8403 } 8404 8405 // Maintain original order 8406 return sortInput ? 8407 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 8408 0; 8409 } 8410 8411 return compare & 4 ? -1 : 1; 8412 } : 8413 function( a, b ) { 8414 8415 // Exit early if the nodes are identical 8416 if ( a === b ) { 8417 hasDuplicate = true; 8418 return 0; 8419 } 8420 8421 var cur, 8422 i = 0, 8423 aup = a.parentNode, 8424 bup = b.parentNode, 8425 ap = [ a ], 8426 bp = [ b ]; 8427 8428 // Parentless nodes are either documents or disconnected 8429 if ( !aup || !bup ) { 8430 8431 // Support: IE 11+, Edge 17 - 18+ 8432 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8433 // two documents; shallow comparisons work. 8434 /* eslint-disable eqeqeq */ 8435 return a == document ? -1 : 8436 b == document ? 1 : 8437 /* eslint-enable eqeqeq */ 8438 aup ? -1 : 8439 bup ? 1 : 8440 sortInput ? 8441 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 8442 0; 8443 8444 // If the nodes are siblings, we can do a quick check 8445 } else if ( aup === bup ) { 8446 return siblingCheck( a, b ); 8447 } 8448 8449 // Otherwise we need full lists of their ancestors for comparison 8450 cur = a; 8451 while ( ( cur = cur.parentNode ) ) { 8452 ap.unshift( cur ); 8453 } 8454 cur = b; 8455 while ( ( cur = cur.parentNode ) ) { 8456 bp.unshift( cur ); 8457 } 8458 8459 // Walk down the tree looking for a discrepancy 8460 while ( ap[ i ] === bp[ i ] ) { 8461 i++; 8462 } 8463 8464 return i ? 8465 8466 // Do a sibling check if the nodes have a common ancestor 8467 siblingCheck( ap[ i ], bp[ i ] ) : 8468 8469 // Otherwise nodes in our document sort first 8470 // Support: IE 11+, Edge 17 - 18+ 8471 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8472 // two documents; shallow comparisons work. 8473 /* eslint-disable eqeqeq */ 8474 ap[ i ] == preferredDoc ? -1 : 8475 bp[ i ] == preferredDoc ? 1 : 8476 /* eslint-enable eqeqeq */ 8477 0; 8478 }; 8479 8480 return document; 8481}; 8482 8483Sizzle.matches = function( expr, elements ) { 8484 return Sizzle( expr, null, null, elements ); 8485}; 8486 8487Sizzle.matchesSelector = function( elem, expr ) { 8488 setDocument( elem ); 8489 8490 if ( support.matchesSelector && documentIsHTML && 8491 !nonnativeSelectorCache[ expr + " " ] && 8492 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 8493 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 8494 8495 try { 8496 var ret = matches.call( elem, expr ); 8497 8498 // IE 9's matchesSelector returns false on disconnected nodes 8499 if ( ret || support.disconnectedMatch || 8500 8501 // As well, disconnected nodes are said to be in a document 8502 // fragment in IE 9 8503 elem.document && elem.document.nodeType !== 11 ) { 8504 return ret; 8505 } 8506 } catch ( e ) { 8507 nonnativeSelectorCache( expr, true ); 8508 } 8509 } 8510 8511 return Sizzle( expr, document, null, [ elem ] ).length > 0; 8512}; 8513 8514Sizzle.contains = function( context, elem ) { 8515 8516 // Set document vars if needed 8517 // Support: IE 11+, Edge 17 - 18+ 8518 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8519 // two documents; shallow comparisons work. 8520 // eslint-disable-next-line eqeqeq 8521 if ( ( context.ownerDocument || context ) != document ) { 8522 setDocument( context ); 8523 } 8524 return contains( context, elem ); 8525}; 8526 8527Sizzle.attr = function( elem, name ) { 8528 8529 // Set document vars if needed 8530 // Support: IE 11+, Edge 17 - 18+ 8531 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 8532 // two documents; shallow comparisons work. 8533 // eslint-disable-next-line eqeqeq 8534 if ( ( elem.ownerDocument || elem ) != document ) { 8535 setDocument( elem ); 8536 } 8537 8538 var fn = Expr.attrHandle[ name.toLowerCase() ], 8539 8540 // Don't get fooled by Object.prototype properties (jQuery #13807) 8541 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 8542 fn( elem, name, !documentIsHTML ) : 8543 undefined; 8544 8545 return val !== undefined ? 8546 val : 8547 support.attributes || !documentIsHTML ? 8548 elem.getAttribute( name ) : 8549 ( val = elem.getAttributeNode( name ) ) && val.specified ? 8550 val.value : 8551 null; 8552}; 8553 8554Sizzle.escape = function( sel ) { 8555 return ( sel + "" ).replace( rcssescape, fcssescape ); 8556}; 8557 8558Sizzle.error = function( msg ) { 8559 throw new Error( "Syntax error, unrecognized expression: " + msg ); 8560}; 8561 8562/** 8563 * Document sorting and removing duplicates 8564 * @param {ArrayLike} results 8565 */ 8566Sizzle.uniqueSort = function( results ) { 8567 var elem, 8568 duplicates = [], 8569 j = 0, 8570 i = 0; 8571 8572 // Unless we *know* we can detect duplicates, assume their presence 8573 hasDuplicate = !support.detectDuplicates; 8574 sortInput = !support.sortStable && results.slice( 0 ); 8575 results.sort( sortOrder ); 8576 8577 if ( hasDuplicate ) { 8578 while ( ( elem = results[ i++ ] ) ) { 8579 if ( elem === results[ i ] ) { 8580 j = duplicates.push( i ); 8581 } 8582 } 8583 while ( j-- ) { 8584 results.splice( duplicates[ j ], 1 ); 8585 } 8586 } 8587 8588 // Clear input after sorting to release objects 8589 // See https://github.com/jquery/sizzle/pull/225 8590 sortInput = null; 8591 8592 return results; 8593}; 8594 8595/** 8596 * Utility function for retrieving the text value of an array of DOM nodes 8597 * @param {Array|Element} elem 8598 */ 8599getText = Sizzle.getText = function( elem ) { 8600 var node, 8601 ret = "", 8602 i = 0, 8603 nodeType = elem.nodeType; 8604 8605 if ( !nodeType ) { 8606 8607 // If no nodeType, this is expected to be an array 8608 while ( ( node = elem[ i++ ] ) ) { 8609 8610 // Do not traverse comment nodes 8611 ret += getText( node ); 8612 } 8613 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 8614 8615 // Use textContent for elements 8616 // innerText usage removed for consistency of new lines (jQuery #11153) 8617 if ( typeof elem.textContent === "string" ) { 8618 return elem.textContent; 8619 } else { 8620 8621 // Traverse its children 8622 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 8623 ret += getText( elem ); 8624 } 8625 } 8626 } else if ( nodeType === 3 || nodeType === 4 ) { 8627 return elem.nodeValue; 8628 } 8629 8630 // Do not include comment or processing instruction nodes 8631 8632 return ret; 8633}; 8634 8635Expr = Sizzle.selectors = { 8636 8637 // Can be adjusted by the user 8638 cacheLength: 50, 8639 8640 createPseudo: markFunction, 8641 8642 match: matchExpr, 8643 8644 attrHandle: {}, 8645 8646 find: {}, 8647 8648 relative: { 8649 ">": { dir: "parentNode", first: true }, 8650 " ": { dir: "parentNode" }, 8651 "+": { dir: "previousSibling", first: true }, 8652 "~": { dir: "previousSibling" } 8653 }, 8654 8655 preFilter: { 8656 "ATTR": function( match ) { 8657 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 8658 8659 // Move the given value to match[3] whether quoted or unquoted 8660 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || 8661 match[ 5 ] || "" ).replace( runescape, funescape ); 8662 8663 if ( match[ 2 ] === "~=" ) { 8664 match[ 3 ] = " " + match[ 3 ] + " "; 8665 } 8666 8667 return match.slice( 0, 4 ); 8668 }, 8669 8670 "CHILD": function( match ) { 8671 8672 /* matches from matchExpr["CHILD"] 8673 1 type (only|nth|...) 8674 2 what (child|of-type) 8675 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 8676 4 xn-component of xn+y argument ([+-]?\d*n|) 8677 5 sign of xn-component 8678 6 x of xn-component 8679 7 sign of y-component 8680 8 y of y-component 8681 */ 8682 match[ 1 ] = match[ 1 ].toLowerCase(); 8683 8684 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 8685 8686 // nth-* requires argument 8687 if ( !match[ 3 ] ) { 8688 Sizzle.error( match[ 0 ] ); 8689 } 8690 8691 // numeric x and y parameters for Expr.filter.CHILD 8692 // remember that false/true cast respectively to 0/1 8693 match[ 4 ] = +( match[ 4 ] ? 8694 match[ 5 ] + ( match[ 6 ] || 1 ) : 8695 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); 8696 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 8697 8698 // other types prohibit arguments 8699 } else if ( match[ 3 ] ) { 8700 Sizzle.error( match[ 0 ] ); 8701 } 8702 8703 return match; 8704 }, 8705 8706 "PSEUDO": function( match ) { 8707 var excess, 8708 unquoted = !match[ 6 ] && match[ 2 ]; 8709 8710 if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { 8711 return null; 8712 } 8713 8714 // Accept quoted arguments as-is 8715 if ( match[ 3 ] ) { 8716 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 8717 8718 // Strip excess characters from unquoted arguments 8719 } else if ( unquoted && rpseudo.test( unquoted ) && 8720 8721 // Get excess from tokenize (recursively) 8722 ( excess = tokenize( unquoted, true ) ) && 8723 8724 // advance to the next closing parenthesis 8725 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 8726 8727 // excess is a negative index 8728 match[ 0 ] = match[ 0 ].slice( 0, excess ); 8729 match[ 2 ] = unquoted.slice( 0, excess ); 8730 } 8731 8732 // Return only captures needed by the pseudo filter method (type and argument) 8733 return match.slice( 0, 3 ); 8734 } 8735 }, 8736 8737 filter: { 8738 8739 "TAG": function( nodeNameSelector ) { 8740 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 8741 return nodeNameSelector === "*" ? 8742 function() { 8743 return true; 8744 } : 8745 function( elem ) { 8746 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 8747 }; 8748 }, 8749 8750 "CLASS": function( className ) { 8751 var pattern = classCache[ className + " " ]; 8752 8753 return pattern || 8754 ( pattern = new RegExp( "(^|" + whitespace + 8755 ")" + className + "(" + whitespace + "|$)" ) ) && classCache( 8756 className, function( elem ) { 8757 return pattern.test( 8758 typeof elem.className === "string" && elem.className || 8759 typeof elem.getAttribute !== "undefined" && 8760 elem.getAttribute( "class" ) || 8761 "" 8762 ); 8763 } ); 8764 }, 8765 8766 "ATTR": function( name, operator, check ) { 8767 return function( elem ) { 8768 var result = Sizzle.attr( elem, name ); 8769 8770 if ( result == null ) { 8771 return operator === "!="; 8772 } 8773 if ( !operator ) { 8774 return true; 8775 } 8776 8777 result += ""; 8778 8779 /* eslint-disable max-len */ 8780 8781 return operator === "=" ? result === check : 8782 operator === "!=" ? result !== check : 8783 operator === "^=" ? check && result.indexOf( check ) === 0 : 8784 operator === "*=" ? check && result.indexOf( check ) > -1 : 8785 operator === "$=" ? check && result.slice( -check.length ) === check : 8786 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 8787 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 8788 false; 8789 /* eslint-enable max-len */ 8790 8791 }; 8792 }, 8793 8794 "CHILD": function( type, what, _argument, first, last ) { 8795 var simple = type.slice( 0, 3 ) !== "nth", 8796 forward = type.slice( -4 ) !== "last", 8797 ofType = what === "of-type"; 8798 8799 return first === 1 && last === 0 ? 8800 8801 // Shortcut for :nth-*(n) 8802 function( elem ) { 8803 return !!elem.parentNode; 8804 } : 8805 8806 function( elem, _context, xml ) { 8807 var cache, uniqueCache, outerCache, node, nodeIndex, start, 8808 dir = simple !== forward ? "nextSibling" : "previousSibling", 8809 parent = elem.parentNode, 8810 name = ofType && elem.nodeName.toLowerCase(), 8811 useCache = !xml && !ofType, 8812 diff = false; 8813 8814 if ( parent ) { 8815 8816 // :(first|last|only)-(child|of-type) 8817 if ( simple ) { 8818 while ( dir ) { 8819 node = elem; 8820 while ( ( node = node[ dir ] ) ) { 8821 if ( ofType ? 8822 node.nodeName.toLowerCase() === name : 8823 node.nodeType === 1 ) { 8824 8825 return false; 8826 } 8827 } 8828 8829 // Reverse direction for :only-* (if we haven't yet done so) 8830 start = dir = type === "only" && !start && "nextSibling"; 8831 } 8832 return true; 8833 } 8834 8835 start = [ forward ? parent.firstChild : parent.lastChild ]; 8836 8837 // non-xml :nth-child(...) stores cache data on `parent` 8838 if ( forward && useCache ) { 8839 8840 // Seek `elem` from a previously-cached index 8841 8842 // ...in a gzip-friendly way 8843 node = parent; 8844 outerCache = node[ expando ] || ( node[ expando ] = {} ); 8845 8846 // Support: IE <9 only 8847 // Defend against cloned attroperties (jQuery gh-1709) 8848 uniqueCache = outerCache[ node.uniqueID ] || 8849 ( outerCache[ node.uniqueID ] = {} ); 8850 8851 cache = uniqueCache[ type ] || []; 8852 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 8853 diff = nodeIndex && cache[ 2 ]; 8854 node = nodeIndex && parent.childNodes[ nodeIndex ]; 8855 8856 while ( ( node = ++nodeIndex && node && node[ dir ] || 8857 8858 // Fallback to seeking `elem` from the start 8859 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 8860 8861 // When found, cache indexes on `parent` and break 8862 if ( node.nodeType === 1 && ++diff && node === elem ) { 8863 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 8864 break; 8865 } 8866 } 8867 8868 } else { 8869 8870 // Use previously-cached element index if available 8871 if ( useCache ) { 8872 8873 // ...in a gzip-friendly way 8874 node = elem; 8875 outerCache = node[ expando ] || ( node[ expando ] = {} ); 8876 8877 // Support: IE <9 only 8878 // Defend against cloned attroperties (jQuery gh-1709) 8879 uniqueCache = outerCache[ node.uniqueID ] || 8880 ( outerCache[ node.uniqueID ] = {} ); 8881 8882 cache = uniqueCache[ type ] || []; 8883 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 8884 diff = nodeIndex; 8885 } 8886 8887 // xml :nth-child(...) 8888 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 8889 if ( diff === false ) { 8890 8891 // Use the same loop as above to seek `elem` from the start 8892 while ( ( node = ++nodeIndex && node && node[ dir ] || 8893 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 8894 8895 if ( ( ofType ? 8896 node.nodeName.toLowerCase() === name : 8897 node.nodeType === 1 ) && 8898 ++diff ) { 8899 8900 // Cache the index of each encountered element 8901 if ( useCache ) { 8902 outerCache = node[ expando ] || 8903 ( node[ expando ] = {} ); 8904 8905 // Support: IE <9 only 8906 // Defend against cloned attroperties (jQuery gh-1709) 8907 uniqueCache = outerCache[ node.uniqueID ] || 8908 ( outerCache[ node.uniqueID ] = {} ); 8909 8910 uniqueCache[ type ] = [ dirruns, diff ]; 8911 } 8912 8913 if ( node === elem ) { 8914 break; 8915 } 8916 } 8917 } 8918 } 8919 } 8920 8921 // Incorporate the offset, then check against cycle size 8922 diff -= last; 8923 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 8924 } 8925 }; 8926 }, 8927 8928 "PSEUDO": function( pseudo, argument ) { 8929 8930 // pseudo-class names are case-insensitive 8931 // http://www.w3.org/TR/selectors/#pseudo-classes 8932 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 8933 // Remember that setFilters inherits from pseudos 8934 var args, 8935 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 8936 Sizzle.error( "unsupported pseudo: " + pseudo ); 8937 8938 // The user may use createPseudo to indicate that 8939 // arguments are needed to create the filter function 8940 // just as Sizzle does 8941 if ( fn[ expando ] ) { 8942 return fn( argument ); 8943 } 8944 8945 // But maintain support for old signatures 8946 if ( fn.length > 1 ) { 8947 args = [ pseudo, pseudo, "", argument ]; 8948 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 8949 markFunction( function( seed, matches ) { 8950 var idx, 8951 matched = fn( seed, argument ), 8952 i = matched.length; 8953 while ( i-- ) { 8954 idx = indexOf( seed, matched[ i ] ); 8955 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 8956 } 8957 } ) : 8958 function( elem ) { 8959 return fn( elem, 0, args ); 8960 }; 8961 } 8962 8963 return fn; 8964 } 8965 }, 8966 8967 pseudos: { 8968 8969 // Potentially complex pseudos 8970 "not": markFunction( function( selector ) { 8971 8972 // Trim the selector passed to compile 8973 // to avoid treating leading and trailing 8974 // spaces as combinators 8975 var input = [], 8976 results = [], 8977 matcher = compile( selector.replace( rtrim, "$1" ) ); 8978 8979 return matcher[ expando ] ? 8980 markFunction( function( seed, matches, _context, xml ) { 8981 var elem, 8982 unmatched = matcher( seed, null, xml, [] ), 8983 i = seed.length; 8984 8985 // Match elements unmatched by `matcher` 8986 while ( i-- ) { 8987 if ( ( elem = unmatched[ i ] ) ) { 8988 seed[ i ] = !( matches[ i ] = elem ); 8989 } 8990 } 8991 } ) : 8992 function( elem, _context, xml ) { 8993 input[ 0 ] = elem; 8994 matcher( input, null, xml, results ); 8995 8996 // Don't keep the element (issue #299) 8997 input[ 0 ] = null; 8998 return !results.pop(); 8999 }; 9000 } ), 9001 9002 "has": markFunction( function( selector ) { 9003 return function( elem ) { 9004 return Sizzle( selector, elem ).length > 0; 9005 }; 9006 } ), 9007 9008 "contains": markFunction( function( text ) { 9009 text = text.replace( runescape, funescape ); 9010 return function( elem ) { 9011 return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; 9012 }; 9013 } ), 9014 9015 // "Whether an element is represented by a :lang() selector 9016 // is based solely on the element's language value 9017 // being equal to the identifier C, 9018 // or beginning with the identifier C immediately followed by "-". 9019 // The matching of C against the element's language value is performed case-insensitively. 9020 // The identifier C does not have to be a valid language name." 9021 // http://www.w3.org/TR/selectors/#lang-pseudo 9022 "lang": markFunction( function( lang ) { 9023 9024 // lang value must be a valid identifier 9025 if ( !ridentifier.test( lang || "" ) ) { 9026 Sizzle.error( "unsupported lang: " + lang ); 9027 } 9028 lang = lang.replace( runescape, funescape ).toLowerCase(); 9029 return function( elem ) { 9030 var elemLang; 9031 do { 9032 if ( ( elemLang = documentIsHTML ? 9033 elem.lang : 9034 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 9035 9036 elemLang = elemLang.toLowerCase(); 9037 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 9038 } 9039 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 9040 return false; 9041 }; 9042 } ), 9043 9044 // Miscellaneous 9045 "target": function( elem ) { 9046 var hash = window.location && window.location.hash; 9047 return hash && hash.slice( 1 ) === elem.id; 9048 }, 9049 9050 "root": function( elem ) { 9051 return elem === docElem; 9052 }, 9053 9054 "focus": function( elem ) { 9055 return elem === document.activeElement && 9056 ( !document.hasFocus || document.hasFocus() ) && 9057 !!( elem.type || elem.href || ~elem.tabIndex ); 9058 }, 9059 9060 // Boolean properties 9061 "enabled": createDisabledPseudo( false ), 9062 "disabled": createDisabledPseudo( true ), 9063 9064 "checked": function( elem ) { 9065 9066 // In CSS3, :checked should return both checked and selected elements 9067 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 9068 var nodeName = elem.nodeName.toLowerCase(); 9069 return ( nodeName === "input" && !!elem.checked ) || 9070 ( nodeName === "option" && !!elem.selected ); 9071 }, 9072 9073 "selected": function( elem ) { 9074 9075 // Accessing this property makes selected-by-default 9076 // options in Safari work properly 9077 if ( elem.parentNode ) { 9078 // eslint-disable-next-line no-unused-expressions 9079 elem.parentNode.selectedIndex; 9080 } 9081 9082 return elem.selected === true; 9083 }, 9084 9085 // Contents 9086 "empty": function( elem ) { 9087 9088 // http://www.w3.org/TR/selectors/#empty-pseudo 9089 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 9090 // but not by others (comment: 8; processing instruction: 7; etc.) 9091 // nodeType < 6 works because attributes (2) do not appear as children 9092 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 9093 if ( elem.nodeType < 6 ) { 9094 return false; 9095 } 9096 } 9097 return true; 9098 }, 9099 9100 "parent": function( elem ) { 9101 return !Expr.pseudos[ "empty" ]( elem ); 9102 }, 9103 9104 // Element/input types 9105 "header": function( elem ) { 9106 return rheader.test( elem.nodeName ); 9107 }, 9108 9109 "input": function( elem ) { 9110 return rinputs.test( elem.nodeName ); 9111 }, 9112 9113 "button": function( elem ) { 9114 var name = elem.nodeName.toLowerCase(); 9115 return name === "input" && elem.type === "button" || name === "button"; 9116 }, 9117 9118 "text": function( elem ) { 9119 var attr; 9120 return elem.nodeName.toLowerCase() === "input" && 9121 elem.type === "text" && 9122 9123 // Support: IE<8 9124 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 9125 ( ( attr = elem.getAttribute( "type" ) ) == null || 9126 attr.toLowerCase() === "text" ); 9127 }, 9128 9129 // Position-in-collection 9130 "first": createPositionalPseudo( function() { 9131 return [ 0 ]; 9132 } ), 9133 9134 "last": createPositionalPseudo( function( _matchIndexes, length ) { 9135 return [ length - 1 ]; 9136 } ), 9137 9138 "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { 9139 return [ argument < 0 ? argument + length : argument ]; 9140 } ), 9141 9142 "even": createPositionalPseudo( function( matchIndexes, length ) { 9143 var i = 0; 9144 for ( ; i < length; i += 2 ) { 9145 matchIndexes.push( i ); 9146 } 9147 return matchIndexes; 9148 } ), 9149 9150 "odd": createPositionalPseudo( function( matchIndexes, length ) { 9151 var i = 1; 9152 for ( ; i < length; i += 2 ) { 9153 matchIndexes.push( i ); 9154 } 9155 return matchIndexes; 9156 } ), 9157 9158 "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { 9159 var i = argument < 0 ? 9160 argument + length : 9161 argument > length ? 9162 length : 9163 argument; 9164 for ( ; --i >= 0; ) { 9165 matchIndexes.push( i ); 9166 } 9167 return matchIndexes; 9168 } ), 9169 9170 "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { 9171 var i = argument < 0 ? argument + length : argument; 9172 for ( ; ++i < length; ) { 9173 matchIndexes.push( i ); 9174 } 9175 return matchIndexes; 9176 } ) 9177 } 9178}; 9179 9180Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; 9181 9182// Add button/input type pseudos 9183for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 9184 Expr.pseudos[ i ] = createInputPseudo( i ); 9185} 9186for ( i in { submit: true, reset: true } ) { 9187 Expr.pseudos[ i ] = createButtonPseudo( i ); 9188} 9189 9190// Easy API for creating new setFilters 9191function setFilters() {} 9192setFilters.prototype = Expr.filters = Expr.pseudos; 9193Expr.setFilters = new setFilters(); 9194 9195tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 9196 var matched, match, tokens, type, 9197 soFar, groups, preFilters, 9198 cached = tokenCache[ selector + " " ]; 9199 9200 if ( cached ) { 9201 return parseOnly ? 0 : cached.slice( 0 ); 9202 } 9203 9204 soFar = selector; 9205 groups = []; 9206 preFilters = Expr.preFilter; 9207 9208 while ( soFar ) { 9209 9210 // Comma and first run 9211 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 9212 if ( match ) { 9213 9214 // Don't consume trailing commas as valid 9215 soFar = soFar.slice( match[ 0 ].length ) || soFar; 9216 } 9217 groups.push( ( tokens = [] ) ); 9218 } 9219 9220 matched = false; 9221 9222 // Combinators 9223 if ( ( match = rcombinators.exec( soFar ) ) ) { 9224 matched = match.shift(); 9225 tokens.push( { 9226 value: matched, 9227 9228 // Cast descendant combinators to space 9229 type: match[ 0 ].replace( rtrim, " " ) 9230 } ); 9231 soFar = soFar.slice( matched.length ); 9232 } 9233 9234 // Filters 9235 for ( type in Expr.filter ) { 9236 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 9237 ( match = preFilters[ type ]( match ) ) ) ) { 9238 matched = match.shift(); 9239 tokens.push( { 9240 value: matched, 9241 type: type, 9242 matches: match 9243 } ); 9244 soFar = soFar.slice( matched.length ); 9245 } 9246 } 9247 9248 if ( !matched ) { 9249 break; 9250 } 9251 } 9252 9253 // Return the length of the invalid excess 9254 // if we're just parsing 9255 // Otherwise, throw an error or return tokens 9256 return parseOnly ? 9257 soFar.length : 9258 soFar ? 9259 Sizzle.error( selector ) : 9260 9261 // Cache the tokens 9262 tokenCache( selector, groups ).slice( 0 ); 9263}; 9264 9265function toSelector( tokens ) { 9266 var i = 0, 9267 len = tokens.length, 9268 selector = ""; 9269 for ( ; i < len; i++ ) { 9270 selector += tokens[ i ].value; 9271 } 9272 return selector; 9273} 9274 9275function addCombinator( matcher, combinator, base ) { 9276 var dir = combinator.dir, 9277 skip = combinator.next, 9278 key = skip || dir, 9279 checkNonElements = base && key === "parentNode", 9280 doneName = done++; 9281 9282 return combinator.first ? 9283 9284 // Check against closest ancestor/preceding element 9285 function( elem, context, xml ) { 9286 while ( ( elem = elem[ dir ] ) ) { 9287 if ( elem.nodeType === 1 || checkNonElements ) { 9288 return matcher( elem, context, xml ); 9289 } 9290 } 9291 return false; 9292 } : 9293 9294 // Check against all ancestor/preceding elements 9295 function( elem, context, xml ) { 9296 var oldCache, uniqueCache, outerCache, 9297 newCache = [ dirruns, doneName ]; 9298 9299 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 9300 if ( xml ) { 9301 while ( ( elem = elem[ dir ] ) ) { 9302 if ( elem.nodeType === 1 || checkNonElements ) { 9303 if ( matcher( elem, context, xml ) ) { 9304 return true; 9305 } 9306 } 9307 } 9308 } else { 9309 while ( ( elem = elem[ dir ] ) ) { 9310 if ( elem.nodeType === 1 || checkNonElements ) { 9311 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 9312 9313 // Support: IE <9 only 9314 // Defend against cloned attroperties (jQuery gh-1709) 9315 uniqueCache = outerCache[ elem.uniqueID ] || 9316 ( outerCache[ elem.uniqueID ] = {} ); 9317 9318 if ( skip && skip === elem.nodeName.toLowerCase() ) { 9319 elem = elem[ dir ] || elem; 9320 } else if ( ( oldCache = uniqueCache[ key ] ) && 9321 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 9322 9323 // Assign to newCache so results back-propagate to previous elements 9324 return ( newCache[ 2 ] = oldCache[ 2 ] ); 9325 } else { 9326 9327 // Reuse newcache so results back-propagate to previous elements 9328 uniqueCache[ key ] = newCache; 9329 9330 // A match means we're done; a fail means we have to keep checking 9331 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 9332 return true; 9333 } 9334 } 9335 } 9336 } 9337 } 9338 return false; 9339 }; 9340} 9341 9342function elementMatcher( matchers ) { 9343 return matchers.length > 1 ? 9344 function( elem, context, xml ) { 9345 var i = matchers.length; 9346 while ( i-- ) { 9347 if ( !matchers[ i ]( elem, context, xml ) ) { 9348 return false; 9349 } 9350 } 9351 return true; 9352 } : 9353 matchers[ 0 ]; 9354} 9355 9356function multipleContexts( selector, contexts, results ) { 9357 var i = 0, 9358 len = contexts.length; 9359 for ( ; i < len; i++ ) { 9360 Sizzle( selector, contexts[ i ], results ); 9361 } 9362 return results; 9363} 9364 9365function condense( unmatched, map, filter, context, xml ) { 9366 var elem, 9367 newUnmatched = [], 9368 i = 0, 9369 len = unmatched.length, 9370 mapped = map != null; 9371 9372 for ( ; i < len; i++ ) { 9373 if ( ( elem = unmatched[ i ] ) ) { 9374 if ( !filter || filter( elem, context, xml ) ) { 9375 newUnmatched.push( elem ); 9376 if ( mapped ) { 9377 map.push( i ); 9378 } 9379 } 9380 } 9381 } 9382 9383 return newUnmatched; 9384} 9385 9386function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 9387 if ( postFilter && !postFilter[ expando ] ) { 9388 postFilter = setMatcher( postFilter ); 9389 } 9390 if ( postFinder && !postFinder[ expando ] ) { 9391 postFinder = setMatcher( postFinder, postSelector ); 9392 } 9393 return markFunction( function( seed, results, context, xml ) { 9394 var temp, i, elem, 9395 preMap = [], 9396 postMap = [], 9397 preexisting = results.length, 9398 9399 // Get initial elements from seed or context 9400 elems = seed || multipleContexts( 9401 selector || "*", 9402 context.nodeType ? [ context ] : context, 9403 [] 9404 ), 9405 9406 // Prefilter to get matcher input, preserving a map for seed-results synchronization 9407 matcherIn = preFilter && ( seed || !selector ) ? 9408 condense( elems, preMap, preFilter, context, xml ) : 9409 elems, 9410 9411 matcherOut = matcher ? 9412 9413 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 9414 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 9415 9416 // ...intermediate processing is necessary 9417 [] : 9418 9419 // ...otherwise use results directly 9420 results : 9421 matcherIn; 9422 9423 // Find primary matches 9424 if ( matcher ) { 9425 matcher( matcherIn, matcherOut, context, xml ); 9426 } 9427 9428 // Apply postFilter 9429 if ( postFilter ) { 9430 temp = condense( matcherOut, postMap ); 9431 postFilter( temp, [], context, xml ); 9432 9433 // Un-match failing elements by moving them back to matcherIn 9434 i = temp.length; 9435 while ( i-- ) { 9436 if ( ( elem = temp[ i ] ) ) { 9437 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 9438 } 9439 } 9440 } 9441 9442 if ( seed ) { 9443 if ( postFinder || preFilter ) { 9444 if ( postFinder ) { 9445 9446 // Get the final matcherOut by condensing this intermediate into postFinder contexts 9447 temp = []; 9448 i = matcherOut.length; 9449 while ( i-- ) { 9450 if ( ( elem = matcherOut[ i ] ) ) { 9451 9452 // Restore matcherIn since elem is not yet a final match 9453 temp.push( ( matcherIn[ i ] = elem ) ); 9454 } 9455 } 9456 postFinder( null, ( matcherOut = [] ), temp, xml ); 9457 } 9458 9459 // Move matched elements from seed to results to keep them synchronized 9460 i = matcherOut.length; 9461 while ( i-- ) { 9462 if ( ( elem = matcherOut[ i ] ) && 9463 ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { 9464 9465 seed[ temp ] = !( results[ temp ] = elem ); 9466 } 9467 } 9468 } 9469 9470 // Add elements to results, through postFinder if defined 9471 } else { 9472 matcherOut = condense( 9473 matcherOut === results ? 9474 matcherOut.splice( preexisting, matcherOut.length ) : 9475 matcherOut 9476 ); 9477 if ( postFinder ) { 9478 postFinder( null, results, matcherOut, xml ); 9479 } else { 9480 push.apply( results, matcherOut ); 9481 } 9482 } 9483 } ); 9484} 9485 9486function matcherFromTokens( tokens ) { 9487 var checkContext, matcher, j, 9488 len = tokens.length, 9489 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 9490 implicitRelative = leadingRelative || Expr.relative[ " " ], 9491 i = leadingRelative ? 1 : 0, 9492 9493 // The foundational matcher ensures that elements are reachable from top-level context(s) 9494 matchContext = addCombinator( function( elem ) { 9495 return elem === checkContext; 9496 }, implicitRelative, true ), 9497 matchAnyContext = addCombinator( function( elem ) { 9498 return indexOf( checkContext, elem ) > -1; 9499 }, implicitRelative, true ), 9500 matchers = [ function( elem, context, xml ) { 9501 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 9502 ( checkContext = context ).nodeType ? 9503 matchContext( elem, context, xml ) : 9504 matchAnyContext( elem, context, xml ) ); 9505 9506 // Avoid hanging onto element (issue #299) 9507 checkContext = null; 9508 return ret; 9509 } ]; 9510 9511 for ( ; i < len; i++ ) { 9512 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 9513 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 9514 } else { 9515 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 9516 9517 // Return special upon seeing a positional matcher 9518 if ( matcher[ expando ] ) { 9519 9520 // Find the next relative operator (if any) for proper handling 9521 j = ++i; 9522 for ( ; j < len; j++ ) { 9523 if ( Expr.relative[ tokens[ j ].type ] ) { 9524 break; 9525 } 9526 } 9527 return setMatcher( 9528 i > 1 && elementMatcher( matchers ), 9529 i > 1 && toSelector( 9530 9531 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 9532 tokens 9533 .slice( 0, i - 1 ) 9534 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 9535 ).replace( rtrim, "$1" ), 9536 matcher, 9537 i < j && matcherFromTokens( tokens.slice( i, j ) ), 9538 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 9539 j < len && toSelector( tokens ) 9540 ); 9541 } 9542 matchers.push( matcher ); 9543 } 9544 } 9545 9546 return elementMatcher( matchers ); 9547} 9548 9549function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 9550 var bySet = setMatchers.length > 0, 9551 byElement = elementMatchers.length > 0, 9552 superMatcher = function( seed, context, xml, results, outermost ) { 9553 var elem, j, matcher, 9554 matchedCount = 0, 9555 i = "0", 9556 unmatched = seed && [], 9557 setMatched = [], 9558 contextBackup = outermostContext, 9559 9560 // We must always have either seed elements or outermost context 9561 elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), 9562 9563 // Use integer dirruns iff this is the outermost matcher 9564 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 9565 len = elems.length; 9566 9567 if ( outermost ) { 9568 9569 // Support: IE 11+, Edge 17 - 18+ 9570 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9571 // two documents; shallow comparisons work. 9572 // eslint-disable-next-line eqeqeq 9573 outermostContext = context == document || context || outermost; 9574 } 9575 9576 // Add elements passing elementMatchers directly to results 9577 // Support: IE<9, Safari 9578 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 9579 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 9580 if ( byElement && elem ) { 9581 j = 0; 9582 9583 // Support: IE 11+, Edge 17 - 18+ 9584 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 9585 // two documents; shallow comparisons work. 9586 // eslint-disable-next-line eqeqeq 9587 if ( !context && elem.ownerDocument != document ) { 9588 setDocument( elem ); 9589 xml = !documentIsHTML; 9590 } 9591 while ( ( matcher = elementMatchers[ j++ ] ) ) { 9592 if ( matcher( elem, context || document, xml ) ) { 9593 results.push( elem ); 9594 break; 9595 } 9596 } 9597 if ( outermost ) { 9598 dirruns = dirrunsUnique; 9599 } 9600 } 9601 9602 // Track unmatched elements for set filters 9603 if ( bySet ) { 9604 9605 // They will have gone through all possible matchers 9606 if ( ( elem = !matcher && elem ) ) { 9607 matchedCount--; 9608 } 9609 9610 // Lengthen the array for every element, matched or not 9611 if ( seed ) { 9612 unmatched.push( elem ); 9613 } 9614 } 9615 } 9616 9617 // `i` is now the count of elements visited above, and adding it to `matchedCount` 9618 // makes the latter nonnegative. 9619 matchedCount += i; 9620 9621 // Apply set filters to unmatched elements 9622 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 9623 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 9624 // no element matchers and no seed. 9625 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 9626 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 9627 // numerically zero. 9628 if ( bySet && i !== matchedCount ) { 9629 j = 0; 9630 while ( ( matcher = setMatchers[ j++ ] ) ) { 9631 matcher( unmatched, setMatched, context, xml ); 9632 } 9633 9634 if ( seed ) { 9635 9636 // Reintegrate element matches to eliminate the need for sorting 9637 if ( matchedCount > 0 ) { 9638 while ( i-- ) { 9639 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 9640 setMatched[ i ] = pop.call( results ); 9641 } 9642 } 9643 } 9644 9645 // Discard index placeholder values to get only actual matches 9646 setMatched = condense( setMatched ); 9647 } 9648 9649 // Add matches to results 9650 push.apply( results, setMatched ); 9651 9652 // Seedless set matches succeeding multiple successful matchers stipulate sorting 9653 if ( outermost && !seed && setMatched.length > 0 && 9654 ( matchedCount + setMatchers.length ) > 1 ) { 9655 9656 Sizzle.uniqueSort( results ); 9657 } 9658 } 9659 9660 // Override manipulation of globals by nested matchers 9661 if ( outermost ) { 9662 dirruns = dirrunsUnique; 9663 outermostContext = contextBackup; 9664 } 9665 9666 return unmatched; 9667 }; 9668 9669 return bySet ? 9670 markFunction( superMatcher ) : 9671 superMatcher; 9672} 9673 9674compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 9675 var i, 9676 setMatchers = [], 9677 elementMatchers = [], 9678 cached = compilerCache[ selector + " " ]; 9679 9680 if ( !cached ) { 9681 9682 // Generate a function of recursive functions that can be used to check each element 9683 if ( !match ) { 9684 match = tokenize( selector ); 9685 } 9686 i = match.length; 9687 while ( i-- ) { 9688 cached = matcherFromTokens( match[ i ] ); 9689 if ( cached[ expando ] ) { 9690 setMatchers.push( cached ); 9691 } else { 9692 elementMatchers.push( cached ); 9693 } 9694 } 9695 9696 // Cache the compiled function 9697 cached = compilerCache( 9698 selector, 9699 matcherFromGroupMatchers( elementMatchers, setMatchers ) 9700 ); 9701 9702 // Save selector and tokenization 9703 cached.selector = selector; 9704 } 9705 return cached; 9706}; 9707 9708/** 9709 * A low-level selection function that works with Sizzle's compiled 9710 * selector functions 9711 * @param {String|Function} selector A selector or a pre-compiled 9712 * selector function built with Sizzle.compile 9713 * @param {Element} context 9714 * @param {Array} [results] 9715 * @param {Array} [seed] A set of elements to match against 9716 */ 9717select = Sizzle.select = function( selector, context, results, seed ) { 9718 var i, tokens, token, type, find, 9719 compiled = typeof selector === "function" && selector, 9720 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 9721 9722 results = results || []; 9723 9724 // Try to minimize operations if there is only one selector in the list and no seed 9725 // (the latter of which guarantees us context) 9726 if ( match.length === 1 ) { 9727 9728 // Reduce context if the leading compound selector is an ID 9729 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 9730 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 9731 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 9732 9733 context = ( Expr.find[ "ID" ]( token.matches[ 0 ] 9734 .replace( runescape, funescape ), context ) || [] )[ 0 ]; 9735 if ( !context ) { 9736 return results; 9737 9738 // Precompiled matchers will still verify ancestry, so step up a level 9739 } else if ( compiled ) { 9740 context = context.parentNode; 9741 } 9742 9743 selector = selector.slice( tokens.shift().value.length ); 9744 } 9745 9746 // Fetch a seed set for right-to-left matching 9747 i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; 9748 while ( i-- ) { 9749 token = tokens[ i ]; 9750 9751 // Abort if we hit a combinator 9752 if ( Expr.relative[ ( type = token.type ) ] ) { 9753 break; 9754 } 9755 if ( ( find = Expr.find[ type ] ) ) { 9756 9757 // Search, expanding context for leading sibling combinators 9758 if ( ( seed = find( 9759 token.matches[ 0 ].replace( runescape, funescape ), 9760 rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || 9761 context 9762 ) ) ) { 9763 9764 // If seed is empty or no tokens remain, we can return early 9765 tokens.splice( i, 1 ); 9766 selector = seed.length && toSelector( tokens ); 9767 if ( !selector ) { 9768 push.apply( results, seed ); 9769 return results; 9770 } 9771 9772 break; 9773 } 9774 } 9775 } 9776 } 9777 9778 // Compile and execute a filtering function if one is not provided 9779 // Provide `match` to avoid retokenization if we modified the selector above 9780 ( compiled || compile( selector, match ) )( 9781 seed, 9782 context, 9783 !documentIsHTML, 9784 results, 9785 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 9786 ); 9787 return results; 9788}; 9789 9790// One-time assignments 9791 9792// Sort stability 9793support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 9794 9795// Support: Chrome 14-35+ 9796// Always assume duplicates if they aren't passed to the comparison function 9797support.detectDuplicates = !!hasDuplicate; 9798 9799// Initialize against the default document 9800setDocument(); 9801 9802// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 9803// Detached nodes confoundingly follow *each other* 9804support.sortDetached = assert( function( el ) { 9805 9806 // Should return 1, but returns 4 (following) 9807 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 9808} ); 9809 9810// Support: IE<8 9811// Prevent attribute/property "interpolation" 9812// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 9813if ( !assert( function( el ) { 9814 el.innerHTML = "<a href='#'></a>"; 9815 return el.firstChild.getAttribute( "href" ) === "#"; 9816} ) ) { 9817 addHandle( "type|href|height|width", function( elem, name, isXML ) { 9818 if ( !isXML ) { 9819 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 9820 } 9821 } ); 9822} 9823 9824// Support: IE<9 9825// Use defaultValue in place of getAttribute("value") 9826if ( !support.attributes || !assert( function( el ) { 9827 el.innerHTML = "<input/>"; 9828 el.firstChild.setAttribute( "value", "" ); 9829 return el.firstChild.getAttribute( "value" ) === ""; 9830} ) ) { 9831 addHandle( "value", function( elem, _name, isXML ) { 9832 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 9833 return elem.defaultValue; 9834 } 9835 } ); 9836} 9837 9838// Support: IE<9 9839// Use getAttributeNode to fetch booleans when getAttribute lies 9840if ( !assert( function( el ) { 9841 return el.getAttribute( "disabled" ) == null; 9842} ) ) { 9843 addHandle( booleans, function( elem, name, isXML ) { 9844 var val; 9845 if ( !isXML ) { 9846 return elem[ name ] === true ? name.toLowerCase() : 9847 ( val = elem.getAttributeNode( name ) ) && val.specified ? 9848 val.value : 9849 null; 9850 } 9851 } ); 9852} 9853 9854return Sizzle; 9855 9856} )( window ); 9857 9858 9859 9860jQuery.find = Sizzle; 9861jQuery.expr = Sizzle.selectors; 9862 9863// Deprecated 9864jQuery.expr[ ":" ] = jQuery.expr.pseudos; 9865jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 9866jQuery.text = Sizzle.getText; 9867jQuery.isXMLDoc = Sizzle.isXML; 9868jQuery.contains = Sizzle.contains; 9869jQuery.escapeSelector = Sizzle.escape; 9870 9871 9872 9873 9874var dir = function( elem, dir, until ) { 9875 var matched = [], 9876 truncate = until !== undefined; 9877 9878 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 9879 if ( elem.nodeType === 1 ) { 9880 if ( truncate && jQuery( elem ).is( until ) ) { 9881 break; 9882 } 9883 matched.push( elem ); 9884 } 9885 } 9886 return matched; 9887}; 9888 9889 9890var siblings = function( n, elem ) { 9891 var matched = []; 9892 9893 for ( ; n; n = n.nextSibling ) { 9894 if ( n.nodeType === 1 && n !== elem ) { 9895 matched.push( n ); 9896 } 9897 } 9898 9899 return matched; 9900}; 9901 9902 9903var rneedsContext = jQuery.expr.match.needsContext; 9904 9905 9906 9907function nodeName( elem, name ) { 9908 9909 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 9910 9911} 9912var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 9913 9914 9915 9916// Implement the identical functionality for filter and not 9917function winnow( elements, qualifier, not ) { 9918 if ( isFunction( qualifier ) ) { 9919 return jQuery.grep( elements, function( elem, i ) { 9920 return !!qualifier.call( elem, i, elem ) !== not; 9921 } ); 9922 } 9923 9924 // Single element 9925 if ( qualifier.nodeType ) { 9926 return jQuery.grep( elements, function( elem ) { 9927 return ( elem === qualifier ) !== not; 9928 } ); 9929 } 9930 9931 // Arraylike of elements (jQuery, arguments, Array) 9932 if ( typeof qualifier !== "string" ) { 9933 return jQuery.grep( elements, function( elem ) { 9934 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 9935 } ); 9936 } 9937 9938 // Filtered directly for both simple and complex selectors 9939 return jQuery.filter( qualifier, elements, not ); 9940} 9941 9942jQuery.filter = function( expr, elems, not ) { 9943 var elem = elems[ 0 ]; 9944 9945 if ( not ) { 9946 expr = ":not(" + expr + ")"; 9947 } 9948 9949 if ( elems.length === 1 && elem.nodeType === 1 ) { 9950 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 9951 } 9952 9953 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 9954 return elem.nodeType === 1; 9955 } ) ); 9956}; 9957 9958jQuery.fn.extend( { 9959 find: function( selector ) { 9960 var i, ret, 9961 len = this.length, 9962 self = this; 9963 9964 if ( typeof selector !== "string" ) { 9965 return this.pushStack( jQuery( selector ).filter( function() { 9966 for ( i = 0; i < len; i++ ) { 9967 if ( jQuery.contains( self[ i ], this ) ) { 9968 return true; 9969 } 9970 } 9971 } ) ); 9972 } 9973 9974 ret = this.pushStack( [] ); 9975 9976 for ( i = 0; i < len; i++ ) { 9977 jQuery.find( selector, self[ i ], ret ); 9978 } 9979 9980 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 9981 }, 9982 filter: function( selector ) { 9983 return this.pushStack( winnow( this, selector || [], false ) ); 9984 }, 9985 not: function( selector ) { 9986 return this.pushStack( winnow( this, selector || [], true ) ); 9987 }, 9988 is: function( selector ) { 9989 return !!winnow( 9990 this, 9991 9992 // If this is a positional/relative selector, check membership in the returned set 9993 // so $("p:first").is("p:last") won't return true for a doc with two "p". 9994 typeof selector === "string" && rneedsContext.test( selector ) ? 9995 jQuery( selector ) : 9996 selector || [], 9997 false 9998 ).length; 9999 } 10000} ); 10001 10002 10003// Initialize a jQuery object 10004 10005 10006// A central reference to the root jQuery(document) 10007var rootjQuery, 10008 10009 // A simple way to check for HTML strings 10010 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 10011 // Strict HTML recognition (#11290: must start with <) 10012 // Shortcut simple #id case for speed 10013 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 10014 10015 init = jQuery.fn.init = function( selector, context, root ) { 10016 var match, elem; 10017 10018 // HANDLE: $(""), $(null), $(undefined), $(false) 10019 if ( !selector ) { 10020 return this; 10021 } 10022 10023 // Method init() accepts an alternate rootjQuery 10024 // so migrate can support jQuery.sub (gh-2101) 10025 root = root || rootjQuery; 10026 10027 // Handle HTML strings 10028 if ( typeof selector === "string" ) { 10029 if ( selector[ 0 ] === "<" && 10030 selector[ selector.length - 1 ] === ">" && 10031 selector.length >= 3 ) { 10032 10033 // Assume that strings that start and end with <> are HTML and skip the regex check 10034 match = [ null, selector, null ]; 10035 10036 } else { 10037 match = rquickExpr.exec( selector ); 10038 } 10039 10040 // Match html or make sure no context is specified for #id 10041 if ( match && ( match[ 1 ] || !context ) ) { 10042 10043 // HANDLE: $(html) -> $(array) 10044 if ( match[ 1 ] ) { 10045 context = context instanceof jQuery ? context[ 0 ] : context; 10046 10047 // Option to run scripts is true for back-compat 10048 // Intentionally let the error be thrown if parseHTML is not present 10049 jQuery.merge( this, jQuery.parseHTML( 10050 match[ 1 ], 10051 context && context.nodeType ? context.ownerDocument || context : document, 10052 true 10053 ) ); 10054 10055 // HANDLE: $(html, props) 10056 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 10057 for ( match in context ) { 10058 10059 // Properties of context are called as methods if possible 10060 if ( isFunction( this[ match ] ) ) { 10061 this[ match ]( context[ match ] ); 10062 10063 // ...and otherwise set as attributes 10064 } else { 10065 this.attr( match, context[ match ] ); 10066 } 10067 } 10068 } 10069 10070 return this; 10071 10072 // HANDLE: $(#id) 10073 } else { 10074 elem = document.getElementById( match[ 2 ] ); 10075 10076 if ( elem ) { 10077 10078 // Inject the element directly into the jQuery object 10079 this[ 0 ] = elem; 10080 this.length = 1; 10081 } 10082 return this; 10083 } 10084 10085 // HANDLE: $(expr, $(...)) 10086 } else if ( !context || context.jquery ) { 10087 return ( context || root ).find( selector ); 10088 10089 // HANDLE: $(expr, context) 10090 // (which is just equivalent to: $(context).find(expr) 10091 } else { 10092 return this.constructor( context ).find( selector ); 10093 } 10094 10095 // HANDLE: $(DOMElement) 10096 } else if ( selector.nodeType ) { 10097 this[ 0 ] = selector; 10098 this.length = 1; 10099 return this; 10100 10101 // HANDLE: $(function) 10102 // Shortcut for document ready 10103 } else if ( isFunction( selector ) ) { 10104 return root.ready !== undefined ? 10105 root.ready( selector ) : 10106 10107 // Execute immediately if ready is not present 10108 selector( jQuery ); 10109 } 10110 10111 return jQuery.makeArray( selector, this ); 10112 }; 10113 10114// Give the init function the jQuery prototype for later instantiation 10115init.prototype = jQuery.fn; 10116 10117// Initialize central reference 10118rootjQuery = jQuery( document ); 10119 10120 10121var rparentsprev = /^(?:parents|prev(?:Until|All))/, 10122 10123 // Methods guaranteed to produce a unique set when starting from a unique set 10124 guaranteedUnique = { 10125 children: true, 10126 contents: true, 10127 next: true, 10128 prev: true 10129 }; 10130 10131jQuery.fn.extend( { 10132 has: function( target ) { 10133 var targets = jQuery( target, this ), 10134 l = targets.length; 10135 10136 return this.filter( function() { 10137 var i = 0; 10138 for ( ; i < l; i++ ) { 10139 if ( jQuery.contains( this, targets[ i ] ) ) { 10140 return true; 10141 } 10142 } 10143 } ); 10144 }, 10145 10146 closest: function( selectors, context ) { 10147 var cur, 10148 i = 0, 10149 l = this.length, 10150 matched = [], 10151 targets = typeof selectors !== "string" && jQuery( selectors ); 10152 10153 // Positional selectors never match, since there's no _selection_ context 10154 if ( !rneedsContext.test( selectors ) ) { 10155 for ( ; i < l; i++ ) { 10156 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 10157 10158 // Always skip document fragments 10159 if ( cur.nodeType < 11 && ( targets ? 10160 targets.index( cur ) > -1 : 10161 10162 // Don't pass non-elements to Sizzle 10163 cur.nodeType === 1 && 10164 jQuery.find.matchesSelector( cur, selectors ) ) ) { 10165 10166 matched.push( cur ); 10167 break; 10168 } 10169 } 10170 } 10171 } 10172 10173 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 10174 }, 10175 10176 // Determine the position of an element within the set 10177 index: function( elem ) { 10178 10179 // No argument, return index in parent 10180 if ( !elem ) { 10181 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 10182 } 10183 10184 // Index in selector 10185 if ( typeof elem === "string" ) { 10186 return indexOf.call( jQuery( elem ), this[ 0 ] ); 10187 } 10188 10189 // Locate the position of the desired element 10190 return indexOf.call( this, 10191 10192 // If it receives a jQuery object, the first element is used 10193 elem.jquery ? elem[ 0 ] : elem 10194 ); 10195 }, 10196 10197 add: function( selector, context ) { 10198 return this.pushStack( 10199 jQuery.uniqueSort( 10200 jQuery.merge( this.get(), jQuery( selector, context ) ) 10201 ) 10202 ); 10203 }, 10204 10205 addBack: function( selector ) { 10206 return this.add( selector == null ? 10207 this.prevObject : this.prevObject.filter( selector ) 10208 ); 10209 } 10210} ); 10211 10212function sibling( cur, dir ) { 10213 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 10214 return cur; 10215} 10216 10217jQuery.each( { 10218 parent: function( elem ) { 10219 var parent = elem.parentNode; 10220 return parent && parent.nodeType !== 11 ? parent : null; 10221 }, 10222 parents: function( elem ) { 10223 return dir( elem, "parentNode" ); 10224 }, 10225 parentsUntil: function( elem, _i, until ) { 10226 return dir( elem, "parentNode", until ); 10227 }, 10228 next: function( elem ) { 10229 return sibling( elem, "nextSibling" ); 10230 }, 10231 prev: function( elem ) { 10232 return sibling( elem, "previousSibling" ); 10233 }, 10234 nextAll: function( elem ) { 10235 return dir( elem, "nextSibling" ); 10236 }, 10237 prevAll: function( elem ) { 10238 return dir( elem, "previousSibling" ); 10239 }, 10240 nextUntil: function( elem, _i, until ) { 10241 return dir( elem, "nextSibling", until ); 10242 }, 10243 prevUntil: function( elem, _i, until ) { 10244 return dir( elem, "previousSibling", until ); 10245 }, 10246 siblings: function( elem ) { 10247 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 10248 }, 10249 children: function( elem ) { 10250 return siblings( elem.firstChild ); 10251 }, 10252 contents: function( elem ) { 10253 if ( elem.contentDocument != null && 10254 10255 // Support: IE 11+ 10256 // <object> elements with no `data` attribute has an object 10257 // `contentDocument` with a `null` prototype. 10258 getProto( elem.contentDocument ) ) { 10259 10260 return elem.contentDocument; 10261 } 10262 10263 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 10264 // Treat the template element as a regular one in browsers that 10265 // don't support it. 10266 if ( nodeName( elem, "template" ) ) { 10267 elem = elem.content || elem; 10268 } 10269 10270 return jQuery.merge( [], elem.childNodes ); 10271 } 10272}, function( name, fn ) { 10273 jQuery.fn[ name ] = function( until, selector ) { 10274 var matched = jQuery.map( this, fn, until ); 10275 10276 if ( name.slice( -5 ) !== "Until" ) { 10277 selector = until; 10278 } 10279 10280 if ( selector && typeof selector === "string" ) { 10281 matched = jQuery.filter( selector, matched ); 10282 } 10283 10284 if ( this.length > 1 ) { 10285 10286 // Remove duplicates 10287 if ( !guaranteedUnique[ name ] ) { 10288 jQuery.uniqueSort( matched ); 10289 } 10290 10291 // Reverse order for parents* and prev-derivatives 10292 if ( rparentsprev.test( name ) ) { 10293 matched.reverse(); 10294 } 10295 } 10296 10297 return this.pushStack( matched ); 10298 }; 10299} ); 10300var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 10301 10302 10303 10304// Convert String-formatted options into Object-formatted ones 10305function createOptions( options ) { 10306 var object = {}; 10307 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 10308 object[ flag ] = true; 10309 } ); 10310 return object; 10311} 10312 10313/* 10314 * Create a callback list using the following parameters: 10315 * 10316 * options: an optional list of space-separated options that will change how 10317 * the callback list behaves or a more traditional option object 10318 * 10319 * By default a callback list will act like an event callback list and can be 10320 * "fired" multiple times. 10321 * 10322 * Possible options: 10323 * 10324 * once: will ensure the callback list can only be fired once (like a Deferred) 10325 * 10326 * memory: will keep track of previous values and will call any callback added 10327 * after the list has been fired right away with the latest "memorized" 10328 * values (like a Deferred) 10329 * 10330 * unique: will ensure a callback can only be added once (no duplicate in the list) 10331 * 10332 * stopOnFalse: interrupt callings when a callback returns false 10333 * 10334 */ 10335jQuery.Callbacks = function( options ) { 10336 10337 // Convert options from String-formatted to Object-formatted if needed 10338 // (we check in cache first) 10339 options = typeof options === "string" ? 10340 createOptions( options ) : 10341 jQuery.extend( {}, options ); 10342 10343 var // Flag to know if list is currently firing 10344 firing, 10345 10346 // Last fire value for non-forgettable lists 10347 memory, 10348 10349 // Flag to know if list was already fired 10350 fired, 10351 10352 // Flag to prevent firing 10353 locked, 10354 10355 // Actual callback list 10356 list = [], 10357 10358 // Queue of execution data for repeatable lists 10359 queue = [], 10360 10361 // Index of currently firing callback (modified by add/remove as needed) 10362 firingIndex = -1, 10363 10364 // Fire callbacks 10365 fire = function() { 10366 10367 // Enforce single-firing 10368 locked = locked || options.once; 10369 10370 // Execute callbacks for all pending executions, 10371 // respecting firingIndex overrides and runtime changes 10372 fired = firing = true; 10373 for ( ; queue.length; firingIndex = -1 ) { 10374 memory = queue.shift(); 10375 while ( ++firingIndex < list.length ) { 10376 10377 // Run callback and check for early termination 10378 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 10379 options.stopOnFalse ) { 10380 10381 // Jump to end and forget the data so .add doesn't re-fire 10382 firingIndex = list.length; 10383 memory = false; 10384 } 10385 } 10386 } 10387 10388 // Forget the data if we're done with it 10389 if ( !options.memory ) { 10390 memory = false; 10391 } 10392 10393 firing = false; 10394 10395 // Clean up if we're done firing for good 10396 if ( locked ) { 10397 10398 // Keep an empty list if we have data for future add calls 10399 if ( memory ) { 10400 list = []; 10401 10402 // Otherwise, this object is spent 10403 } else { 10404 list = ""; 10405 } 10406 } 10407 }, 10408 10409 // Actual Callbacks object 10410 self = { 10411 10412 // Add a callback or a collection of callbacks to the list 10413 add: function() { 10414 if ( list ) { 10415 10416 // If we have memory from a past run, we should fire after adding 10417 if ( memory && !firing ) { 10418 firingIndex = list.length - 1; 10419 queue.push( memory ); 10420 } 10421 10422 ( function add( args ) { 10423 jQuery.each( args, function( _, arg ) { 10424 if ( isFunction( arg ) ) { 10425 if ( !options.unique || !self.has( arg ) ) { 10426 list.push( arg ); 10427 } 10428 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 10429 10430 // Inspect recursively 10431 add( arg ); 10432 } 10433 } ); 10434 } )( arguments ); 10435 10436 if ( memory && !firing ) { 10437 fire(); 10438 } 10439 } 10440 return this; 10441 }, 10442 10443 // Remove a callback from the list 10444 remove: function() { 10445 jQuery.each( arguments, function( _, arg ) { 10446 var index; 10447 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 10448 list.splice( index, 1 ); 10449 10450 // Handle firing indexes 10451 if ( index <= firingIndex ) { 10452 firingIndex--; 10453 } 10454 } 10455 } ); 10456 return this; 10457 }, 10458 10459 // Check if a given callback is in the list. 10460 // If no argument is given, return whether or not list has callbacks attached. 10461 has: function( fn ) { 10462 return fn ? 10463 jQuery.inArray( fn, list ) > -1 : 10464 list.length > 0; 10465 }, 10466 10467 // Remove all callbacks from the list 10468 empty: function() { 10469 if ( list ) { 10470 list = []; 10471 } 10472 return this; 10473 }, 10474 10475 // Disable .fire and .add 10476 // Abort any current/pending executions 10477 // Clear all callbacks and values 10478 disable: function() { 10479 locked = queue = []; 10480 list = memory = ""; 10481 return this; 10482 }, 10483 disabled: function() { 10484 return !list; 10485 }, 10486 10487 // Disable .fire 10488 // Also disable .add unless we have memory (since it would have no effect) 10489 // Abort any pending executions 10490 lock: function() { 10491 locked = queue = []; 10492 if ( !memory && !firing ) { 10493 list = memory = ""; 10494 } 10495 return this; 10496 }, 10497 locked: function() { 10498 return !!locked; 10499 }, 10500 10501 // Call all callbacks with the given context and arguments 10502 fireWith: function( context, args ) { 10503 if ( !locked ) { 10504 args = args || []; 10505 args = [ context, args.slice ? args.slice() : args ]; 10506 queue.push( args ); 10507 if ( !firing ) { 10508 fire(); 10509 } 10510 } 10511 return this; 10512 }, 10513 10514 // Call all the callbacks with the given arguments 10515 fire: function() { 10516 self.fireWith( this, arguments ); 10517 return this; 10518 }, 10519 10520 // To know if the callbacks have already been called at least once 10521 fired: function() { 10522 return !!fired; 10523 } 10524 }; 10525 10526 return self; 10527}; 10528 10529 10530function Identity( v ) { 10531 return v; 10532} 10533function Thrower( ex ) { 10534 throw ex; 10535} 10536 10537function adoptValue( value, resolve, reject, noValue ) { 10538 var method; 10539 10540 try { 10541 10542 // Check for promise aspect first to privilege synchronous behavior 10543 if ( value && isFunction( ( method = value.promise ) ) ) { 10544 method.call( value ).done( resolve ).fail( reject ); 10545 10546 // Other thenables 10547 } else if ( value && isFunction( ( method = value.then ) ) ) { 10548 method.call( value, resolve, reject ); 10549 10550 // Other non-thenables 10551 } else { 10552 10553 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 10554 // * false: [ value ].slice( 0 ) => resolve( value ) 10555 // * true: [ value ].slice( 1 ) => resolve() 10556 resolve.apply( undefined, [ value ].slice( noValue ) ); 10557 } 10558 10559 // For Promises/A+, convert exceptions into rejections 10560 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 10561 // Deferred#then to conditionally suppress rejection. 10562 } catch ( value ) { 10563 10564 // Support: Android 4.0 only 10565 // Strict mode functions invoked without .call/.apply get global-object context 10566 reject.apply( undefined, [ value ] ); 10567 } 10568} 10569 10570jQuery.extend( { 10571 10572 Deferred: function( func ) { 10573 var tuples = [ 10574 10575 // action, add listener, callbacks, 10576 // ... .then handlers, argument index, [final state] 10577 [ "notify", "progress", jQuery.Callbacks( "memory" ), 10578 jQuery.Callbacks( "memory" ), 2 ], 10579 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 10580 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 10581 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 10582 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 10583 ], 10584 state = "pending", 10585 promise = { 10586 state: function() { 10587 return state; 10588 }, 10589 always: function() { 10590 deferred.done( arguments ).fail( arguments ); 10591 return this; 10592 }, 10593 "catch": function( fn ) { 10594 return promise.then( null, fn ); 10595 }, 10596 10597 // Keep pipe for back-compat 10598 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 10599 var fns = arguments; 10600 10601 return jQuery.Deferred( function( newDefer ) { 10602 jQuery.each( tuples, function( _i, tuple ) { 10603 10604 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 10605 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 10606 10607 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 10608 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 10609 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 10610 deferred[ tuple[ 1 ] ]( function() { 10611 var returned = fn && fn.apply( this, arguments ); 10612 if ( returned && isFunction( returned.promise ) ) { 10613 returned.promise() 10614 .progress( newDefer.notify ) 10615 .done( newDefer.resolve ) 10616 .fail( newDefer.reject ); 10617 } else { 10618 newDefer[ tuple[ 0 ] + "With" ]( 10619 this, 10620 fn ? [ returned ] : arguments 10621 ); 10622 } 10623 } ); 10624 } ); 10625 fns = null; 10626 } ).promise(); 10627 }, 10628 then: function( onFulfilled, onRejected, onProgress ) { 10629 var maxDepth = 0; 10630 function resolve( depth, deferred, handler, special ) { 10631 return function() { 10632 var that = this, 10633 args = arguments, 10634 mightThrow = function() { 10635 var returned, then; 10636 10637 // Support: Promises/A+ section 2.3.3.3.3 10638 // https://promisesaplus.com/#point-59 10639 // Ignore double-resolution attempts 10640 if ( depth < maxDepth ) { 10641 return; 10642 } 10643 10644 returned = handler.apply( that, args ); 10645 10646 // Support: Promises/A+ section 2.3.1 10647 // https://promisesaplus.com/#point-48 10648 if ( returned === deferred.promise() ) { 10649 throw new TypeError( "Thenable self-resolution" ); 10650 } 10651 10652 // Support: Promises/A+ sections 2.3.3.1, 3.5 10653 // https://promisesaplus.com/#point-54 10654 // https://promisesaplus.com/#point-75 10655 // Retrieve `then` only once 10656 then = returned && 10657 10658 // Support: Promises/A+ section 2.3.4 10659 // https://promisesaplus.com/#point-64 10660 // Only check objects and functions for thenability 10661 ( typeof returned === "object" || 10662 typeof returned === "function" ) && 10663 returned.then; 10664 10665 // Handle a returned thenable 10666 if ( isFunction( then ) ) { 10667 10668 // Special processors (notify) just wait for resolution 10669 if ( special ) { 10670 then.call( 10671 returned, 10672 resolve( maxDepth, deferred, Identity, special ), 10673 resolve( maxDepth, deferred, Thrower, special ) 10674 ); 10675 10676 // Normal processors (resolve) also hook into progress 10677 } else { 10678 10679 // ...and disregard older resolution values 10680 maxDepth++; 10681 10682 then.call( 10683 returned, 10684 resolve( maxDepth, deferred, Identity, special ), 10685 resolve( maxDepth, deferred, Thrower, special ), 10686 resolve( maxDepth, deferred, Identity, 10687 deferred.notifyWith ) 10688 ); 10689 } 10690 10691 // Handle all other returned values 10692 } else { 10693 10694 // Only substitute handlers pass on context 10695 // and multiple values (non-spec behavior) 10696 if ( handler !== Identity ) { 10697 that = undefined; 10698 args = [ returned ]; 10699 } 10700 10701 // Process the value(s) 10702 // Default process is resolve 10703 ( special || deferred.resolveWith )( that, args ); 10704 } 10705 }, 10706 10707 // Only normal processors (resolve) catch and reject exceptions 10708 process = special ? 10709 mightThrow : 10710 function() { 10711 try { 10712 mightThrow(); 10713 } catch ( e ) { 10714 10715 if ( jQuery.Deferred.exceptionHook ) { 10716 jQuery.Deferred.exceptionHook( e, 10717 process.stackTrace ); 10718 } 10719 10720 // Support: Promises/A+ section 2.3.3.3.4.1 10721 // https://promisesaplus.com/#point-61 10722 // Ignore post-resolution exceptions 10723 if ( depth + 1 >= maxDepth ) { 10724 10725 // Only substitute handlers pass on context 10726 // and multiple values (non-spec behavior) 10727 if ( handler !== Thrower ) { 10728 that = undefined; 10729 args = [ e ]; 10730 } 10731 10732 deferred.rejectWith( that, args ); 10733 } 10734 } 10735 }; 10736 10737 // Support: Promises/A+ section 2.3.3.3.1 10738 // https://promisesaplus.com/#point-57 10739 // Re-resolve promises immediately to dodge false rejection from 10740 // subsequent errors 10741 if ( depth ) { 10742 process(); 10743 } else { 10744 10745 // Call an optional hook to record the stack, in case of exception 10746 // since it's otherwise lost when execution goes async 10747 if ( jQuery.Deferred.getStackHook ) { 10748 process.stackTrace = jQuery.Deferred.getStackHook(); 10749 } 10750 window.setTimeout( process ); 10751 } 10752 }; 10753 } 10754 10755 return jQuery.Deferred( function( newDefer ) { 10756 10757 // progress_handlers.add( ... ) 10758 tuples[ 0 ][ 3 ].add( 10759 resolve( 10760 0, 10761 newDefer, 10762 isFunction( onProgress ) ? 10763 onProgress : 10764 Identity, 10765 newDefer.notifyWith 10766 ) 10767 ); 10768 10769 // fulfilled_handlers.add( ... ) 10770 tuples[ 1 ][ 3 ].add( 10771 resolve( 10772 0, 10773 newDefer, 10774 isFunction( onFulfilled ) ? 10775 onFulfilled : 10776 Identity 10777 ) 10778 ); 10779 10780 // rejected_handlers.add( ... ) 10781 tuples[ 2 ][ 3 ].add( 10782 resolve( 10783 0, 10784 newDefer, 10785 isFunction( onRejected ) ? 10786 onRejected : 10787 Thrower 10788 ) 10789 ); 10790 } ).promise(); 10791 }, 10792 10793 // Get a promise for this deferred 10794 // If obj is provided, the promise aspect is added to the object 10795 promise: function( obj ) { 10796 return obj != null ? jQuery.extend( obj, promise ) : promise; 10797 } 10798 }, 10799 deferred = {}; 10800 10801 // Add list-specific methods 10802 jQuery.each( tuples, function( i, tuple ) { 10803 var list = tuple[ 2 ], 10804 stateString = tuple[ 5 ]; 10805 10806 // promise.progress = list.add 10807 // promise.done = list.add 10808 // promise.fail = list.add 10809 promise[ tuple[ 1 ] ] = list.add; 10810 10811 // Handle state 10812 if ( stateString ) { 10813 list.add( 10814 function() { 10815 10816 // state = "resolved" (i.e., fulfilled) 10817 // state = "rejected" 10818 state = stateString; 10819 }, 10820 10821 // rejected_callbacks.disable 10822 // fulfilled_callbacks.disable 10823 tuples[ 3 - i ][ 2 ].disable, 10824 10825 // rejected_handlers.disable 10826 // fulfilled_handlers.disable 10827 tuples[ 3 - i ][ 3 ].disable, 10828 10829 // progress_callbacks.lock 10830 tuples[ 0 ][ 2 ].lock, 10831 10832 // progress_handlers.lock 10833 tuples[ 0 ][ 3 ].lock 10834 ); 10835 } 10836 10837 // progress_handlers.fire 10838 // fulfilled_handlers.fire 10839 // rejected_handlers.fire 10840 list.add( tuple[ 3 ].fire ); 10841 10842 // deferred.notify = function() { deferred.notifyWith(...) } 10843 // deferred.resolve = function() { deferred.resolveWith(...) } 10844 // deferred.reject = function() { deferred.rejectWith(...) } 10845 deferred[ tuple[ 0 ] ] = function() { 10846 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 10847 return this; 10848 }; 10849 10850 // deferred.notifyWith = list.fireWith 10851 // deferred.resolveWith = list.fireWith 10852 // deferred.rejectWith = list.fireWith 10853 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 10854 } ); 10855 10856 // Make the deferred a promise 10857 promise.promise( deferred ); 10858 10859 // Call given func if any 10860 if ( func ) { 10861 func.call( deferred, deferred ); 10862 } 10863 10864 // All done! 10865 return deferred; 10866 }, 10867 10868 // Deferred helper 10869 when: function( singleValue ) { 10870 var 10871 10872 // count of uncompleted subordinates 10873 remaining = arguments.length, 10874 10875 // count of unprocessed arguments 10876 i = remaining, 10877 10878 // subordinate fulfillment data 10879 resolveContexts = Array( i ), 10880 resolveValues = slice.call( arguments ), 10881 10882 // the primary Deferred 10883 primary = jQuery.Deferred(), 10884 10885 // subordinate callback factory 10886 updateFunc = function( i ) { 10887 return function( value ) { 10888 resolveContexts[ i ] = this; 10889 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 10890 if ( !( --remaining ) ) { 10891 primary.resolveWith( resolveContexts, resolveValues ); 10892 } 10893 }; 10894 }; 10895 10896 // Single- and empty arguments are adopted like Promise.resolve 10897 if ( remaining <= 1 ) { 10898 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 10899 !remaining ); 10900 10901 // Use .then() to unwrap secondary thenables (cf. gh-3000) 10902 if ( primary.state() === "pending" || 10903 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 10904 10905 return primary.then(); 10906 } 10907 } 10908 10909 // Multiple arguments are aggregated like Promise.all array elements 10910 while ( i-- ) { 10911 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 10912 } 10913 10914 return primary.promise(); 10915 } 10916} ); 10917 10918 10919// These usually indicate a programmer mistake during development, 10920// warn about them ASAP rather than swallowing them by default. 10921var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 10922 10923jQuery.Deferred.exceptionHook = function( error, stack ) { 10924 10925 // Support: IE 8 - 9 only 10926 // Console exists when dev tools are open, which can happen at any time 10927 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 10928 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 10929 } 10930}; 10931 10932 10933 10934 10935jQuery.readyException = function( error ) { 10936 window.setTimeout( function() { 10937 throw error; 10938 } ); 10939}; 10940 10941 10942 10943 10944// The deferred used on DOM ready 10945var readyList = jQuery.Deferred(); 10946 10947jQuery.fn.ready = function( fn ) { 10948 10949 readyList 10950 .then( fn ) 10951 10952 // Wrap jQuery.readyException in a function so that the lookup 10953 // happens at the time of error handling instead of callback 10954 // registration. 10955 .catch( function( error ) { 10956 jQuery.readyException( error ); 10957 } ); 10958 10959 return this; 10960}; 10961 10962jQuery.extend( { 10963 10964 // Is the DOM ready to be used? Set to true once it occurs. 10965 isReady: false, 10966 10967 // A counter to track how many items to wait for before 10968 // the ready event fires. See #6781 10969 readyWait: 1, 10970 10971 // Handle when the DOM is ready 10972 ready: function( wait ) { 10973 10974 // Abort if there are pending holds or we're already ready 10975 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 10976 return; 10977 } 10978 10979 // Remember that the DOM is ready 10980 jQuery.isReady = true; 10981 10982 // If a normal DOM Ready event fired, decrement, and wait if need be 10983 if ( wait !== true && --jQuery.readyWait > 0 ) { 10984 return; 10985 } 10986 10987 // If there are functions bound, to execute 10988 readyList.resolveWith( document, [ jQuery ] ); 10989 } 10990} ); 10991 10992jQuery.ready.then = readyList.then; 10993 10994// The ready event handler and self cleanup method 10995function completed() { 10996 document.removeEventListener( "DOMContentLoaded", completed ); 10997 window.removeEventListener( "load", completed ); 10998 jQuery.ready(); 10999} 11000 11001// Catch cases where $(document).ready() is called 11002// after the browser event has already occurred. 11003// Support: IE <=9 - 10 only 11004// Older IE sometimes signals "interactive" too soon 11005if ( document.readyState === "complete" || 11006 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 11007 11008 // Handle it asynchronously to allow scripts the opportunity to delay ready 11009 window.setTimeout( jQuery.ready ); 11010 11011} else { 11012 11013 // Use the handy event callback 11014 document.addEventListener( "DOMContentLoaded", completed ); 11015 11016 // A fallback to window.onload, that will always work 11017 window.addEventListener( "load", completed ); 11018} 11019 11020 11021 11022 11023// Multifunctional method to get and set values of a collection 11024// The value/s can optionally be executed if it's a function 11025var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 11026 var i = 0, 11027 len = elems.length, 11028 bulk = key == null; 11029 11030 // Sets many values 11031 if ( toType( key ) === "object" ) { 11032 chainable = true; 11033 for ( i in key ) { 11034 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 11035 } 11036 11037 // Sets one value 11038 } else if ( value !== undefined ) { 11039 chainable = true; 11040 11041 if ( !isFunction( value ) ) { 11042 raw = true; 11043 } 11044 11045 if ( bulk ) { 11046 11047 // Bulk operations run against the entire set 11048 if ( raw ) { 11049 fn.call( elems, value ); 11050 fn = null; 11051 11052 // ...except when executing function values 11053 } else { 11054 bulk = fn; 11055 fn = function( elem, _key, value ) { 11056 return bulk.call( jQuery( elem ), value ); 11057 }; 11058 } 11059 } 11060 11061 if ( fn ) { 11062 for ( ; i < len; i++ ) { 11063 fn( 11064 elems[ i ], key, raw ? 11065 value : 11066 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 11067 ); 11068 } 11069 } 11070 } 11071 11072 if ( chainable ) { 11073 return elems; 11074 } 11075 11076 // Gets 11077 if ( bulk ) { 11078 return fn.call( elems ); 11079 } 11080 11081 return len ? fn( elems[ 0 ], key ) : emptyGet; 11082}; 11083 11084 11085// Matches dashed string for camelizing 11086var rmsPrefix = /^-ms-/, 11087 rdashAlpha = /-([a-z])/g; 11088 11089// Used by camelCase as callback to replace() 11090function fcamelCase( _all, letter ) { 11091 return letter.toUpperCase(); 11092} 11093 11094// Convert dashed to camelCase; used by the css and data modules 11095// Support: IE <=9 - 11, Edge 12 - 15 11096// Microsoft forgot to hump their vendor prefix (#9572) 11097function camelCase( string ) { 11098 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 11099} 11100var acceptData = function( owner ) { 11101 11102 // Accepts only: 11103 // - Node 11104 // - Node.ELEMENT_NODE 11105 // - Node.DOCUMENT_NODE 11106 // - Object 11107 // - Any 11108 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 11109}; 11110 11111 11112 11113 11114function Data() { 11115 this.expando = jQuery.expando + Data.uid++; 11116} 11117 11118Data.uid = 1; 11119 11120Data.prototype = { 11121 11122 cache: function( owner ) { 11123 11124 // Check if the owner object already has a cache 11125 var value = owner[ this.expando ]; 11126 11127 // If not, create one 11128 if ( !value ) { 11129 value = {}; 11130 11131 // We can accept data for non-element nodes in modern browsers, 11132 // but we should not, see #8335. 11133 // Always return an empty object. 11134 if ( acceptData( owner ) ) { 11135 11136 // If it is a node unlikely to be stringify-ed or looped over 11137 // use plain assignment 11138 if ( owner.nodeType ) { 11139 owner[ this.expando ] = value; 11140 11141 // Otherwise secure it in a non-enumerable property 11142 // configurable must be true to allow the property to be 11143 // deleted when data is removed 11144 } else { 11145 Object.defineProperty( owner, this.expando, { 11146 value: value, 11147 configurable: true 11148 } ); 11149 } 11150 } 11151 } 11152 11153 return value; 11154 }, 11155 set: function( owner, data, value ) { 11156 var prop, 11157 cache = this.cache( owner ); 11158 11159 // Handle: [ owner, key, value ] args 11160 // Always use camelCase key (gh-2257) 11161 if ( typeof data === "string" ) { 11162 cache[ camelCase( data ) ] = value; 11163 11164 // Handle: [ owner, { properties } ] args 11165 } else { 11166 11167 // Copy the properties one-by-one to the cache object 11168 for ( prop in data ) { 11169 cache[ camelCase( prop ) ] = data[ prop ]; 11170 } 11171 } 11172 return cache; 11173 }, 11174 get: function( owner, key ) { 11175 return key === undefined ? 11176 this.cache( owner ) : 11177 11178 // Always use camelCase key (gh-2257) 11179 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 11180 }, 11181 access: function( owner, key, value ) { 11182 11183 // In cases where either: 11184 // 11185 // 1. No key was specified 11186 // 2. A string key was specified, but no value provided 11187 // 11188 // Take the "read" path and allow the get method to determine 11189 // which value to return, respectively either: 11190 // 11191 // 1. The entire cache object 11192 // 2. The data stored at the key 11193 // 11194 if ( key === undefined || 11195 ( ( key && typeof key === "string" ) && value === undefined ) ) { 11196 11197 return this.get( owner, key ); 11198 } 11199 11200 // When the key is not a string, or both a key and value 11201 // are specified, set or extend (existing objects) with either: 11202 // 11203 // 1. An object of properties 11204 // 2. A key and value 11205 // 11206 this.set( owner, key, value ); 11207 11208 // Since the "set" path can have two possible entry points 11209 // return the expected data based on which path was taken[*] 11210 return value !== undefined ? value : key; 11211 }, 11212 remove: function( owner, key ) { 11213 var i, 11214 cache = owner[ this.expando ]; 11215 11216 if ( cache === undefined ) { 11217 return; 11218 } 11219 11220 if ( key !== undefined ) { 11221 11222 // Support array or space separated string of keys 11223 if ( Array.isArray( key ) ) { 11224 11225 // If key is an array of keys... 11226 // We always set camelCase keys, so remove that. 11227 key = key.map( camelCase ); 11228 } else { 11229 key = camelCase( key ); 11230 11231 // If a key with the spaces exists, use it. 11232 // Otherwise, create an array by matching non-whitespace 11233 key = key in cache ? 11234 [ key ] : 11235 ( key.match( rnothtmlwhite ) || [] ); 11236 } 11237 11238 i = key.length; 11239 11240 while ( i-- ) { 11241 delete cache[ key[ i ] ]; 11242 } 11243 } 11244 11245 // Remove the expando if there's no more data 11246 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 11247 11248 // Support: Chrome <=35 - 45 11249 // Webkit & Blink performance suffers when deleting properties 11250 // from DOM nodes, so set to undefined instead 11251 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 11252 if ( owner.nodeType ) { 11253 owner[ this.expando ] = undefined; 11254 } else { 11255 delete owner[ this.expando ]; 11256 } 11257 } 11258 }, 11259 hasData: function( owner ) { 11260 var cache = owner[ this.expando ]; 11261 return cache !== undefined && !jQuery.isEmptyObject( cache ); 11262 } 11263}; 11264var dataPriv = new Data(); 11265 11266var dataUser = new Data(); 11267 11268 11269 11270// Implementation Summary 11271// 11272// 1. Enforce API surface and semantic compatibility with 1.9.x branch 11273// 2. Improve the module's maintainability by reducing the storage 11274// paths to a single mechanism. 11275// 3. Use the same single mechanism to support "private" and "user" data. 11276// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 11277// 5. Avoid exposing implementation details on user objects (eg. expando properties) 11278// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 11279 11280var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 11281 rmultiDash = /[A-Z]/g; 11282 11283function getData( data ) { 11284 if ( data === "true" ) { 11285 return true; 11286 } 11287 11288 if ( data === "false" ) { 11289 return false; 11290 } 11291 11292 if ( data === "null" ) { 11293 return null; 11294 } 11295 11296 // Only convert to a number if it doesn't change the string 11297 if ( data === +data + "" ) { 11298 return +data; 11299 } 11300 11301 if ( rbrace.test( data ) ) { 11302 return JSON.parse( data ); 11303 } 11304 11305 return data; 11306} 11307 11308function dataAttr( elem, key, data ) { 11309 var name; 11310 11311 // If nothing was found internally, try to fetch any 11312 // data from the HTML5 data-* attribute 11313 if ( data === undefined && elem.nodeType === 1 ) { 11314 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 11315 data = elem.getAttribute( name ); 11316 11317 if ( typeof data === "string" ) { 11318 try { 11319 data = getData( data ); 11320 } catch ( e ) {} 11321 11322 // Make sure we set the data so it isn't changed later 11323 dataUser.set( elem, key, data ); 11324 } else { 11325 data = undefined; 11326 } 11327 } 11328 return data; 11329} 11330 11331jQuery.extend( { 11332 hasData: function( elem ) { 11333 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 11334 }, 11335 11336 data: function( elem, name, data ) { 11337 return dataUser.access( elem, name, data ); 11338 }, 11339 11340 removeData: function( elem, name ) { 11341 dataUser.remove( elem, name ); 11342 }, 11343 11344 // TODO: Now that all calls to _data and _removeData have been replaced 11345 // with direct calls to dataPriv methods, these can be deprecated. 11346 _data: function( elem, name, data ) { 11347 return dataPriv.access( elem, name, data ); 11348 }, 11349 11350 _removeData: function( elem, name ) { 11351 dataPriv.remove( elem, name ); 11352 } 11353} ); 11354 11355jQuery.fn.extend( { 11356 data: function( key, value ) { 11357 var i, name, data, 11358 elem = this[ 0 ], 11359 attrs = elem && elem.attributes; 11360 11361 // Gets all values 11362 if ( key === undefined ) { 11363 if ( this.length ) { 11364 data = dataUser.get( elem ); 11365 11366 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 11367 i = attrs.length; 11368 while ( i-- ) { 11369 11370 // Support: IE 11 only 11371 // The attrs elements can be null (#14894) 11372 if ( attrs[ i ] ) { 11373 name = attrs[ i ].name; 11374 if ( name.indexOf( "data-" ) === 0 ) { 11375 name = camelCase( name.slice( 5 ) ); 11376 dataAttr( elem, name, data[ name ] ); 11377 } 11378 } 11379 } 11380 dataPriv.set( elem, "hasDataAttrs", true ); 11381 } 11382 } 11383 11384 return data; 11385 } 11386 11387 // Sets multiple values 11388 if ( typeof key === "object" ) { 11389 return this.each( function() { 11390 dataUser.set( this, key ); 11391 } ); 11392 } 11393 11394 return access( this, function( value ) { 11395 var data; 11396 11397 // The calling jQuery object (element matches) is not empty 11398 // (and therefore has an element appears at this[ 0 ]) and the 11399 // `value` parameter was not undefined. An empty jQuery object 11400 // will result in `undefined` for elem = this[ 0 ] which will 11401 // throw an exception if an attempt to read a data cache is made. 11402 if ( elem && value === undefined ) { 11403 11404 // Attempt to get data from the cache 11405 // The key will always be camelCased in Data 11406 data = dataUser.get( elem, key ); 11407 if ( data !== undefined ) { 11408 return data; 11409 } 11410 11411 // Attempt to "discover" the data in 11412 // HTML5 custom data-* attrs 11413 data = dataAttr( elem, key ); 11414 if ( data !== undefined ) { 11415 return data; 11416 } 11417 11418 // We tried really hard, but the data doesn't exist. 11419 return; 11420 } 11421 11422 // Set the data... 11423 this.each( function() { 11424 11425 // We always store the camelCased key 11426 dataUser.set( this, key, value ); 11427 } ); 11428 }, null, value, arguments.length > 1, null, true ); 11429 }, 11430 11431 removeData: function( key ) { 11432 return this.each( function() { 11433 dataUser.remove( this, key ); 11434 } ); 11435 } 11436} ); 11437 11438 11439jQuery.extend( { 11440 queue: function( elem, type, data ) { 11441 var queue; 11442 11443 if ( elem ) { 11444 type = ( type || "fx" ) + "queue"; 11445 queue = dataPriv.get( elem, type ); 11446 11447 // Speed up dequeue by getting out quickly if this is just a lookup 11448 if ( data ) { 11449 if ( !queue || Array.isArray( data ) ) { 11450 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 11451 } else { 11452 queue.push( data ); 11453 } 11454 } 11455 return queue || []; 11456 } 11457 }, 11458 11459 dequeue: function( elem, type ) { 11460 type = type || "fx"; 11461 11462 var queue = jQuery.queue( elem, type ), 11463 startLength = queue.length, 11464 fn = queue.shift(), 11465 hooks = jQuery._queueHooks( elem, type ), 11466 next = function() { 11467 jQuery.dequeue( elem, type ); 11468 }; 11469 11470 // If the fx queue is dequeued, always remove the progress sentinel 11471 if ( fn === "inprogress" ) { 11472 fn = queue.shift(); 11473 startLength--; 11474 } 11475 11476 if ( fn ) { 11477 11478 // Add a progress sentinel to prevent the fx queue from being 11479 // automatically dequeued 11480 if ( type === "fx" ) { 11481 queue.unshift( "inprogress" ); 11482 } 11483 11484 // Clear up the last queue stop function 11485 delete hooks.stop; 11486 fn.call( elem, next, hooks ); 11487 } 11488 11489 if ( !startLength && hooks ) { 11490 hooks.empty.fire(); 11491 } 11492 }, 11493 11494 // Not public - generate a queueHooks object, or return the current one 11495 _queueHooks: function( elem, type ) { 11496 var key = type + "queueHooks"; 11497 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 11498 empty: jQuery.Callbacks( "once memory" ).add( function() { 11499 dataPriv.remove( elem, [ type + "queue", key ] ); 11500 } ) 11501 } ); 11502 } 11503} ); 11504 11505jQuery.fn.extend( { 11506 queue: function( type, data ) { 11507 var setter = 2; 11508 11509 if ( typeof type !== "string" ) { 11510 data = type; 11511 type = "fx"; 11512 setter--; 11513 } 11514 11515 if ( arguments.length < setter ) { 11516 return jQuery.queue( this[ 0 ], type ); 11517 } 11518 11519 return data === undefined ? 11520 this : 11521 this.each( function() { 11522 var queue = jQuery.queue( this, type, data ); 11523 11524 // Ensure a hooks for this queue 11525 jQuery._queueHooks( this, type ); 11526 11527 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 11528 jQuery.dequeue( this, type ); 11529 } 11530 } ); 11531 }, 11532 dequeue: function( type ) { 11533 return this.each( function() { 11534 jQuery.dequeue( this, type ); 11535 } ); 11536 }, 11537 clearQueue: function( type ) { 11538 return this.queue( type || "fx", [] ); 11539 }, 11540 11541 // Get a promise resolved when queues of a certain type 11542 // are emptied (fx is the type by default) 11543 promise: function( type, obj ) { 11544 var tmp, 11545 count = 1, 11546 defer = jQuery.Deferred(), 11547 elements = this, 11548 i = this.length, 11549 resolve = function() { 11550 if ( !( --count ) ) { 11551 defer.resolveWith( elements, [ elements ] ); 11552 } 11553 }; 11554 11555 if ( typeof type !== "string" ) { 11556 obj = type; 11557 type = undefined; 11558 } 11559 type = type || "fx"; 11560 11561 while ( i-- ) { 11562 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 11563 if ( tmp && tmp.empty ) { 11564 count++; 11565 tmp.empty.add( resolve ); 11566 } 11567 } 11568 resolve(); 11569 return defer.promise( obj ); 11570 } 11571} ); 11572var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 11573 11574var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 11575 11576 11577var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 11578 11579var documentElement = document.documentElement; 11580 11581 11582 11583 var isAttached = function( elem ) { 11584 return jQuery.contains( elem.ownerDocument, elem ); 11585 }, 11586 composed = { composed: true }; 11587 11588 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 11589 // Check attachment across shadow DOM boundaries when possible (gh-3504) 11590 // Support: iOS 10.0-10.2 only 11591 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 11592 // leading to errors. We need to check for `getRootNode`. 11593 if ( documentElement.getRootNode ) { 11594 isAttached = function( elem ) { 11595 return jQuery.contains( elem.ownerDocument, elem ) || 11596 elem.getRootNode( composed ) === elem.ownerDocument; 11597 }; 11598 } 11599var isHiddenWithinTree = function( elem, el ) { 11600 11601 // isHiddenWithinTree might be called from jQuery#filter function; 11602 // in that case, element will be second argument 11603 elem = el || elem; 11604 11605 // Inline style trumps all 11606 return elem.style.display === "none" || 11607 elem.style.display === "" && 11608 11609 // Otherwise, check computed style 11610 // Support: Firefox <=43 - 45 11611 // Disconnected elements can have computed display: none, so first confirm that elem is 11612 // in the document. 11613 isAttached( elem ) && 11614 11615 jQuery.css( elem, "display" ) === "none"; 11616 }; 11617 11618 11619 11620function adjustCSS( elem, prop, valueParts, tween ) { 11621 var adjusted, scale, 11622 maxIterations = 20, 11623 currentValue = tween ? 11624 function() { 11625 return tween.cur(); 11626 } : 11627 function() { 11628 return jQuery.css( elem, prop, "" ); 11629 }, 11630 initial = currentValue(), 11631 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 11632 11633 // Starting value computation is required for potential unit mismatches 11634 initialInUnit = elem.nodeType && 11635 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 11636 rcssNum.exec( jQuery.css( elem, prop ) ); 11637 11638 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 11639 11640 // Support: Firefox <=54 11641 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 11642 initial = initial / 2; 11643 11644 // Trust units reported by jQuery.css 11645 unit = unit || initialInUnit[ 3 ]; 11646 11647 // Iteratively approximate from a nonzero starting point 11648 initialInUnit = +initial || 1; 11649 11650 while ( maxIterations-- ) { 11651 11652 // Evaluate and update our best guess (doubling guesses that zero out). 11653 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 11654 jQuery.style( elem, prop, initialInUnit + unit ); 11655 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 11656 maxIterations = 0; 11657 } 11658 initialInUnit = initialInUnit / scale; 11659 11660 } 11661 11662 initialInUnit = initialInUnit * 2; 11663 jQuery.style( elem, prop, initialInUnit + unit ); 11664 11665 // Make sure we update the tween properties later on 11666 valueParts = valueParts || []; 11667 } 11668 11669 if ( valueParts ) { 11670 initialInUnit = +initialInUnit || +initial || 0; 11671 11672 // Apply relative offset (+=/-=) if specified 11673 adjusted = valueParts[ 1 ] ? 11674 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 11675 +valueParts[ 2 ]; 11676 if ( tween ) { 11677 tween.unit = unit; 11678 tween.start = initialInUnit; 11679 tween.end = adjusted; 11680 } 11681 } 11682 return adjusted; 11683} 11684 11685 11686var defaultDisplayMap = {}; 11687 11688function getDefaultDisplay( elem ) { 11689 var temp, 11690 doc = elem.ownerDocument, 11691 nodeName = elem.nodeName, 11692 display = defaultDisplayMap[ nodeName ]; 11693 11694 if ( display ) { 11695 return display; 11696 } 11697 11698 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 11699 display = jQuery.css( temp, "display" ); 11700 11701 temp.parentNode.removeChild( temp ); 11702 11703 if ( display === "none" ) { 11704 display = "block"; 11705 } 11706 defaultDisplayMap[ nodeName ] = display; 11707 11708 return display; 11709} 11710 11711function showHide( elements, show ) { 11712 var display, elem, 11713 values = [], 11714 index = 0, 11715 length = elements.length; 11716 11717 // Determine new display value for elements that need to change 11718 for ( ; index < length; index++ ) { 11719 elem = elements[ index ]; 11720 if ( !elem.style ) { 11721 continue; 11722 } 11723 11724 display = elem.style.display; 11725 if ( show ) { 11726 11727 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 11728 // check is required in this first loop unless we have a nonempty display value (either 11729 // inline or about-to-be-restored) 11730 if ( display === "none" ) { 11731 values[ index ] = dataPriv.get( elem, "display" ) || null; 11732 if ( !values[ index ] ) { 11733 elem.style.display = ""; 11734 } 11735 } 11736 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 11737 values[ index ] = getDefaultDisplay( elem ); 11738 } 11739 } else { 11740 if ( display !== "none" ) { 11741 values[ index ] = "none"; 11742 11743 // Remember what we're overwriting 11744 dataPriv.set( elem, "display", display ); 11745 } 11746 } 11747 } 11748 11749 // Set the display of the elements in a second loop to avoid constant reflow 11750 for ( index = 0; index < length; index++ ) { 11751 if ( values[ index ] != null ) { 11752 elements[ index ].style.display = values[ index ]; 11753 } 11754 } 11755 11756 return elements; 11757} 11758 11759jQuery.fn.extend( { 11760 show: function() { 11761 return showHide( this, true ); 11762 }, 11763 hide: function() { 11764 return showHide( this ); 11765 }, 11766 toggle: function( state ) { 11767 if ( typeof state === "boolean" ) { 11768 return state ? this.show() : this.hide(); 11769 } 11770 11771 return this.each( function() { 11772 if ( isHiddenWithinTree( this ) ) { 11773 jQuery( this ).show(); 11774 } else { 11775 jQuery( this ).hide(); 11776 } 11777 } ); 11778 } 11779} ); 11780var rcheckableType = ( /^(?:checkbox|radio)$/i ); 11781 11782var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 11783 11784var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 11785 11786 11787 11788( function() { 11789 var fragment = document.createDocumentFragment(), 11790 div = fragment.appendChild( document.createElement( "div" ) ), 11791 input = document.createElement( "input" ); 11792 11793 // Support: Android 4.0 - 4.3 only 11794 // Check state lost if the name is set (#11217) 11795 // Support: Windows Web Apps (WWA) 11796 // `name` and `type` must use .setAttribute for WWA (#14901) 11797 input.setAttribute( "type", "radio" ); 11798 input.setAttribute( "checked", "checked" ); 11799 input.setAttribute( "name", "t" ); 11800 11801 div.appendChild( input ); 11802 11803 // Support: Android <=4.1 only 11804 // Older WebKit doesn't clone checked state correctly in fragments 11805 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 11806 11807 // Support: IE <=11 only 11808 // Make sure textarea (and checkbox) defaultValue is properly cloned 11809 div.innerHTML = "<textarea>x</textarea>"; 11810 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 11811 11812 // Support: IE <=9 only 11813 // IE <=9 replaces <option> tags with their contents when inserted outside of 11814 // the select element. 11815 div.innerHTML = "<option></option>"; 11816 support.option = !!div.lastChild; 11817} )(); 11818 11819 11820// We have to close these tags to support XHTML (#13200) 11821var wrapMap = { 11822 11823 // XHTML parsers do not magically insert elements in the 11824 // same way that tag soup parsers do. So we cannot shorten 11825 // this by omitting <tbody> or other required elements. 11826 thead: [ 1, "<table>", "</table>" ], 11827 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 11828 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 11829 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 11830 11831 _default: [ 0, "", "" ] 11832}; 11833 11834wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 11835wrapMap.th = wrapMap.td; 11836 11837// Support: IE <=9 only 11838if ( !support.option ) { 11839 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 11840} 11841 11842 11843function getAll( context, tag ) { 11844 11845 // Support: IE <=9 - 11 only 11846 // Use typeof to avoid zero-argument method invocation on host objects (#15151) 11847 var ret; 11848 11849 if ( typeof context.getElementsByTagName !== "undefined" ) { 11850 ret = context.getElementsByTagName( tag || "*" ); 11851 11852 } else if ( typeof context.querySelectorAll !== "undefined" ) { 11853 ret = context.querySelectorAll( tag || "*" ); 11854 11855 } else { 11856 ret = []; 11857 } 11858 11859 if ( tag === undefined || tag && nodeName( context, tag ) ) { 11860 return jQuery.merge( [ context ], ret ); 11861 } 11862 11863 return ret; 11864} 11865 11866 11867// Mark scripts as having already been evaluated 11868function setGlobalEval( elems, refElements ) { 11869 var i = 0, 11870 l = elems.length; 11871 11872 for ( ; i < l; i++ ) { 11873 dataPriv.set( 11874 elems[ i ], 11875 "globalEval", 11876 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 11877 ); 11878 } 11879} 11880 11881 11882var rhtml = /<|&#?\w+;/; 11883 11884function buildFragment( elems, context, scripts, selection, ignored ) { 11885 var elem, tmp, tag, wrap, attached, j, 11886 fragment = context.createDocumentFragment(), 11887 nodes = [], 11888 i = 0, 11889 l = elems.length; 11890 11891 for ( ; i < l; i++ ) { 11892 elem = elems[ i ]; 11893 11894 if ( elem || elem === 0 ) { 11895 11896 // Add nodes directly 11897 if ( toType( elem ) === "object" ) { 11898 11899 // Support: Android <=4.0 only, PhantomJS 1 only 11900 // push.apply(_, arraylike) throws on ancient WebKit 11901 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 11902 11903 // Convert non-html into a text node 11904 } else if ( !rhtml.test( elem ) ) { 11905 nodes.push( context.createTextNode( elem ) ); 11906 11907 // Convert html into DOM nodes 11908 } else { 11909 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 11910 11911 // Deserialize a standard representation 11912 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 11913 wrap = wrapMap[ tag ] || wrapMap._default; 11914 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 11915 11916 // Descend through wrappers to the right content 11917 j = wrap[ 0 ]; 11918 while ( j-- ) { 11919 tmp = tmp.lastChild; 11920 } 11921 11922 // Support: Android <=4.0 only, PhantomJS 1 only 11923 // push.apply(_, arraylike) throws on ancient WebKit 11924 jQuery.merge( nodes, tmp.childNodes ); 11925 11926 // Remember the top-level container 11927 tmp = fragment.firstChild; 11928 11929 // Ensure the created nodes are orphaned (#12392) 11930 tmp.textContent = ""; 11931 } 11932 } 11933 } 11934 11935 // Remove wrapper from fragment 11936 fragment.textContent = ""; 11937 11938 i = 0; 11939 while ( ( elem = nodes[ i++ ] ) ) { 11940 11941 // Skip elements already in the context collection (trac-4087) 11942 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 11943 if ( ignored ) { 11944 ignored.push( elem ); 11945 } 11946 continue; 11947 } 11948 11949 attached = isAttached( elem ); 11950 11951 // Append to fragment 11952 tmp = getAll( fragment.appendChild( elem ), "script" ); 11953 11954 // Preserve script evaluation history 11955 if ( attached ) { 11956 setGlobalEval( tmp ); 11957 } 11958 11959 // Capture executables 11960 if ( scripts ) { 11961 j = 0; 11962 while ( ( elem = tmp[ j++ ] ) ) { 11963 if ( rscriptType.test( elem.type || "" ) ) { 11964 scripts.push( elem ); 11965 } 11966 } 11967 } 11968 } 11969 11970 return fragment; 11971} 11972 11973 11974var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 11975 11976function returnTrue() { 11977 return true; 11978} 11979 11980function returnFalse() { 11981 return false; 11982} 11983 11984// Support: IE <=9 - 11+ 11985// focus() and blur() are asynchronous, except when they are no-op. 11986// So expect focus to be synchronous when the element is already active, 11987// and blur to be synchronous when the element is not already active. 11988// (focus and blur are always synchronous in other supported browsers, 11989// this just defines when we can count on it). 11990function expectSync( elem, type ) { 11991 return ( elem === safeActiveElement() ) === ( type === "focus" ); 11992} 11993 11994// Support: IE <=9 only 11995// Accessing document.activeElement can throw unexpectedly 11996// https://bugs.jquery.com/ticket/13393 11997function safeActiveElement() { 11998 try { 11999 return document.activeElement; 12000 } catch ( err ) { } 12001} 12002 12003function on( elem, types, selector, data, fn, one ) { 12004 var origFn, type; 12005 12006 // Types can be a map of types/handlers 12007 if ( typeof types === "object" ) { 12008 12009 // ( types-Object, selector, data ) 12010 if ( typeof selector !== "string" ) { 12011 12012 // ( types-Object, data ) 12013 data = data || selector; 12014 selector = undefined; 12015 } 12016 for ( type in types ) { 12017 on( elem, type, selector, data, types[ type ], one ); 12018 } 12019 return elem; 12020 } 12021 12022 if ( data == null && fn == null ) { 12023 12024 // ( types, fn ) 12025 fn = selector; 12026 data = selector = undefined; 12027 } else if ( fn == null ) { 12028 if ( typeof selector === "string" ) { 12029 12030 // ( types, selector, fn ) 12031 fn = data; 12032 data = undefined; 12033 } else { 12034 12035 // ( types, data, fn ) 12036 fn = data; 12037 data = selector; 12038 selector = undefined; 12039 } 12040 } 12041 if ( fn === false ) { 12042 fn = returnFalse; 12043 } else if ( !fn ) { 12044 return elem; 12045 } 12046 12047 if ( one === 1 ) { 12048 origFn = fn; 12049 fn = function( event ) { 12050 12051 // Can use an empty set, since event contains the info 12052 jQuery().off( event ); 12053 return origFn.apply( this, arguments ); 12054 }; 12055 12056 // Use same guid so caller can remove using origFn 12057 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 12058 } 12059 return elem.each( function() { 12060 jQuery.event.add( this, types, fn, data, selector ); 12061 } ); 12062} 12063 12064/* 12065 * Helper functions for managing events -- not part of the public interface. 12066 * Props to Dean Edwards' addEvent library for many of the ideas. 12067 */ 12068jQuery.event = { 12069 12070 global: {}, 12071 12072 add: function( elem, types, handler, data, selector ) { 12073 12074 var handleObjIn, eventHandle, tmp, 12075 events, t, handleObj, 12076 special, handlers, type, namespaces, origType, 12077 elemData = dataPriv.get( elem ); 12078 12079 // Only attach events to objects that accept data 12080 if ( !acceptData( elem ) ) { 12081 return; 12082 } 12083 12084 // Caller can pass in an object of custom data in lieu of the handler 12085 if ( handler.handler ) { 12086 handleObjIn = handler; 12087 handler = handleObjIn.handler; 12088 selector = handleObjIn.selector; 12089 } 12090 12091 // Ensure that invalid selectors throw exceptions at attach time 12092 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 12093 if ( selector ) { 12094 jQuery.find.matchesSelector( documentElement, selector ); 12095 } 12096 12097 // Make sure that the handler has a unique ID, used to find/remove it later 12098 if ( !handler.guid ) { 12099 handler.guid = jQuery.guid++; 12100 } 12101 12102 // Init the element's event structure and main handler, if this is the first 12103 if ( !( events = elemData.events ) ) { 12104 events = elemData.events = Object.create( null ); 12105 } 12106 if ( !( eventHandle = elemData.handle ) ) { 12107 eventHandle = elemData.handle = function( e ) { 12108 12109 // Discard the second event of a jQuery.event.trigger() and 12110 // when an event is called after a page has unloaded 12111 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 12112 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 12113 }; 12114 } 12115 12116 // Handle multiple events separated by a space 12117 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12118 t = types.length; 12119 while ( t-- ) { 12120 tmp = rtypenamespace.exec( types[ t ] ) || []; 12121 type = origType = tmp[ 1 ]; 12122 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12123 12124 // There *must* be a type, no attaching namespace-only handlers 12125 if ( !type ) { 12126 continue; 12127 } 12128 12129 // If event changes its type, use the special event handlers for the changed type 12130 special = jQuery.event.special[ type ] || {}; 12131 12132 // If selector defined, determine special event api type, otherwise given type 12133 type = ( selector ? special.delegateType : special.bindType ) || type; 12134 12135 // Update special based on newly reset type 12136 special = jQuery.event.special[ type ] || {}; 12137 12138 // handleObj is passed to all event handlers 12139 handleObj = jQuery.extend( { 12140 type: type, 12141 origType: origType, 12142 data: data, 12143 handler: handler, 12144 guid: handler.guid, 12145 selector: selector, 12146 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 12147 namespace: namespaces.join( "." ) 12148 }, handleObjIn ); 12149 12150 // Init the event handler queue if we're the first 12151 if ( !( handlers = events[ type ] ) ) { 12152 handlers = events[ type ] = []; 12153 handlers.delegateCount = 0; 12154 12155 // Only use addEventListener if the special events handler returns false 12156 if ( !special.setup || 12157 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 12158 12159 if ( elem.addEventListener ) { 12160 elem.addEventListener( type, eventHandle ); 12161 } 12162 } 12163 } 12164 12165 if ( special.add ) { 12166 special.add.call( elem, handleObj ); 12167 12168 if ( !handleObj.handler.guid ) { 12169 handleObj.handler.guid = handler.guid; 12170 } 12171 } 12172 12173 // Add to the element's handler list, delegates in front 12174 if ( selector ) { 12175 handlers.splice( handlers.delegateCount++, 0, handleObj ); 12176 } else { 12177 handlers.push( handleObj ); 12178 } 12179 12180 // Keep track of which events have ever been used, for event optimization 12181 jQuery.event.global[ type ] = true; 12182 } 12183 12184 }, 12185 12186 // Detach an event or set of events from an element 12187 remove: function( elem, types, handler, selector, mappedTypes ) { 12188 12189 var j, origCount, tmp, 12190 events, t, handleObj, 12191 special, handlers, type, namespaces, origType, 12192 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 12193 12194 if ( !elemData || !( events = elemData.events ) ) { 12195 return; 12196 } 12197 12198 // Once for each type.namespace in types; type may be omitted 12199 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 12200 t = types.length; 12201 while ( t-- ) { 12202 tmp = rtypenamespace.exec( types[ t ] ) || []; 12203 type = origType = tmp[ 1 ]; 12204 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 12205 12206 // Unbind all events (on this namespace, if provided) for the element 12207 if ( !type ) { 12208 for ( type in events ) { 12209 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 12210 } 12211 continue; 12212 } 12213 12214 special = jQuery.event.special[ type ] || {}; 12215 type = ( selector ? special.delegateType : special.bindType ) || type; 12216 handlers = events[ type ] || []; 12217 tmp = tmp[ 2 ] && 12218 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 12219 12220 // Remove matching events 12221 origCount = j = handlers.length; 12222 while ( j-- ) { 12223 handleObj = handlers[ j ]; 12224 12225 if ( ( mappedTypes || origType === handleObj.origType ) && 12226 ( !handler || handler.guid === handleObj.guid ) && 12227 ( !tmp || tmp.test( handleObj.namespace ) ) && 12228 ( !selector || selector === handleObj.selector || 12229 selector === "**" && handleObj.selector ) ) { 12230 handlers.splice( j, 1 ); 12231 12232 if ( handleObj.selector ) { 12233 handlers.delegateCount--; 12234 } 12235 if ( special.remove ) { 12236 special.remove.call( elem, handleObj ); 12237 } 12238 } 12239 } 12240 12241 // Remove generic event handler if we removed something and no more handlers exist 12242 // (avoids potential for endless recursion during removal of special event handlers) 12243 if ( origCount && !handlers.length ) { 12244 if ( !special.teardown || 12245 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 12246 12247 jQuery.removeEvent( elem, type, elemData.handle ); 12248 } 12249 12250 delete events[ type ]; 12251 } 12252 } 12253 12254 // Remove data and the expando if it's no longer used 12255 if ( jQuery.isEmptyObject( events ) ) { 12256 dataPriv.remove( elem, "handle events" ); 12257 } 12258 }, 12259 12260 dispatch: function( nativeEvent ) { 12261 12262 var i, j, ret, matched, handleObj, handlerQueue, 12263 args = new Array( arguments.length ), 12264 12265 // Make a writable jQuery.Event from the native event object 12266 event = jQuery.event.fix( nativeEvent ), 12267 12268 handlers = ( 12269 dataPriv.get( this, "events" ) || Object.create( null ) 12270 )[ event.type ] || [], 12271 special = jQuery.event.special[ event.type ] || {}; 12272 12273 // Use the fix-ed jQuery.Event rather than the (read-only) native event 12274 args[ 0 ] = event; 12275 12276 for ( i = 1; i < arguments.length; i++ ) { 12277 args[ i ] = arguments[ i ]; 12278 } 12279 12280 event.delegateTarget = this; 12281 12282 // Call the preDispatch hook for the mapped type, and let it bail if desired 12283 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 12284 return; 12285 } 12286 12287 // Determine handlers 12288 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 12289 12290 // Run delegates first; they may want to stop propagation beneath us 12291 i = 0; 12292 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 12293 event.currentTarget = matched.elem; 12294 12295 j = 0; 12296 while ( ( handleObj = matched.handlers[ j++ ] ) && 12297 !event.isImmediatePropagationStopped() ) { 12298 12299 // If the event is namespaced, then each handler is only invoked if it is 12300 // specially universal or its namespaces are a superset of the event's. 12301 if ( !event.rnamespace || handleObj.namespace === false || 12302 event.rnamespace.test( handleObj.namespace ) ) { 12303 12304 event.handleObj = handleObj; 12305 event.data = handleObj.data; 12306 12307 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 12308 handleObj.handler ).apply( matched.elem, args ); 12309 12310 if ( ret !== undefined ) { 12311 if ( ( event.result = ret ) === false ) { 12312 event.preventDefault(); 12313 event.stopPropagation(); 12314 } 12315 } 12316 } 12317 } 12318 } 12319 12320 // Call the postDispatch hook for the mapped type 12321 if ( special.postDispatch ) { 12322 special.postDispatch.call( this, event ); 12323 } 12324 12325 return event.result; 12326 }, 12327 12328 handlers: function( event, handlers ) { 12329 var i, handleObj, sel, matchedHandlers, matchedSelectors, 12330 handlerQueue = [], 12331 delegateCount = handlers.delegateCount, 12332 cur = event.target; 12333 12334 // Find delegate handlers 12335 if ( delegateCount && 12336 12337 // Support: IE <=9 12338 // Black-hole SVG <use> instance trees (trac-13180) 12339 cur.nodeType && 12340 12341 // Support: Firefox <=42 12342 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 12343 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 12344 // Support: IE 11 only 12345 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 12346 !( event.type === "click" && event.button >= 1 ) ) { 12347 12348 for ( ; cur !== this; cur = cur.parentNode || this ) { 12349 12350 // Don't check non-elements (#13208) 12351 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 12352 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 12353 matchedHandlers = []; 12354 matchedSelectors = {}; 12355 for ( i = 0; i < delegateCount; i++ ) { 12356 handleObj = handlers[ i ]; 12357 12358 // Don't conflict with Object.prototype properties (#13203) 12359 sel = handleObj.selector + " "; 12360 12361 if ( matchedSelectors[ sel ] === undefined ) { 12362 matchedSelectors[ sel ] = handleObj.needsContext ? 12363 jQuery( sel, this ).index( cur ) > -1 : 12364 jQuery.find( sel, this, null, [ cur ] ).length; 12365 } 12366 if ( matchedSelectors[ sel ] ) { 12367 matchedHandlers.push( handleObj ); 12368 } 12369 } 12370 if ( matchedHandlers.length ) { 12371 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 12372 } 12373 } 12374 } 12375 } 12376 12377 // Add the remaining (directly-bound) handlers 12378 cur = this; 12379 if ( delegateCount < handlers.length ) { 12380 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 12381 } 12382 12383 return handlerQueue; 12384 }, 12385 12386 addProp: function( name, hook ) { 12387 Object.defineProperty( jQuery.Event.prototype, name, { 12388 enumerable: true, 12389 configurable: true, 12390 12391 get: isFunction( hook ) ? 12392 function() { 12393 if ( this.originalEvent ) { 12394 return hook( this.originalEvent ); 12395 } 12396 } : 12397 function() { 12398 if ( this.originalEvent ) { 12399 return this.originalEvent[ name ]; 12400 } 12401 }, 12402 12403 set: function( value ) { 12404 Object.defineProperty( this, name, { 12405 enumerable: true, 12406 configurable: true, 12407 writable: true, 12408 value: value 12409 } ); 12410 } 12411 } ); 12412 }, 12413 12414 fix: function( originalEvent ) { 12415 return originalEvent[ jQuery.expando ] ? 12416 originalEvent : 12417 new jQuery.Event( originalEvent ); 12418 }, 12419 12420 special: { 12421 load: { 12422 12423 // Prevent triggered image.load events from bubbling to window.load 12424 noBubble: true 12425 }, 12426 click: { 12427 12428 // Utilize native event to ensure correct state for checkable inputs 12429 setup: function( data ) { 12430 12431 // For mutual compressibility with _default, replace `this` access with a local var. 12432 // `|| data` is dead code meant only to preserve the variable through minification. 12433 var el = this || data; 12434 12435 // Claim the first handler 12436 if ( rcheckableType.test( el.type ) && 12437 el.click && nodeName( el, "input" ) ) { 12438 12439 // dataPriv.set( el, "click", ... ) 12440 leverageNative( el, "click", returnTrue ); 12441 } 12442 12443 // Return false to allow normal processing in the caller 12444 return false; 12445 }, 12446 trigger: function( data ) { 12447 12448 // For mutual compressibility with _default, replace `this` access with a local var. 12449 // `|| data` is dead code meant only to preserve the variable through minification. 12450 var el = this || data; 12451 12452 // Force setup before triggering a click 12453 if ( rcheckableType.test( el.type ) && 12454 el.click && nodeName( el, "input" ) ) { 12455 12456 leverageNative( el, "click" ); 12457 } 12458 12459 // Return non-false to allow normal event-path propagation 12460 return true; 12461 }, 12462 12463 // For cross-browser consistency, suppress native .click() on links 12464 // Also prevent it if we're currently inside a leveraged native-event stack 12465 _default: function( event ) { 12466 var target = event.target; 12467 return rcheckableType.test( target.type ) && 12468 target.click && nodeName( target, "input" ) && 12469 dataPriv.get( target, "click" ) || 12470 nodeName( target, "a" ); 12471 } 12472 }, 12473 12474 beforeunload: { 12475 postDispatch: function( event ) { 12476 12477 // Support: Firefox 20+ 12478 // Firefox doesn't alert if the returnValue field is not set. 12479 if ( event.result !== undefined && event.originalEvent ) { 12480 event.originalEvent.returnValue = event.result; 12481 } 12482 } 12483 } 12484 } 12485}; 12486 12487// Ensure the presence of an event listener that handles manually-triggered 12488// synthetic events by interrupting progress until reinvoked in response to 12489// *native* events that it fires directly, ensuring that state changes have 12490// already occurred before other listeners are invoked. 12491function leverageNative( el, type, expectSync ) { 12492 12493 // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add 12494 if ( !expectSync ) { 12495 if ( dataPriv.get( el, type ) === undefined ) { 12496 jQuery.event.add( el, type, returnTrue ); 12497 } 12498 return; 12499 } 12500 12501 // Register the controller as a special universal handler for all event namespaces 12502 dataPriv.set( el, type, false ); 12503 jQuery.event.add( el, type, { 12504 namespace: false, 12505 handler: function( event ) { 12506 var notAsync, result, 12507 saved = dataPriv.get( this, type ); 12508 12509 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 12510 12511 // Interrupt processing of the outer synthetic .trigger()ed event 12512 // Saved data should be false in such cases, but might be a leftover capture object 12513 // from an async native handler (gh-4350) 12514 if ( !saved.length ) { 12515 12516 // Store arguments for use when handling the inner native event 12517 // There will always be at least one argument (an event object), so this array 12518 // will not be confused with a leftover capture object. 12519 saved = slice.call( arguments ); 12520 dataPriv.set( this, type, saved ); 12521 12522 // Trigger the native event and capture its result 12523 // Support: IE <=9 - 11+ 12524 // focus() and blur() are asynchronous 12525 notAsync = expectSync( this, type ); 12526 this[ type ](); 12527 result = dataPriv.get( this, type ); 12528 if ( saved !== result || notAsync ) { 12529 dataPriv.set( this, type, false ); 12530 } else { 12531 result = {}; 12532 } 12533 if ( saved !== result ) { 12534 12535 // Cancel the outer synthetic event 12536 event.stopImmediatePropagation(); 12537 event.preventDefault(); 12538 12539 // Support: Chrome 86+ 12540 // In Chrome, if an element having a focusout handler is blurred by 12541 // clicking outside of it, it invokes the handler synchronously. If 12542 // that handler calls `.remove()` on the element, the data is cleared, 12543 // leaving `result` undefined. We need to guard against this. 12544 return result && result.value; 12545 } 12546 12547 // If this is an inner synthetic event for an event with a bubbling surrogate 12548 // (focus or blur), assume that the surrogate already propagated from triggering the 12549 // native event and prevent that from happening again here. 12550 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 12551 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 12552 // less bad than duplication. 12553 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 12554 event.stopPropagation(); 12555 } 12556 12557 // If this is a native event triggered above, everything is now in order 12558 // Fire an inner synthetic event with the original arguments 12559 } else if ( saved.length ) { 12560 12561 // ...and capture the result 12562 dataPriv.set( this, type, { 12563 value: jQuery.event.trigger( 12564 12565 // Support: IE <=9 - 11+ 12566 // Extend with the prototype to reset the above stopImmediatePropagation() 12567 jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), 12568 saved.slice( 1 ), 12569 this 12570 ) 12571 } ); 12572 12573 // Abort handling of the native event 12574 event.stopImmediatePropagation(); 12575 } 12576 } 12577 } ); 12578} 12579 12580jQuery.removeEvent = function( elem, type, handle ) { 12581 12582 // This "if" is needed for plain objects 12583 if ( elem.removeEventListener ) { 12584 elem.removeEventListener( type, handle ); 12585 } 12586}; 12587 12588jQuery.Event = function( src, props ) { 12589 12590 // Allow instantiation without the 'new' keyword 12591 if ( !( this instanceof jQuery.Event ) ) { 12592 return new jQuery.Event( src, props ); 12593 } 12594 12595 // Event object 12596 if ( src && src.type ) { 12597 this.originalEvent = src; 12598 this.type = src.type; 12599 12600 // Events bubbling up the document may have been marked as prevented 12601 // by a handler lower down the tree; reflect the correct value. 12602 this.isDefaultPrevented = src.defaultPrevented || 12603 src.defaultPrevented === undefined && 12604 12605 // Support: Android <=2.3 only 12606 src.returnValue === false ? 12607 returnTrue : 12608 returnFalse; 12609 12610 // Create target properties 12611 // Support: Safari <=6 - 7 only 12612 // Target should not be a text node (#504, #13143) 12613 this.target = ( src.target && src.target.nodeType === 3 ) ? 12614 src.target.parentNode : 12615 src.target; 12616 12617 this.currentTarget = src.currentTarget; 12618 this.relatedTarget = src.relatedTarget; 12619 12620 // Event type 12621 } else { 12622 this.type = src; 12623 } 12624 12625 // Put explicitly provided properties onto the event object 12626 if ( props ) { 12627 jQuery.extend( this, props ); 12628 } 12629 12630 // Create a timestamp if incoming event doesn't have one 12631 this.timeStamp = src && src.timeStamp || Date.now(); 12632 12633 // Mark it as fixed 12634 this[ jQuery.expando ] = true; 12635}; 12636 12637// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 12638// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 12639jQuery.Event.prototype = { 12640 constructor: jQuery.Event, 12641 isDefaultPrevented: returnFalse, 12642 isPropagationStopped: returnFalse, 12643 isImmediatePropagationStopped: returnFalse, 12644 isSimulated: false, 12645 12646 preventDefault: function() { 12647 var e = this.originalEvent; 12648 12649 this.isDefaultPrevented = returnTrue; 12650 12651 if ( e && !this.isSimulated ) { 12652 e.preventDefault(); 12653 } 12654 }, 12655 stopPropagation: function() { 12656 var e = this.originalEvent; 12657 12658 this.isPropagationStopped = returnTrue; 12659 12660 if ( e && !this.isSimulated ) { 12661 e.stopPropagation(); 12662 } 12663 }, 12664 stopImmediatePropagation: function() { 12665 var e = this.originalEvent; 12666 12667 this.isImmediatePropagationStopped = returnTrue; 12668 12669 if ( e && !this.isSimulated ) { 12670 e.stopImmediatePropagation(); 12671 } 12672 12673 this.stopPropagation(); 12674 } 12675}; 12676 12677// Includes all common event props including KeyEvent and MouseEvent specific props 12678jQuery.each( { 12679 altKey: true, 12680 bubbles: true, 12681 cancelable: true, 12682 changedTouches: true, 12683 ctrlKey: true, 12684 detail: true, 12685 eventPhase: true, 12686 metaKey: true, 12687 pageX: true, 12688 pageY: true, 12689 shiftKey: true, 12690 view: true, 12691 "char": true, 12692 code: true, 12693 charCode: true, 12694 key: true, 12695 keyCode: true, 12696 button: true, 12697 buttons: true, 12698 clientX: true, 12699 clientY: true, 12700 offsetX: true, 12701 offsetY: true, 12702 pointerId: true, 12703 pointerType: true, 12704 screenX: true, 12705 screenY: true, 12706 targetTouches: true, 12707 toElement: true, 12708 touches: true, 12709 which: true 12710}, jQuery.event.addProp ); 12711 12712jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 12713 jQuery.event.special[ type ] = { 12714 12715 // Utilize native event if possible so blur/focus sequence is correct 12716 setup: function() { 12717 12718 // Claim the first handler 12719 // dataPriv.set( this, "focus", ... ) 12720 // dataPriv.set( this, "blur", ... ) 12721 leverageNative( this, type, expectSync ); 12722 12723 // Return false to allow normal processing in the caller 12724 return false; 12725 }, 12726 trigger: function() { 12727 12728 // Force setup before trigger 12729 leverageNative( this, type ); 12730 12731 // Return non-false to allow normal event-path propagation 12732 return true; 12733 }, 12734 12735 // Suppress native focus or blur as it's already being fired 12736 // in leverageNative. 12737 _default: function() { 12738 return true; 12739 }, 12740 12741 delegateType: delegateType 12742 }; 12743} ); 12744 12745// Create mouseenter/leave events using mouseover/out and event-time checks 12746// so that event delegation works in jQuery. 12747// Do the same for pointerenter/pointerleave and pointerover/pointerout 12748// 12749// Support: Safari 7 only 12750// Safari sends mouseenter too often; see: 12751// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 12752// for the description of the bug (it existed in older Chrome versions as well). 12753jQuery.each( { 12754 mouseenter: "mouseover", 12755 mouseleave: "mouseout", 12756 pointerenter: "pointerover", 12757 pointerleave: "pointerout" 12758}, function( orig, fix ) { 12759 jQuery.event.special[ orig ] = { 12760 delegateType: fix, 12761 bindType: fix, 12762 12763 handle: function( event ) { 12764 var ret, 12765 target = this, 12766 related = event.relatedTarget, 12767 handleObj = event.handleObj; 12768 12769 // For mouseenter/leave call the handler if related is outside the target. 12770 // NB: No relatedTarget if the mouse left/entered the browser window 12771 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 12772 event.type = handleObj.origType; 12773 ret = handleObj.handler.apply( this, arguments ); 12774 event.type = fix; 12775 } 12776 return ret; 12777 } 12778 }; 12779} ); 12780 12781jQuery.fn.extend( { 12782 12783 on: function( types, selector, data, fn ) { 12784 return on( this, types, selector, data, fn ); 12785 }, 12786 one: function( types, selector, data, fn ) { 12787 return on( this, types, selector, data, fn, 1 ); 12788 }, 12789 off: function( types, selector, fn ) { 12790 var handleObj, type; 12791 if ( types && types.preventDefault && types.handleObj ) { 12792 12793 // ( event ) dispatched jQuery.Event 12794 handleObj = types.handleObj; 12795 jQuery( types.delegateTarget ).off( 12796 handleObj.namespace ? 12797 handleObj.origType + "." + handleObj.namespace : 12798 handleObj.origType, 12799 handleObj.selector, 12800 handleObj.handler 12801 ); 12802 return this; 12803 } 12804 if ( typeof types === "object" ) { 12805 12806 // ( types-object [, selector] ) 12807 for ( type in types ) { 12808 this.off( type, selector, types[ type ] ); 12809 } 12810 return this; 12811 } 12812 if ( selector === false || typeof selector === "function" ) { 12813 12814 // ( types [, fn] ) 12815 fn = selector; 12816 selector = undefined; 12817 } 12818 if ( fn === false ) { 12819 fn = returnFalse; 12820 } 12821 return this.each( function() { 12822 jQuery.event.remove( this, types, fn, selector ); 12823 } ); 12824 } 12825} ); 12826 12827 12828var 12829 12830 // Support: IE <=10 - 11, Edge 12 - 13 only 12831 // In IE/Edge using regex groups here causes severe slowdowns. 12832 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 12833 rnoInnerhtml = /<script|<style|<link/i, 12834 12835 // checked="checked" or checked 12836 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 12837 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; 12838 12839// Prefer a tbody over its parent table for containing new rows 12840function manipulationTarget( elem, content ) { 12841 if ( nodeName( elem, "table" ) && 12842 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 12843 12844 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 12845 } 12846 12847 return elem; 12848} 12849 12850// Replace/restore the type attribute of script elements for safe DOM manipulation 12851function disableScript( elem ) { 12852 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 12853 return elem; 12854} 12855function restoreScript( elem ) { 12856 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 12857 elem.type = elem.type.slice( 5 ); 12858 } else { 12859 elem.removeAttribute( "type" ); 12860 } 12861 12862 return elem; 12863} 12864 12865function cloneCopyEvent( src, dest ) { 12866 var i, l, type, pdataOld, udataOld, udataCur, events; 12867 12868 if ( dest.nodeType !== 1 ) { 12869 return; 12870 } 12871 12872 // 1. Copy private data: events, handlers, etc. 12873 if ( dataPriv.hasData( src ) ) { 12874 pdataOld = dataPriv.get( src ); 12875 events = pdataOld.events; 12876 12877 if ( events ) { 12878 dataPriv.remove( dest, "handle events" ); 12879 12880 for ( type in events ) { 12881 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 12882 jQuery.event.add( dest, type, events[ type ][ i ] ); 12883 } 12884 } 12885 } 12886 } 12887 12888 // 2. Copy user data 12889 if ( dataUser.hasData( src ) ) { 12890 udataOld = dataUser.access( src ); 12891 udataCur = jQuery.extend( {}, udataOld ); 12892 12893 dataUser.set( dest, udataCur ); 12894 } 12895} 12896 12897// Fix IE bugs, see support tests 12898function fixInput( src, dest ) { 12899 var nodeName = dest.nodeName.toLowerCase(); 12900 12901 // Fails to persist the checked state of a cloned checkbox or radio button. 12902 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 12903 dest.checked = src.checked; 12904 12905 // Fails to return the selected option to the default selected state when cloning options 12906 } else if ( nodeName === "input" || nodeName === "textarea" ) { 12907 dest.defaultValue = src.defaultValue; 12908 } 12909} 12910 12911function domManip( collection, args, callback, ignored ) { 12912 12913 // Flatten any nested arrays 12914 args = flat( args ); 12915 12916 var fragment, first, scripts, hasScripts, node, doc, 12917 i = 0, 12918 l = collection.length, 12919 iNoClone = l - 1, 12920 value = args[ 0 ], 12921 valueIsFunction = isFunction( value ); 12922 12923 // We can't cloneNode fragments that contain checked, in WebKit 12924 if ( valueIsFunction || 12925 ( l > 1 && typeof value === "string" && 12926 !support.checkClone && rchecked.test( value ) ) ) { 12927 return collection.each( function( index ) { 12928 var self = collection.eq( index ); 12929 if ( valueIsFunction ) { 12930 args[ 0 ] = value.call( this, index, self.html() ); 12931 } 12932 domManip( self, args, callback, ignored ); 12933 } ); 12934 } 12935 12936 if ( l ) { 12937 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 12938 first = fragment.firstChild; 12939 12940 if ( fragment.childNodes.length === 1 ) { 12941 fragment = first; 12942 } 12943 12944 // Require either new content or an interest in ignored elements to invoke the callback 12945 if ( first || ignored ) { 12946 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 12947 hasScripts = scripts.length; 12948 12949 // Use the original fragment for the last item 12950 // instead of the first because it can end up 12951 // being emptied incorrectly in certain situations (#8070). 12952 for ( ; i < l; i++ ) { 12953 node = fragment; 12954 12955 if ( i !== iNoClone ) { 12956 node = jQuery.clone( node, true, true ); 12957 12958 // Keep references to cloned scripts for later restoration 12959 if ( hasScripts ) { 12960 12961 // Support: Android <=4.0 only, PhantomJS 1 only 12962 // push.apply(_, arraylike) throws on ancient WebKit 12963 jQuery.merge( scripts, getAll( node, "script" ) ); 12964 } 12965 } 12966 12967 callback.call( collection[ i ], node, i ); 12968 } 12969 12970 if ( hasScripts ) { 12971 doc = scripts[ scripts.length - 1 ].ownerDocument; 12972 12973 // Reenable scripts 12974 jQuery.map( scripts, restoreScript ); 12975 12976 // Evaluate executable scripts on first document insertion 12977 for ( i = 0; i < hasScripts; i++ ) { 12978 node = scripts[ i ]; 12979 if ( rscriptType.test( node.type || "" ) && 12980 !dataPriv.access( node, "globalEval" ) && 12981 jQuery.contains( doc, node ) ) { 12982 12983 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 12984 12985 // Optional AJAX dependency, but won't run scripts if not present 12986 if ( jQuery._evalUrl && !node.noModule ) { 12987 jQuery._evalUrl( node.src, { 12988 nonce: node.nonce || node.getAttribute( "nonce" ) 12989 }, doc ); 12990 } 12991 } else { 12992 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 12993 } 12994 } 12995 } 12996 } 12997 } 12998 } 12999 13000 return collection; 13001} 13002 13003function remove( elem, selector, keepData ) { 13004 var node, 13005 nodes = selector ? jQuery.filter( selector, elem ) : elem, 13006 i = 0; 13007 13008 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 13009 if ( !keepData && node.nodeType === 1 ) { 13010 jQuery.cleanData( getAll( node ) ); 13011 } 13012 13013 if ( node.parentNode ) { 13014 if ( keepData && isAttached( node ) ) { 13015 setGlobalEval( getAll( node, "script" ) ); 13016 } 13017 node.parentNode.removeChild( node ); 13018 } 13019 } 13020 13021 return elem; 13022} 13023 13024jQuery.extend( { 13025 htmlPrefilter: function( html ) { 13026 return html; 13027 }, 13028 13029 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 13030 var i, l, srcElements, destElements, 13031 clone = elem.cloneNode( true ), 13032 inPage = isAttached( elem ); 13033 13034 // Fix IE cloning issues 13035 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 13036 !jQuery.isXMLDoc( elem ) ) { 13037 13038 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 13039 destElements = getAll( clone ); 13040 srcElements = getAll( elem ); 13041 13042 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13043 fixInput( srcElements[ i ], destElements[ i ] ); 13044 } 13045 } 13046 13047 // Copy the events from the original to the clone 13048 if ( dataAndEvents ) { 13049 if ( deepDataAndEvents ) { 13050 srcElements = srcElements || getAll( elem ); 13051 destElements = destElements || getAll( clone ); 13052 13053 for ( i = 0, l = srcElements.length; i < l; i++ ) { 13054 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 13055 } 13056 } else { 13057 cloneCopyEvent( elem, clone ); 13058 } 13059 } 13060 13061 // Preserve script evaluation history 13062 destElements = getAll( clone, "script" ); 13063 if ( destElements.length > 0 ) { 13064 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 13065 } 13066 13067 // Return the cloned set 13068 return clone; 13069 }, 13070 13071 cleanData: function( elems ) { 13072 var data, elem, type, 13073 special = jQuery.event.special, 13074 i = 0; 13075 13076 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 13077 if ( acceptData( elem ) ) { 13078 if ( ( data = elem[ dataPriv.expando ] ) ) { 13079 if ( data.events ) { 13080 for ( type in data.events ) { 13081 if ( special[ type ] ) { 13082 jQuery.event.remove( elem, type ); 13083 13084 // This is a shortcut to avoid jQuery.event.remove's overhead 13085 } else { 13086 jQuery.removeEvent( elem, type, data.handle ); 13087 } 13088 } 13089 } 13090 13091 // Support: Chrome <=35 - 45+ 13092 // Assign undefined instead of using delete, see Data#remove 13093 elem[ dataPriv.expando ] = undefined; 13094 } 13095 if ( elem[ dataUser.expando ] ) { 13096 13097 // Support: Chrome <=35 - 45+ 13098 // Assign undefined instead of using delete, see Data#remove 13099 elem[ dataUser.expando ] = undefined; 13100 } 13101 } 13102 } 13103 } 13104} ); 13105 13106jQuery.fn.extend( { 13107 detach: function( selector ) { 13108 return remove( this, selector, true ); 13109 }, 13110 13111 remove: function( selector ) { 13112 return remove( this, selector ); 13113 }, 13114 13115 text: function( value ) { 13116 return access( this, function( value ) { 13117 return value === undefined ? 13118 jQuery.text( this ) : 13119 this.empty().each( function() { 13120 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13121 this.textContent = value; 13122 } 13123 } ); 13124 }, null, value, arguments.length ); 13125 }, 13126 13127 append: function() { 13128 return domManip( this, arguments, function( elem ) { 13129 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13130 var target = manipulationTarget( this, elem ); 13131 target.appendChild( elem ); 13132 } 13133 } ); 13134 }, 13135 13136 prepend: function() { 13137 return domManip( this, arguments, function( elem ) { 13138 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 13139 var target = manipulationTarget( this, elem ); 13140 target.insertBefore( elem, target.firstChild ); 13141 } 13142 } ); 13143 }, 13144 13145 before: function() { 13146 return domManip( this, arguments, function( elem ) { 13147 if ( this.parentNode ) { 13148 this.parentNode.insertBefore( elem, this ); 13149 } 13150 } ); 13151 }, 13152 13153 after: function() { 13154 return domManip( this, arguments, function( elem ) { 13155 if ( this.parentNode ) { 13156 this.parentNode.insertBefore( elem, this.nextSibling ); 13157 } 13158 } ); 13159 }, 13160 13161 empty: function() { 13162 var elem, 13163 i = 0; 13164 13165 for ( ; ( elem = this[ i ] ) != null; i++ ) { 13166 if ( elem.nodeType === 1 ) { 13167 13168 // Prevent memory leaks 13169 jQuery.cleanData( getAll( elem, false ) ); 13170 13171 // Remove any remaining nodes 13172 elem.textContent = ""; 13173 } 13174 } 13175 13176 return this; 13177 }, 13178 13179 clone: function( dataAndEvents, deepDataAndEvents ) { 13180 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 13181 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 13182 13183 return this.map( function() { 13184 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 13185 } ); 13186 }, 13187 13188 html: function( value ) { 13189 return access( this, function( value ) { 13190 var elem = this[ 0 ] || {}, 13191 i = 0, 13192 l = this.length; 13193 13194 if ( value === undefined && elem.nodeType === 1 ) { 13195 return elem.innerHTML; 13196 } 13197 13198 // See if we can take a shortcut and just use innerHTML 13199 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 13200 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 13201 13202 value = jQuery.htmlPrefilter( value ); 13203 13204 try { 13205 for ( ; i < l; i++ ) { 13206 elem = this[ i ] || {}; 13207 13208 // Remove element nodes and prevent memory leaks 13209 if ( elem.nodeType === 1 ) { 13210 jQuery.cleanData( getAll( elem, false ) ); 13211 elem.innerHTML = value; 13212 } 13213 } 13214 13215 elem = 0; 13216 13217 // If using innerHTML throws an exception, use the fallback method 13218 } catch ( e ) {} 13219 } 13220 13221 if ( elem ) { 13222 this.empty().append( value ); 13223 } 13224 }, null, value, arguments.length ); 13225 }, 13226 13227 replaceWith: function() { 13228 var ignored = []; 13229 13230 // Make the changes, replacing each non-ignored context element with the new content 13231 return domManip( this, arguments, function( elem ) { 13232 var parent = this.parentNode; 13233 13234 if ( jQuery.inArray( this, ignored ) < 0 ) { 13235 jQuery.cleanData( getAll( this ) ); 13236 if ( parent ) { 13237 parent.replaceChild( elem, this ); 13238 } 13239 } 13240 13241 // Force callback invocation 13242 }, ignored ); 13243 } 13244} ); 13245 13246jQuery.each( { 13247 appendTo: "append", 13248 prependTo: "prepend", 13249 insertBefore: "before", 13250 insertAfter: "after", 13251 replaceAll: "replaceWith" 13252}, function( name, original ) { 13253 jQuery.fn[ name ] = function( selector ) { 13254 var elems, 13255 ret = [], 13256 insert = jQuery( selector ), 13257 last = insert.length - 1, 13258 i = 0; 13259 13260 for ( ; i <= last; i++ ) { 13261 elems = i === last ? this : this.clone( true ); 13262 jQuery( insert[ i ] )[ original ]( elems ); 13263 13264 // Support: Android <=4.0 only, PhantomJS 1 only 13265 // .get() because push.apply(_, arraylike) throws on ancient WebKit 13266 push.apply( ret, elems.get() ); 13267 } 13268 13269 return this.pushStack( ret ); 13270 }; 13271} ); 13272var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 13273 13274var getStyles = function( elem ) { 13275 13276 // Support: IE <=11 only, Firefox <=30 (#15098, #14150) 13277 // IE throws on elements created in popups 13278 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 13279 var view = elem.ownerDocument.defaultView; 13280 13281 if ( !view || !view.opener ) { 13282 view = window; 13283 } 13284 13285 return view.getComputedStyle( elem ); 13286 }; 13287 13288var swap = function( elem, options, callback ) { 13289 var ret, name, 13290 old = {}; 13291 13292 // Remember the old values, and insert the new ones 13293 for ( name in options ) { 13294 old[ name ] = elem.style[ name ]; 13295 elem.style[ name ] = options[ name ]; 13296 } 13297 13298 ret = callback.call( elem ); 13299 13300 // Revert the old values 13301 for ( name in options ) { 13302 elem.style[ name ] = old[ name ]; 13303 } 13304 13305 return ret; 13306}; 13307 13308 13309var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 13310 13311 13312 13313( function() { 13314 13315 // Executing both pixelPosition & boxSizingReliable tests require only one layout 13316 // so they're executed at the same time to save the second computation. 13317 function computeStyleTests() { 13318 13319 // This is a singleton, we need to execute it only once 13320 if ( !div ) { 13321 return; 13322 } 13323 13324 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 13325 "margin-top:1px;padding:0;border:0"; 13326 div.style.cssText = 13327 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 13328 "margin:auto;border:1px;padding:1px;" + 13329 "width:60%;top:1%"; 13330 documentElement.appendChild( container ).appendChild( div ); 13331 13332 var divStyle = window.getComputedStyle( div ); 13333 pixelPositionVal = divStyle.top !== "1%"; 13334 13335 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 13336 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 13337 13338 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 13339 // Some styles come back with percentage values, even though they shouldn't 13340 div.style.right = "60%"; 13341 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 13342 13343 // Support: IE 9 - 11 only 13344 // Detect misreporting of content dimensions for box-sizing:border-box elements 13345 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 13346 13347 // Support: IE 9 only 13348 // Detect overflow:scroll screwiness (gh-3699) 13349 // Support: Chrome <=64 13350 // Don't get tricked when zoom affects offsetWidth (gh-4029) 13351 div.style.position = "absolute"; 13352 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 13353 13354 documentElement.removeChild( container ); 13355 13356 // Nullify the div so it wouldn't be stored in the memory and 13357 // it will also be a sign that checks already performed 13358 div = null; 13359 } 13360 13361 function roundPixelMeasures( measure ) { 13362 return Math.round( parseFloat( measure ) ); 13363 } 13364 13365 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 13366 reliableTrDimensionsVal, reliableMarginLeftVal, 13367 container = document.createElement( "div" ), 13368 div = document.createElement( "div" ); 13369 13370 // Finish early in limited (non-browser) environments 13371 if ( !div.style ) { 13372 return; 13373 } 13374 13375 // Support: IE <=9 - 11 only 13376 // Style of cloned element affects source element cloned (#8908) 13377 div.style.backgroundClip = "content-box"; 13378 div.cloneNode( true ).style.backgroundClip = ""; 13379 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 13380 13381 jQuery.extend( support, { 13382 boxSizingReliable: function() { 13383 computeStyleTests(); 13384 return boxSizingReliableVal; 13385 }, 13386 pixelBoxStyles: function() { 13387 computeStyleTests(); 13388 return pixelBoxStylesVal; 13389 }, 13390 pixelPosition: function() { 13391 computeStyleTests(); 13392 return pixelPositionVal; 13393 }, 13394 reliableMarginLeft: function() { 13395 computeStyleTests(); 13396 return reliableMarginLeftVal; 13397 }, 13398 scrollboxSize: function() { 13399 computeStyleTests(); 13400 return scrollboxSizeVal; 13401 }, 13402 13403 // Support: IE 9 - 11+, Edge 15 - 18+ 13404 // IE/Edge misreport `getComputedStyle` of table rows with width/height 13405 // set in CSS while `offset*` properties report correct values. 13406 // Behavior in IE 9 is more subtle than in newer versions & it passes 13407 // some versions of this test; make sure not to make it pass there! 13408 // 13409 // Support: Firefox 70+ 13410 // Only Firefox includes border widths 13411 // in computed dimensions. (gh-4529) 13412 reliableTrDimensions: function() { 13413 var table, tr, trChild, trStyle; 13414 if ( reliableTrDimensionsVal == null ) { 13415 table = document.createElement( "table" ); 13416 tr = document.createElement( "tr" ); 13417 trChild = document.createElement( "div" ); 13418 13419 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 13420 tr.style.cssText = "border:1px solid"; 13421 13422 // Support: Chrome 86+ 13423 // Height set through cssText does not get applied. 13424 // Computed height then comes back as 0. 13425 tr.style.height = "1px"; 13426 trChild.style.height = "9px"; 13427 13428 // Support: Android 8 Chrome 86+ 13429 // In our bodyBackground.html iframe, 13430 // display for all div elements is set to "inline", 13431 // which causes a problem only in Android 8 Chrome 86. 13432 // Ensuring the div is display: block 13433 // gets around this issue. 13434 trChild.style.display = "block"; 13435 13436 documentElement 13437 .appendChild( table ) 13438 .appendChild( tr ) 13439 .appendChild( trChild ); 13440 13441 trStyle = window.getComputedStyle( tr ); 13442 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 13443 parseInt( trStyle.borderTopWidth, 10 ) + 13444 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 13445 13446 documentElement.removeChild( table ); 13447 } 13448 return reliableTrDimensionsVal; 13449 } 13450 } ); 13451} )(); 13452 13453 13454function curCSS( elem, name, computed ) { 13455 var width, minWidth, maxWidth, ret, 13456 13457 // Support: Firefox 51+ 13458 // Retrieving style before computed somehow 13459 // fixes an issue with getting wrong values 13460 // on detached elements 13461 style = elem.style; 13462 13463 computed = computed || getStyles( elem ); 13464 13465 // getPropertyValue is needed for: 13466 // .css('filter') (IE 9 only, #12537) 13467 // .css('--customProperty) (#3144) 13468 if ( computed ) { 13469 ret = computed.getPropertyValue( name ) || computed[ name ]; 13470 13471 if ( ret === "" && !isAttached( elem ) ) { 13472 ret = jQuery.style( elem, name ); 13473 } 13474 13475 // A tribute to the "awesome hack by Dean Edwards" 13476 // Android Browser returns percentage for some values, 13477 // but width seems to be reliably pixels. 13478 // This is against the CSSOM draft spec: 13479 // https://drafts.csswg.org/cssom/#resolved-values 13480 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 13481 13482 // Remember the original values 13483 width = style.width; 13484 minWidth = style.minWidth; 13485 maxWidth = style.maxWidth; 13486 13487 // Put in the new values to get a computed value out 13488 style.minWidth = style.maxWidth = style.width = ret; 13489 ret = computed.width; 13490 13491 // Revert the changed values 13492 style.width = width; 13493 style.minWidth = minWidth; 13494 style.maxWidth = maxWidth; 13495 } 13496 } 13497 13498 return ret !== undefined ? 13499 13500 // Support: IE <=9 - 11 only 13501 // IE returns zIndex value as an integer. 13502 ret + "" : 13503 ret; 13504} 13505 13506 13507function addGetHookIf( conditionFn, hookFn ) { 13508 13509 // Define the hook, we'll check on the first run if it's really needed. 13510 return { 13511 get: function() { 13512 if ( conditionFn() ) { 13513 13514 // Hook not needed (or it's not possible to use it due 13515 // to missing dependency), remove it. 13516 delete this.get; 13517 return; 13518 } 13519 13520 // Hook needed; redefine it so that the support test is not executed again. 13521 return ( this.get = hookFn ).apply( this, arguments ); 13522 } 13523 }; 13524} 13525 13526 13527var cssPrefixes = [ "Webkit", "Moz", "ms" ], 13528 emptyStyle = document.createElement( "div" ).style, 13529 vendorProps = {}; 13530 13531// Return a vendor-prefixed property or undefined 13532function vendorPropName( name ) { 13533 13534 // Check for vendor prefixed names 13535 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 13536 i = cssPrefixes.length; 13537 13538 while ( i-- ) { 13539 name = cssPrefixes[ i ] + capName; 13540 if ( name in emptyStyle ) { 13541 return name; 13542 } 13543 } 13544} 13545 13546// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 13547function finalPropName( name ) { 13548 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 13549 13550 if ( final ) { 13551 return final; 13552 } 13553 if ( name in emptyStyle ) { 13554 return name; 13555 } 13556 return vendorProps[ name ] = vendorPropName( name ) || name; 13557} 13558 13559 13560var 13561 13562 // Swappable if display is none or starts with table 13563 // except "table", "table-cell", or "table-caption" 13564 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 13565 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 13566 rcustomProp = /^--/, 13567 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 13568 cssNormalTransform = { 13569 letterSpacing: "0", 13570 fontWeight: "400" 13571 }; 13572 13573function setPositiveNumber( _elem, value, subtract ) { 13574 13575 // Any relative (+/-) values have already been 13576 // normalized at this point 13577 var matches = rcssNum.exec( value ); 13578 return matches ? 13579 13580 // Guard against undefined "subtract", e.g., when used as in cssHooks 13581 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 13582 value; 13583} 13584 13585function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 13586 var i = dimension === "width" ? 1 : 0, 13587 extra = 0, 13588 delta = 0; 13589 13590 // Adjustment may not be necessary 13591 if ( box === ( isBorderBox ? "border" : "content" ) ) { 13592 return 0; 13593 } 13594 13595 for ( ; i < 4; i += 2 ) { 13596 13597 // Both box models exclude margin 13598 if ( box === "margin" ) { 13599 delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 13600 } 13601 13602 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 13603 if ( !isBorderBox ) { 13604 13605 // Add padding 13606 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 13607 13608 // For "border" or "margin", add border 13609 if ( box !== "padding" ) { 13610 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 13611 13612 // But still keep track of it otherwise 13613 } else { 13614 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 13615 } 13616 13617 // If we get here with a border-box (content + padding + border), we're seeking "content" or 13618 // "padding" or "margin" 13619 } else { 13620 13621 // For "content", subtract padding 13622 if ( box === "content" ) { 13623 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 13624 } 13625 13626 // For "content" or "padding", subtract border 13627 if ( box !== "margin" ) { 13628 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 13629 } 13630 } 13631 } 13632 13633 // Account for positive content-box scroll gutter when requested by providing computedVal 13634 if ( !isBorderBox && computedVal >= 0 ) { 13635 13636 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 13637 // Assuming integer scroll gutter, subtract the rest and round down 13638 delta += Math.max( 0, Math.ceil( 13639 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 13640 computedVal - 13641 delta - 13642 extra - 13643 0.5 13644 13645 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 13646 // Use an explicit zero to avoid NaN (gh-3964) 13647 ) ) || 0; 13648 } 13649 13650 return delta; 13651} 13652 13653function getWidthOrHeight( elem, dimension, extra ) { 13654 13655 // Start with computed style 13656 var styles = getStyles( elem ), 13657 13658 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 13659 // Fake content-box until we know it's needed to know the true value. 13660 boxSizingNeeded = !support.boxSizingReliable() || extra, 13661 isBorderBox = boxSizingNeeded && 13662 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 13663 valueIsBorderBox = isBorderBox, 13664 13665 val = curCSS( elem, dimension, styles ), 13666 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 13667 13668 // Support: Firefox <=54 13669 // Return a confounding non-pixel value or feign ignorance, as appropriate. 13670 if ( rnumnonpx.test( val ) ) { 13671 if ( !extra ) { 13672 return val; 13673 } 13674 val = "auto"; 13675 } 13676 13677 13678 // Support: IE 9 - 11 only 13679 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 13680 // In those cases, the computed value can be trusted to be border-box. 13681 if ( ( !support.boxSizingReliable() && isBorderBox || 13682 13683 // Support: IE 10 - 11+, Edge 15 - 18+ 13684 // IE/Edge misreport `getComputedStyle` of table rows with width/height 13685 // set in CSS while `offset*` properties report correct values. 13686 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 13687 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 13688 13689 // Fall back to offsetWidth/offsetHeight when value is "auto" 13690 // This happens for inline elements with no explicit setting (gh-3571) 13691 val === "auto" || 13692 13693 // Support: Android <=4.1 - 4.3 only 13694 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 13695 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 13696 13697 // Make sure the element is visible & connected 13698 elem.getClientRects().length ) { 13699 13700 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 13701 13702 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 13703 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 13704 // retrieved value as a content box dimension. 13705 valueIsBorderBox = offsetProp in elem; 13706 if ( valueIsBorderBox ) { 13707 val = elem[ offsetProp ]; 13708 } 13709 } 13710 13711 // Normalize "" and auto 13712 val = parseFloat( val ) || 0; 13713 13714 // Adjust for the element's box model 13715 return ( val + 13716 boxModelAdjustment( 13717 elem, 13718 dimension, 13719 extra || ( isBorderBox ? "border" : "content" ), 13720 valueIsBorderBox, 13721 styles, 13722 13723 // Provide the current computed size to request scroll gutter calculation (gh-3589) 13724 val 13725 ) 13726 ) + "px"; 13727} 13728 13729jQuery.extend( { 13730 13731 // Add in style property hooks for overriding the default 13732 // behavior of getting and setting a style property 13733 cssHooks: { 13734 opacity: { 13735 get: function( elem, computed ) { 13736 if ( computed ) { 13737 13738 // We should always get a number back from opacity 13739 var ret = curCSS( elem, "opacity" ); 13740 return ret === "" ? "1" : ret; 13741 } 13742 } 13743 } 13744 }, 13745 13746 // Don't automatically add "px" to these possibly-unitless properties 13747 cssNumber: { 13748 "animationIterationCount": true, 13749 "columnCount": true, 13750 "fillOpacity": true, 13751 "flexGrow": true, 13752 "flexShrink": true, 13753 "fontWeight": true, 13754 "gridArea": true, 13755 "gridColumn": true, 13756 "gridColumnEnd": true, 13757 "gridColumnStart": true, 13758 "gridRow": true, 13759 "gridRowEnd": true, 13760 "gridRowStart": true, 13761 "lineHeight": true, 13762 "opacity": true, 13763 "order": true, 13764 "orphans": true, 13765 "widows": true, 13766 "zIndex": true, 13767 "zoom": true 13768 }, 13769 13770 // Add in properties whose names you wish to fix before 13771 // setting or getting the value 13772 cssProps: {}, 13773 13774 // Get and set the style property on a DOM Node 13775 style: function( elem, name, value, extra ) { 13776 13777 // Don't set styles on text and comment nodes 13778 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 13779 return; 13780 } 13781 13782 // Make sure that we're working with the right name 13783 var ret, type, hooks, 13784 origName = camelCase( name ), 13785 isCustomProp = rcustomProp.test( name ), 13786 style = elem.style; 13787 13788 // Make sure that we're working with the right name. We don't 13789 // want to query the value if it is a CSS custom property 13790 // since they are user-defined. 13791 if ( !isCustomProp ) { 13792 name = finalPropName( origName ); 13793 } 13794 13795 // Gets hook for the prefixed version, then unprefixed version 13796 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 13797 13798 // Check if we're setting a value 13799 if ( value !== undefined ) { 13800 type = typeof value; 13801 13802 // Convert "+=" or "-=" to relative numbers (#7345) 13803 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 13804 value = adjustCSS( elem, name, ret ); 13805 13806 // Fixes bug #9237 13807 type = "number"; 13808 } 13809 13810 // Make sure that null and NaN values aren't set (#7116) 13811 if ( value == null || value !== value ) { 13812 return; 13813 } 13814 13815 // If a number was passed in, add the unit (except for certain CSS properties) 13816 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 13817 // "px" to a few hardcoded values. 13818 if ( type === "number" && !isCustomProp ) { 13819 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 13820 } 13821 13822 // background-* props affect original clone's values 13823 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 13824 style[ name ] = "inherit"; 13825 } 13826 13827 // If a hook was provided, use that value, otherwise just set the specified value 13828 if ( !hooks || !( "set" in hooks ) || 13829 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 13830 13831 if ( isCustomProp ) { 13832 style.setProperty( name, value ); 13833 } else { 13834 style[ name ] = value; 13835 } 13836 } 13837 13838 } else { 13839 13840 // If a hook was provided get the non-computed value from there 13841 if ( hooks && "get" in hooks && 13842 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 13843 13844 return ret; 13845 } 13846 13847 // Otherwise just get the value from the style object 13848 return style[ name ]; 13849 } 13850 }, 13851 13852 css: function( elem, name, extra, styles ) { 13853 var val, num, hooks, 13854 origName = camelCase( name ), 13855 isCustomProp = rcustomProp.test( name ); 13856 13857 // Make sure that we're working with the right name. We don't 13858 // want to modify the value if it is a CSS custom property 13859 // since they are user-defined. 13860 if ( !isCustomProp ) { 13861 name = finalPropName( origName ); 13862 } 13863 13864 // Try prefixed name followed by the unprefixed name 13865 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 13866 13867 // If a hook was provided get the computed value from there 13868 if ( hooks && "get" in hooks ) { 13869 val = hooks.get( elem, true, extra ); 13870 } 13871 13872 // Otherwise, if a way to get the computed value exists, use that 13873 if ( val === undefined ) { 13874 val = curCSS( elem, name, styles ); 13875 } 13876 13877 // Convert "normal" to computed value 13878 if ( val === "normal" && name in cssNormalTransform ) { 13879 val = cssNormalTransform[ name ]; 13880 } 13881 13882 // Make numeric if forced or a qualifier was provided and val looks numeric 13883 if ( extra === "" || extra ) { 13884 num = parseFloat( val ); 13885 return extra === true || isFinite( num ) ? num || 0 : val; 13886 } 13887 13888 return val; 13889 } 13890} ); 13891 13892jQuery.each( [ "height", "width" ], function( _i, dimension ) { 13893 jQuery.cssHooks[ dimension ] = { 13894 get: function( elem, computed, extra ) { 13895 if ( computed ) { 13896 13897 // Certain elements can have dimension info if we invisibly show them 13898 // but it must have a current display style that would benefit 13899 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 13900 13901 // Support: Safari 8+ 13902 // Table columns in Safari have non-zero offsetWidth & zero 13903 // getBoundingClientRect().width unless display is changed. 13904 // Support: IE <=11 only 13905 // Running getBoundingClientRect on a disconnected node 13906 // in IE throws an error. 13907 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 13908 swap( elem, cssShow, function() { 13909 return getWidthOrHeight( elem, dimension, extra ); 13910 } ) : 13911 getWidthOrHeight( elem, dimension, extra ); 13912 } 13913 }, 13914 13915 set: function( elem, value, extra ) { 13916 var matches, 13917 styles = getStyles( elem ), 13918 13919 // Only read styles.position if the test has a chance to fail 13920 // to avoid forcing a reflow. 13921 scrollboxSizeBuggy = !support.scrollboxSize() && 13922 styles.position === "absolute", 13923 13924 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 13925 boxSizingNeeded = scrollboxSizeBuggy || extra, 13926 isBorderBox = boxSizingNeeded && 13927 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 13928 subtract = extra ? 13929 boxModelAdjustment( 13930 elem, 13931 dimension, 13932 extra, 13933 isBorderBox, 13934 styles 13935 ) : 13936 0; 13937 13938 // Account for unreliable border-box dimensions by comparing offset* to computed and 13939 // faking a content-box to get border and padding (gh-3699) 13940 if ( isBorderBox && scrollboxSizeBuggy ) { 13941 subtract -= Math.ceil( 13942 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 13943 parseFloat( styles[ dimension ] ) - 13944 boxModelAdjustment( elem, dimension, "border", false, styles ) - 13945 0.5 13946 ); 13947 } 13948 13949 // Convert to pixels if value adjustment is needed 13950 if ( subtract && ( matches = rcssNum.exec( value ) ) && 13951 ( matches[ 3 ] || "px" ) !== "px" ) { 13952 13953 elem.style[ dimension ] = value; 13954 value = jQuery.css( elem, dimension ); 13955 } 13956 13957 return setPositiveNumber( elem, value, subtract ); 13958 } 13959 }; 13960} ); 13961 13962jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 13963 function( elem, computed ) { 13964 if ( computed ) { 13965 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 13966 elem.getBoundingClientRect().left - 13967 swap( elem, { marginLeft: 0 }, function() { 13968 return elem.getBoundingClientRect().left; 13969 } ) 13970 ) + "px"; 13971 } 13972 } 13973); 13974 13975// These hooks are used by animate to expand properties 13976jQuery.each( { 13977 margin: "", 13978 padding: "", 13979 border: "Width" 13980}, function( prefix, suffix ) { 13981 jQuery.cssHooks[ prefix + suffix ] = { 13982 expand: function( value ) { 13983 var i = 0, 13984 expanded = {}, 13985 13986 // Assumes a single number if not a string 13987 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 13988 13989 for ( ; i < 4; i++ ) { 13990 expanded[ prefix + cssExpand[ i ] + suffix ] = 13991 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 13992 } 13993 13994 return expanded; 13995 } 13996 }; 13997 13998 if ( prefix !== "margin" ) { 13999 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 14000 } 14001} ); 14002 14003jQuery.fn.extend( { 14004 css: function( name, value ) { 14005 return access( this, function( elem, name, value ) { 14006 var styles, len, 14007 map = {}, 14008 i = 0; 14009 14010 if ( Array.isArray( name ) ) { 14011 styles = getStyles( elem ); 14012 len = name.length; 14013 14014 for ( ; i < len; i++ ) { 14015 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 14016 } 14017 14018 return map; 14019 } 14020 14021 return value !== undefined ? 14022 jQuery.style( elem, name, value ) : 14023 jQuery.css( elem, name ); 14024 }, name, value, arguments.length > 1 ); 14025 } 14026} ); 14027 14028 14029function Tween( elem, options, prop, end, easing ) { 14030 return new Tween.prototype.init( elem, options, prop, end, easing ); 14031} 14032jQuery.Tween = Tween; 14033 14034Tween.prototype = { 14035 constructor: Tween, 14036 init: function( elem, options, prop, end, easing, unit ) { 14037 this.elem = elem; 14038 this.prop = prop; 14039 this.easing = easing || jQuery.easing._default; 14040 this.options = options; 14041 this.start = this.now = this.cur(); 14042 this.end = end; 14043 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 14044 }, 14045 cur: function() { 14046 var hooks = Tween.propHooks[ this.prop ]; 14047 14048 return hooks && hooks.get ? 14049 hooks.get( this ) : 14050 Tween.propHooks._default.get( this ); 14051 }, 14052 run: function( percent ) { 14053 var eased, 14054 hooks = Tween.propHooks[ this.prop ]; 14055 14056 if ( this.options.duration ) { 14057 this.pos = eased = jQuery.easing[ this.easing ]( 14058 percent, this.options.duration * percent, 0, 1, this.options.duration 14059 ); 14060 } else { 14061 this.pos = eased = percent; 14062 } 14063 this.now = ( this.end - this.start ) * eased + this.start; 14064 14065 if ( this.options.step ) { 14066 this.options.step.call( this.elem, this.now, this ); 14067 } 14068 14069 if ( hooks && hooks.set ) { 14070 hooks.set( this ); 14071 } else { 14072 Tween.propHooks._default.set( this ); 14073 } 14074 return this; 14075 } 14076}; 14077 14078Tween.prototype.init.prototype = Tween.prototype; 14079 14080Tween.propHooks = { 14081 _default: { 14082 get: function( tween ) { 14083 var result; 14084 14085 // Use a property on the element directly when it is not a DOM element, 14086 // or when there is no matching style property that exists. 14087 if ( tween.elem.nodeType !== 1 || 14088 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 14089 return tween.elem[ tween.prop ]; 14090 } 14091 14092 // Passing an empty string as a 3rd parameter to .css will automatically 14093 // attempt a parseFloat and fallback to a string if the parse fails. 14094 // Simple values such as "10px" are parsed to Float; 14095 // complex values such as "rotate(1rad)" are returned as-is. 14096 result = jQuery.css( tween.elem, tween.prop, "" ); 14097 14098 // Empty strings, null, undefined and "auto" are converted to 0. 14099 return !result || result === "auto" ? 0 : result; 14100 }, 14101 set: function( tween ) { 14102 14103 // Use step hook for back compat. 14104 // Use cssHook if its there. 14105 // Use .style if available and use plain properties where available. 14106 if ( jQuery.fx.step[ tween.prop ] ) { 14107 jQuery.fx.step[ tween.prop ]( tween ); 14108 } else if ( tween.elem.nodeType === 1 && ( 14109 jQuery.cssHooks[ tween.prop ] || 14110 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 14111 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 14112 } else { 14113 tween.elem[ tween.prop ] = tween.now; 14114 } 14115 } 14116 } 14117}; 14118 14119// Support: IE <=9 only 14120// Panic based approach to setting things on disconnected nodes 14121Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 14122 set: function( tween ) { 14123 if ( tween.elem.nodeType && tween.elem.parentNode ) { 14124 tween.elem[ tween.prop ] = tween.now; 14125 } 14126 } 14127}; 14128 14129jQuery.easing = { 14130 linear: function( p ) { 14131 return p; 14132 }, 14133 swing: function( p ) { 14134 return 0.5 - Math.cos( p * Math.PI ) / 2; 14135 }, 14136 _default: "swing" 14137}; 14138 14139jQuery.fx = Tween.prototype.init; 14140 14141// Back compat <1.8 extension point 14142jQuery.fx.step = {}; 14143 14144 14145 14146 14147var 14148 fxNow, inProgress, 14149 rfxtypes = /^(?:toggle|show|hide)$/, 14150 rrun = /queueHooks$/; 14151 14152function schedule() { 14153 if ( inProgress ) { 14154 if ( document.hidden === false && window.requestAnimationFrame ) { 14155 window.requestAnimationFrame( schedule ); 14156 } else { 14157 window.setTimeout( schedule, jQuery.fx.interval ); 14158 } 14159 14160 jQuery.fx.tick(); 14161 } 14162} 14163 14164// Animations created synchronously will run synchronously 14165function createFxNow() { 14166 window.setTimeout( function() { 14167 fxNow = undefined; 14168 } ); 14169 return ( fxNow = Date.now() ); 14170} 14171 14172// Generate parameters to create a standard animation 14173function genFx( type, includeWidth ) { 14174 var which, 14175 i = 0, 14176 attrs = { height: type }; 14177 14178 // If we include width, step value is 1 to do all cssExpand values, 14179 // otherwise step value is 2 to skip over Left and Right 14180 includeWidth = includeWidth ? 1 : 0; 14181 for ( ; i < 4; i += 2 - includeWidth ) { 14182 which = cssExpand[ i ]; 14183 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 14184 } 14185 14186 if ( includeWidth ) { 14187 attrs.opacity = attrs.width = type; 14188 } 14189 14190 return attrs; 14191} 14192 14193function createTween( value, prop, animation ) { 14194 var tween, 14195 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 14196 index = 0, 14197 length = collection.length; 14198 for ( ; index < length; index++ ) { 14199 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 14200 14201 // We're done with this property 14202 return tween; 14203 } 14204 } 14205} 14206 14207function defaultPrefilter( elem, props, opts ) { 14208 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 14209 isBox = "width" in props || "height" in props, 14210 anim = this, 14211 orig = {}, 14212 style = elem.style, 14213 hidden = elem.nodeType && isHiddenWithinTree( elem ), 14214 dataShow = dataPriv.get( elem, "fxshow" ); 14215 14216 // Queue-skipping animations hijack the fx hooks 14217 if ( !opts.queue ) { 14218 hooks = jQuery._queueHooks( elem, "fx" ); 14219 if ( hooks.unqueued == null ) { 14220 hooks.unqueued = 0; 14221 oldfire = hooks.empty.fire; 14222 hooks.empty.fire = function() { 14223 if ( !hooks.unqueued ) { 14224 oldfire(); 14225 } 14226 }; 14227 } 14228 hooks.unqueued++; 14229 14230 anim.always( function() { 14231 14232 // Ensure the complete handler is called before this completes 14233 anim.always( function() { 14234 hooks.unqueued--; 14235 if ( !jQuery.queue( elem, "fx" ).length ) { 14236 hooks.empty.fire(); 14237 } 14238 } ); 14239 } ); 14240 } 14241 14242 // Detect show/hide animations 14243 for ( prop in props ) { 14244 value = props[ prop ]; 14245 if ( rfxtypes.test( value ) ) { 14246 delete props[ prop ]; 14247 toggle = toggle || value === "toggle"; 14248 if ( value === ( hidden ? "hide" : "show" ) ) { 14249 14250 // Pretend to be hidden if this is a "show" and 14251 // there is still data from a stopped show/hide 14252 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 14253 hidden = true; 14254 14255 // Ignore all other no-op show/hide data 14256 } else { 14257 continue; 14258 } 14259 } 14260 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 14261 } 14262 } 14263 14264 // Bail out if this is a no-op like .hide().hide() 14265 propTween = !jQuery.isEmptyObject( props ); 14266 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 14267 return; 14268 } 14269 14270 // Restrict "overflow" and "display" styles during box animations 14271 if ( isBox && elem.nodeType === 1 ) { 14272 14273 // Support: IE <=9 - 11, Edge 12 - 15 14274 // Record all 3 overflow attributes because IE does not infer the shorthand 14275 // from identically-valued overflowX and overflowY and Edge just mirrors 14276 // the overflowX value there. 14277 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 14278 14279 // Identify a display type, preferring old show/hide data over the CSS cascade 14280 restoreDisplay = dataShow && dataShow.display; 14281 if ( restoreDisplay == null ) { 14282 restoreDisplay = dataPriv.get( elem, "display" ); 14283 } 14284 display = jQuery.css( elem, "display" ); 14285 if ( display === "none" ) { 14286 if ( restoreDisplay ) { 14287 display = restoreDisplay; 14288 } else { 14289 14290 // Get nonempty value(s) by temporarily forcing visibility 14291 showHide( [ elem ], true ); 14292 restoreDisplay = elem.style.display || restoreDisplay; 14293 display = jQuery.css( elem, "display" ); 14294 showHide( [ elem ] ); 14295 } 14296 } 14297 14298 // Animate inline elements as inline-block 14299 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 14300 if ( jQuery.css( elem, "float" ) === "none" ) { 14301 14302 // Restore the original display value at the end of pure show/hide animations 14303 if ( !propTween ) { 14304 anim.done( function() { 14305 style.display = restoreDisplay; 14306 } ); 14307 if ( restoreDisplay == null ) { 14308 display = style.display; 14309 restoreDisplay = display === "none" ? "" : display; 14310 } 14311 } 14312 style.display = "inline-block"; 14313 } 14314 } 14315 } 14316 14317 if ( opts.overflow ) { 14318 style.overflow = "hidden"; 14319 anim.always( function() { 14320 style.overflow = opts.overflow[ 0 ]; 14321 style.overflowX = opts.overflow[ 1 ]; 14322 style.overflowY = opts.overflow[ 2 ]; 14323 } ); 14324 } 14325 14326 // Implement show/hide animations 14327 propTween = false; 14328 for ( prop in orig ) { 14329 14330 // General show/hide setup for this element animation 14331 if ( !propTween ) { 14332 if ( dataShow ) { 14333 if ( "hidden" in dataShow ) { 14334 hidden = dataShow.hidden; 14335 } 14336 } else { 14337 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 14338 } 14339 14340 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 14341 if ( toggle ) { 14342 dataShow.hidden = !hidden; 14343 } 14344 14345 // Show elements before animating them 14346 if ( hidden ) { 14347 showHide( [ elem ], true ); 14348 } 14349 14350 /* eslint-disable no-loop-func */ 14351 14352 anim.done( function() { 14353 14354 /* eslint-enable no-loop-func */ 14355 14356 // The final step of a "hide" animation is actually hiding the element 14357 if ( !hidden ) { 14358 showHide( [ elem ] ); 14359 } 14360 dataPriv.remove( elem, "fxshow" ); 14361 for ( prop in orig ) { 14362 jQuery.style( elem, prop, orig[ prop ] ); 14363 } 14364 } ); 14365 } 14366 14367 // Per-property setup 14368 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 14369 if ( !( prop in dataShow ) ) { 14370 dataShow[ prop ] = propTween.start; 14371 if ( hidden ) { 14372 propTween.end = propTween.start; 14373 propTween.start = 0; 14374 } 14375 } 14376 } 14377} 14378 14379function propFilter( props, specialEasing ) { 14380 var index, name, easing, value, hooks; 14381 14382 // camelCase, specialEasing and expand cssHook pass 14383 for ( index in props ) { 14384 name = camelCase( index ); 14385 easing = specialEasing[ name ]; 14386 value = props[ index ]; 14387 if ( Array.isArray( value ) ) { 14388 easing = value[ 1 ]; 14389 value = props[ index ] = value[ 0 ]; 14390 } 14391 14392 if ( index !== name ) { 14393 props[ name ] = value; 14394 delete props[ index ]; 14395 } 14396 14397 hooks = jQuery.cssHooks[ name ]; 14398 if ( hooks && "expand" in hooks ) { 14399 value = hooks.expand( value ); 14400 delete props[ name ]; 14401 14402 // Not quite $.extend, this won't overwrite existing keys. 14403 // Reusing 'index' because we have the correct "name" 14404 for ( index in value ) { 14405 if ( !( index in props ) ) { 14406 props[ index ] = value[ index ]; 14407 specialEasing[ index ] = easing; 14408 } 14409 } 14410 } else { 14411 specialEasing[ name ] = easing; 14412 } 14413 } 14414} 14415 14416function Animation( elem, properties, options ) { 14417 var result, 14418 stopped, 14419 index = 0, 14420 length = Animation.prefilters.length, 14421 deferred = jQuery.Deferred().always( function() { 14422 14423 // Don't match elem in the :animated selector 14424 delete tick.elem; 14425 } ), 14426 tick = function() { 14427 if ( stopped ) { 14428 return false; 14429 } 14430 var currentTime = fxNow || createFxNow(), 14431 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 14432 14433 // Support: Android 2.3 only 14434 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 14435 temp = remaining / animation.duration || 0, 14436 percent = 1 - temp, 14437 index = 0, 14438 length = animation.tweens.length; 14439 14440 for ( ; index < length; index++ ) { 14441 animation.tweens[ index ].run( percent ); 14442 } 14443 14444 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 14445 14446 // If there's more to do, yield 14447 if ( percent < 1 && length ) { 14448 return remaining; 14449 } 14450 14451 // If this was an empty animation, synthesize a final progress notification 14452 if ( !length ) { 14453 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 14454 } 14455 14456 // Resolve the animation and report its conclusion 14457 deferred.resolveWith( elem, [ animation ] ); 14458 return false; 14459 }, 14460 animation = deferred.promise( { 14461 elem: elem, 14462 props: jQuery.extend( {}, properties ), 14463 opts: jQuery.extend( true, { 14464 specialEasing: {}, 14465 easing: jQuery.easing._default 14466 }, options ), 14467 originalProperties: properties, 14468 originalOptions: options, 14469 startTime: fxNow || createFxNow(), 14470 duration: options.duration, 14471 tweens: [], 14472 createTween: function( prop, end ) { 14473 var tween = jQuery.Tween( elem, animation.opts, prop, end, 14474 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 14475 animation.tweens.push( tween ); 14476 return tween; 14477 }, 14478 stop: function( gotoEnd ) { 14479 var index = 0, 14480 14481 // If we are going to the end, we want to run all the tweens 14482 // otherwise we skip this part 14483 length = gotoEnd ? animation.tweens.length : 0; 14484 if ( stopped ) { 14485 return this; 14486 } 14487 stopped = true; 14488 for ( ; index < length; index++ ) { 14489 animation.tweens[ index ].run( 1 ); 14490 } 14491 14492 // Resolve when we played the last frame; otherwise, reject 14493 if ( gotoEnd ) { 14494 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 14495 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 14496 } else { 14497 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 14498 } 14499 return this; 14500 } 14501 } ), 14502 props = animation.props; 14503 14504 propFilter( props, animation.opts.specialEasing ); 14505 14506 for ( ; index < length; index++ ) { 14507 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 14508 if ( result ) { 14509 if ( isFunction( result.stop ) ) { 14510 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 14511 result.stop.bind( result ); 14512 } 14513 return result; 14514 } 14515 } 14516 14517 jQuery.map( props, createTween, animation ); 14518 14519 if ( isFunction( animation.opts.start ) ) { 14520 animation.opts.start.call( elem, animation ); 14521 } 14522 14523 // Attach callbacks from options 14524 animation 14525 .progress( animation.opts.progress ) 14526 .done( animation.opts.done, animation.opts.complete ) 14527 .fail( animation.opts.fail ) 14528 .always( animation.opts.always ); 14529 14530 jQuery.fx.timer( 14531 jQuery.extend( tick, { 14532 elem: elem, 14533 anim: animation, 14534 queue: animation.opts.queue 14535 } ) 14536 ); 14537 14538 return animation; 14539} 14540 14541jQuery.Animation = jQuery.extend( Animation, { 14542 14543 tweeners: { 14544 "*": [ function( prop, value ) { 14545 var tween = this.createTween( prop, value ); 14546 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 14547 return tween; 14548 } ] 14549 }, 14550 14551 tweener: function( props, callback ) { 14552 if ( isFunction( props ) ) { 14553 callback = props; 14554 props = [ "*" ]; 14555 } else { 14556 props = props.match( rnothtmlwhite ); 14557 } 14558 14559 var prop, 14560 index = 0, 14561 length = props.length; 14562 14563 for ( ; index < length; index++ ) { 14564 prop = props[ index ]; 14565 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 14566 Animation.tweeners[ prop ].unshift( callback ); 14567 } 14568 }, 14569 14570 prefilters: [ defaultPrefilter ], 14571 14572 prefilter: function( callback, prepend ) { 14573 if ( prepend ) { 14574 Animation.prefilters.unshift( callback ); 14575 } else { 14576 Animation.prefilters.push( callback ); 14577 } 14578 } 14579} ); 14580 14581jQuery.speed = function( speed, easing, fn ) { 14582 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 14583 complete: fn || !fn && easing || 14584 isFunction( speed ) && speed, 14585 duration: speed, 14586 easing: fn && easing || easing && !isFunction( easing ) && easing 14587 }; 14588 14589 // Go to the end state if fx are off 14590 if ( jQuery.fx.off ) { 14591 opt.duration = 0; 14592 14593 } else { 14594 if ( typeof opt.duration !== "number" ) { 14595 if ( opt.duration in jQuery.fx.speeds ) { 14596 opt.duration = jQuery.fx.speeds[ opt.duration ]; 14597 14598 } else { 14599 opt.duration = jQuery.fx.speeds._default; 14600 } 14601 } 14602 } 14603 14604 // Normalize opt.queue - true/undefined/null -> "fx" 14605 if ( opt.queue == null || opt.queue === true ) { 14606 opt.queue = "fx"; 14607 } 14608 14609 // Queueing 14610 opt.old = opt.complete; 14611 14612 opt.complete = function() { 14613 if ( isFunction( opt.old ) ) { 14614 opt.old.call( this ); 14615 } 14616 14617 if ( opt.queue ) { 14618 jQuery.dequeue( this, opt.queue ); 14619 } 14620 }; 14621 14622 return opt; 14623}; 14624 14625jQuery.fn.extend( { 14626 fadeTo: function( speed, to, easing, callback ) { 14627 14628 // Show any hidden elements after setting opacity to 0 14629 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 14630 14631 // Animate to the value specified 14632 .end().animate( { opacity: to }, speed, easing, callback ); 14633 }, 14634 animate: function( prop, speed, easing, callback ) { 14635 var empty = jQuery.isEmptyObject( prop ), 14636 optall = jQuery.speed( speed, easing, callback ), 14637 doAnimation = function() { 14638 14639 // Operate on a copy of prop so per-property easing won't be lost 14640 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 14641 14642 // Empty animations, or finishing resolves immediately 14643 if ( empty || dataPriv.get( this, "finish" ) ) { 14644 anim.stop( true ); 14645 } 14646 }; 14647 14648 doAnimation.finish = doAnimation; 14649 14650 return empty || optall.queue === false ? 14651 this.each( doAnimation ) : 14652 this.queue( optall.queue, doAnimation ); 14653 }, 14654 stop: function( type, clearQueue, gotoEnd ) { 14655 var stopQueue = function( hooks ) { 14656 var stop = hooks.stop; 14657 delete hooks.stop; 14658 stop( gotoEnd ); 14659 }; 14660 14661 if ( typeof type !== "string" ) { 14662 gotoEnd = clearQueue; 14663 clearQueue = type; 14664 type = undefined; 14665 } 14666 if ( clearQueue ) { 14667 this.queue( type || "fx", [] ); 14668 } 14669 14670 return this.each( function() { 14671 var dequeue = true, 14672 index = type != null && type + "queueHooks", 14673 timers = jQuery.timers, 14674 data = dataPriv.get( this ); 14675 14676 if ( index ) { 14677 if ( data[ index ] && data[ index ].stop ) { 14678 stopQueue( data[ index ] ); 14679 } 14680 } else { 14681 for ( index in data ) { 14682 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 14683 stopQueue( data[ index ] ); 14684 } 14685 } 14686 } 14687 14688 for ( index = timers.length; index--; ) { 14689 if ( timers[ index ].elem === this && 14690 ( type == null || timers[ index ].queue === type ) ) { 14691 14692 timers[ index ].anim.stop( gotoEnd ); 14693 dequeue = false; 14694 timers.splice( index, 1 ); 14695 } 14696 } 14697 14698 // Start the next in the queue if the last step wasn't forced. 14699 // Timers currently will call their complete callbacks, which 14700 // will dequeue but only if they were gotoEnd. 14701 if ( dequeue || !gotoEnd ) { 14702 jQuery.dequeue( this, type ); 14703 } 14704 } ); 14705 }, 14706 finish: function( type ) { 14707 if ( type !== false ) { 14708 type = type || "fx"; 14709 } 14710 return this.each( function() { 14711 var index, 14712 data = dataPriv.get( this ), 14713 queue = data[ type + "queue" ], 14714 hooks = data[ type + "queueHooks" ], 14715 timers = jQuery.timers, 14716 length = queue ? queue.length : 0; 14717 14718 // Enable finishing flag on private data 14719 data.finish = true; 14720 14721 // Empty the queue first 14722 jQuery.queue( this, type, [] ); 14723 14724 if ( hooks && hooks.stop ) { 14725 hooks.stop.call( this, true ); 14726 } 14727 14728 // Look for any active animations, and finish them 14729 for ( index = timers.length; index--; ) { 14730 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 14731 timers[ index ].anim.stop( true ); 14732 timers.splice( index, 1 ); 14733 } 14734 } 14735 14736 // Look for any animations in the old queue and finish them 14737 for ( index = 0; index < length; index++ ) { 14738 if ( queue[ index ] && queue[ index ].finish ) { 14739 queue[ index ].finish.call( this ); 14740 } 14741 } 14742 14743 // Turn off finishing flag 14744 delete data.finish; 14745 } ); 14746 } 14747} ); 14748 14749jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 14750 var cssFn = jQuery.fn[ name ]; 14751 jQuery.fn[ name ] = function( speed, easing, callback ) { 14752 return speed == null || typeof speed === "boolean" ? 14753 cssFn.apply( this, arguments ) : 14754 this.animate( genFx( name, true ), speed, easing, callback ); 14755 }; 14756} ); 14757 14758// Generate shortcuts for custom animations 14759jQuery.each( { 14760 slideDown: genFx( "show" ), 14761 slideUp: genFx( "hide" ), 14762 slideToggle: genFx( "toggle" ), 14763 fadeIn: { opacity: "show" }, 14764 fadeOut: { opacity: "hide" }, 14765 fadeToggle: { opacity: "toggle" } 14766}, function( name, props ) { 14767 jQuery.fn[ name ] = function( speed, easing, callback ) { 14768 return this.animate( props, speed, easing, callback ); 14769 }; 14770} ); 14771 14772jQuery.timers = []; 14773jQuery.fx.tick = function() { 14774 var timer, 14775 i = 0, 14776 timers = jQuery.timers; 14777 14778 fxNow = Date.now(); 14779 14780 for ( ; i < timers.length; i++ ) { 14781 timer = timers[ i ]; 14782 14783 // Run the timer and safely remove it when done (allowing for external removal) 14784 if ( !timer() && timers[ i ] === timer ) { 14785 timers.splice( i--, 1 ); 14786 } 14787 } 14788 14789 if ( !timers.length ) { 14790 jQuery.fx.stop(); 14791 } 14792 fxNow = undefined; 14793}; 14794 14795jQuery.fx.timer = function( timer ) { 14796 jQuery.timers.push( timer ); 14797 jQuery.fx.start(); 14798}; 14799 14800jQuery.fx.interval = 13; 14801jQuery.fx.start = function() { 14802 if ( inProgress ) { 14803 return; 14804 } 14805 14806 inProgress = true; 14807 schedule(); 14808}; 14809 14810jQuery.fx.stop = function() { 14811 inProgress = null; 14812}; 14813 14814jQuery.fx.speeds = { 14815 slow: 600, 14816 fast: 200, 14817 14818 // Default speed 14819 _default: 400 14820}; 14821 14822 14823// Based off of the plugin by Clint Helfers, with permission. 14824// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ 14825jQuery.fn.delay = function( time, type ) { 14826 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 14827 type = type || "fx"; 14828 14829 return this.queue( type, function( next, hooks ) { 14830 var timeout = window.setTimeout( next, time ); 14831 hooks.stop = function() { 14832 window.clearTimeout( timeout ); 14833 }; 14834 } ); 14835}; 14836 14837 14838( function() { 14839 var input = document.createElement( "input" ), 14840 select = document.createElement( "select" ), 14841 opt = select.appendChild( document.createElement( "option" ) ); 14842 14843 input.type = "checkbox"; 14844 14845 // Support: Android <=4.3 only 14846 // Default value for a checkbox should be "on" 14847 support.checkOn = input.value !== ""; 14848 14849 // Support: IE <=11 only 14850 // Must access selectedIndex to make default options select 14851 support.optSelected = opt.selected; 14852 14853 // Support: IE <=11 only 14854 // An input loses its value after becoming a radio 14855 input = document.createElement( "input" ); 14856 input.value = "t"; 14857 input.type = "radio"; 14858 support.radioValue = input.value === "t"; 14859} )(); 14860 14861 14862var boolHook, 14863 attrHandle = jQuery.expr.attrHandle; 14864 14865jQuery.fn.extend( { 14866 attr: function( name, value ) { 14867 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 14868 }, 14869 14870 removeAttr: function( name ) { 14871 return this.each( function() { 14872 jQuery.removeAttr( this, name ); 14873 } ); 14874 } 14875} ); 14876 14877jQuery.extend( { 14878 attr: function( elem, name, value ) { 14879 var ret, hooks, 14880 nType = elem.nodeType; 14881 14882 // Don't get/set attributes on text, comment and attribute nodes 14883 if ( nType === 3 || nType === 8 || nType === 2 ) { 14884 return; 14885 } 14886 14887 // Fallback to prop when attributes are not supported 14888 if ( typeof elem.getAttribute === "undefined" ) { 14889 return jQuery.prop( elem, name, value ); 14890 } 14891 14892 // Attribute hooks are determined by the lowercase version 14893 // Grab necessary hook if one is defined 14894 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 14895 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 14896 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 14897 } 14898 14899 if ( value !== undefined ) { 14900 if ( value === null ) { 14901 jQuery.removeAttr( elem, name ); 14902 return; 14903 } 14904 14905 if ( hooks && "set" in hooks && 14906 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 14907 return ret; 14908 } 14909 14910 elem.setAttribute( name, value + "" ); 14911 return value; 14912 } 14913 14914 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 14915 return ret; 14916 } 14917 14918 ret = jQuery.find.attr( elem, name ); 14919 14920 // Non-existent attributes return null, we normalize to undefined 14921 return ret == null ? undefined : ret; 14922 }, 14923 14924 attrHooks: { 14925 type: { 14926 set: function( elem, value ) { 14927 if ( !support.radioValue && value === "radio" && 14928 nodeName( elem, "input" ) ) { 14929 var val = elem.value; 14930 elem.setAttribute( "type", value ); 14931 if ( val ) { 14932 elem.value = val; 14933 } 14934 return value; 14935 } 14936 } 14937 } 14938 }, 14939 14940 removeAttr: function( elem, value ) { 14941 var name, 14942 i = 0, 14943 14944 // Attribute names can contain non-HTML whitespace characters 14945 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 14946 attrNames = value && value.match( rnothtmlwhite ); 14947 14948 if ( attrNames && elem.nodeType === 1 ) { 14949 while ( ( name = attrNames[ i++ ] ) ) { 14950 elem.removeAttribute( name ); 14951 } 14952 } 14953 } 14954} ); 14955 14956// Hooks for boolean attributes 14957boolHook = { 14958 set: function( elem, value, name ) { 14959 if ( value === false ) { 14960 14961 // Remove boolean attributes when set to false 14962 jQuery.removeAttr( elem, name ); 14963 } else { 14964 elem.setAttribute( name, name ); 14965 } 14966 return name; 14967 } 14968}; 14969 14970jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 14971 var getter = attrHandle[ name ] || jQuery.find.attr; 14972 14973 attrHandle[ name ] = function( elem, name, isXML ) { 14974 var ret, handle, 14975 lowercaseName = name.toLowerCase(); 14976 14977 if ( !isXML ) { 14978 14979 // Avoid an infinite loop by temporarily removing this function from the getter 14980 handle = attrHandle[ lowercaseName ]; 14981 attrHandle[ lowercaseName ] = ret; 14982 ret = getter( elem, name, isXML ) != null ? 14983 lowercaseName : 14984 null; 14985 attrHandle[ lowercaseName ] = handle; 14986 } 14987 return ret; 14988 }; 14989} ); 14990 14991 14992 14993 14994var rfocusable = /^(?:input|select|textarea|button)$/i, 14995 rclickable = /^(?:a|area)$/i; 14996 14997jQuery.fn.extend( { 14998 prop: function( name, value ) { 14999 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 15000 }, 15001 15002 removeProp: function( name ) { 15003 return this.each( function() { 15004 delete this[ jQuery.propFix[ name ] || name ]; 15005 } ); 15006 } 15007} ); 15008 15009jQuery.extend( { 15010 prop: function( elem, name, value ) { 15011 var ret, hooks, 15012 nType = elem.nodeType; 15013 15014 // Don't get/set properties on text, comment and attribute nodes 15015 if ( nType === 3 || nType === 8 || nType === 2 ) { 15016 return; 15017 } 15018 15019 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 15020 15021 // Fix name and attach hooks 15022 name = jQuery.propFix[ name ] || name; 15023 hooks = jQuery.propHooks[ name ]; 15024 } 15025 15026 if ( value !== undefined ) { 15027 if ( hooks && "set" in hooks && 15028 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 15029 return ret; 15030 } 15031 15032 return ( elem[ name ] = value ); 15033 } 15034 15035 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 15036 return ret; 15037 } 15038 15039 return elem[ name ]; 15040 }, 15041 15042 propHooks: { 15043 tabIndex: { 15044 get: function( elem ) { 15045 15046 // Support: IE <=9 - 11 only 15047 // elem.tabIndex doesn't always return the 15048 // correct value when it hasn't been explicitly set 15049 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 15050 // Use proper attribute retrieval(#12072) 15051 var tabindex = jQuery.find.attr( elem, "tabindex" ); 15052 15053 if ( tabindex ) { 15054 return parseInt( tabindex, 10 ); 15055 } 15056 15057 if ( 15058 rfocusable.test( elem.nodeName ) || 15059 rclickable.test( elem.nodeName ) && 15060 elem.href 15061 ) { 15062 return 0; 15063 } 15064 15065 return -1; 15066 } 15067 } 15068 }, 15069 15070 propFix: { 15071 "for": "htmlFor", 15072 "class": "className" 15073 } 15074} ); 15075 15076// Support: IE <=11 only 15077// Accessing the selectedIndex property 15078// forces the browser to respect setting selected 15079// on the option 15080// The getter ensures a default option is selected 15081// when in an optgroup 15082// eslint rule "no-unused-expressions" is disabled for this code 15083// since it considers such accessions noop 15084if ( !support.optSelected ) { 15085 jQuery.propHooks.selected = { 15086 get: function( elem ) { 15087 15088 /* eslint no-unused-expressions: "off" */ 15089 15090 var parent = elem.parentNode; 15091 if ( parent && parent.parentNode ) { 15092 parent.parentNode.selectedIndex; 15093 } 15094 return null; 15095 }, 15096 set: function( elem ) { 15097 15098 /* eslint no-unused-expressions: "off" */ 15099 15100 var parent = elem.parentNode; 15101 if ( parent ) { 15102 parent.selectedIndex; 15103 15104 if ( parent.parentNode ) { 15105 parent.parentNode.selectedIndex; 15106 } 15107 } 15108 } 15109 }; 15110} 15111 15112jQuery.each( [ 15113 "tabIndex", 15114 "readOnly", 15115 "maxLength", 15116 "cellSpacing", 15117 "cellPadding", 15118 "rowSpan", 15119 "colSpan", 15120 "useMap", 15121 "frameBorder", 15122 "contentEditable" 15123], function() { 15124 jQuery.propFix[ this.toLowerCase() ] = this; 15125} ); 15126 15127 15128 15129 15130 // Strip and collapse whitespace according to HTML spec 15131 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 15132 function stripAndCollapse( value ) { 15133 var tokens = value.match( rnothtmlwhite ) || []; 15134 return tokens.join( " " ); 15135 } 15136 15137 15138function getClass( elem ) { 15139 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 15140} 15141 15142function classesToArray( value ) { 15143 if ( Array.isArray( value ) ) { 15144 return value; 15145 } 15146 if ( typeof value === "string" ) { 15147 return value.match( rnothtmlwhite ) || []; 15148 } 15149 return []; 15150} 15151 15152jQuery.fn.extend( { 15153 addClass: function( value ) { 15154 var classes, elem, cur, curValue, clazz, j, finalValue, 15155 i = 0; 15156 15157 if ( isFunction( value ) ) { 15158 return this.each( function( j ) { 15159 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 15160 } ); 15161 } 15162 15163 classes = classesToArray( value ); 15164 15165 if ( classes.length ) { 15166 while ( ( elem = this[ i++ ] ) ) { 15167 curValue = getClass( elem ); 15168 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 15169 15170 if ( cur ) { 15171 j = 0; 15172 while ( ( clazz = classes[ j++ ] ) ) { 15173 if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 15174 cur += clazz + " "; 15175 } 15176 } 15177 15178 // Only assign if different to avoid unneeded rendering. 15179 finalValue = stripAndCollapse( cur ); 15180 if ( curValue !== finalValue ) { 15181 elem.setAttribute( "class", finalValue ); 15182 } 15183 } 15184 } 15185 } 15186 15187 return this; 15188 }, 15189 15190 removeClass: function( value ) { 15191 var classes, elem, cur, curValue, clazz, j, finalValue, 15192 i = 0; 15193 15194 if ( isFunction( value ) ) { 15195 return this.each( function( j ) { 15196 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 15197 } ); 15198 } 15199 15200 if ( !arguments.length ) { 15201 return this.attr( "class", "" ); 15202 } 15203 15204 classes = classesToArray( value ); 15205 15206 if ( classes.length ) { 15207 while ( ( elem = this[ i++ ] ) ) { 15208 curValue = getClass( elem ); 15209 15210 // This expression is here for better compressibility (see addClass) 15211 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 15212 15213 if ( cur ) { 15214 j = 0; 15215 while ( ( clazz = classes[ j++ ] ) ) { 15216 15217 // Remove *all* instances 15218 while ( cur.indexOf( " " + clazz + " " ) > -1 ) { 15219 cur = cur.replace( " " + clazz + " ", " " ); 15220 } 15221 } 15222 15223 // Only assign if different to avoid unneeded rendering. 15224 finalValue = stripAndCollapse( cur ); 15225 if ( curValue !== finalValue ) { 15226 elem.setAttribute( "class", finalValue ); 15227 } 15228 } 15229 } 15230 } 15231 15232 return this; 15233 }, 15234 15235 toggleClass: function( value, stateVal ) { 15236 var type = typeof value, 15237 isValidValue = type === "string" || Array.isArray( value ); 15238 15239 if ( typeof stateVal === "boolean" && isValidValue ) { 15240 return stateVal ? this.addClass( value ) : this.removeClass( value ); 15241 } 15242 15243 if ( isFunction( value ) ) { 15244 return this.each( function( i ) { 15245 jQuery( this ).toggleClass( 15246 value.call( this, i, getClass( this ), stateVal ), 15247 stateVal 15248 ); 15249 } ); 15250 } 15251 15252 return this.each( function() { 15253 var className, i, self, classNames; 15254 15255 if ( isValidValue ) { 15256 15257 // Toggle individual class names 15258 i = 0; 15259 self = jQuery( this ); 15260 classNames = classesToArray( value ); 15261 15262 while ( ( className = classNames[ i++ ] ) ) { 15263 15264 // Check each className given, space separated list 15265 if ( self.hasClass( className ) ) { 15266 self.removeClass( className ); 15267 } else { 15268 self.addClass( className ); 15269 } 15270 } 15271 15272 // Toggle whole class name 15273 } else if ( value === undefined || type === "boolean" ) { 15274 className = getClass( this ); 15275 if ( className ) { 15276 15277 // Store className if set 15278 dataPriv.set( this, "__className__", className ); 15279 } 15280 15281 // If the element has a class name or if we're passed `false`, 15282 // then remove the whole classname (if there was one, the above saved it). 15283 // Otherwise bring back whatever was previously saved (if anything), 15284 // falling back to the empty string if nothing was stored. 15285 if ( this.setAttribute ) { 15286 this.setAttribute( "class", 15287 className || value === false ? 15288 "" : 15289 dataPriv.get( this, "__className__" ) || "" 15290 ); 15291 } 15292 } 15293 } ); 15294 }, 15295 15296 hasClass: function( selector ) { 15297 var className, elem, 15298 i = 0; 15299 15300 className = " " + selector + " "; 15301 while ( ( elem = this[ i++ ] ) ) { 15302 if ( elem.nodeType === 1 && 15303 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 15304 return true; 15305 } 15306 } 15307 15308 return false; 15309 } 15310} ); 15311 15312 15313 15314 15315var rreturn = /\r/g; 15316 15317jQuery.fn.extend( { 15318 val: function( value ) { 15319 var hooks, ret, valueIsFunction, 15320 elem = this[ 0 ]; 15321 15322 if ( !arguments.length ) { 15323 if ( elem ) { 15324 hooks = jQuery.valHooks[ elem.type ] || 15325 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 15326 15327 if ( hooks && 15328 "get" in hooks && 15329 ( ret = hooks.get( elem, "value" ) ) !== undefined 15330 ) { 15331 return ret; 15332 } 15333 15334 ret = elem.value; 15335 15336 // Handle most common string cases 15337 if ( typeof ret === "string" ) { 15338 return ret.replace( rreturn, "" ); 15339 } 15340 15341 // Handle cases where value is null/undef or number 15342 return ret == null ? "" : ret; 15343 } 15344 15345 return; 15346 } 15347 15348 valueIsFunction = isFunction( value ); 15349 15350 return this.each( function( i ) { 15351 var val; 15352 15353 if ( this.nodeType !== 1 ) { 15354 return; 15355 } 15356 15357 if ( valueIsFunction ) { 15358 val = value.call( this, i, jQuery( this ).val() ); 15359 } else { 15360 val = value; 15361 } 15362 15363 // Treat null/undefined as ""; convert numbers to string 15364 if ( val == null ) { 15365 val = ""; 15366 15367 } else if ( typeof val === "number" ) { 15368 val += ""; 15369 15370 } else if ( Array.isArray( val ) ) { 15371 val = jQuery.map( val, function( value ) { 15372 return value == null ? "" : value + ""; 15373 } ); 15374 } 15375 15376 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 15377 15378 // If set returns undefined, fall back to normal setting 15379 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 15380 this.value = val; 15381 } 15382 } ); 15383 } 15384} ); 15385 15386jQuery.extend( { 15387 valHooks: { 15388 option: { 15389 get: function( elem ) { 15390 15391 var val = jQuery.find.attr( elem, "value" ); 15392 return val != null ? 15393 val : 15394 15395 // Support: IE <=10 - 11 only 15396 // option.text throws exceptions (#14686, #14858) 15397 // Strip and collapse whitespace 15398 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 15399 stripAndCollapse( jQuery.text( elem ) ); 15400 } 15401 }, 15402 select: { 15403 get: function( elem ) { 15404 var value, option, i, 15405 options = elem.options, 15406 index = elem.selectedIndex, 15407 one = elem.type === "select-one", 15408 values = one ? null : [], 15409 max = one ? index + 1 : options.length; 15410 15411 if ( index < 0 ) { 15412 i = max; 15413 15414 } else { 15415 i = one ? index : 0; 15416 } 15417 15418 // Loop through all the selected options 15419 for ( ; i < max; i++ ) { 15420 option = options[ i ]; 15421 15422 // Support: IE <=9 only 15423 // IE8-9 doesn't update selected after form reset (#2551) 15424 if ( ( option.selected || i === index ) && 15425 15426 // Don't return options that are disabled or in a disabled optgroup 15427 !option.disabled && 15428 ( !option.parentNode.disabled || 15429 !nodeName( option.parentNode, "optgroup" ) ) ) { 15430 15431 // Get the specific value for the option 15432 value = jQuery( option ).val(); 15433 15434 // We don't need an array for one selects 15435 if ( one ) { 15436 return value; 15437 } 15438 15439 // Multi-Selects return an array 15440 values.push( value ); 15441 } 15442 } 15443 15444 return values; 15445 }, 15446 15447 set: function( elem, value ) { 15448 var optionSet, option, 15449 options = elem.options, 15450 values = jQuery.makeArray( value ), 15451 i = options.length; 15452 15453 while ( i-- ) { 15454 option = options[ i ]; 15455 15456 /* eslint-disable no-cond-assign */ 15457 15458 if ( option.selected = 15459 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 15460 ) { 15461 optionSet = true; 15462 } 15463 15464 /* eslint-enable no-cond-assign */ 15465 } 15466 15467 // Force browsers to behave consistently when non-matching value is set 15468 if ( !optionSet ) { 15469 elem.selectedIndex = -1; 15470 } 15471 return values; 15472 } 15473 } 15474 } 15475} ); 15476 15477// Radios and checkboxes getter/setter 15478jQuery.each( [ "radio", "checkbox" ], function() { 15479 jQuery.valHooks[ this ] = { 15480 set: function( elem, value ) { 15481 if ( Array.isArray( value ) ) { 15482 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 15483 } 15484 } 15485 }; 15486 if ( !support.checkOn ) { 15487 jQuery.valHooks[ this ].get = function( elem ) { 15488 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 15489 }; 15490 } 15491} ); 15492 15493 15494 15495 15496// Return jQuery for attributes-only inclusion 15497 15498 15499support.focusin = "onfocusin" in window; 15500 15501 15502var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 15503 stopPropagationCallback = function( e ) { 15504 e.stopPropagation(); 15505 }; 15506 15507jQuery.extend( jQuery.event, { 15508 15509 trigger: function( event, data, elem, onlyHandlers ) { 15510 15511 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 15512 eventPath = [ elem || document ], 15513 type = hasOwn.call( event, "type" ) ? event.type : event, 15514 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 15515 15516 cur = lastElement = tmp = elem = elem || document; 15517 15518 // Don't do events on text and comment nodes 15519 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 15520 return; 15521 } 15522 15523 // focus/blur morphs to focusin/out; ensure we're not firing them right now 15524 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 15525 return; 15526 } 15527 15528 if ( type.indexOf( "." ) > -1 ) { 15529 15530 // Namespaced trigger; create a regexp to match event type in handle() 15531 namespaces = type.split( "." ); 15532 type = namespaces.shift(); 15533 namespaces.sort(); 15534 } 15535 ontype = type.indexOf( ":" ) < 0 && "on" + type; 15536 15537 // Caller can pass in a jQuery.Event object, Object, or just an event type string 15538 event = event[ jQuery.expando ] ? 15539 event : 15540 new jQuery.Event( type, typeof event === "object" && event ); 15541 15542 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 15543 event.isTrigger = onlyHandlers ? 2 : 3; 15544 event.namespace = namespaces.join( "." ); 15545 event.rnamespace = event.namespace ? 15546 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 15547 null; 15548 15549 // Clean up the event in case it is being reused 15550 event.result = undefined; 15551 if ( !event.target ) { 15552 event.target = elem; 15553 } 15554 15555 // Clone any incoming data and prepend the event, creating the handler arg list 15556 data = data == null ? 15557 [ event ] : 15558 jQuery.makeArray( data, [ event ] ); 15559 15560 // Allow special events to draw outside the lines 15561 special = jQuery.event.special[ type ] || {}; 15562 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 15563 return; 15564 } 15565 15566 // Determine event propagation path in advance, per W3C events spec (#9951) 15567 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 15568 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 15569 15570 bubbleType = special.delegateType || type; 15571 if ( !rfocusMorph.test( bubbleType + type ) ) { 15572 cur = cur.parentNode; 15573 } 15574 for ( ; cur; cur = cur.parentNode ) { 15575 eventPath.push( cur ); 15576 tmp = cur; 15577 } 15578 15579 // Only add window if we got to document (e.g., not plain obj or detached DOM) 15580 if ( tmp === ( elem.ownerDocument || document ) ) { 15581 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 15582 } 15583 } 15584 15585 // Fire handlers on the event path 15586 i = 0; 15587 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 15588 lastElement = cur; 15589 event.type = i > 1 ? 15590 bubbleType : 15591 special.bindType || type; 15592 15593 // jQuery handler 15594 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 15595 dataPriv.get( cur, "handle" ); 15596 if ( handle ) { 15597 handle.apply( cur, data ); 15598 } 15599 15600 // Native handler 15601 handle = ontype && cur[ ontype ]; 15602 if ( handle && handle.apply && acceptData( cur ) ) { 15603 event.result = handle.apply( cur, data ); 15604 if ( event.result === false ) { 15605 event.preventDefault(); 15606 } 15607 } 15608 } 15609 event.type = type; 15610 15611 // If nobody prevented the default action, do it now 15612 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 15613 15614 if ( ( !special._default || 15615 special._default.apply( eventPath.pop(), data ) === false ) && 15616 acceptData( elem ) ) { 15617 15618 // Call a native DOM method on the target with the same name as the event. 15619 // Don't do default actions on window, that's where global variables be (#6170) 15620 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 15621 15622 // Don't re-trigger an onFOO event when we call its FOO() method 15623 tmp = elem[ ontype ]; 15624 15625 if ( tmp ) { 15626 elem[ ontype ] = null; 15627 } 15628 15629 // Prevent re-triggering of the same event, since we already bubbled it above 15630 jQuery.event.triggered = type; 15631 15632 if ( event.isPropagationStopped() ) { 15633 lastElement.addEventListener( type, stopPropagationCallback ); 15634 } 15635 15636 elem[ type ](); 15637 15638 if ( event.isPropagationStopped() ) { 15639 lastElement.removeEventListener( type, stopPropagationCallback ); 15640 } 15641 15642 jQuery.event.triggered = undefined; 15643 15644 if ( tmp ) { 15645 elem[ ontype ] = tmp; 15646 } 15647 } 15648 } 15649 } 15650 15651 return event.result; 15652 }, 15653 15654 // Piggyback on a donor event to simulate a different one 15655 // Used only for `focus(in | out)` events 15656 simulate: function( type, elem, event ) { 15657 var e = jQuery.extend( 15658 new jQuery.Event(), 15659 event, 15660 { 15661 type: type, 15662 isSimulated: true 15663 } 15664 ); 15665 15666 jQuery.event.trigger( e, null, elem ); 15667 } 15668 15669} ); 15670 15671jQuery.fn.extend( { 15672 15673 trigger: function( type, data ) { 15674 return this.each( function() { 15675 jQuery.event.trigger( type, data, this ); 15676 } ); 15677 }, 15678 triggerHandler: function( type, data ) { 15679 var elem = this[ 0 ]; 15680 if ( elem ) { 15681 return jQuery.event.trigger( type, data, elem, true ); 15682 } 15683 } 15684} ); 15685 15686 15687// Support: Firefox <=44 15688// Firefox doesn't have focus(in | out) events 15689// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 15690// 15691// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 15692// focus(in | out) events fire after focus & blur events, 15693// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 15694// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 15695if ( !support.focusin ) { 15696 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 15697 15698 // Attach a single capturing handler on the document while someone wants focusin/focusout 15699 var handler = function( event ) { 15700 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 15701 }; 15702 15703 jQuery.event.special[ fix ] = { 15704 setup: function() { 15705 15706 // Handle: regular nodes (via `this.ownerDocument`), window 15707 // (via `this.document`) & document (via `this`). 15708 var doc = this.ownerDocument || this.document || this, 15709 attaches = dataPriv.access( doc, fix ); 15710 15711 if ( !attaches ) { 15712 doc.addEventListener( orig, handler, true ); 15713 } 15714 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 15715 }, 15716 teardown: function() { 15717 var doc = this.ownerDocument || this.document || this, 15718 attaches = dataPriv.access( doc, fix ) - 1; 15719 15720 if ( !attaches ) { 15721 doc.removeEventListener( orig, handler, true ); 15722 dataPriv.remove( doc, fix ); 15723 15724 } else { 15725 dataPriv.access( doc, fix, attaches ); 15726 } 15727 } 15728 }; 15729 } ); 15730} 15731var location = window.location; 15732 15733var nonce = { guid: Date.now() }; 15734 15735var rquery = ( /\?/ ); 15736 15737 15738 15739// Cross-browser xml parsing 15740jQuery.parseXML = function( data ) { 15741 var xml, parserErrorElem; 15742 if ( !data || typeof data !== "string" ) { 15743 return null; 15744 } 15745 15746 // Support: IE 9 - 11 only 15747 // IE throws on parseFromString with invalid input. 15748 try { 15749 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 15750 } catch ( e ) {} 15751 15752 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 15753 if ( !xml || parserErrorElem ) { 15754 jQuery.error( "Invalid XML: " + ( 15755 parserErrorElem ? 15756 jQuery.map( parserErrorElem.childNodes, function( el ) { 15757 return el.textContent; 15758 } ).join( "\n" ) : 15759 data 15760 ) ); 15761 } 15762 return xml; 15763}; 15764 15765 15766var 15767 rbracket = /\[\]$/, 15768 rCRLF = /\r?\n/g, 15769 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 15770 rsubmittable = /^(?:input|select|textarea|keygen)/i; 15771 15772function buildParams( prefix, obj, traditional, add ) { 15773 var name; 15774 15775 if ( Array.isArray( obj ) ) { 15776 15777 // Serialize array item. 15778 jQuery.each( obj, function( i, v ) { 15779 if ( traditional || rbracket.test( prefix ) ) { 15780 15781 // Treat each array item as a scalar. 15782 add( prefix, v ); 15783 15784 } else { 15785 15786 // Item is non-scalar (array or object), encode its numeric index. 15787 buildParams( 15788 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 15789 v, 15790 traditional, 15791 add 15792 ); 15793 } 15794 } ); 15795 15796 } else if ( !traditional && toType( obj ) === "object" ) { 15797 15798 // Serialize object item. 15799 for ( name in obj ) { 15800 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 15801 } 15802 15803 } else { 15804 15805 // Serialize scalar item. 15806 add( prefix, obj ); 15807 } 15808} 15809 15810// Serialize an array of form elements or a set of 15811// key/values into a query string 15812jQuery.param = function( a, traditional ) { 15813 var prefix, 15814 s = [], 15815 add = function( key, valueOrFunction ) { 15816 15817 // If value is a function, invoke it and use its return value 15818 var value = isFunction( valueOrFunction ) ? 15819 valueOrFunction() : 15820 valueOrFunction; 15821 15822 s[ s.length ] = encodeURIComponent( key ) + "=" + 15823 encodeURIComponent( value == null ? "" : value ); 15824 }; 15825 15826 if ( a == null ) { 15827 return ""; 15828 } 15829 15830 // If an array was passed in, assume that it is an array of form elements. 15831 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 15832 15833 // Serialize the form elements 15834 jQuery.each( a, function() { 15835 add( this.name, this.value ); 15836 } ); 15837 15838 } else { 15839 15840 // If traditional, encode the "old" way (the way 1.3.2 or older 15841 // did it), otherwise encode params recursively. 15842 for ( prefix in a ) { 15843 buildParams( prefix, a[ prefix ], traditional, add ); 15844 } 15845 } 15846 15847 // Return the resulting serialization 15848 return s.join( "&" ); 15849}; 15850 15851jQuery.fn.extend( { 15852 serialize: function() { 15853 return jQuery.param( this.serializeArray() ); 15854 }, 15855 serializeArray: function() { 15856 return this.map( function() { 15857 15858 // Can add propHook for "elements" to filter or add form elements 15859 var elements = jQuery.prop( this, "elements" ); 15860 return elements ? jQuery.makeArray( elements ) : this; 15861 } ).filter( function() { 15862 var type = this.type; 15863 15864 // Use .is( ":disabled" ) so that fieldset[disabled] works 15865 return this.name && !jQuery( this ).is( ":disabled" ) && 15866 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 15867 ( this.checked || !rcheckableType.test( type ) ); 15868 } ).map( function( _i, elem ) { 15869 var val = jQuery( this ).val(); 15870 15871 if ( val == null ) { 15872 return null; 15873 } 15874 15875 if ( Array.isArray( val ) ) { 15876 return jQuery.map( val, function( val ) { 15877 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 15878 } ); 15879 } 15880 15881 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 15882 } ).get(); 15883 } 15884} ); 15885 15886 15887var 15888 r20 = /%20/g, 15889 rhash = /#.*$/, 15890 rantiCache = /([?&])_=[^&]*/, 15891 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 15892 15893 // #7653, #8125, #8152: local protocol detection 15894 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 15895 rnoContent = /^(?:GET|HEAD)$/, 15896 rprotocol = /^\/\//, 15897 15898 /* Prefilters 15899 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 15900 * 2) These are called: 15901 * - BEFORE asking for a transport 15902 * - AFTER param serialization (s.data is a string if s.processData is true) 15903 * 3) key is the dataType 15904 * 4) the catchall symbol "*" can be used 15905 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 15906 */ 15907 prefilters = {}, 15908 15909 /* Transports bindings 15910 * 1) key is the dataType 15911 * 2) the catchall symbol "*" can be used 15912 * 3) selection will start with transport dataType and THEN go to "*" if needed 15913 */ 15914 transports = {}, 15915 15916 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 15917 allTypes = "*/".concat( "*" ), 15918 15919 // Anchor tag for parsing the document origin 15920 originAnchor = document.createElement( "a" ); 15921 15922originAnchor.href = location.href; 15923 15924// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 15925function addToPrefiltersOrTransports( structure ) { 15926 15927 // dataTypeExpression is optional and defaults to "*" 15928 return function( dataTypeExpression, func ) { 15929 15930 if ( typeof dataTypeExpression !== "string" ) { 15931 func = dataTypeExpression; 15932 dataTypeExpression = "*"; 15933 } 15934 15935 var dataType, 15936 i = 0, 15937 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 15938 15939 if ( isFunction( func ) ) { 15940 15941 // For each dataType in the dataTypeExpression 15942 while ( ( dataType = dataTypes[ i++ ] ) ) { 15943 15944 // Prepend if requested 15945 if ( dataType[ 0 ] === "+" ) { 15946 dataType = dataType.slice( 1 ) || "*"; 15947 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 15948 15949 // Otherwise append 15950 } else { 15951 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 15952 } 15953 } 15954 } 15955 }; 15956} 15957 15958// Base inspection function for prefilters and transports 15959function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 15960 15961 var inspected = {}, 15962 seekingTransport = ( structure === transports ); 15963 15964 function inspect( dataType ) { 15965 var selected; 15966 inspected[ dataType ] = true; 15967 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 15968 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 15969 if ( typeof dataTypeOrTransport === "string" && 15970 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 15971 15972 options.dataTypes.unshift( dataTypeOrTransport ); 15973 inspect( dataTypeOrTransport ); 15974 return false; 15975 } else if ( seekingTransport ) { 15976 return !( selected = dataTypeOrTransport ); 15977 } 15978 } ); 15979 return selected; 15980 } 15981 15982 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 15983} 15984 15985// A special extend for ajax options 15986// that takes "flat" options (not to be deep extended) 15987// Fixes #9887 15988function ajaxExtend( target, src ) { 15989 var key, deep, 15990 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 15991 15992 for ( key in src ) { 15993 if ( src[ key ] !== undefined ) { 15994 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 15995 } 15996 } 15997 if ( deep ) { 15998 jQuery.extend( true, target, deep ); 15999 } 16000 16001 return target; 16002} 16003 16004/* Handles responses to an ajax request: 16005 * - finds the right dataType (mediates between content-type and expected dataType) 16006 * - returns the corresponding response 16007 */ 16008function ajaxHandleResponses( s, jqXHR, responses ) { 16009 16010 var ct, type, finalDataType, firstDataType, 16011 contents = s.contents, 16012 dataTypes = s.dataTypes; 16013 16014 // Remove auto dataType and get content-type in the process 16015 while ( dataTypes[ 0 ] === "*" ) { 16016 dataTypes.shift(); 16017 if ( ct === undefined ) { 16018 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 16019 } 16020 } 16021 16022 // Check if we're dealing with a known content-type 16023 if ( ct ) { 16024 for ( type in contents ) { 16025 if ( contents[ type ] && contents[ type ].test( ct ) ) { 16026 dataTypes.unshift( type ); 16027 break; 16028 } 16029 } 16030 } 16031 16032 // Check to see if we have a response for the expected dataType 16033 if ( dataTypes[ 0 ] in responses ) { 16034 finalDataType = dataTypes[ 0 ]; 16035 } else { 16036 16037 // Try convertible dataTypes 16038 for ( type in responses ) { 16039 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 16040 finalDataType = type; 16041 break; 16042 } 16043 if ( !firstDataType ) { 16044 firstDataType = type; 16045 } 16046 } 16047 16048 // Or just use first one 16049 finalDataType = finalDataType || firstDataType; 16050 } 16051 16052 // If we found a dataType 16053 // We add the dataType to the list if needed 16054 // and return the corresponding response 16055 if ( finalDataType ) { 16056 if ( finalDataType !== dataTypes[ 0 ] ) { 16057 dataTypes.unshift( finalDataType ); 16058 } 16059 return responses[ finalDataType ]; 16060 } 16061} 16062 16063/* Chain conversions given the request and the original response 16064 * Also sets the responseXXX fields on the jqXHR instance 16065 */ 16066function ajaxConvert( s, response, jqXHR, isSuccess ) { 16067 var conv2, current, conv, tmp, prev, 16068 converters = {}, 16069 16070 // Work with a copy of dataTypes in case we need to modify it for conversion 16071 dataTypes = s.dataTypes.slice(); 16072 16073 // Create converters map with lowercased keys 16074 if ( dataTypes[ 1 ] ) { 16075 for ( conv in s.converters ) { 16076 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 16077 } 16078 } 16079 16080 current = dataTypes.shift(); 16081 16082 // Convert to each sequential dataType 16083 while ( current ) { 16084 16085 if ( s.responseFields[ current ] ) { 16086 jqXHR[ s.responseFields[ current ] ] = response; 16087 } 16088 16089 // Apply the dataFilter if provided 16090 if ( !prev && isSuccess && s.dataFilter ) { 16091 response = s.dataFilter( response, s.dataType ); 16092 } 16093 16094 prev = current; 16095 current = dataTypes.shift(); 16096 16097 if ( current ) { 16098 16099 // There's only work to do if current dataType is non-auto 16100 if ( current === "*" ) { 16101 16102 current = prev; 16103 16104 // Convert response if prev dataType is non-auto and differs from current 16105 } else if ( prev !== "*" && prev !== current ) { 16106 16107 // Seek a direct converter 16108 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 16109 16110 // If none found, seek a pair 16111 if ( !conv ) { 16112 for ( conv2 in converters ) { 16113 16114 // If conv2 outputs current 16115 tmp = conv2.split( " " ); 16116 if ( tmp[ 1 ] === current ) { 16117 16118 // If prev can be converted to accepted input 16119 conv = converters[ prev + " " + tmp[ 0 ] ] || 16120 converters[ "* " + tmp[ 0 ] ]; 16121 if ( conv ) { 16122 16123 // Condense equivalence converters 16124 if ( conv === true ) { 16125 conv = converters[ conv2 ]; 16126 16127 // Otherwise, insert the intermediate dataType 16128 } else if ( converters[ conv2 ] !== true ) { 16129 current = tmp[ 0 ]; 16130 dataTypes.unshift( tmp[ 1 ] ); 16131 } 16132 break; 16133 } 16134 } 16135 } 16136 } 16137 16138 // Apply converter (if not an equivalence) 16139 if ( conv !== true ) { 16140 16141 // Unless errors are allowed to bubble, catch and return them 16142 if ( conv && s.throws ) { 16143 response = conv( response ); 16144 } else { 16145 try { 16146 response = conv( response ); 16147 } catch ( e ) { 16148 return { 16149 state: "parsererror", 16150 error: conv ? e : "No conversion from " + prev + " to " + current 16151 }; 16152 } 16153 } 16154 } 16155 } 16156 } 16157 } 16158 16159 return { state: "success", data: response }; 16160} 16161 16162jQuery.extend( { 16163 16164 // Counter for holding the number of active queries 16165 active: 0, 16166 16167 // Last-Modified header cache for next request 16168 lastModified: {}, 16169 etag: {}, 16170 16171 ajaxSettings: { 16172 url: location.href, 16173 type: "GET", 16174 isLocal: rlocalProtocol.test( location.protocol ), 16175 global: true, 16176 processData: true, 16177 async: true, 16178 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 16179 16180 /* 16181 timeout: 0, 16182 data: null, 16183 dataType: null, 16184 username: null, 16185 password: null, 16186 cache: null, 16187 throws: false, 16188 traditional: false, 16189 headers: {}, 16190 */ 16191 16192 accepts: { 16193 "*": allTypes, 16194 text: "text/plain", 16195 html: "text/html", 16196 xml: "application/xml, text/xml", 16197 json: "application/json, text/javascript" 16198 }, 16199 16200 contents: { 16201 xml: /\bxml\b/, 16202 html: /\bhtml/, 16203 json: /\bjson\b/ 16204 }, 16205 16206 responseFields: { 16207 xml: "responseXML", 16208 text: "responseText", 16209 json: "responseJSON" 16210 }, 16211 16212 // Data converters 16213 // Keys separate source (or catchall "*") and destination types with a single space 16214 converters: { 16215 16216 // Convert anything to text 16217 "* text": String, 16218 16219 // Text to html (true = no transformation) 16220 "text html": true, 16221 16222 // Evaluate text as a json expression 16223 "text json": JSON.parse, 16224 16225 // Parse text as xml 16226 "text xml": jQuery.parseXML 16227 }, 16228 16229 // For options that shouldn't be deep extended: 16230 // you can add your own custom options here if 16231 // and when you create one that shouldn't be 16232 // deep extended (see ajaxExtend) 16233 flatOptions: { 16234 url: true, 16235 context: true 16236 } 16237 }, 16238 16239 // Creates a full fledged settings object into target 16240 // with both ajaxSettings and settings fields. 16241 // If target is omitted, writes into ajaxSettings. 16242 ajaxSetup: function( target, settings ) { 16243 return settings ? 16244 16245 // Building a settings object 16246 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 16247 16248 // Extending ajaxSettings 16249 ajaxExtend( jQuery.ajaxSettings, target ); 16250 }, 16251 16252 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 16253 ajaxTransport: addToPrefiltersOrTransports( transports ), 16254 16255 // Main method 16256 ajax: function( url, options ) { 16257 16258 // If url is an object, simulate pre-1.5 signature 16259 if ( typeof url === "object" ) { 16260 options = url; 16261 url = undefined; 16262 } 16263 16264 // Force options to be an object 16265 options = options || {}; 16266 16267 var transport, 16268 16269 // URL without anti-cache param 16270 cacheURL, 16271 16272 // Response headers 16273 responseHeadersString, 16274 responseHeaders, 16275 16276 // timeout handle 16277 timeoutTimer, 16278 16279 // Url cleanup var 16280 urlAnchor, 16281 16282 // Request state (becomes false upon send and true upon completion) 16283 completed, 16284 16285 // To know if global events are to be dispatched 16286 fireGlobals, 16287 16288 // Loop variable 16289 i, 16290 16291 // uncached part of the url 16292 uncached, 16293 16294 // Create the final options object 16295 s = jQuery.ajaxSetup( {}, options ), 16296 16297 // Callbacks context 16298 callbackContext = s.context || s, 16299 16300 // Context for global events is callbackContext if it is a DOM node or jQuery collection 16301 globalEventContext = s.context && 16302 ( callbackContext.nodeType || callbackContext.jquery ) ? 16303 jQuery( callbackContext ) : 16304 jQuery.event, 16305 16306 // Deferreds 16307 deferred = jQuery.Deferred(), 16308 completeDeferred = jQuery.Callbacks( "once memory" ), 16309 16310 // Status-dependent callbacks 16311 statusCode = s.statusCode || {}, 16312 16313 // Headers (they are sent all at once) 16314 requestHeaders = {}, 16315 requestHeadersNames = {}, 16316 16317 // Default abort message 16318 strAbort = "canceled", 16319 16320 // Fake xhr 16321 jqXHR = { 16322 readyState: 0, 16323 16324 // Builds headers hashtable if needed 16325 getResponseHeader: function( key ) { 16326 var match; 16327 if ( completed ) { 16328 if ( !responseHeaders ) { 16329 responseHeaders = {}; 16330 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 16331 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 16332 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 16333 .concat( match[ 2 ] ); 16334 } 16335 } 16336 match = responseHeaders[ key.toLowerCase() + " " ]; 16337 } 16338 return match == null ? null : match.join( ", " ); 16339 }, 16340 16341 // Raw string 16342 getAllResponseHeaders: function() { 16343 return completed ? responseHeadersString : null; 16344 }, 16345 16346 // Caches the header 16347 setRequestHeader: function( name, value ) { 16348 if ( completed == null ) { 16349 name = requestHeadersNames[ name.toLowerCase() ] = 16350 requestHeadersNames[ name.toLowerCase() ] || name; 16351 requestHeaders[ name ] = value; 16352 } 16353 return this; 16354 }, 16355 16356 // Overrides response content-type header 16357 overrideMimeType: function( type ) { 16358 if ( completed == null ) { 16359 s.mimeType = type; 16360 } 16361 return this; 16362 }, 16363 16364 // Status-dependent callbacks 16365 statusCode: function( map ) { 16366 var code; 16367 if ( map ) { 16368 if ( completed ) { 16369 16370 // Execute the appropriate callbacks 16371 jqXHR.always( map[ jqXHR.status ] ); 16372 } else { 16373 16374 // Lazy-add the new callbacks in a way that preserves old ones 16375 for ( code in map ) { 16376 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 16377 } 16378 } 16379 } 16380 return this; 16381 }, 16382 16383 // Cancel the request 16384 abort: function( statusText ) { 16385 var finalText = statusText || strAbort; 16386 if ( transport ) { 16387 transport.abort( finalText ); 16388 } 16389 done( 0, finalText ); 16390 return this; 16391 } 16392 }; 16393 16394 // Attach deferreds 16395 deferred.promise( jqXHR ); 16396 16397 // Add protocol if not provided (prefilters might expect it) 16398 // Handle falsy url in the settings object (#10093: consistency with old signature) 16399 // We also use the url parameter if available 16400 s.url = ( ( url || s.url || location.href ) + "" ) 16401 .replace( rprotocol, location.protocol + "//" ); 16402 16403 // Alias method option to type as per ticket #12004 16404 s.type = options.method || options.type || s.method || s.type; 16405 16406 // Extract dataTypes list 16407 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 16408 16409 // A cross-domain request is in order when the origin doesn't match the current origin. 16410 if ( s.crossDomain == null ) { 16411 urlAnchor = document.createElement( "a" ); 16412 16413 // Support: IE <=8 - 11, Edge 12 - 15 16414 // IE throws exception on accessing the href property if url is malformed, 16415 // e.g. http://example.com:80x/ 16416 try { 16417 urlAnchor.href = s.url; 16418 16419 // Support: IE <=8 - 11 only 16420 // Anchor's host property isn't correctly set when s.url is relative 16421 urlAnchor.href = urlAnchor.href; 16422 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 16423 urlAnchor.protocol + "//" + urlAnchor.host; 16424 } catch ( e ) { 16425 16426 // If there is an error parsing the URL, assume it is crossDomain, 16427 // it can be rejected by the transport if it is invalid 16428 s.crossDomain = true; 16429 } 16430 } 16431 16432 // Convert data if not already a string 16433 if ( s.data && s.processData && typeof s.data !== "string" ) { 16434 s.data = jQuery.param( s.data, s.traditional ); 16435 } 16436 16437 // Apply prefilters 16438 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 16439 16440 // If request was aborted inside a prefilter, stop there 16441 if ( completed ) { 16442 return jqXHR; 16443 } 16444 16445 // We can fire global events as of now if asked to 16446 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 16447 fireGlobals = jQuery.event && s.global; 16448 16449 // Watch for a new set of requests 16450 if ( fireGlobals && jQuery.active++ === 0 ) { 16451 jQuery.event.trigger( "ajaxStart" ); 16452 } 16453 16454 // Uppercase the type 16455 s.type = s.type.toUpperCase(); 16456 16457 // Determine if request has content 16458 s.hasContent = !rnoContent.test( s.type ); 16459 16460 // Save the URL in case we're toying with the If-Modified-Since 16461 // and/or If-None-Match header later on 16462 // Remove hash to simplify url manipulation 16463 cacheURL = s.url.replace( rhash, "" ); 16464 16465 // More options handling for requests with no content 16466 if ( !s.hasContent ) { 16467 16468 // Remember the hash so we can put it back 16469 uncached = s.url.slice( cacheURL.length ); 16470 16471 // If data is available and should be processed, append data to url 16472 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 16473 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 16474 16475 // #9682: remove data so that it's not used in an eventual retry 16476 delete s.data; 16477 } 16478 16479 // Add or update anti-cache param if needed 16480 if ( s.cache === false ) { 16481 cacheURL = cacheURL.replace( rantiCache, "$1" ); 16482 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 16483 uncached; 16484 } 16485 16486 // Put hash and anti-cache on the URL that will be requested (gh-1732) 16487 s.url = cacheURL + uncached; 16488 16489 // Change '%20' to '+' if this is encoded form body content (gh-2658) 16490 } else if ( s.data && s.processData && 16491 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 16492 s.data = s.data.replace( r20, "+" ); 16493 } 16494 16495 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 16496 if ( s.ifModified ) { 16497 if ( jQuery.lastModified[ cacheURL ] ) { 16498 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 16499 } 16500 if ( jQuery.etag[ cacheURL ] ) { 16501 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 16502 } 16503 } 16504 16505 // Set the correct header, if data is being sent 16506 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 16507 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 16508 } 16509 16510 // Set the Accepts header for the server, depending on the dataType 16511 jqXHR.setRequestHeader( 16512 "Accept", 16513 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 16514 s.accepts[ s.dataTypes[ 0 ] ] + 16515 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 16516 s.accepts[ "*" ] 16517 ); 16518 16519 // Check for headers option 16520 for ( i in s.headers ) { 16521 jqXHR.setRequestHeader( i, s.headers[ i ] ); 16522 } 16523 16524 // Allow custom headers/mimetypes and early abort 16525 if ( s.beforeSend && 16526 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 16527 16528 // Abort if not done already and return 16529 return jqXHR.abort(); 16530 } 16531 16532 // Aborting is no longer a cancellation 16533 strAbort = "abort"; 16534 16535 // Install callbacks on deferreds 16536 completeDeferred.add( s.complete ); 16537 jqXHR.done( s.success ); 16538 jqXHR.fail( s.error ); 16539 16540 // Get transport 16541 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 16542 16543 // If no transport, we auto-abort 16544 if ( !transport ) { 16545 done( -1, "No Transport" ); 16546 } else { 16547 jqXHR.readyState = 1; 16548 16549 // Send global event 16550 if ( fireGlobals ) { 16551 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 16552 } 16553 16554 // If request was aborted inside ajaxSend, stop there 16555 if ( completed ) { 16556 return jqXHR; 16557 } 16558 16559 // Timeout 16560 if ( s.async && s.timeout > 0 ) { 16561 timeoutTimer = window.setTimeout( function() { 16562 jqXHR.abort( "timeout" ); 16563 }, s.timeout ); 16564 } 16565 16566 try { 16567 completed = false; 16568 transport.send( requestHeaders, done ); 16569 } catch ( e ) { 16570 16571 // Rethrow post-completion exceptions 16572 if ( completed ) { 16573 throw e; 16574 } 16575 16576 // Propagate others as results 16577 done( -1, e ); 16578 } 16579 } 16580 16581 // Callback for when everything is done 16582 function done( status, nativeStatusText, responses, headers ) { 16583 var isSuccess, success, error, response, modified, 16584 statusText = nativeStatusText; 16585 16586 // Ignore repeat invocations 16587 if ( completed ) { 16588 return; 16589 } 16590 16591 completed = true; 16592 16593 // Clear timeout if it exists 16594 if ( timeoutTimer ) { 16595 window.clearTimeout( timeoutTimer ); 16596 } 16597 16598 // Dereference transport for early garbage collection 16599 // (no matter how long the jqXHR object will be used) 16600 transport = undefined; 16601 16602 // Cache response headers 16603 responseHeadersString = headers || ""; 16604 16605 // Set readyState 16606 jqXHR.readyState = status > 0 ? 4 : 0; 16607 16608 // Determine if successful 16609 isSuccess = status >= 200 && status < 300 || status === 304; 16610 16611 // Get response data 16612 if ( responses ) { 16613 response = ajaxHandleResponses( s, jqXHR, responses ); 16614 } 16615 16616 // Use a noop converter for missing script but not if jsonp 16617 if ( !isSuccess && 16618 jQuery.inArray( "script", s.dataTypes ) > -1 && 16619 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 16620 s.converters[ "text script" ] = function() {}; 16621 } 16622 16623 // Convert no matter what (that way responseXXX fields are always set) 16624 response = ajaxConvert( s, response, jqXHR, isSuccess ); 16625 16626 // If successful, handle type chaining 16627 if ( isSuccess ) { 16628 16629 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 16630 if ( s.ifModified ) { 16631 modified = jqXHR.getResponseHeader( "Last-Modified" ); 16632 if ( modified ) { 16633 jQuery.lastModified[ cacheURL ] = modified; 16634 } 16635 modified = jqXHR.getResponseHeader( "etag" ); 16636 if ( modified ) { 16637 jQuery.etag[ cacheURL ] = modified; 16638 } 16639 } 16640 16641 // if no content 16642 if ( status === 204 || s.type === "HEAD" ) { 16643 statusText = "nocontent"; 16644 16645 // if not modified 16646 } else if ( status === 304 ) { 16647 statusText = "notmodified"; 16648 16649 // If we have data, let's convert it 16650 } else { 16651 statusText = response.state; 16652 success = response.data; 16653 error = response.error; 16654 isSuccess = !error; 16655 } 16656 } else { 16657 16658 // Extract error from statusText and normalize for non-aborts 16659 error = statusText; 16660 if ( status || !statusText ) { 16661 statusText = "error"; 16662 if ( status < 0 ) { 16663 status = 0; 16664 } 16665 } 16666 } 16667 16668 // Set data for the fake xhr object 16669 jqXHR.status = status; 16670 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 16671 16672 // Success/Error 16673 if ( isSuccess ) { 16674 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 16675 } else { 16676 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 16677 } 16678 16679 // Status-dependent callbacks 16680 jqXHR.statusCode( statusCode ); 16681 statusCode = undefined; 16682 16683 if ( fireGlobals ) { 16684 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 16685 [ jqXHR, s, isSuccess ? success : error ] ); 16686 } 16687 16688 // Complete 16689 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 16690 16691 if ( fireGlobals ) { 16692 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 16693 16694 // Handle the global AJAX counter 16695 if ( !( --jQuery.active ) ) { 16696 jQuery.event.trigger( "ajaxStop" ); 16697 } 16698 } 16699 } 16700 16701 return jqXHR; 16702 }, 16703 16704 getJSON: function( url, data, callback ) { 16705 return jQuery.get( url, data, callback, "json" ); 16706 }, 16707 16708 getScript: function( url, callback ) { 16709 return jQuery.get( url, undefined, callback, "script" ); 16710 } 16711} ); 16712 16713jQuery.each( [ "get", "post" ], function( _i, method ) { 16714 jQuery[ method ] = function( url, data, callback, type ) { 16715 16716 // Shift arguments if data argument was omitted 16717 if ( isFunction( data ) ) { 16718 type = type || callback; 16719 callback = data; 16720 data = undefined; 16721 } 16722 16723 // The url can be an options object (which then must have .url) 16724 return jQuery.ajax( jQuery.extend( { 16725 url: url, 16726 type: method, 16727 dataType: type, 16728 data: data, 16729 success: callback 16730 }, jQuery.isPlainObject( url ) && url ) ); 16731 }; 16732} ); 16733 16734jQuery.ajaxPrefilter( function( s ) { 16735 var i; 16736 for ( i in s.headers ) { 16737 if ( i.toLowerCase() === "content-type" ) { 16738 s.contentType = s.headers[ i ] || ""; 16739 } 16740 } 16741} ); 16742 16743 16744jQuery._evalUrl = function( url, options, doc ) { 16745 return jQuery.ajax( { 16746 url: url, 16747 16748 // Make this explicit, since user can override this through ajaxSetup (#11264) 16749 type: "GET", 16750 dataType: "script", 16751 cache: true, 16752 async: false, 16753 global: false, 16754 16755 // Only evaluate the response if it is successful (gh-4126) 16756 // dataFilter is not invoked for failure responses, so using it instead 16757 // of the default converter is kludgy but it works. 16758 converters: { 16759 "text script": function() {} 16760 }, 16761 dataFilter: function( response ) { 16762 jQuery.globalEval( response, options, doc ); 16763 } 16764 } ); 16765}; 16766 16767 16768jQuery.fn.extend( { 16769 wrapAll: function( html ) { 16770 var wrap; 16771 16772 if ( this[ 0 ] ) { 16773 if ( isFunction( html ) ) { 16774 html = html.call( this[ 0 ] ); 16775 } 16776 16777 // The elements to wrap the target around 16778 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 16779 16780 if ( this[ 0 ].parentNode ) { 16781 wrap.insertBefore( this[ 0 ] ); 16782 } 16783 16784 wrap.map( function() { 16785 var elem = this; 16786 16787 while ( elem.firstElementChild ) { 16788 elem = elem.firstElementChild; 16789 } 16790 16791 return elem; 16792 } ).append( this ); 16793 } 16794 16795 return this; 16796 }, 16797 16798 wrapInner: function( html ) { 16799 if ( isFunction( html ) ) { 16800 return this.each( function( i ) { 16801 jQuery( this ).wrapInner( html.call( this, i ) ); 16802 } ); 16803 } 16804 16805 return this.each( function() { 16806 var self = jQuery( this ), 16807 contents = self.contents(); 16808 16809 if ( contents.length ) { 16810 contents.wrapAll( html ); 16811 16812 } else { 16813 self.append( html ); 16814 } 16815 } ); 16816 }, 16817 16818 wrap: function( html ) { 16819 var htmlIsFunction = isFunction( html ); 16820 16821 return this.each( function( i ) { 16822 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 16823 } ); 16824 }, 16825 16826 unwrap: function( selector ) { 16827 this.parent( selector ).not( "body" ).each( function() { 16828 jQuery( this ).replaceWith( this.childNodes ); 16829 } ); 16830 return this; 16831 } 16832} ); 16833 16834 16835jQuery.expr.pseudos.hidden = function( elem ) { 16836 return !jQuery.expr.pseudos.visible( elem ); 16837}; 16838jQuery.expr.pseudos.visible = function( elem ) { 16839 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 16840}; 16841 16842 16843 16844 16845jQuery.ajaxSettings.xhr = function() { 16846 try { 16847 return new window.XMLHttpRequest(); 16848 } catch ( e ) {} 16849}; 16850 16851var xhrSuccessStatus = { 16852 16853 // File protocol always yields status code 0, assume 200 16854 0: 200, 16855 16856 // Support: IE <=9 only 16857 // #1450: sometimes IE returns 1223 when it should be 204 16858 1223: 204 16859 }, 16860 xhrSupported = jQuery.ajaxSettings.xhr(); 16861 16862support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 16863support.ajax = xhrSupported = !!xhrSupported; 16864 16865jQuery.ajaxTransport( function( options ) { 16866 var callback, errorCallback; 16867 16868 // Cross domain only allowed if supported through XMLHttpRequest 16869 if ( support.cors || xhrSupported && !options.crossDomain ) { 16870 return { 16871 send: function( headers, complete ) { 16872 var i, 16873 xhr = options.xhr(); 16874 16875 xhr.open( 16876 options.type, 16877 options.url, 16878 options.async, 16879 options.username, 16880 options.password 16881 ); 16882 16883 // Apply custom fields if provided 16884 if ( options.xhrFields ) { 16885 for ( i in options.xhrFields ) { 16886 xhr[ i ] = options.xhrFields[ i ]; 16887 } 16888 } 16889 16890 // Override mime type if needed 16891 if ( options.mimeType && xhr.overrideMimeType ) { 16892 xhr.overrideMimeType( options.mimeType ); 16893 } 16894 16895 // X-Requested-With header 16896 // For cross-domain requests, seeing as conditions for a preflight are 16897 // akin to a jigsaw puzzle, we simply never set it to be sure. 16898 // (it can always be set on a per-request basis or even using ajaxSetup) 16899 // For same-domain requests, won't change header if already provided. 16900 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 16901 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 16902 } 16903 16904 // Set headers 16905 for ( i in headers ) { 16906 xhr.setRequestHeader( i, headers[ i ] ); 16907 } 16908 16909 // Callback 16910 callback = function( type ) { 16911 return function() { 16912 if ( callback ) { 16913 callback = errorCallback = xhr.onload = 16914 xhr.onerror = xhr.onabort = xhr.ontimeout = 16915 xhr.onreadystatechange = null; 16916 16917 if ( type === "abort" ) { 16918 xhr.abort(); 16919 } else if ( type === "error" ) { 16920 16921 // Support: IE <=9 only 16922 // On a manual native abort, IE9 throws 16923 // errors on any property access that is not readyState 16924 if ( typeof xhr.status !== "number" ) { 16925 complete( 0, "error" ); 16926 } else { 16927 complete( 16928 16929 // File: protocol always yields status 0; see #8605, #14207 16930 xhr.status, 16931 xhr.statusText 16932 ); 16933 } 16934 } else { 16935 complete( 16936 xhrSuccessStatus[ xhr.status ] || xhr.status, 16937 xhr.statusText, 16938 16939 // Support: IE <=9 only 16940 // IE9 has no XHR2 but throws on binary (trac-11426) 16941 // For XHR2 non-text, let the caller handle it (gh-2498) 16942 ( xhr.responseType || "text" ) !== "text" || 16943 typeof xhr.responseText !== "string" ? 16944 { binary: xhr.response } : 16945 { text: xhr.responseText }, 16946 xhr.getAllResponseHeaders() 16947 ); 16948 } 16949 } 16950 }; 16951 }; 16952 16953 // Listen to events 16954 xhr.onload = callback(); 16955 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 16956 16957 // Support: IE 9 only 16958 // Use onreadystatechange to replace onabort 16959 // to handle uncaught aborts 16960 if ( xhr.onabort !== undefined ) { 16961 xhr.onabort = errorCallback; 16962 } else { 16963 xhr.onreadystatechange = function() { 16964 16965 // Check readyState before timeout as it changes 16966 if ( xhr.readyState === 4 ) { 16967 16968 // Allow onerror to be called first, 16969 // but that will not handle a native abort 16970 // Also, save errorCallback to a variable 16971 // as xhr.onerror cannot be accessed 16972 window.setTimeout( function() { 16973 if ( callback ) { 16974 errorCallback(); 16975 } 16976 } ); 16977 } 16978 }; 16979 } 16980 16981 // Create the abort callback 16982 callback = callback( "abort" ); 16983 16984 try { 16985 16986 // Do send the request (this may raise an exception) 16987 xhr.send( options.hasContent && options.data || null ); 16988 } catch ( e ) { 16989 16990 // #14683: Only rethrow if this hasn't been notified as an error yet 16991 if ( callback ) { 16992 throw e; 16993 } 16994 } 16995 }, 16996 16997 abort: function() { 16998 if ( callback ) { 16999 callback(); 17000 } 17001 } 17002 }; 17003 } 17004} ); 17005 17006 17007 17008 17009// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 17010jQuery.ajaxPrefilter( function( s ) { 17011 if ( s.crossDomain ) { 17012 s.contents.script = false; 17013 } 17014} ); 17015 17016// Install script dataType 17017jQuery.ajaxSetup( { 17018 accepts: { 17019 script: "text/javascript, application/javascript, " + 17020 "application/ecmascript, application/x-ecmascript" 17021 }, 17022 contents: { 17023 script: /\b(?:java|ecma)script\b/ 17024 }, 17025 converters: { 17026 "text script": function( text ) { 17027 jQuery.globalEval( text ); 17028 return text; 17029 } 17030 } 17031} ); 17032 17033// Handle cache's special case and crossDomain 17034jQuery.ajaxPrefilter( "script", function( s ) { 17035 if ( s.cache === undefined ) { 17036 s.cache = false; 17037 } 17038 if ( s.crossDomain ) { 17039 s.type = "GET"; 17040 } 17041} ); 17042 17043// Bind script tag hack transport 17044jQuery.ajaxTransport( "script", function( s ) { 17045 17046 // This transport only deals with cross domain or forced-by-attrs requests 17047 if ( s.crossDomain || s.scriptAttrs ) { 17048 var script, callback; 17049 return { 17050 send: function( _, complete ) { 17051 script = jQuery( "<script>" ) 17052 .attr( s.scriptAttrs || {} ) 17053 .prop( { charset: s.scriptCharset, src: s.url } ) 17054 .on( "load error", callback = function( evt ) { 17055 script.remove(); 17056 callback = null; 17057 if ( evt ) { 17058 complete( evt.type === "error" ? 404 : 200, evt.type ); 17059 } 17060 } ); 17061 17062 // Use native DOM manipulation to avoid our domManip AJAX trickery 17063 document.head.appendChild( script[ 0 ] ); 17064 }, 17065 abort: function() { 17066 if ( callback ) { 17067 callback(); 17068 } 17069 } 17070 }; 17071 } 17072} ); 17073 17074 17075 17076 17077var oldCallbacks = [], 17078 rjsonp = /(=)\?(?=&|$)|\?\?/; 17079 17080// Default jsonp settings 17081jQuery.ajaxSetup( { 17082 jsonp: "callback", 17083 jsonpCallback: function() { 17084 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 17085 this[ callback ] = true; 17086 return callback; 17087 } 17088} ); 17089 17090// Detect, normalize options and install callbacks for jsonp requests 17091jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 17092 17093 var callbackName, overwritten, responseContainer, 17094 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 17095 "url" : 17096 typeof s.data === "string" && 17097 ( s.contentType || "" ) 17098 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 17099 rjsonp.test( s.data ) && "data" 17100 ); 17101 17102 // Handle iff the expected data type is "jsonp" or we have a parameter to set 17103 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 17104 17105 // Get callback name, remembering preexisting value associated with it 17106 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 17107 s.jsonpCallback() : 17108 s.jsonpCallback; 17109 17110 // Insert callback into url or form data 17111 if ( jsonProp ) { 17112 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 17113 } else if ( s.jsonp !== false ) { 17114 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 17115 } 17116 17117 // Use data converter to retrieve json after script execution 17118 s.converters[ "script json" ] = function() { 17119 if ( !responseContainer ) { 17120 jQuery.error( callbackName + " was not called" ); 17121 } 17122 return responseContainer[ 0 ]; 17123 }; 17124 17125 // Force json dataType 17126 s.dataTypes[ 0 ] = "json"; 17127 17128 // Install callback 17129 overwritten = window[ callbackName ]; 17130 window[ callbackName ] = function() { 17131 responseContainer = arguments; 17132 }; 17133 17134 // Clean-up function (fires after converters) 17135 jqXHR.always( function() { 17136 17137 // If previous value didn't exist - remove it 17138 if ( overwritten === undefined ) { 17139 jQuery( window ).removeProp( callbackName ); 17140 17141 // Otherwise restore preexisting value 17142 } else { 17143 window[ callbackName ] = overwritten; 17144 } 17145 17146 // Save back as free 17147 if ( s[ callbackName ] ) { 17148 17149 // Make sure that re-using the options doesn't screw things around 17150 s.jsonpCallback = originalSettings.jsonpCallback; 17151 17152 // Save the callback name for future use 17153 oldCallbacks.push( callbackName ); 17154 } 17155 17156 // Call if it was a function and we have a response 17157 if ( responseContainer && isFunction( overwritten ) ) { 17158 overwritten( responseContainer[ 0 ] ); 17159 } 17160 17161 responseContainer = overwritten = undefined; 17162 } ); 17163 17164 // Delegate to script 17165 return "script"; 17166 } 17167} ); 17168 17169 17170 17171 17172// Support: Safari 8 only 17173// In Safari 8 documents created via document.implementation.createHTMLDocument 17174// collapse sibling forms: the second one becomes a child of the first one. 17175// Because of that, this security measure has to be disabled in Safari 8. 17176// https://bugs.webkit.org/show_bug.cgi?id=137337 17177support.createHTMLDocument = ( function() { 17178 var body = document.implementation.createHTMLDocument( "" ).body; 17179 body.innerHTML = "<form></form><form></form>"; 17180 return body.childNodes.length === 2; 17181} )(); 17182 17183 17184// Argument "data" should be string of html 17185// context (optional): If specified, the fragment will be created in this context, 17186// defaults to document 17187// keepScripts (optional): If true, will include scripts passed in the html string 17188jQuery.parseHTML = function( data, context, keepScripts ) { 17189 if ( typeof data !== "string" ) { 17190 return []; 17191 } 17192 if ( typeof context === "boolean" ) { 17193 keepScripts = context; 17194 context = false; 17195 } 17196 17197 var base, parsed, scripts; 17198 17199 if ( !context ) { 17200 17201 // Stop scripts or inline event handlers from being executed immediately 17202 // by using document.implementation 17203 if ( support.createHTMLDocument ) { 17204 context = document.implementation.createHTMLDocument( "" ); 17205 17206 // Set the base href for the created document 17207 // so any parsed elements with URLs 17208 // are based on the document's URL (gh-2965) 17209 base = context.createElement( "base" ); 17210 base.href = document.location.href; 17211 context.head.appendChild( base ); 17212 } else { 17213 context = document; 17214 } 17215 } 17216 17217 parsed = rsingleTag.exec( data ); 17218 scripts = !keepScripts && []; 17219 17220 // Single tag 17221 if ( parsed ) { 17222 return [ context.createElement( parsed[ 1 ] ) ]; 17223 } 17224 17225 parsed = buildFragment( [ data ], context, scripts ); 17226 17227 if ( scripts && scripts.length ) { 17228 jQuery( scripts ).remove(); 17229 } 17230 17231 return jQuery.merge( [], parsed.childNodes ); 17232}; 17233 17234 17235/** 17236 * Load a url into a page 17237 */ 17238jQuery.fn.load = function( url, params, callback ) { 17239 var selector, type, response, 17240 self = this, 17241 off = url.indexOf( " " ); 17242 17243 if ( off > -1 ) { 17244 selector = stripAndCollapse( url.slice( off ) ); 17245 url = url.slice( 0, off ); 17246 } 17247 17248 // If it's a function 17249 if ( isFunction( params ) ) { 17250 17251 // We assume that it's the callback 17252 callback = params; 17253 params = undefined; 17254 17255 // Otherwise, build a param string 17256 } else if ( params && typeof params === "object" ) { 17257 type = "POST"; 17258 } 17259 17260 // If we have elements to modify, make the request 17261 if ( self.length > 0 ) { 17262 jQuery.ajax( { 17263 url: url, 17264 17265 // If "type" variable is undefined, then "GET" method will be used. 17266 // Make value of this field explicit since 17267 // user can override it through ajaxSetup method 17268 type: type || "GET", 17269 dataType: "html", 17270 data: params 17271 } ).done( function( responseText ) { 17272 17273 // Save response for use in complete callback 17274 response = arguments; 17275 17276 self.html( selector ? 17277 17278 // If a selector was specified, locate the right elements in a dummy div 17279 // Exclude scripts to avoid IE 'Permission Denied' errors 17280 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 17281 17282 // Otherwise use the full result 17283 responseText ); 17284 17285 // If the request succeeds, this function gets "data", "status", "jqXHR" 17286 // but they are ignored because response was set above. 17287 // If it fails, this function gets "jqXHR", "status", "error" 17288 } ).always( callback && function( jqXHR, status ) { 17289 self.each( function() { 17290 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 17291 } ); 17292 } ); 17293 } 17294 17295 return this; 17296}; 17297 17298 17299 17300 17301jQuery.expr.pseudos.animated = function( elem ) { 17302 return jQuery.grep( jQuery.timers, function( fn ) { 17303 return elem === fn.elem; 17304 } ).length; 17305}; 17306 17307 17308 17309 17310jQuery.offset = { 17311 setOffset: function( elem, options, i ) { 17312 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 17313 position = jQuery.css( elem, "position" ), 17314 curElem = jQuery( elem ), 17315 props = {}; 17316 17317 // Set position first, in-case top/left are set even on static elem 17318 if ( position === "static" ) { 17319 elem.style.position = "relative"; 17320 } 17321 17322 curOffset = curElem.offset(); 17323 curCSSTop = jQuery.css( elem, "top" ); 17324 curCSSLeft = jQuery.css( elem, "left" ); 17325 calculatePosition = ( position === "absolute" || position === "fixed" ) && 17326 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 17327 17328 // Need to be able to calculate position if either 17329 // top or left is auto and position is either absolute or fixed 17330 if ( calculatePosition ) { 17331 curPosition = curElem.position(); 17332 curTop = curPosition.top; 17333 curLeft = curPosition.left; 17334 17335 } else { 17336 curTop = parseFloat( curCSSTop ) || 0; 17337 curLeft = parseFloat( curCSSLeft ) || 0; 17338 } 17339 17340 if ( isFunction( options ) ) { 17341 17342 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 17343 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 17344 } 17345 17346 if ( options.top != null ) { 17347 props.top = ( options.top - curOffset.top ) + curTop; 17348 } 17349 if ( options.left != null ) { 17350 props.left = ( options.left - curOffset.left ) + curLeft; 17351 } 17352 17353 if ( "using" in options ) { 17354 options.using.call( elem, props ); 17355 17356 } else { 17357 curElem.css( props ); 17358 } 17359 } 17360}; 17361 17362jQuery.fn.extend( { 17363 17364 // offset() relates an element's border box to the document origin 17365 offset: function( options ) { 17366 17367 // Preserve chaining for setter 17368 if ( arguments.length ) { 17369 return options === undefined ? 17370 this : 17371 this.each( function( i ) { 17372 jQuery.offset.setOffset( this, options, i ); 17373 } ); 17374 } 17375 17376 var rect, win, 17377 elem = this[ 0 ]; 17378 17379 if ( !elem ) { 17380 return; 17381 } 17382 17383 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 17384 // Support: IE <=11 only 17385 // Running getBoundingClientRect on a 17386 // disconnected node in IE throws an error 17387 if ( !elem.getClientRects().length ) { 17388 return { top: 0, left: 0 }; 17389 } 17390 17391 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 17392 rect = elem.getBoundingClientRect(); 17393 win = elem.ownerDocument.defaultView; 17394 return { 17395 top: rect.top + win.pageYOffset, 17396 left: rect.left + win.pageXOffset 17397 }; 17398 }, 17399 17400 // position() relates an element's margin box to its offset parent's padding box 17401 // This corresponds to the behavior of CSS absolute positioning 17402 position: function() { 17403 if ( !this[ 0 ] ) { 17404 return; 17405 } 17406 17407 var offsetParent, offset, doc, 17408 elem = this[ 0 ], 17409 parentOffset = { top: 0, left: 0 }; 17410 17411 // position:fixed elements are offset from the viewport, which itself always has zero offset 17412 if ( jQuery.css( elem, "position" ) === "fixed" ) { 17413 17414 // Assume position:fixed implies availability of getBoundingClientRect 17415 offset = elem.getBoundingClientRect(); 17416 17417 } else { 17418 offset = this.offset(); 17419 17420 // Account for the *real* offset parent, which can be the document or its root element 17421 // when a statically positioned element is identified 17422 doc = elem.ownerDocument; 17423 offsetParent = elem.offsetParent || doc.documentElement; 17424 while ( offsetParent && 17425 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 17426 jQuery.css( offsetParent, "position" ) === "static" ) { 17427 17428 offsetParent = offsetParent.parentNode; 17429 } 17430 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 17431 17432 // Incorporate borders into its offset, since they are outside its content origin 17433 parentOffset = jQuery( offsetParent ).offset(); 17434 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 17435 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 17436 } 17437 } 17438 17439 // Subtract parent offsets and element margins 17440 return { 17441 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 17442 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 17443 }; 17444 }, 17445 17446 // This method will return documentElement in the following cases: 17447 // 1) For the element inside the iframe without offsetParent, this method will return 17448 // documentElement of the parent window 17449 // 2) For the hidden or detached element 17450 // 3) For body or html element, i.e. in case of the html node - it will return itself 17451 // 17452 // but those exceptions were never presented as a real life use-cases 17453 // and might be considered as more preferable results. 17454 // 17455 // This logic, however, is not guaranteed and can change at any point in the future 17456 offsetParent: function() { 17457 return this.map( function() { 17458 var offsetParent = this.offsetParent; 17459 17460 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 17461 offsetParent = offsetParent.offsetParent; 17462 } 17463 17464 return offsetParent || documentElement; 17465 } ); 17466 } 17467} ); 17468 17469// Create scrollLeft and scrollTop methods 17470jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 17471 var top = "pageYOffset" === prop; 17472 17473 jQuery.fn[ method ] = function( val ) { 17474 return access( this, function( elem, method, val ) { 17475 17476 // Coalesce documents and windows 17477 var win; 17478 if ( isWindow( elem ) ) { 17479 win = elem; 17480 } else if ( elem.nodeType === 9 ) { 17481 win = elem.defaultView; 17482 } 17483 17484 if ( val === undefined ) { 17485 return win ? win[ prop ] : elem[ method ]; 17486 } 17487 17488 if ( win ) { 17489 win.scrollTo( 17490 !top ? val : win.pageXOffset, 17491 top ? val : win.pageYOffset 17492 ); 17493 17494 } else { 17495 elem[ method ] = val; 17496 } 17497 }, method, val, arguments.length ); 17498 }; 17499} ); 17500 17501// Support: Safari <=7 - 9.1, Chrome <=37 - 49 17502// Add the top/left cssHooks using jQuery.fn.position 17503// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 17504// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 17505// getComputedStyle returns percent when specified for top/left/bottom/right; 17506// rather than make the css module depend on the offset module, just check for it here 17507jQuery.each( [ "top", "left" ], function( _i, prop ) { 17508 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 17509 function( elem, computed ) { 17510 if ( computed ) { 17511 computed = curCSS( elem, prop ); 17512 17513 // If curCSS returns percentage, fallback to offset 17514 return rnumnonpx.test( computed ) ? 17515 jQuery( elem ).position()[ prop ] + "px" : 17516 computed; 17517 } 17518 } 17519 ); 17520} ); 17521 17522 17523// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 17524jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 17525 jQuery.each( { 17526 padding: "inner" + name, 17527 content: type, 17528 "": "outer" + name 17529 }, function( defaultExtra, funcName ) { 17530 17531 // Margin is only for outerHeight, outerWidth 17532 jQuery.fn[ funcName ] = function( margin, value ) { 17533 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 17534 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 17535 17536 return access( this, function( elem, type, value ) { 17537 var doc; 17538 17539 if ( isWindow( elem ) ) { 17540 17541 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 17542 return funcName.indexOf( "outer" ) === 0 ? 17543 elem[ "inner" + name ] : 17544 elem.document.documentElement[ "client" + name ]; 17545 } 17546 17547 // Get document width or height 17548 if ( elem.nodeType === 9 ) { 17549 doc = elem.documentElement; 17550 17551 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 17552 // whichever is greatest 17553 return Math.max( 17554 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 17555 elem.body[ "offset" + name ], doc[ "offset" + name ], 17556 doc[ "client" + name ] 17557 ); 17558 } 17559 17560 return value === undefined ? 17561 17562 // Get width or height on the element, requesting but not forcing parseFloat 17563 jQuery.css( elem, type, extra ) : 17564 17565 // Set width or height on the element 17566 jQuery.style( elem, type, value, extra ); 17567 }, type, chainable ? margin : undefined, chainable ); 17568 }; 17569 } ); 17570} ); 17571 17572 17573jQuery.each( [ 17574 "ajaxStart", 17575 "ajaxStop", 17576 "ajaxComplete", 17577 "ajaxError", 17578 "ajaxSuccess", 17579 "ajaxSend" 17580], function( _i, type ) { 17581 jQuery.fn[ type ] = function( fn ) { 17582 return this.on( type, fn ); 17583 }; 17584} ); 17585 17586 17587 17588 17589jQuery.fn.extend( { 17590 17591 bind: function( types, data, fn ) { 17592 return this.on( types, null, data, fn ); 17593 }, 17594 unbind: function( types, fn ) { 17595 return this.off( types, null, fn ); 17596 }, 17597 17598 delegate: function( selector, types, data, fn ) { 17599 return this.on( types, selector, data, fn ); 17600 }, 17601 undelegate: function( selector, types, fn ) { 17602 17603 // ( namespace ) or ( selector, types [, fn] ) 17604 return arguments.length === 1 ? 17605 this.off( selector, "**" ) : 17606 this.off( types, selector || "**", fn ); 17607 }, 17608 17609 hover: function( fnOver, fnOut ) { 17610 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 17611 } 17612} ); 17613 17614jQuery.each( 17615 ( "blur focus focusin focusout resize scroll click dblclick " + 17616 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 17617 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 17618 function( _i, name ) { 17619 17620 // Handle event binding 17621 jQuery.fn[ name ] = function( data, fn ) { 17622 return arguments.length > 0 ? 17623 this.on( name, null, data, fn ) : 17624 this.trigger( name ); 17625 }; 17626 } 17627); 17628 17629 17630 17631 17632// Support: Android <=4.0 only 17633// Make sure we trim BOM and NBSP 17634var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; 17635 17636// Bind a function to a context, optionally partially applying any 17637// arguments. 17638// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 17639// However, it is not slated for removal any time soon 17640jQuery.proxy = function( fn, context ) { 17641 var tmp, args, proxy; 17642 17643 if ( typeof context === "string" ) { 17644 tmp = fn[ context ]; 17645 context = fn; 17646 fn = tmp; 17647 } 17648 17649 // Quick check to determine if target is callable, in the spec 17650 // this throws a TypeError, but we will just return undefined. 17651 if ( !isFunction( fn ) ) { 17652 return undefined; 17653 } 17654 17655 // Simulated bind 17656 args = slice.call( arguments, 2 ); 17657 proxy = function() { 17658 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 17659 }; 17660 17661 // Set the guid of unique handler to the same of original handler, so it can be removed 17662 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 17663 17664 return proxy; 17665}; 17666 17667jQuery.holdReady = function( hold ) { 17668 if ( hold ) { 17669 jQuery.readyWait++; 17670 } else { 17671 jQuery.ready( true ); 17672 } 17673}; 17674jQuery.isArray = Array.isArray; 17675jQuery.parseJSON = JSON.parse; 17676jQuery.nodeName = nodeName; 17677jQuery.isFunction = isFunction; 17678jQuery.isWindow = isWindow; 17679jQuery.camelCase = camelCase; 17680jQuery.type = toType; 17681 17682jQuery.now = Date.now; 17683 17684jQuery.isNumeric = function( obj ) { 17685 17686 // As of jQuery 3.0, isNumeric is limited to 17687 // strings and numbers (primitives or objects) 17688 // that can be coerced to finite numbers (gh-2662) 17689 var type = jQuery.type( obj ); 17690 return ( type === "number" || type === "string" ) && 17691 17692 // parseFloat NaNs numeric-cast false positives ("") 17693 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 17694 // subtraction forces infinities to NaN 17695 !isNaN( obj - parseFloat( obj ) ); 17696}; 17697 17698jQuery.trim = function( text ) { 17699 return text == null ? 17700 "" : 17701 ( text + "" ).replace( rtrim, "" ); 17702}; 17703 17704 17705 17706// Register as a named AMD module, since jQuery can be concatenated with other 17707// files that may use define, but not via a proper concatenation script that 17708// understands anonymous AMD modules. A named AMD is safest and most robust 17709// way to register. Lowercase jquery is used because AMD module names are 17710// derived from file names, and jQuery is normally delivered in a lowercase 17711// file name. Do this after creating the global so that if an AMD module wants 17712// to call noConflict to hide this version of jQuery, it will work. 17713 17714// Note that for maximum portability, libraries that are not jQuery should 17715// declare themselves as anonymous modules, and avoid setting a global if an 17716// AMD loader is present. jQuery is a special case. For more information, see 17717// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 17718 17719if ( true ) { 17720 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 17721 return jQuery; 17722 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 17723 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 17724} 17725 17726 17727 17728 17729var 17730 17731 // Map over jQuery in case of overwrite 17732 _jQuery = window.jQuery, 17733 17734 // Map over the $ in case of overwrite 17735 _$ = window.$; 17736 17737jQuery.noConflict = function( deep ) { 17738 if ( window.$ === jQuery ) { 17739 window.$ = _$; 17740 } 17741 17742 if ( deep && window.jQuery === jQuery ) { 17743 window.jQuery = _jQuery; 17744 } 17745 17746 return jQuery; 17747}; 17748 17749// Expose jQuery and $ identifiers, even in AMD 17750// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 17751// and CommonJS for browser emulators (#13566) 17752if ( typeof noGlobal === "undefined" ) { 17753 window.jQuery = window.$ = jQuery; 17754} 17755 17756 17757 17758 17759return jQuery; 17760} ); 17761 17762 17763/***/ })
vendor: 2,637 bytes, lines 17763-17837
17763 17764 17765/******/ }); 17766/************************************************************************/ 17767/******/ // The module cache 17768/******/ var __webpack_module_cache__ = {}; 17769/******/ 17770/******/ // The require function 17771/******/ function __webpack_require__(moduleId) { 17772/******/ // Check if module is in cache 17773/******/ var cachedModule = __webpack_module_cache__[moduleId]; 17774/******/ if (cachedModule !== undefined) { 17775/******/ return cachedModule.exports; 17776/******/ } 17777/******/ // Create a new module (and put it into the cache) 17778/******/ var module = __webpack_module_cache__[moduleId] = { 17779/******/ id: moduleId, 17780/******/ loaded: false, 17781/******/ exports: {} 17782/******/ }; 17783/******/ 17784/******/ // Execute the module function 17785/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 17786/******/ 17787/******/ // Flag the module as loaded 17788/******/ module.loaded = true; 17789/******/ 17790/******/ // Return the exports of the module 17791/******/ return module.exports; 17792/******/ } 17793/******/ 17794/************************************************************************/ 17795/******/ /* webpack/runtime/node module decorator */ 17796/******/ (() => { 17797/******/ __webpack_require__.nmd = (module) => { 17798/******/ module.paths = []; 17799/******/ if (!module.children) module.children = []; 17800/******/ return module; 17801/******/ }; 17802/******/ })(); 17803/******/ 17804/************************************************************************/ 17805var __webpack_exports__ = {}; 17806// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 17807(() => { 17808/*!******************************!*\ 17809 !*** ./resources/js/site.js ***! 17810 \******************************/ 17811//require('jquery'); 17812//require('popper.js'); 17813//require('./bootstrap'); 17814//require('@coreui/coreui'); 17815window.$ = window.jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 17816 17817__webpack_require__(/*! ./jquery.min.js */ "./resources/js/jquery.min.js"); 17818 17819__webpack_require__(/*! ./bootstrap.min.js */ "./resources/js/bootstrap.min.js"); 17820 17821__webpack_require__(/*! ./navigation.js */ "./resources/js/navigation.js"); 17822 17823__webpack_require__(/*! ./menumaker.js */ "./resources/js/menumaker.js"); 17824 17825__webpack_require__(/*! ./jquery.sticky.js */ "./resources/js/jquery.sticky.js"); 17826/*require('./sticky-header.js');*/ 17827 17828 17829__webpack_require__(/*! ./owl.carousel.min.js */ "./resources/js/owl.carousel.min.js"); 17830 17831__webpack_require__(/*! ./slider.js */ "./resources/js/slider.js"); 17832 17833__webpack_require__(/*! ./testimonial-slider.js */ "./resources/js/testimonial-slider.js"); 17834})(); 17835 17836/******/ })() 17837;
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.